@dskripchenko/laravel-admin 1.1.23 → 1.2.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 (56) hide show
  1. package/dist/components/auth/ForgotPasswordPage.vue.d.ts +9 -0
  2. package/dist/components/auth/LoginPage.vue.d.ts +7 -3
  3. package/dist/components/auth/ResetPasswordPage.vue.d.ts +7 -0
  4. package/dist/components/dashboard/AddWidgetDialog.vue.d.ts +12 -0
  5. package/dist/components/dashboard/BarChartWidget.vue.d.ts +1 -1
  6. package/dist/components/dashboard/ChartWidget.vue.d.ts +18 -0
  7. package/dist/components/dashboard/DashboardPage.vue.d.ts +8 -6
  8. package/dist/components/dashboard/GaugeWidget.vue.d.ts +1 -1
  9. package/dist/components/dashboard/WidgetActionsOverlay.vue.d.ts +8 -0
  10. package/dist/components/dashboard/WidgetConfigDialog.vue.d.ts +24 -0
  11. package/dist/components/dashboard/builtin.d.ts +5 -0
  12. package/dist/components/fields/DateField.vue.d.ts +2 -2
  13. package/dist/components/fields/NumberField.vue.d.ts +3 -3
  14. package/dist/components/fields/SelectField.vue.d.ts +1 -1
  15. package/dist/components/fields/TagsField.vue.d.ts +38 -0
  16. package/dist/components/fields/TextAreaField.vue.d.ts +1 -1
  17. package/dist/components/fields/TextField.vue.d.ts +1 -1
  18. package/dist/components/fields/TranslatableField.vue.d.ts +24 -0
  19. package/dist/components/fields/wysiwyg/quill/QuillField.vue.d.ts +4 -5
  20. package/dist/components/infolist/BadgeEntry.vue.d.ts +1 -1
  21. package/dist/components/infolist/TextEntry.vue.d.ts +6 -1
  22. package/dist/components/profile/ApiTokensManager.vue.d.ts +2 -0
  23. package/dist/components/profile/TwoFactorSetup.vue.d.ts +24 -0
  24. package/dist/components/resource/AdminFilterToolbar.vue.d.ts +42 -0
  25. package/dist/components/resource/AuditTimeline.vue.d.ts +12 -0
  26. package/dist/components/resource/FilterEditor.d.ts +58 -0
  27. package/dist/components/resource/InlineEditCell.vue.d.ts +26 -0
  28. package/dist/components/resource/ResourceFormPage.vue.d.ts +6 -3
  29. package/dist/components/resource/ResourceIndexPage.vue.d.ts +10 -4
  30. package/dist/components/resource/ResourceViewPage.vue.d.ts +33 -4
  31. package/dist/components/shell/AdminShell.vue.d.ts +8 -2
  32. package/dist/components/shell/AdminSidebar.vue.d.ts +10 -4
  33. package/dist/components/shell/AdminTopBar.vue.d.ts +4 -4
  34. package/dist/components/shell/BrandLogo.vue.d.ts +16 -0
  35. package/dist/components/shell/NotificationsDrawer.vue.d.ts +2 -0
  36. package/dist/components/shell/iconRegistry.d.ts +18 -0
  37. package/dist/createAdminApp.d.ts +3 -0
  38. package/dist/index.cjs +3 -1
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.mjs +6200 -2499
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/quill.cjs +1 -1
  43. package/dist/quill.cjs.map +1 -1
  44. package/dist/quill.mjs +21 -33
  45. package/dist/quill.mjs.map +1 -1
  46. package/dist/router/index.d.ts +4 -0
  47. package/dist/stores/dashboard.d.ts +212 -0
  48. package/dist/stores/i18n.d.ts +31 -0
  49. package/dist/stores/manifest.d.ts +111 -11
  50. package/dist/stores/navigation.d.ts +1 -1
  51. package/dist/stores/notifications.d.ts +14 -2
  52. package/dist/stores/resourceForm.d.ts +3 -3
  53. package/dist/stores/resourceIndex.d.ts +1 -1
  54. package/dist/stores/toast.d.ts +16 -0
  55. package/dist/style.css +1 -1
  56. package/package.json +1 -1
@@ -20,8 +20,15 @@ export interface ManifestResourceMeta {
20
20
  label: string;
21
21
  icon?: string;
22
22
  group?: string | null;
23
+ /**
24
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
25
+ * `subject_type` параметр для /audit/timeline endpoint'а.
26
+ */
27
+ subject_type?: string | null;
23
28
  permissions: Record<string, string>;
24
29
  fields: ManifestNode[];
30
+ /** Read-only entries для view-page. Default — auto-generated из fields(). */
31
+ infolist?: ManifestNode[];
25
32
  columns: ManifestNode[];
26
33
  filters: ManifestNode[];
27
34
  actions: ManifestNode[];
@@ -61,12 +68,22 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
61
68
  slug: string;
62
69
  label: string;
63
70
  icon?: string | undefined;
64
- group?: string | null | undefined;
71
+ group?: string | null
72
+ /**
73
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
74
+ * `subject_type` параметр для /audit/timeline endpoint'а.
75
+ */
76
+ | undefined;
77
+ subject_type?: string | null | undefined;
65
78
  permissions: Record<string, string>;
66
79
  fields: {
67
80
  [x: string]: unknown;
68
81
  type: string;
69
82
  }[];
83
+ infolist?: {
84
+ [x: string]: unknown;
85
+ type: string;
86
+ }[] | undefined;
70
87
  columns: {
71
88
  [x: string]: unknown;
72
89
  type: string;
@@ -110,12 +127,22 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
110
127
  slug: string;
111
128
  label: string;
112
129
  icon?: string | undefined;
113
- group?: string | null | undefined;
130
+ group?: string | null
131
+ /**
132
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
133
+ * `subject_type` параметр для /audit/timeline endpoint'а.
134
+ */
135
+ | undefined;
136
+ subject_type?: string | null | undefined;
114
137
  permissions: Record<string, string>;
115
138
  fields: {
116
139
  [x: string]: unknown;
117
140
  type: string;
118
141
  }[];
142
+ infolist?: {
143
+ [x: string]: unknown;
144
+ type: string;
145
+ }[] | undefined;
119
146
  columns: {
120
147
  [x: string]: unknown;
121
148
  type: string;
@@ -155,18 +182,29 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
155
182
  } | null>;
156
183
  loading: import("vue").Ref<boolean, boolean>;
157
184
  error: import("vue").Ref<Error | null, Error | null>;
185
+ bootResolved: import("vue").Ref<boolean, boolean>;
158
186
  isLoaded: import("vue").ComputedRef<boolean>;
159
187
  version: import("vue").ComputedRef<string | null>;
160
188
  resources: import("vue").ComputedRef<{
161
189
  slug: string;
162
190
  label: string;
163
191
  icon?: string | undefined;
164
- group?: string | null | undefined;
192
+ group?: string | null
193
+ /**
194
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
195
+ * `subject_type` параметр для /audit/timeline endpoint'а.
196
+ */
197
+ | undefined;
198
+ subject_type?: string | null | undefined;
165
199
  permissions: Record<string, string>;
166
200
  fields: {
167
201
  [x: string]: unknown;
168
202
  type: string;
169
203
  }[];
204
+ infolist?: {
205
+ [x: string]: unknown;
206
+ type: string;
207
+ }[] | undefined;
170
208
  columns: {
171
209
  [x: string]: unknown;
172
210
  type: string;
@@ -206,7 +244,7 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
206
244
  getSettings: (slug: string) => ManifestSettingsMeta | null;
207
245
  load: (force?: boolean) => Promise<AdminManifest>;
208
246
  reset: () => void;
209
- }, "loading" | "error" | "manifest">, Pick<{
247
+ }, "loading" | "error" | "manifest" | "bootResolved">, Pick<{
210
248
  manifest: import("vue").Ref<{
211
249
  version: string;
212
250
  locale: string;
@@ -214,12 +252,22 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
214
252
  slug: string;
215
253
  label: string;
216
254
  icon?: string | undefined;
217
- group?: string | null | undefined;
255
+ group?: string | null
256
+ /**
257
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
258
+ * `subject_type` параметр для /audit/timeline endpoint'а.
259
+ */
260
+ | undefined;
261
+ subject_type?: string | null | undefined;
218
262
  permissions: Record<string, string>;
219
263
  fields: {
220
264
  [x: string]: unknown;
221
265
  type: string;
222
266
  }[];
267
+ infolist?: {
268
+ [x: string]: unknown;
269
+ type: string;
270
+ }[] | undefined;
223
271
  columns: {
224
272
  [x: string]: unknown;
225
273
  type: string;
@@ -263,12 +311,22 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
263
311
  slug: string;
264
312
  label: string;
265
313
  icon?: string | undefined;
266
- group?: string | null | undefined;
314
+ group?: string | null
315
+ /**
316
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
317
+ * `subject_type` параметр для /audit/timeline endpoint'а.
318
+ */
319
+ | undefined;
320
+ subject_type?: string | null | undefined;
267
321
  permissions: Record<string, string>;
268
322
  fields: {
269
323
  [x: string]: unknown;
270
324
  type: string;
271
325
  }[];
326
+ infolist?: {
327
+ [x: string]: unknown;
328
+ type: string;
329
+ }[] | undefined;
272
330
  columns: {
273
331
  [x: string]: unknown;
274
332
  type: string;
@@ -308,18 +366,29 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
308
366
  } | null>;
309
367
  loading: import("vue").Ref<boolean, boolean>;
310
368
  error: import("vue").Ref<Error | null, Error | null>;
369
+ bootResolved: import("vue").Ref<boolean, boolean>;
311
370
  isLoaded: import("vue").ComputedRef<boolean>;
312
371
  version: import("vue").ComputedRef<string | null>;
313
372
  resources: import("vue").ComputedRef<{
314
373
  slug: string;
315
374
  label: string;
316
375
  icon?: string | undefined;
317
- group?: string | null | undefined;
376
+ group?: string | null
377
+ /**
378
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
379
+ * `subject_type` параметр для /audit/timeline endpoint'а.
380
+ */
381
+ | undefined;
382
+ subject_type?: string | null | undefined;
318
383
  permissions: Record<string, string>;
319
384
  fields: {
320
385
  [x: string]: unknown;
321
386
  type: string;
322
387
  }[];
388
+ infolist?: {
389
+ [x: string]: unknown;
390
+ type: string;
391
+ }[] | undefined;
323
392
  columns: {
324
393
  [x: string]: unknown;
325
394
  type: string;
@@ -359,7 +428,7 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
359
428
  getSettings: (slug: string) => ManifestSettingsMeta | null;
360
429
  load: (force?: boolean) => Promise<AdminManifest>;
361
430
  reset: () => void;
362
- }, "isLoaded" | "version" | "settings" | "resources" | "screens" | "plugins">, Pick<{
431
+ }, "version" | "isLoaded" | "settings" | "resources" | "screens" | "plugins">, Pick<{
363
432
  manifest: import("vue").Ref<{
364
433
  version: string;
365
434
  locale: string;
@@ -367,12 +436,22 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
367
436
  slug: string;
368
437
  label: string;
369
438
  icon?: string | undefined;
370
- group?: string | null | undefined;
439
+ group?: string | null
440
+ /**
441
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
442
+ * `subject_type` параметр для /audit/timeline endpoint'а.
443
+ */
444
+ | undefined;
445
+ subject_type?: string | null | undefined;
371
446
  permissions: Record<string, string>;
372
447
  fields: {
373
448
  [x: string]: unknown;
374
449
  type: string;
375
450
  }[];
451
+ infolist?: {
452
+ [x: string]: unknown;
453
+ type: string;
454
+ }[] | undefined;
376
455
  columns: {
377
456
  [x: string]: unknown;
378
457
  type: string;
@@ -416,12 +495,22 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
416
495
  slug: string;
417
496
  label: string;
418
497
  icon?: string | undefined;
419
- group?: string | null | undefined;
498
+ group?: string | null
499
+ /**
500
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
501
+ * `subject_type` параметр для /audit/timeline endpoint'а.
502
+ */
503
+ | undefined;
504
+ subject_type?: string | null | undefined;
420
505
  permissions: Record<string, string>;
421
506
  fields: {
422
507
  [x: string]: unknown;
423
508
  type: string;
424
509
  }[];
510
+ infolist?: {
511
+ [x: string]: unknown;
512
+ type: string;
513
+ }[] | undefined;
425
514
  columns: {
426
515
  [x: string]: unknown;
427
516
  type: string;
@@ -461,18 +550,29 @@ export declare const useManifestStore: import("pinia").StoreDefinition<"admin-ma
461
550
  } | null>;
462
551
  loading: import("vue").Ref<boolean, boolean>;
463
552
  error: import("vue").Ref<Error | null, Error | null>;
553
+ bootResolved: import("vue").Ref<boolean, boolean>;
464
554
  isLoaded: import("vue").ComputedRef<boolean>;
465
555
  version: import("vue").ComputedRef<string | null>;
466
556
  resources: import("vue").ComputedRef<{
467
557
  slug: string;
468
558
  label: string;
469
559
  icon?: string | undefined;
470
- group?: string | null | undefined;
560
+ group?: string | null
561
+ /**
562
+ * Eloquent morph-class либо FQCN модели — нужен AuditTimeline'у как
563
+ * `subject_type` параметр для /audit/timeline endpoint'а.
564
+ */
565
+ | undefined;
566
+ subject_type?: string | null | undefined;
471
567
  permissions: Record<string, string>;
472
568
  fields: {
473
569
  [x: string]: unknown;
474
570
  type: string;
475
571
  }[];
572
+ infolist?: {
573
+ [x: string]: unknown;
574
+ type: string;
575
+ }[] | undefined;
476
576
  columns: {
477
577
  [x: string]: unknown;
478
578
  type: string;
@@ -25,4 +25,4 @@ export declare const useNavigationStore: import("pinia").StoreDefinition<"admin-
25
25
  start: () => void;
26
26
  end: () => void;
27
27
  reset: () => void;
28
- }, "reset" | "start" | "end">>;
28
+ }, "reset" | "end" | "start">>;
@@ -47,6 +47,7 @@ export declare const useNotificationsStore: import("pinia").StoreDefinition<"adm
47
47
  last_page: number;
48
48
  } | null>;
49
49
  lastFilter: import("vue").Ref<NotificationFilter, NotificationFilter>;
50
+ isOpen: import("vue").Ref<boolean, boolean>;
50
51
  hasUnread: import("vue").ComputedRef<boolean>;
51
52
  hydrate: (bootstrap: AdminBootstrap) => void;
52
53
  load: (filter?: NotificationFilter, page?: number) => Promise<void>;
@@ -54,7 +55,10 @@ export declare const useNotificationsStore: import("pinia").StoreDefinition<"adm
54
55
  markAsRead: (id: string) => Promise<void>;
55
56
  markAllAsRead: () => Promise<void>;
56
57
  destroy: (id: string) => Promise<void>;
57
- }, "meta" | "items" | "unreadCount" | "loading" | "lastFilter">, Pick<{
58
+ openDrawer: () => void;
59
+ closeDrawer: () => void;
60
+ toggleDrawer: () => void;
61
+ }, "meta" | "items" | "unreadCount" | "loading" | "lastFilter" | "isOpen">, Pick<{
58
62
  items: import("vue").Ref<{
59
63
  id: string;
60
64
  type: string;
@@ -87,6 +91,7 @@ export declare const useNotificationsStore: import("pinia").StoreDefinition<"adm
87
91
  last_page: number;
88
92
  } | null>;
89
93
  lastFilter: import("vue").Ref<NotificationFilter, NotificationFilter>;
94
+ isOpen: import("vue").Ref<boolean, boolean>;
90
95
  hasUnread: import("vue").ComputedRef<boolean>;
91
96
  hydrate: (bootstrap: AdminBootstrap) => void;
92
97
  load: (filter?: NotificationFilter, page?: number) => Promise<void>;
@@ -94,6 +99,9 @@ export declare const useNotificationsStore: import("pinia").StoreDefinition<"adm
94
99
  markAsRead: (id: string) => Promise<void>;
95
100
  markAllAsRead: () => Promise<void>;
96
101
  destroy: (id: string) => Promise<void>;
102
+ openDrawer: () => void;
103
+ closeDrawer: () => void;
104
+ toggleDrawer: () => void;
97
105
  }, "hasUnread">, Pick<{
98
106
  items: import("vue").Ref<{
99
107
  id: string;
@@ -127,6 +135,7 @@ export declare const useNotificationsStore: import("pinia").StoreDefinition<"adm
127
135
  last_page: number;
128
136
  } | null>;
129
137
  lastFilter: import("vue").Ref<NotificationFilter, NotificationFilter>;
138
+ isOpen: import("vue").Ref<boolean, boolean>;
130
139
  hasUnread: import("vue").ComputedRef<boolean>;
131
140
  hydrate: (bootstrap: AdminBootstrap) => void;
132
141
  load: (filter?: NotificationFilter, page?: number) => Promise<void>;
@@ -134,4 +143,7 @@ export declare const useNotificationsStore: import("pinia").StoreDefinition<"adm
134
143
  markAsRead: (id: string) => Promise<void>;
135
144
  markAllAsRead: () => Promise<void>;
136
145
  destroy: (id: string) => Promise<void>;
137
- }, "hydrate" | "load" | "loadUnread" | "markAsRead" | "markAllAsRead" | "destroy">>;
146
+ openDrawer: () => void;
147
+ closeDrawer: () => void;
148
+ toggleDrawer: () => void;
149
+ }, "hydrate" | "load" | "loadUnread" | "markAsRead" | "markAllAsRead" | "destroy" | "openDrawer" | "closeDrawer" | "toggleDrawer">>;
@@ -40,7 +40,7 @@ export declare const useResourceFormStore: import("pinia").StoreDefinition<"admi
40
40
  clearErrors: () => void;
41
41
  save: () => Promise<string | number>;
42
42
  destroy: () => Promise<void>;
43
- }, "state" | "loading" | "mode" | "error" | "slug" | "recordId" | "initial" | "errors" | "saving" | "deleting">, Pick<{
43
+ }, "state" | "mode" | "loading" | "error" | "initial" | "slug" | "saving" | "recordId" | "errors" | "deleting">, Pick<{
44
44
  slug: import("vue").Ref<string | null, string | null>;
45
45
  mode: import("vue").Ref<FormMode, FormMode>;
46
46
  recordId: import("vue").Ref<string | number | null, string | number | null>;
@@ -64,7 +64,7 @@ export declare const useResourceFormStore: import("pinia").StoreDefinition<"admi
64
64
  clearErrors: () => void;
65
65
  save: () => Promise<string | number>;
66
66
  destroy: () => Promise<void>;
67
- }, "hasError" | "isCreate" | "isEdit" | "isView" | "isDirty">, Pick<{
67
+ }, "isDirty" | "hasError" | "isCreate" | "isEdit" | "isView">, Pick<{
68
68
  slug: import("vue").Ref<string | null, string | null>;
69
69
  mode: import("vue").Ref<FormMode, FormMode>;
70
70
  recordId: import("vue").Ref<string | number | null, string | number | null>;
@@ -88,4 +88,4 @@ export declare const useResourceFormStore: import("pinia").StoreDefinition<"admi
88
88
  clearErrors: () => void;
89
89
  save: () => Promise<string | number>;
90
90
  destroy: () => Promise<void>;
91
- }, "reset" | "load" | "destroy" | "prepareCreate" | "setField" | "setErrors" | "clearErrors" | "save">>;
91
+ }, "reset" | "load" | "destroy" | "save" | "prepareCreate" | "setField" | "setErrors" | "clearErrors">>;
@@ -68,7 +68,7 @@ export declare const useResourceIndexStore: import("pinia").StoreDefinition<"adm
68
68
  clearSelection: () => void;
69
69
  isSelected: (id: string | number) => boolean;
70
70
  rowId: (row: Record<string, unknown>) => string | number;
71
- }, "meta" | "search" | "items" | "loading" | "error" | "slug" | "filters" | "slowLoading" | "sortKey" | "sortDirection" | "selection">, Pick<{
71
+ }, "meta" | "search" | "items" | "loading" | "error" | "filters" | "slug" | "slowLoading" | "sortKey" | "sortDirection" | "selection">, Pick<{
72
72
  slug: import("vue").Ref<string | null, string | null>;
73
73
  items: import("vue").Ref<Record<string, unknown>[], Record<string, unknown>[]>;
74
74
  meta: import("vue").Ref<{
@@ -0,0 +1,16 @@
1
+ interface Options {
2
+ title?: string;
3
+ /** Длительность в ms (0 = не закрывать автоматически). */
4
+ duration?: number;
5
+ }
6
+ export declare const adminToast: {
7
+ success(message: string, opts?: Options): void;
8
+ error(message: string, opts?: Options): void;
9
+ warning(message: string, opts?: Options): void;
10
+ info(message: string, opts?: Options): void;
11
+ };
12
+ /**
13
+ * fromError — извлекает message из ApiError / Error / unknown и пушит toast.
14
+ */
15
+ export declare function toastError(err: unknown, fallback?: string): void;
16
+ export {};
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- :root[data-density=compact]{--admin-row-h: 32px;--admin-row-fs: 13px;--admin-page-pad: 16px}:root[data-density=comfortable],:root:not([data-density]){--admin-row-h: 40px;--admin-row-fs: 14px;--admin-page-pad: 24px}.admin-impersonation-banner{position:fixed;top:0;left:0;right:0;height:32px;z-index:var(--uid-z-sticky, 200);background:var(--uid-warning);color:var(--uid-color-amber-950, #4c2a02);display:flex;align-items:center;justify-content:center;font-size:var(--uid-font-size-xs);font-weight:var(--uid-font-weight-medium);gap:var(--uid-space-md)}:root[data-theme=dark] .admin-impersonation-banner{color:var(--uid-color-amber-50);background:color-mix(in srgb,var(--uid-warning) 60%,var(--uid-surface-raised))}.admin-impersonation-banner__exit{appearance:none;background:#00000026;color:inherit;border:0;height:22px;padding:0 var(--uid-space-sm);border-radius:var(--uid-radius-sm);font:inherit;font-size:11px;font-weight:var(--uid-font-weight-semibold);cursor:pointer}.admin-poll-indicator{display:inline-flex;align-items:center;gap:var(--uid-space-xs);font-size:11px;color:var(--uid-text-tertiary)}.admin-poll-indicator__dot{width:6px;height:6px;border-radius:var(--uid-radius-full);background:var(--uid-success);position:relative}.admin-poll-indicator__dot:after{content:"";position:absolute;inset:-3px;border-radius:var(--uid-radius-full);background:var(--uid-success);opacity:.5;animation:admin-poll-pulse 1.6s ease-out infinite}@keyframes admin-poll-pulse{0%{transform:scale(.6);opacity:.6}to{transform:scale(2);opacity:0}}.admin-topbar{height:56px;padding:0 var(--uid-space-lg);display:flex;align-items:center;gap:var(--uid-space-md);border-bottom:1px solid var(--uid-border-subtle);background:var(--uid-surface-raised);position:sticky;top:0;z-index:var(--uid-z-sticky, 200)}.admin-topbar__spacer{flex:1}.admin-topbar__breadcrumbs{display:flex;align-items:center;gap:var(--uid-space-xs);font-size:13px;color:var(--uid-text-secondary)}.admin-topbar__breadcrumbs .sep{color:var(--uid-text-tertiary)}.admin-topbar__breadcrumbs .cur{color:var(--uid-text-primary);font-weight:500}.admin-topbar__search{display:flex;align-items:center;gap:var(--uid-space-sm);height:32px;padding:0 var(--uid-space-sm);min-width:220px;border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);color:var(--uid-text-tertiary);font-size:13px;cursor:pointer}.admin-topbar__search kbd{margin-left:auto;font-family:var(--uid-font-family-mono);font-size:10px;padding:1px 5px;border-radius:var(--uid-radius-sm);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-raised);color:var(--uid-text-tertiary)}.admin-topbar__icon-btn{position:relative;appearance:none;border:0;background:transparent;width:32px;height:32px;border-radius:var(--uid-radius-md);display:grid;place-items:center;color:var(--uid-text-secondary);cursor:pointer}.admin-topbar__icon-btn:hover{background:var(--uid-surface-base);color:var(--uid-text-primary)}.admin-topbar__bell-badge{position:absolute;top:6px;right:6px;min-width:14px;height:14px;padding:0 4px;border-radius:var(--uid-radius-full);background:var(--uid-danger);color:var(--uid-color-white, #fff);font-size:9px;font-weight:var(--uid-font-weight-semibold);display:grid;place-items:center;border:1.5px solid var(--uid-surface-raised);font-variant-numeric:tabular-nums}.admin-auth-page{min-height:100vh;display:grid;place-items:center;padding:var(--uid-space-xl);background:var(--uid-surface-base);position:relative}.admin-auth-page__corner{position:absolute;top:var(--uid-space-md);right:var(--uid-space-md);display:flex;gap:var(--uid-space-sm)}.admin-auth-card{width:400px;max-width:100%}.admin-auth-card--wide{width:440px}.admin-auth-card__hd{padding:var(--uid-space-lg) var(--uid-space-lg) var(--uid-space-md);text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--uid-space-sm)}.admin-auth-card__logo{width:40px;height:40px;border-radius:9px;background:var(--uid-text-primary);color:var(--uid-surface-raised);display:grid;place-items:center;font-family:var(--uid-font-family-display);font-weight:var(--uid-font-weight-bold);font-size:var(--uid-font-size-lg)}.admin-auth-card__logo--accent{background:var(--uid-accent);color:var(--uid-text-on-accent)}.admin-auth-card__title{font-size:var(--uid-font-size-lg);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary);font-family:var(--uid-font-family-display);letter-spacing:-.01em}.admin-auth-card__sub{font-size:13px;color:var(--uid-text-secondary)}.admin-auth-card__bd{padding:var(--uid-space-sm) var(--uid-space-lg) var(--uid-space-lg);display:flex;flex-direction:column;gap:14px}.admin-auth-card__row{display:flex;align-items:center;justify-content:space-between;gap:var(--uid-space-sm)}.admin-auth-card__link{color:var(--uid-accent-text);font-size:var(--uid-font-size-xs);cursor:pointer;text-decoration:none}.admin-auth-card__link:hover{text-decoration:underline}.admin-auth-card__alert{margin-bottom:4px}.admin-code-input{display:flex;gap:var(--uid-space-sm);justify-content:center}.admin-code-input input{width:44px;height:52px;text-align:center;font-family:var(--uid-font-family-mono);font-size:22px;font-weight:var(--uid-font-weight-semibold);border:1px solid var(--uid-border-default);background:var(--uid-surface-raised);border-radius:var(--uid-radius-md);color:var(--uid-text-primary);outline:none;caret-color:var(--uid-accent)}.admin-code-input input:focus{border-color:var(--uid-accent);outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent);outline-offset:0}.admin-code-input input--error,.admin-code-input input.is-error{border-color:var(--uid-danger)}.admin-page{padding:var(--admin-page-pad, 24px)}.admin-page__hd{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--uid-space-md);margin-bottom:var(--uid-space-md)}.admin-page__title-wrap{display:flex;flex-direction:column;gap:var(--uid-space-xs)}.admin-page__title{font-family:var(--uid-font-family-display);font-size:22px;font-weight:var(--uid-font-weight-semibold);letter-spacing:-.015em;line-height:1.2;margin:0;color:var(--uid-text-primary)}.admin-page__count{font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary);font-variant-numeric:tabular-nums}.admin-page__actions{display:flex;align-items:center;gap:var(--uid-space-sm)}.admin-sidebar-brand{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--uid-border-subtle)}.admin-sidebar-brand__mark{width:28px;height:28px;border-radius:7px;flex:none;background:var(--uid-text-primary);color:var(--uid-surface-raised);display:grid;place-items:center;font-family:var(--uid-font-family-display);font-weight:var(--uid-font-weight-bold);font-size:14px;letter-spacing:-.02em}.admin-sidebar-brand__name{font-family:var(--uid-font-family-display);font-size:14px;font-weight:var(--uid-font-weight-semibold);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;color:var(--uid-text-primary)}.admin-sidebar-tenant{margin:8px;display:flex;align-items:center;gap:8px;height:32px;padding:0 8px;border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-md);font-size:var(--uid-font-size-xs);color:var(--uid-text-secondary);background:var(--uid-surface-base)}.admin-sidebar-tenant b{color:var(--uid-text-primary);font-weight:500}.admin-sidebar-foot{padding:10px 16px;border-top:1px solid var(--uid-border-subtle);display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--uid-text-tertiary)}.admin-sidebar-foot__link{cursor:pointer}.admin-sidebar-foot__link:hover{color:var(--uid-text-primary)}.admin-sidebar__icon{width:16px;height:16px;display:inline-block;flex:none;color:currentColor}.admin-shell-root[data-admin-impersonating=true]{padding-top:32px}:root[data-admin-impersonating=true]{scroll-padding-top:32px}.admin-loading-bar{position:fixed;top:0;left:0;right:0;height:2px;z-index:var(--uid-z-toast, 9999);pointer-events:none;opacity:0;transition:opacity .12s ease-out;background:transparent}.admin-loading-bar--visible{opacity:1}.admin-loading-bar--visible:before{content:"";position:absolute;inset:0;background:var(--uid-accent, var(--uid-color-primary, #14b8a6));transform-origin:0 50%;animation:admin-loading-bar-slide 1.4s cubic-bezier(.4,0,.2,1) infinite}@keyframes admin-loading-bar-slide{0%{transform:translate(-100%) scaleX(.4)}50%{transform:translate(0) scaleX(.7)}to{transform:translate(100%) scaleX(.4)}}@media(prefers-reduced-motion:reduce){.admin-loading-bar--visible:before{animation:none;width:60%;transform:none}}.admin-page-host{position:relative;min-height:200px;overflow:hidden}.admin-page-leave-active{position:absolute;inset:0;width:100%;transition:opacity .14s ease-out}.admin-page-leave-to{opacity:0}.admin-page-enter-active{transition:opacity .32s cubic-bezier(.2,.8,.2,1) 60ms,transform .32s cubic-bezier(.2,.8,.2,1) 60ms}.admin-page-enter-from{opacity:0;transform:translate(28px)}.admin-page-enter-to{opacity:1;transform:translate(0)}@media(prefers-reduced-motion:reduce){.admin-page-enter-active,.admin-page-leave-active{transition:opacity 80ms ease-out}.admin-page-enter-from{transform:none}}.admin-home{display:flex;flex-direction:column;gap:var(--uid-space-lg);padding:var(--uid-space-md)}.admin-home__title{font-size:var(--uid-font-size-2xl);font-weight:var(--uid-font-weight-bold);margin:0 0 var(--uid-space-sm)}.admin-home__lead{color:var(--uid-text-secondary);margin:0}.admin-home__heading{font-size:var(--uid-font-size-lg);font-weight:var(--uid-font-weight-semibold);margin:0 0 var(--uid-space-sm)}.admin-home__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--uid-space-sm);list-style:none;padding:0;margin:0}.admin-home__card{display:flex;flex-direction:column;gap:var(--uid-space-2xs);padding:var(--uid-space-md);border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-md);background:var(--uid-surface-raised);text-align:left;cursor:pointer;transition:border-color .15s ease,transform .15s ease}.admin-home__card:hover{border-color:var(--uid-accent);transform:translateY(-1px)}.admin-home__card-label{font-weight:var(--uid-font-weight-medium)}.admin-home__card-slug{font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-status-page{display:flex;align-items:center;justify-content:center;min-height:60vh;padding:var(--uid-space-lg)}.admin-status-page__card{text-align:center;max-width:480px}.admin-status-page__code{font-size:64px;font-weight:var(--uid-font-weight-bold);margin:0 0 var(--uid-space-sm);color:var(--uid-text-secondary)}.admin-status-page__message{margin:0 0 var(--uid-space-md);color:var(--uid-text-secondary)}.admin-settings-page{padding:var(--uid-space-md)}.admin-settings-page__title{font-size:var(--uid-font-size-xl);font-weight:var(--uid-font-weight-semibold);margin:0 0 var(--uid-space-sm)}.admin-settings-page__debug{background:var(--uid-surface-raised);border:1px solid var(--uid-border-subtle);padding:var(--uid-space-sm);border-radius:var(--uid-radius-sm);font-family:var(--uid-font-mono);font-size:var(--uid-font-size-xs);overflow:auto;max-height:60vh}.admin-settings-page__hint{color:var(--uid-text-secondary)}.admin-status-page__title{font-size:var(--uid-font-size-xl);font-weight:var(--uid-font-weight-semibold);margin:0 0 var(--uid-space-sm)}.admin-status-page__hint{margin:0;color:var(--uid-text-secondary);font-size:var(--uid-font-size-sm)}.admin-resource-index__loading{display:flex;flex-direction:column;gap:var(--uid-space-sm);margin-top:var(--uid-space-md);min-height:320px}.admin-resource-index__row-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--uid-space-2xs)}.admin-resource-index__row-action{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:var(--uid-radius-sm);background:transparent;color:var(--uid-text-secondary);cursor:pointer;transition:background var(--uid-duration-fast) var(--uid-ease-out),color var(--uid-duration-fast) var(--uid-ease-out),border-color var(--uid-duration-fast) var(--uid-ease-out)}.admin-resource-index__row-action:hover{background:var(--uid-color-surface-hover);color:var(--uid-text-primary);border-color:var(--uid-border-subtle)}.admin-resource-index__row-action--danger:hover{color:var(--uid-color-danger, #dc2626)}.admin-resource-index__state{margin-top:var(--uid-space-xl)}.admin-resource-index__table{margin-top:0}.admin-resource-index__table .uid-table-wrap{border:1px solid var(--uid-border-subtle);border-top:0;border-radius:0 0 var(--uid-radius-lg) var(--uid-radius-lg)}.admin-resource-index__footer{display:flex;justify-content:flex-end;padding:var(--uid-space-md) 0}.admin-filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-md);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-raised);border-radius:var(--uid-radius-lg) var(--uid-radius-lg) 0 0;border-bottom:0;margin-top:var(--uid-space-md)}.admin-filter-bar__search{flex:1;min-width:200px;max-width:320px;height:28px;padding:0 var(--uid-space-sm);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);color:var(--uid-text-primary);font-size:13px;outline:none}.admin-filter-bar__search:focus{border-color:var(--uid-accent);outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent)}.admin-filter-bar__spacer{flex:1}.admin-bulk-toolbar{display:flex;align-items:center;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-md);background:var(--uid-color-zinc-900, #18181b);color:var(--uid-color-zinc-100, #f4f4f5);border-radius:var(--uid-radius-lg) var(--uid-radius-lg) 0 0;border:1px solid var(--uid-color-zinc-900, #18181b);border-bottom:0;margin-top:var(--uid-space-md)}.admin-bulk-toolbar__count{font-size:13px}.admin-bulk-toolbar__count b{font-weight:var(--uid-font-weight-semibold)}.admin-bulk-toolbar__divider{width:1px;height:20px;background:#ffffff26}.admin-bulk-toolbar__spacer{flex:1}.admin-bulk-toolbar .uid-button{background:transparent;border-color:#ffffff26;color:var(--uid-color-zinc-100, #f4f4f5)}.admin-bulk-toolbar .uid-button:hover:not([disabled]){background:#ffffff14}.admin-bulk-toolbar .uid-button--danger{color:var(--uid-color-rose-400, #fb7185)}.admin-resource-index__row--selected{background:color-mix(in srgb,var(--uid-accent) 8%,transparent)}.admin-resource-form__back{font-size:var(--uid-font-size-xs);color:var(--uid-text-secondary);cursor:pointer;text-decoration:none;display:inline-block;margin-bottom:4px}.admin-resource-form__back:hover{color:var(--uid-text-primary)}.admin-resource-form__alert{margin-bottom:var(--uid-space-md)}.admin-resource-form__loading{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-resource-form__body{margin-bottom:var(--uid-space-2xl)}.admin-resource-form__savebar{position:sticky;bottom:0;display:flex;align-items:center;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-md);background:var(--uid-surface-raised);border-top:1px solid var(--uid-border-default);border-radius:var(--uid-radius-md);box-shadow:var(--uid-shadow-md);margin-top:var(--uid-space-md)}.admin-resource-form__savebar-hint{flex:1;font-size:13px;color:var(--uid-warning)}.admin-infolist-rows{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-infolist-cols{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--uid-space-md)}.admin-infolist-section{margin-bottom:var(--uid-space-md);padding:var(--uid-space-md);border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-lg);background:var(--uid-surface-raised)}.admin-infolist-section__hd{margin-bottom:var(--uid-space-sm)}.admin-infolist-section__title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold)}.admin-infolist-section__description{margin:var(--uid-space-2xs) 0 0;font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-infolist-section__body{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-infolist-tabs__list{list-style:none;margin:0 0 var(--uid-space-sm);padding:0;display:flex;gap:var(--uid-space-xs);border-bottom:1px solid var(--uid-border-subtle)}.admin-infolist-tabs__tab{padding:var(--uid-space-sm) var(--uid-space-sm);font-size:13px;color:var(--uid-text-secondary);border-bottom:2px solid transparent}.admin-infolist-tabs__tab--active{color:var(--uid-text-primary);border-bottom-color:var(--uid-accent);font-weight:var(--uid-font-weight-medium)}.admin-resource-view__alert{margin-bottom:var(--uid-space-md)}.admin-resource-view__loading{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-profile__layout{display:grid;grid-template-columns:200px 1fr;gap:var(--uid-space-lg);align-items:start}.admin-profile__nav{display:flex;flex-direction:column;gap:2px}.admin-profile__nav-item{appearance:none;border:0;background:transparent;text-align:left;display:flex;align-items:center;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-sm);border-radius:var(--uid-radius-md);font-size:13px;color:var(--uid-text-secondary);cursor:pointer}.admin-profile__nav-item:hover{background:var(--uid-surface-hover);color:var(--uid-text-primary)}.admin-profile__nav-item--active{background:var(--uid-surface-base);color:var(--uid-text-primary);font-weight:var(--uid-font-weight-medium)}.admin-profile__nav-icon{width:14px;height:14px;flex:none}.admin-profile__content{display:flex;flex-direction:column;gap:var(--uid-space-md)}.admin-profile__card-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--uid-space-md)}.admin-profile__card-title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold)}.admin-profile__card-ft{margin-top:var(--uid-space-md);display:flex;gap:var(--uid-space-sm)}.admin-profile__hint{margin:0;font-size:var(--uid-font-size-sm);color:var(--uid-text-secondary)}.admin-profile__hero{display:flex;align-items:center;gap:var(--uid-space-md);margin-bottom:var(--uid-space-md)}.admin-profile__hero-text{display:flex;flex-direction:column;gap:4px}.admin-profile__hero-name{font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-profile__hero-meta{font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-profile__form{display:grid;grid-template-columns:1fr 1fr;gap:var(--uid-space-md)}@media(max-width:720px){.admin-profile__form{grid-template-columns:1fr}}.admin-dashboard__grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--uid-space-md)}.admin-dashboard__cell{min-width:0}.admin-widget__hd{margin-bottom:var(--uid-space-sm)}.admin-widget__title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-widget__desc{margin:var(--uid-space-2xs) 0 0;font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-widget-bar-chart{display:block;width:100%}.admin-donut-widget__row{display:flex;align-items:center;gap:var(--uid-space-md)}.admin-donut-widget__svg{width:120px;height:120px;flex:none}.admin-donut-widget__legend{list-style:none;margin:0;padding:0;flex:1;display:flex;flex-direction:column;gap:var(--uid-space-xs)}.admin-donut-widget__legend li{display:flex;align-items:center;gap:var(--uid-space-sm);font-size:var(--uid-font-size-xs)}.admin-donut-widget__dot{width:10px;height:10px;border-radius:var(--uid-radius-full);flex:none}.admin-donut-widget__label{flex:1;color:var(--uid-text-primary)}.admin-donut-widget__value{color:var(--uid-text-tertiary);font-variant-numeric:tabular-nums}.admin-markdown-widget{font-size:var(--uid-font-size-sm);color:var(--uid-text-secondary);white-space:pre-wrap;line-height:var(--uid-line-height-normal)}.admin-section{margin-bottom:var(--uid-space-md)}.admin-section__header{margin-bottom:var(--uid-space-sm)}.admin-section__title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-section__description{margin:var(--uid-space-2xs) 0 0;font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-section__body{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-infolist-text{font-size:var(--uid-font-size-sm);color:var(--uid-text-primary)}.admin-infolist-text--mono{font-family:var(--uid-font-family-mono);font-size:var(--uid-font-size-xs)}.admin-infolist-icon{display:inline-flex;align-items:center;gap:var(--uid-space-xs);font-size:var(--uid-font-size-sm)}.admin-infolist-icon--on{color:var(--uid-success)}.admin-infolist-icon--off{color:var(--uid-text-tertiary)}.admin-infolist-icon__glyph{display:inline-block;width:14px;height:14px}.admin-notifs__hd{display:flex;align-items:center;justify-content:space-between;gap:var(--uid-space-sm)}.admin-notifs__title{margin:0;font-size:var(--uid-font-size-md);font-weight:var(--uid-font-weight-semibold)}.admin-notifs__count{color:var(--uid-text-tertiary);font-weight:var(--uid-font-weight-regular);font-size:var(--uid-font-size-sm)}.admin-notifs__list{list-style:none;margin:0;padding:0}.admin-notifs__empty{padding:var(--uid-space-xl) var(--uid-space-md);text-align:center;color:var(--uid-text-tertiary);font-size:var(--uid-font-size-sm)}.admin-notifs__item{position:relative;display:flex;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-md);cursor:pointer;border-bottom:1px solid var(--uid-border-subtle)}.admin-notifs__item:hover{background:var(--uid-surface-hover)}.admin-notifs__item--unread{background:color-mix(in srgb,var(--uid-accent) 6%,transparent)}.admin-notifs__item--unread:hover{background:color-mix(in srgb,var(--uid-accent) 10%,transparent)}.admin-notifs__icon{width:28px;height:28px;border-radius:var(--uid-radius-md);flex:none;margin-top:2px}.admin-notifs__icon[data-kind=info]{background:color-mix(in srgb,var(--uid-info) 14%,transparent)}.admin-notifs__icon[data-kind=success]{background:color-mix(in srgb,var(--uid-success) 14%,transparent)}.admin-notifs__icon[data-kind=warning]{background:color-mix(in srgb,var(--uid-warning) 14%,transparent)}.admin-notifs__icon[data-kind=danger]{background:color-mix(in srgb,var(--uid-danger) 14%,transparent)}.admin-notifs__body{flex:1;min-width:0}.admin-notifs__row1{display:flex;align-items:baseline;gap:var(--uid-space-sm);margin-bottom:2px}.admin-notifs__title-strong{font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary);flex:1;min-width:0}.admin-notifs__title-soft{font-size:var(--uid-font-size-sm);color:var(--uid-text-primary);flex:1;min-width:0}.admin-notifs__time{font-size:11px;color:var(--uid-text-tertiary);flex:none;font-variant-numeric:tabular-nums}.admin-notifs__text{margin:0;font-size:var(--uid-font-size-xs);color:var(--uid-text-secondary);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.admin-notifs__close{position:absolute;top:6px;right:8px;appearance:none;border:0;background:transparent;color:var(--uid-text-tertiary);cursor:pointer;font-size:18px;width:22px;height:22px;border-radius:var(--uid-radius-sm);opacity:0;transition:opacity var(--uid-duration-fast, .1s)}.admin-notifs__item:hover .admin-notifs__close{opacity:1}.admin-notifs__close:hover{background:var(--uid-surface-hover);color:var(--uid-text-primary)}.admin-import-wizard{max-width:1100px;margin:0 auto}.admin-import-wizard__card{margin-top:var(--uid-space-md)}.admin-import-wizard__card-hd{margin-bottom:var(--uid-space-md)}.admin-import-wizard__card-hd h3{margin:0 0 var(--uid-space-2xs);font-size:var(--uid-font-size-md);font-weight:var(--uid-font-weight-semibold)}.admin-import-wizard__card-hd p{margin:0;font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-import-wizard__empty{padding:var(--uid-space-md);text-align:center;color:var(--uid-text-tertiary);font-size:var(--uid-font-size-sm)}.admin-import-wizard__mapping{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-import-wizard__map-row{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--uid-space-md);align-items:center}.admin-import-wizard__map-source{display:flex;align-items:center;gap:var(--uid-space-sm)}.admin-import-wizard__map-sample{color:var(--uid-text-tertiary);font-size:var(--uid-font-size-xs);font-style:italic}.admin-import-wizard__map-arrow{color:var(--uid-text-tertiary);font-size:var(--uid-font-size-md)}.admin-import-wizard__kpi{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--uid-space-md);margin-top:var(--uid-space-md)}.admin-import-wizard__nav{display:flex;align-items:center;gap:var(--uid-space-sm);margin-top:var(--uid-space-md)}.admin-gallery__group{margin-bottom:var(--uid-space-2xl)}.admin-gallery__group-title{margin:0 0 var(--uid-space-md);font-size:var(--uid-font-size-lg);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-gallery__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--uid-space-md)}@media(max-width:960px){.admin-gallery__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.admin-gallery__grid{grid-template-columns:1fr}}.admin-gallery__card{display:flex;flex-direction:column}.admin-gallery__card-hd{display:flex;align-items:center;justify-content:space-between;gap:var(--uid-space-sm);margin-bottom:var(--uid-space-xs)}.admin-gallery__card-title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold)}.admin-gallery__card-type{font-family:var(--uid-font-family-mono);font-size:11px;color:var(--uid-text-tertiary);background:var(--uid-surface-base);padding:1px 6px;border-radius:var(--uid-radius-sm);border:1px solid var(--uid-border-subtle)}.admin-gallery__card-desc{margin:0 0 var(--uid-space-md);font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary);line-height:var(--uid-line-height-normal)}.admin-gallery__card-demo{flex:1;display:flex;flex-direction:column;justify-content:flex-end}
1
+ :root[data-density=compact],:root:not([data-density]){--admin-row-h: 32px;--admin-row-fs: 13px;--admin-page-pad: 16px}:root[data-density=comfortable]{--admin-row-h: 40px;--admin-row-fs: 14px;--admin-page-pad: 24px}:root{--admin-foot-height: 32px}.admin-impersonation-banner{position:fixed;top:0;left:0;right:0;height:32px;z-index:var(--uid-z-sticky, 200);background:var(--uid-warning);color:var(--uid-color-amber-950, #4c2a02);display:flex;align-items:center;justify-content:center;font-size:var(--uid-font-size-xs);font-weight:var(--uid-font-weight-medium);gap:var(--uid-space-md)}:root[data-theme=dark] .admin-impersonation-banner{color:var(--uid-color-amber-50);background:color-mix(in srgb,var(--uid-warning) 60%,var(--uid-surface-raised))}.admin-impersonation-banner__exit{appearance:none;background:#00000026;color:inherit;border:0;height:22px;padding:0 var(--uid-space-sm);border-radius:var(--uid-radius-sm);font:inherit;font-size:11px;font-weight:var(--uid-font-weight-semibold);cursor:pointer}.admin-poll-indicator{display:inline-flex;align-items:center;gap:var(--uid-space-xs);font-size:11px;color:var(--uid-text-tertiary)}.admin-poll-indicator__dot{width:6px;height:6px;border-radius:var(--uid-radius-full);background:var(--uid-success);position:relative}.admin-poll-indicator__dot:after{content:"";position:absolute;inset:-3px;border-radius:var(--uid-radius-full);background:var(--uid-success);opacity:.5;animation:admin-poll-pulse 1.6s ease-out infinite}@keyframes admin-poll-pulse{0%{transform:scale(.6);opacity:.6}to{transform:scale(2);opacity:0}}.admin-topbar{height:56px;padding:0 var(--uid-space-lg);display:flex;align-items:center;gap:var(--uid-space-md);border-bottom:1px solid var(--uid-border-subtle);background:var(--uid-surface-raised);position:sticky;top:0;z-index:var(--uid-z-sticky, 200);flex:none}.admin-topbar__spacer{flex:1}.admin-topbar__breadcrumbs{display:flex;align-items:center;gap:var(--uid-space-xs);font-size:13px;color:var(--uid-text-secondary)}.admin-topbar__breadcrumbs .sep{color:var(--uid-text-tertiary)}.admin-topbar__breadcrumbs .cur{color:var(--uid-text-primary);font-weight:500}.admin-topbar__search{display:flex;align-items:center;gap:var(--uid-space-sm);height:32px;padding:0 var(--uid-space-sm);min-width:220px;border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);color:var(--uid-text-tertiary);font-size:13px;cursor:pointer}.admin-topbar__search kbd{margin-left:auto;font-family:var(--uid-font-family-mono);font-size:10px;padding:1px 5px;border-radius:var(--uid-radius-sm);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-raised);color:var(--uid-text-tertiary)}.admin-topbar__icon-btn{position:relative;appearance:none;border:0;background:transparent;width:32px;height:32px;border-radius:var(--uid-radius-md);display:grid;place-items:center;color:var(--uid-text-secondary);cursor:pointer}.admin-topbar__icon-btn:hover{background:var(--uid-surface-base);color:var(--uid-text-primary)}.admin-topbar__bell-badge{position:absolute;top:6px;right:6px;min-width:14px;height:14px;padding:0 4px;border-radius:var(--uid-radius-full);background:var(--uid-danger);color:var(--uid-color-white, #fff);font-size:9px;font-weight:var(--uid-font-weight-semibold);display:grid;place-items:center;border:1.5px solid var(--uid-surface-raised);font-variant-numeric:tabular-nums}.admin-auth-page{min-height:100vh;display:grid;place-items:center;padding:var(--uid-space-xl);background:var(--uid-surface-base);position:relative}.admin-auth-page__corner{position:absolute;top:var(--uid-space-md);right:var(--uid-space-md);display:flex;gap:var(--uid-space-sm)}.admin-auth-card{width:400px;max-width:100%}.admin-auth-card--wide{width:440px}.admin-auth-card__hd{padding:var(--uid-space-lg) var(--uid-space-lg) var(--uid-space-md);text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--uid-space-sm)}.admin-auth-card__logo{width:40px;height:40px;border-radius:9px;background:var(--uid-text-primary);color:var(--uid-surface-raised);display:grid;place-items:center;font-family:var(--uid-font-family-display);font-weight:var(--uid-font-weight-bold);font-size:var(--uid-font-size-lg)}.admin-auth-card__logo--accent{background:var(--uid-accent);color:var(--uid-text-on-accent)}.admin-auth-card__title{font-size:var(--uid-font-size-lg);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary);font-family:var(--uid-font-family-display);letter-spacing:-.01em}.admin-auth-card__sub{font-size:13px;color:var(--uid-text-secondary)}.admin-auth-card__bd{padding:var(--uid-space-sm) var(--uid-space-lg) var(--uid-space-lg);display:flex;flex-direction:column;gap:14px}.admin-auth-card__row{display:flex;align-items:center;justify-content:space-between;gap:var(--uid-space-sm)}.admin-auth-card__link{color:var(--uid-accent-text);font-size:var(--uid-font-size-xs);cursor:pointer;text-decoration:none}.admin-auth-card__link:hover{text-decoration:underline}.admin-auth-card__alert{margin-bottom:4px}.admin-code-input{display:flex;gap:var(--uid-space-sm);justify-content:center}.admin-code-input input{width:44px;height:52px;text-align:center;font-family:var(--uid-font-family-mono);font-size:22px;font-weight:var(--uid-font-weight-semibold);border:1px solid var(--uid-border-default);background:var(--uid-surface-raised);border-radius:var(--uid-radius-md);color:var(--uid-text-primary);outline:none;caret-color:var(--uid-accent)}.admin-code-input input:focus{border-color:var(--uid-accent);outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent);outline-offset:0}.admin-code-input input--error,.admin-code-input input.is-error{border-color:var(--uid-danger)}.admin-page{padding:var(--admin-page-pad, 24px)}.admin-page__hd{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--uid-space-md);margin-bottom:var(--uid-space-md)}.admin-page__title-wrap{display:flex;flex-direction:column;gap:var(--uid-space-xs)}.admin-page__title{font-family:var(--uid-font-family-display);font-size:22px;font-weight:var(--uid-font-weight-semibold);letter-spacing:-.015em;line-height:1;margin:0;color:var(--uid-text-primary)}.admin-page__count{font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary);font-variant-numeric:tabular-nums}.admin-page__actions,.admin-page__title-row{display:flex;align-items:center;gap:var(--uid-space-sm)}.admin-page__live{display:inline-flex;align-items:center;gap:var(--uid-space-xs);font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary);font-weight:var(--uid-font-weight-medium);line-height:1}.admin-page__live-dot{width:8px;height:8px;border-radius:50%;background:var(--uid-color-success, #10b981);flex:none;animation:admin-page-pulse 2s ease-out infinite}@keyframes admin-page-pulse{0%{box-shadow:0 0 color-mix(in srgb,var(--uid-color-success, #10b981) 45%,transparent)}70%{box-shadow:0 0 0 8px color-mix(in srgb,var(--uid-color-success, #10b981) 0%,transparent)}to{box-shadow:0 0 color-mix(in srgb,var(--uid-color-success, #10b981) 0%,transparent)}}@media(prefers-reduced-motion:reduce){.admin-page__live-dot{animation:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--uid-color-success, #10b981) 18%,transparent)}}.admin-page__scope{font-weight:var(--uid-font-weight-medium)}.admin-page__more{width:var(--uid-size-md);padding:0;justify-content:center}.admin-page__import-input{display:none}.admin-page__view-row{display:inline-flex;align-items:center;justify-content:space-between;gap:var(--uid-space-sm);width:100%}.admin-page__view-name{display:inline-flex;align-items:center;gap:var(--uid-space-2xs)}.admin-page__view-badge{font-size:10px;text-transform:uppercase;letter-spacing:.04em;padding:2px 6px;border-radius:var(--uid-radius-sm);background:color-mix(in srgb,var(--uid-accent) 15%,transparent);color:var(--uid-accent)}.admin-page__view-delete{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:0;background:transparent;border-radius:var(--uid-radius-sm);color:var(--uid-text-tertiary);cursor:pointer}.admin-page__view-delete:hover{background:color-mix(in srgb,var(--uid-color-danger, #dc2626) 12%,transparent);color:var(--uid-color-danger, #dc2626)}.ladmin-logo{display:inline-flex;align-items:center;justify-content:flex-start;font-family:ui-monospace,IBM Plex Mono,Fira Code,Menlo,monospace;font-weight:700;letter-spacing:-.02em;line-height:1;flex:none;box-shadow:inset 0 1px #ffffff0f}.ladmin-logo--animated .ladmin-logo__cursor{animation:ladmin-cursor 1.1s steps(1,end) infinite}@keyframes ladmin-cursor{50%{opacity:0}}@media(prefers-reduced-motion:reduce){.ladmin-logo--animated .ladmin-logo__cursor{animation:none}}.uid-pattern-sidebar__header:has(.admin-sidebar-brand){padding:0}.admin-sidebar-brand{display:flex;align-items:center;gap:10px;height:56px;padding:0 16px;text-decoration:none;color:inherit;transition:background var(--uid-duration-fast, .12s) var(--uid-ease-out, ease)}.admin-sidebar-brand:hover{background:var(--uid-color-surface-hover, rgba(0, 0, 0, .04))}.admin-sidebar-brand:focus-visible{outline:2px solid var(--uid-color-focus-ring, var(--uid-accent));outline-offset:-2px}.admin-sidebar-brand__mark{width:28px;height:28px;border-radius:7px;flex:none;background:var(--uid-text-primary);color:var(--uid-surface-raised);display:grid;place-items:center;font-family:var(--uid-font-family-display);font-weight:var(--uid-font-weight-bold);font-size:14px;letter-spacing:-.02em}.admin-sidebar-brand__name{font-family:var(--uid-font-family-display);font-size:14px;font-weight:var(--uid-font-weight-semibold);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;color:var(--uid-text-primary)}.admin-sidebar-tenant{margin:8px;display:flex;align-items:center;gap:8px;height:32px;padding:0 8px;border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-md);font-size:var(--uid-font-size-xs);color:var(--uid-text-secondary);background:var(--uid-surface-base)}.admin-sidebar-tenant b{color:var(--uid-text-primary);font-weight:500}.admin-sidebar-foot{height:var(--admin-foot-height, 32px);padding:0 16px;border-top:1px solid var(--uid-border-subtle);display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--uid-text-tertiary)}.admin-sidebar-foot__link{cursor:pointer}.admin-sidebar-foot__link:hover{color:var(--uid-text-primary)}.admin-sidebar__icon{width:16px;height:16px;display:inline-block;flex:none;color:currentColor}.admin-shell-root[data-admin-impersonating=true]{padding-top:32px}:root[data-admin-impersonating=true]{scroll-padding-top:32px}.admin-shell.uid-layout-sidebar{height:100vh;min-height:0;max-height:100vh;overflow:hidden}.admin-shell .uid-layout-sidebar__sidebar{height:100vh}.admin-shell .uid-pattern-sidebar{height:100%;display:flex;flex-direction:column}.admin-shell .uid-pattern-sidebar__nav{flex:1 1 0;min-height:0;overflow-y:auto;overscroll-behavior:contain}.admin-shell .uid-pattern-sidebar__footer{flex:none}.admin-shell .uid-layout-sidebar__main{height:100vh;display:flex;flex-direction:column;overflow:hidden;min-width:0}.admin-shell .uid-layout-sidebar__main-header{flex:none}.admin-shell .uid-layout-sidebar__main-content{flex:1 1 0;min-height:0;overflow-y:auto;overscroll-behavior:contain}.admin-shell-root[data-admin-impersonating=true] .admin-shell.uid-layout-sidebar,.admin-shell-root[data-admin-impersonating=true] .admin-shell .uid-layout-sidebar__sidebar,.admin-shell-root[data-admin-impersonating=true] .admin-shell .uid-layout-sidebar__main{height:calc(100vh - 32px);max-height:calc(100vh - 32px)}.admin-main-footer{height:var(--admin-foot-height, 32px);border-top:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);flex:none}.admin-loading-bar{position:fixed;top:0;left:0;right:0;height:2px;z-index:var(--uid-z-toast, 9999);pointer-events:none;opacity:0;transition:opacity .12s ease-out;background:transparent}.admin-loading-bar--visible{opacity:1}.admin-loading-bar--visible:before{content:"";position:absolute;inset:0;background:var(--uid-accent, var(--uid-color-primary, #14b8a6));transform-origin:0 50%;animation:admin-loading-bar-slide 1.4s cubic-bezier(.4,0,.2,1) infinite}@keyframes admin-loading-bar-slide{0%{transform:translate(-100%) scaleX(.4)}50%{transform:translate(0) scaleX(.7)}to{transform:translate(100%) scaleX(.4)}}@media(prefers-reduced-motion:reduce){.admin-loading-bar--visible:before{animation:none;width:60%;transform:none}}.admin-notif-drawer{position:fixed;inset:0;z-index:var(--uid-z-drawer, 400);pointer-events:none}.admin-notif-drawer__backdrop{position:absolute;inset:0;background:#0006;pointer-events:auto}.admin-notif-drawer__panel{position:absolute;top:0;right:0;bottom:0;width:min(480px,100%);display:flex;flex-direction:column;background:var(--uid-surface-raised);border-left:1px solid var(--uid-border-subtle);box-shadow:var(--uid-shadow-lg);pointer-events:auto}.admin-notif-drawer__hd{display:flex;align-items:center;justify-content:space-between;gap:var(--uid-space-sm);padding:var(--uid-space-md);border-bottom:1px solid var(--uid-border-subtle)}.admin-notif-drawer__title{display:inline-flex;align-items:center;gap:var(--uid-space-xs);margin:0;font-family:var(--uid-font-family-display);font-size:16px;font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-notif-drawer__unread-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;padding:2px 6px;border-radius:10px;background:color-mix(in srgb,var(--uid-color-danger, #dc2626) 14%,transparent);color:var(--uid-color-danger, #dc2626);font-size:11px;font-weight:var(--uid-font-weight-semibold);line-height:1}.admin-notif-drawer__hd-actions{display:inline-flex;align-items:center;gap:var(--uid-space-xs)}.admin-notif-drawer__mark-all{display:inline-flex;align-items:center;gap:var(--uid-space-2xs);padding:6px 10px;border:0;background:transparent;border-radius:var(--uid-radius-sm);color:var(--uid-text-secondary);font-size:13px;cursor:pointer}.admin-notif-drawer__mark-all:hover{background:var(--uid-color-surface-hover, var(--uid-border-subtle));color:var(--uid-text-primary)}.admin-notif-drawer__close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:0;background:transparent;border-radius:var(--uid-radius-sm);color:var(--uid-text-secondary);cursor:pointer}.admin-notif-drawer__close:hover{background:var(--uid-color-surface-hover, var(--uid-border-subtle));color:var(--uid-text-primary)}.admin-notif-drawer__tabs{display:flex;align-items:center;gap:var(--uid-space-md);padding:0 var(--uid-space-md);border-bottom:1px solid var(--uid-border-subtle)}.admin-notif-drawer__tab{display:inline-flex;align-items:center;gap:var(--uid-space-2xs);padding:12px 0;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--uid-text-secondary);font-size:13px;font-weight:var(--uid-font-weight-medium);cursor:pointer}.admin-notif-drawer__tab:hover{color:var(--uid-text-primary)}.admin-notif-drawer__tab--active{color:var(--uid-text-primary);border-bottom-color:var(--uid-accent)}.admin-notif-drawer__tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;padding:1px 6px;border-radius:9px;background:var(--uid-border-subtle);color:var(--uid-text-tertiary);font-size:11px;font-weight:var(--uid-font-weight-semibold)}.admin-notif-drawer__tab--active .admin-notif-drawer__tab-count{background:color-mix(in srgb,var(--uid-color-danger, #dc2626) 14%,transparent);color:var(--uid-color-danger, #dc2626)}.admin-notif-drawer__body{flex:1;min-height:0;overflow-y:auto}.admin-notif-drawer__empty{padding:var(--uid-space-xl);text-align:center;color:var(--uid-text-tertiary);font-size:13px}.admin-notif-drawer__list{list-style:none;margin:0;padding:0}.admin-notif-drawer__item{position:relative;display:flex;align-items:flex-start;gap:var(--uid-space-sm);padding:var(--uid-space-md);border-bottom:1px solid var(--uid-border-subtle);cursor:pointer;transition:background var(--uid-duration-fast, .12s) var(--uid-ease-out, ease)}.admin-notif-drawer__item:hover{background:var(--uid-color-surface-hover, var(--uid-border-subtle))}.admin-notif-drawer__item--unread{background:color-mix(in srgb,var(--uid-accent) 5%,transparent)}.admin-notif-drawer__icon{display:inline-flex;align-items:center;justify-content:center;flex:none;width:32px;height:32px;border-radius:50%}.admin-notif-drawer__icon[data-variant=success]{background:color-mix(in srgb,var(--uid-color-success, #10b981) 14%,transparent);color:var(--uid-color-success, #10b981)}.admin-notif-drawer__icon[data-variant=warning]{background:color-mix(in srgb,var(--uid-color-warning, #f59e0b) 14%,transparent);color:var(--uid-color-warning, #f59e0b)}.admin-notif-drawer__icon[data-variant=danger]{background:color-mix(in srgb,var(--uid-color-danger, #dc2626) 14%,transparent);color:var(--uid-color-danger, #dc2626)}.admin-notif-drawer__icon[data-variant=info]{background:color-mix(in srgb,var(--uid-accent) 14%,transparent);color:var(--uid-accent)}.admin-notif-drawer__icon[data-variant=neutral]{background:var(--uid-border-subtle);color:var(--uid-text-secondary)}.admin-notif-drawer__content{flex:1;min-width:0}.admin-notif-drawer__row{display:flex;justify-content:space-between;align-items:baseline;gap:var(--uid-space-sm)}.admin-notif-drawer__item-title{font-size:13px;font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-notif-drawer__item-time{font-size:11px;color:var(--uid-text-tertiary);flex:none}.admin-notif-drawer__item-description{margin-top:2px;font-size:13px;color:var(--uid-text-secondary);line-height:1.45;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.admin-notif-drawer__unread-dot{position:absolute;top:16px;right:36px;width:8px;height:8px;border-radius:50%;background:var(--uid-color-success, #10b981)}.admin-notif-drawer__item-delete{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:0;background:transparent;border-radius:50%;color:var(--uid-text-tertiary);cursor:pointer;opacity:0;flex:none;align-self:flex-start;margin-top:-2px}.admin-notif-drawer__item:hover .admin-notif-drawer__item-delete{opacity:1}.admin-notif-drawer__item-delete:hover{background:color-mix(in srgb,var(--uid-color-danger, #dc2626) 14%,transparent);color:var(--uid-color-danger, #dc2626)}.admin-notif-drawer-enter-active,.admin-notif-drawer-leave-active{transition:opacity .2s ease-out}.admin-notif-drawer-enter-active .admin-notif-drawer__panel,.admin-notif-drawer-leave-active .admin-notif-drawer__panel{transition:transform .24s cubic-bezier(.2,.8,.2,1)}.admin-notif-drawer-enter-from,.admin-notif-drawer-leave-to{opacity:0}.admin-notif-drawer-enter-from .admin-notif-drawer__panel,.admin-notif-drawer-leave-to .admin-notif-drawer__panel{transform:translate(100%)}.admin-page-host{position:relative;min-height:200px;overflow:hidden}.admin-page-host__suspended{min-height:320px}.admin-page-leave-active{position:absolute;inset:0;width:100%;transition:opacity .14s ease-out}.admin-page-leave-to{opacity:0}.admin-page-enter-active{transition:opacity .32s cubic-bezier(.2,.8,.2,1) 60ms,transform .32s cubic-bezier(.2,.8,.2,1) 60ms}.admin-page-enter-from{opacity:0;transform:translate(28px)}.admin-page-enter-to{opacity:1;transform:translate(0)}@media(prefers-reduced-motion:reduce){.admin-page-enter-active,.admin-page-leave-active{transition:opacity 80ms ease-out}.admin-page-enter-from{transform:none}}.admin-widget-actions{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;gap:2px;padding:2px;background:var(--uid-surface-raised);border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-md);box-shadow:var(--uid-shadow-sm);z-index:5}.admin-widget-actions__btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:0;background:transparent;border-radius:var(--uid-radius-sm);color:var(--uid-text-secondary);cursor:pointer}.admin-widget-actions__btn:hover{background:var(--uid-color-surface-hover, var(--uid-border-subtle));color:var(--uid-text-primary)}.admin-widget-actions__btn--danger:hover{background:color-mix(in srgb,var(--uid-color-danger, #dc2626) 14%,transparent);color:var(--uid-color-danger, #dc2626)}.admin-widget-actions__drag{cursor:grab}.admin-widget-actions__drag:active{cursor:grabbing}.admin-dialog__readonly{padding:8px 10px;background:var(--uid-surface-base);border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-md);font-family:var(--uid-font-family-mono, ui-monospace, monospace);font-size:13px;color:var(--uid-text-secondary)}.admin-dashboard__grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--uid-space-md)}.admin-dashboard__grid--editing .admin-dashboard__cell{outline:1px dashed transparent;transition:outline-color .12s ease}.admin-dashboard__grid--editing .admin-dashboard__cell:hover{outline-color:var(--uid-accent)}.admin-dashboard__cell{position:relative;min-width:0}.admin-dashboard__resize{position:absolute;bottom:4px;right:4px;width:14px;height:14px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 0 50%,var(--uid-text-tertiary) 50% 60%,transparent 60% 70%,var(--uid-text-tertiary) 70% 80%,transparent 80%);z-index:4}.admin-home{display:flex;flex-direction:column;gap:var(--uid-space-lg);padding:var(--uid-space-md)}.admin-home__title{font-size:var(--uid-font-size-2xl);font-weight:var(--uid-font-weight-bold);margin:0 0 var(--uid-space-sm)}.admin-home__lead{color:var(--uid-text-secondary);margin:0}.admin-home__heading{font-size:var(--uid-font-size-lg);font-weight:var(--uid-font-weight-semibold);margin:0 0 var(--uid-space-sm)}.admin-home__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--uid-space-sm);list-style:none;padding:0;margin:0}.admin-home__card{display:flex;flex-direction:column;gap:var(--uid-space-2xs);padding:var(--uid-space-md);border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-md);background:var(--uid-surface-raised);text-align:left;cursor:pointer;transition:border-color .15s ease,transform .15s ease}.admin-home__card:hover{border-color:var(--uid-accent);transform:translateY(-1px)}.admin-home__card-label{font-weight:var(--uid-font-weight-medium)}.admin-home__card-slug{font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-status-page{display:flex;align-items:center;justify-content:center;min-height:60vh;padding:var(--uid-space-lg)}.admin-status-page__card{text-align:center;max-width:480px}.admin-status-page__code{font-size:64px;font-weight:var(--uid-font-weight-bold);margin:0 0 var(--uid-space-sm);color:var(--uid-text-secondary)}.admin-status-page__message{margin:0 0 var(--uid-space-md);color:var(--uid-text-secondary)}.admin-settings-page{padding:var(--uid-space-md)}.admin-settings-page__title{font-size:var(--uid-font-size-xl);font-weight:var(--uid-font-weight-semibold);margin:0 0 var(--uid-space-sm)}.admin-settings-page__debug{background:var(--uid-surface-raised);border:1px solid var(--uid-border-subtle);padding:var(--uid-space-sm);border-radius:var(--uid-radius-sm);font-family:var(--uid-font-mono);font-size:var(--uid-font-size-xs);overflow:auto;max-height:60vh}.admin-settings-page__hint{color:var(--uid-text-secondary)}.admin-status-page__title{font-size:var(--uid-font-size-xl);font-weight:var(--uid-font-weight-semibold);margin:0 0 var(--uid-space-sm)}.admin-status-page__hint{margin:0;color:var(--uid-text-secondary);font-size:var(--uid-font-size-sm)}.admin-auth-card__submit,.admin-auth-card__back{width:100%;margin-top:var(--uid-space-sm)}.admin-auth-card__error{color:var(--uid-color-danger, #dc2626);font-size:13px;margin:var(--uid-space-xs) 0 0}.admin-toolbar{display:flex;flex-direction:column;gap:var(--uid-space-xs);padding:var(--uid-space-sm) var(--uid-space-md);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-raised);border-radius:var(--uid-radius-lg) var(--uid-radius-lg) 0 0;border-bottom:0;margin-top:var(--uid-space-md)}.admin-toolbar__row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--uid-space-xs)}.admin-toolbar__divider{width:1px;height:22px;background:var(--uid-border-subtle);flex:none;margin:0 var(--uid-space-2xs)}.admin-toolbar__spacer{flex:1}.admin-toolbar__search{position:relative;display:inline-flex;align-items:center;flex:1 1 200px;max-width:360px;height:32px;padding:0 var(--uid-space-sm);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);gap:var(--uid-space-2xs)}.admin-toolbar__search:focus-within{border-color:var(--uid-accent);outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent)}.admin-toolbar__search-icon{color:var(--uid-text-tertiary);flex:none}.admin-toolbar__search-input{flex:1;height:100%;border:0;outline:none;background:transparent;font:inherit;font-size:13px;color:var(--uid-text-primary)}.admin-toolbar__search-input::placeholder{color:var(--uid-text-tertiary)}.admin-toolbar__chip{display:inline-flex;align-items:center;gap:var(--uid-space-2xs);height:32px;padding:0 var(--uid-space-sm);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);color:var(--uid-text-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:background var(--uid-duration-fast, .12s) var(--uid-ease-out, ease),border-color var(--uid-duration-fast, .12s) var(--uid-ease-out, ease),color var(--uid-duration-fast, .12s) var(--uid-ease-out, ease)}.admin-toolbar__chip:hover{background:var(--uid-color-surface-hover, var(--uid-border-subtle));color:var(--uid-text-primary)}.admin-toolbar__chip--active{background:color-mix(in srgb,var(--uid-accent) 12%,transparent);border-color:color-mix(in srgb,var(--uid-accent) 35%,transparent);color:var(--uid-accent)}.admin-toolbar__chip--active:hover{background:color-mix(in srgb,var(--uid-accent) 18%,transparent);color:var(--uid-accent)}.admin-toolbar__chip-text{white-space:nowrap;max-width:240px;overflow:hidden;text-overflow:ellipsis}.admin-toolbar__chip-x{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;cursor:pointer;margin-left:var(--uid-space-2xs)}.admin-toolbar__chip-x:hover{background:color-mix(in srgb,var(--uid-accent) 25%,transparent)}.admin-toolbar__popover{display:flex;flex-direction:column;gap:var(--uid-space-sm);padding:var(--uid-space-sm);min-width:220px;max-width:320px}.admin-toolbar__popover--list{padding:var(--uid-space-2xs);gap:0}.admin-toolbar__popover-actions{display:flex;justify-content:flex-end;gap:var(--uid-space-2xs);border-top:1px solid var(--uid-border-subtle);padding-top:var(--uid-space-sm)}.admin-toolbar__list-item{display:flex;align-items:center;gap:var(--uid-space-2xs);padding:var(--uid-space-2xs) var(--uid-space-sm);border-radius:var(--uid-radius-sm);cursor:pointer;background:transparent;border:0;font-size:13px;text-align:left;color:var(--uid-text-primary)}.admin-toolbar__list-item:hover{background:var(--uid-color-surface-hover, var(--uid-border-subtle))}.admin-toolbar__list-item--checkbox{cursor:pointer}.admin-toolbar__editor{display:flex;flex-direction:column;gap:var(--uid-space-2xs)}.admin-toolbar__editor--dates{gap:var(--uid-space-xs)}.admin-toolbar__input{height:32px;padding:0 var(--uid-space-sm);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);color:var(--uid-text-primary);font-size:13px;outline:none}.admin-toolbar__input:focus{border-color:var(--uid-accent);outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent)}.admin-inline-edit{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.admin-inline-edit--editable{cursor:text;border-radius:3px;transition:background .12s ease}.admin-inline-edit--editable:hover{background:color-mix(in srgb,var(--uid-accent) 8%,transparent)}.admin-inline-edit__input{width:100%;height:26px;padding:0 6px;border:1px solid var(--uid-accent);background:var(--uid-surface-base);border-radius:var(--uid-radius-sm);outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent);font:inherit;font-size:13px;color:var(--uid-text-primary)}.admin-resource-index__loading{display:flex;flex-direction:column;gap:var(--uid-space-sm);margin-top:var(--uid-space-md);min-height:320px}.admin-resource-index__row-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--uid-space-2xs)}.admin-resource-index__row-action{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:var(--uid-radius-sm);background:transparent;color:var(--uid-text-secondary);cursor:pointer;transition:background var(--uid-duration-fast) var(--uid-ease-out),color var(--uid-duration-fast) var(--uid-ease-out),border-color var(--uid-duration-fast) var(--uid-ease-out)}.admin-resource-index__row-action:hover{background:var(--uid-color-surface-hover);color:var(--uid-text-primary);border-color:var(--uid-border-subtle)}.admin-resource-index__row-action--danger:hover{color:var(--uid-color-danger, #dc2626)}.admin-resource-index__state{margin-top:var(--uid-space-xl)}.admin-resource-index__table{margin-top:0}.admin-resource-index__table .uid-table-wrap{border:1px solid var(--uid-border-subtle);border-top:0;border-radius:0 0 var(--uid-radius-lg) var(--uid-radius-lg)}.admin-resource-index__table .uid-table__td,.admin-resource-index__table .uid-table__th{padding:6px var(--uid-space-md);font-size:var(--admin-row-fs, 13px);height:var(--admin-row-h, 32px);line-height:1.3}.admin-cell-truncate{display:inline-block;max-width:var(--admin-cell-max-width, 320px);vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-cell-truncate--multi{display:-webkit-box;white-space:normal;-webkit-line-clamp:3;-webkit-box-orient:vertical;word-break:break-word}.admin-resource-index__footer{display:flex;justify-content:flex-end;padding:var(--uid-space-md) 0}.admin-filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-md);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-raised);border-radius:var(--uid-radius-lg) var(--uid-radius-lg) 0 0;border-bottom:0;margin-top:var(--uid-space-md)}.admin-filter-bar__search{flex:1;min-width:200px;max-width:320px;height:28px;padding:0 var(--uid-space-sm);border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);color:var(--uid-text-primary);font-size:13px;outline:none}.admin-filter-bar__search:focus{border-color:var(--uid-accent);outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent)}.admin-filter-bar__spacer{flex:1}.admin-bulk-toolbar{display:flex;align-items:center;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-md);background:var(--uid-color-zinc-900, #18181b);color:var(--uid-color-zinc-100, #f4f4f5);border-radius:var(--uid-radius-lg) var(--uid-radius-lg) 0 0;border:1px solid var(--uid-color-zinc-900, #18181b);border-bottom:0;margin-top:var(--uid-space-md)}.admin-bulk-toolbar__count{font-size:13px}.admin-bulk-toolbar__count b{font-weight:var(--uid-font-weight-semibold)}.admin-bulk-toolbar__divider{width:1px;height:20px;background:#ffffff26}.admin-bulk-toolbar__spacer{flex:1}.admin-bulk-toolbar .uid-button{background:transparent;border-color:#ffffff26;color:var(--uid-color-zinc-100, #f4f4f5)}.admin-bulk-toolbar .uid-button:hover:not([disabled]){background:#ffffff14}.admin-bulk-toolbar .uid-button--danger{color:var(--uid-color-rose-400, #fb7185)}.admin-resource-index__row--selected{background:color-mix(in srgb,var(--uid-accent) 8%,transparent)}.admin-resource-form__back{font-size:var(--uid-font-size-xs);color:var(--uid-text-secondary);cursor:pointer;text-decoration:none;display:inline-block;margin-bottom:4px}.admin-resource-form__back:hover{color:var(--uid-text-primary)}.admin-resource-form__alert{margin-bottom:var(--uid-space-md)}.admin-resource-form__loading{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-resource-form__body{margin-bottom:var(--uid-space-2xl)}.admin-resource-form__savebar{position:sticky;bottom:0;display:flex;align-items:center;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-md);background:var(--uid-surface-raised);border-top:1px solid var(--uid-border-default);border-radius:var(--uid-radius-md);box-shadow:var(--uid-shadow-md);margin-top:var(--uid-space-md)}.admin-resource-form__savebar-hint{flex:1;font-size:13px;color:var(--uid-warning)}.admin-infolist-rows{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-infolist-cols{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--uid-space-md)}.admin-infolist-section{margin-bottom:var(--uid-space-md);padding:var(--uid-space-md);border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-lg);background:var(--uid-surface-raised)}.admin-infolist-section__hd{margin-bottom:var(--uid-space-sm)}.admin-infolist-section__title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold)}.admin-infolist-section__description{margin:var(--uid-space-2xs) 0 0;font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-infolist-section__body{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-infolist-tabs__list{list-style:none;margin:0 0 var(--uid-space-sm);padding:0;display:flex;gap:var(--uid-space-xs);border-bottom:1px solid var(--uid-border-subtle)}.admin-infolist-tabs__tab{padding:var(--uid-space-sm) var(--uid-space-sm);font-size:13px;color:var(--uid-text-secondary);border-bottom:2px solid transparent}.admin-infolist-tabs__tab--active{color:var(--uid-text-primary);border-bottom-color:var(--uid-accent);font-weight:var(--uid-font-weight-medium)}.admin-audit-timeline{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-audit-timeline__title{margin:0;font-family:var(--uid-font-family-display);font-size:var(--uid-font-size-lg, 16px);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-audit-timeline__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--uid-space-md);position:relative}.admin-audit-timeline__list:before{content:"";position:absolute;left:11px;top:12px;bottom:12px;width:2px;background:var(--uid-border-subtle)}.admin-audit-timeline__item{position:relative;display:flex;gap:var(--uid-space-sm);padding-left:2px}.admin-audit-timeline__icon{position:relative;z-index:1;flex:none;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--uid-surface-base);border:1px solid var(--uid-border-subtle);color:var(--uid-text-secondary)}.admin-audit-timeline__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;padding-top:2px}.admin-audit-timeline__row{display:flex;align-items:center;gap:var(--uid-space-2xs);flex-wrap:wrap}.admin-audit-timeline__actor{font-size:13px;font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-audit-timeline__verb{font-size:13px;color:var(--uid-text-secondary)}.admin-audit-timeline__when{margin-left:auto;font-size:12px;color:var(--uid-text-tertiary)}.admin-audit-timeline__detail{font-size:12px;color:var(--uid-text-tertiary)}.admin-audit-timeline__empty,.admin-audit-timeline__error{font-size:13px;color:var(--uid-text-tertiary)}.admin-audit-timeline__error{color:var(--uid-color-danger, #dc2626)}.admin-audit-timeline__loading{display:flex;flex-direction:column;gap:var(--uid-space-xs)}.admin-resource-view__alert{margin-bottom:var(--uid-space-md)}.admin-resource-view__loading{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-resource-view__hd{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--uid-space-md);margin-bottom:var(--uid-space-md)}.admin-resource-view__hd-left{display:flex;flex-direction:column;gap:var(--uid-space-2xs);min-width:0}.admin-resource-view__hd-right{display:flex;align-items:center;gap:var(--uid-space-sm);flex:none}.admin-resource-view__back{display:inline-flex;align-items:center;gap:var(--uid-space-2xs);padding:0;margin:0;font-size:13px;color:var(--uid-text-tertiary);background:transparent;border:0;cursor:pointer;align-self:flex-start}.admin-resource-view__back:hover{color:var(--uid-text-primary)}.admin-resource-view__meta{display:flex;align-items:center;gap:var(--uid-space-sm);margin-top:var(--uid-space-2xs)}.admin-resource-view__uid{font-family:var(--uid-font-family-mono, ui-monospace, monospace);font-size:12px;color:var(--uid-text-tertiary);letter-spacing:.02em}.admin-status-badge{display:inline-flex;align-items:center;gap:var(--uid-space-2xs);padding:2px 8px 2px 6px;border-radius:var(--uid-radius-sm);font-size:12px;font-weight:var(--uid-font-weight-medium);text-transform:capitalize}.admin-status-badge__dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}.admin-status-badge[data-variant=success]{background:color-mix(in srgb,var(--uid-color-success, #10b981) 15%,transparent);color:var(--uid-color-success, #10b981)}.admin-status-badge[data-variant=warning]{background:color-mix(in srgb,var(--uid-color-warning, #f59e0b) 15%,transparent);color:var(--uid-color-warning, #f59e0b)}.admin-status-badge[data-variant=danger]{background:color-mix(in srgb,var(--uid-color-danger, #dc2626) 15%,transparent);color:var(--uid-color-danger, #dc2626)}.admin-status-badge[data-variant=neutral],.admin-status-badge[data-variant=muted]{background:var(--uid-border-subtle);color:var(--uid-text-secondary)}.admin-resource-view__grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--uid-space-md);align-items:start}@media(max-width:1024px){.admin-resource-view__grid{grid-template-columns:1fr}}.admin-resource-view__main{display:flex;flex-direction:column;gap:var(--uid-space-md);min-width:0}.admin-resource-view__aside,.admin-resource-view__card{display:flex;flex-direction:column;gap:var(--uid-space-md)}.admin-resource-view__card-title{margin:0;font-family:var(--uid-font-family-display);font-size:var(--uid-font-size-lg, 16px);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-resource-view__metrics{display:flex;flex-direction:column;gap:var(--uid-space-md);margin:0;padding:0}.admin-resource-view__metric-label{font-size:11px;letter-spacing:.06em;text-transform:uppercase;font-weight:var(--uid-font-weight-medium);color:var(--uid-text-tertiary);margin:0}.admin-resource-view__metric-value{font-size:14px;color:var(--uid-text-primary);margin:4px 0 0;font-variant-numeric:tabular-nums}.admin-profile__layout{display:grid;grid-template-columns:200px 1fr;gap:var(--uid-space-lg);align-items:start}.admin-profile__nav{display:flex;flex-direction:column;gap:2px}.admin-profile__nav-item{appearance:none;border:0;background:transparent;text-align:left;display:flex;align-items:center;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-sm);border-radius:var(--uid-radius-md);font-size:13px;color:var(--uid-text-secondary);cursor:pointer}.admin-profile__nav-item:hover{background:var(--uid-surface-hover);color:var(--uid-text-primary)}.admin-profile__nav-item--active{background:var(--uid-surface-base);color:var(--uid-text-primary);font-weight:var(--uid-font-weight-medium)}.admin-profile__nav-icon{width:14px;height:14px;flex:none}.admin-profile__content{display:flex;flex-direction:column;gap:var(--uid-space-md)}.admin-profile__card-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--uid-space-md)}.admin-profile__card-title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold)}.admin-profile__card-ft{margin-top:var(--uid-space-md);display:flex;gap:var(--uid-space-sm)}.admin-profile__hint{margin:0;font-size:var(--uid-font-size-sm);color:var(--uid-text-secondary)}.admin-profile__hero{display:flex;align-items:center;gap:var(--uid-space-md);margin-bottom:var(--uid-space-md)}.admin-profile__hero-text{display:flex;flex-direction:column;gap:4px}.admin-profile__hero-name{font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-profile__hero-meta{font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-profile__form{display:grid;grid-template-columns:1fr 1fr;gap:var(--uid-space-md)}@media(max-width:720px){.admin-profile__form{grid-template-columns:1fr}}.admin-widget__hd{margin-bottom:var(--uid-space-sm)}.admin-widget__title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-widget__desc{margin:var(--uid-space-2xs) 0 0;font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-widget-bar-chart{display:block;width:100%}.admin-donut-widget__row{display:flex;align-items:center;gap:var(--uid-space-md)}.admin-donut-widget__svg{width:120px;height:120px;flex:none}.admin-donut-widget__legend{list-style:none;margin:0;padding:0;flex:1;display:flex;flex-direction:column;gap:var(--uid-space-xs)}.admin-donut-widget__legend li{display:flex;align-items:center;gap:var(--uid-space-sm);font-size:var(--uid-font-size-xs)}.admin-donut-widget__dot{width:10px;height:10px;border-radius:var(--uid-radius-full);flex:none}.admin-donut-widget__label{flex:1;color:var(--uid-text-primary)}.admin-donut-widget__value{color:var(--uid-text-tertiary);font-variant-numeric:tabular-nums}.admin-markdown-widget{font-size:var(--uid-font-size-sm);color:var(--uid-text-secondary);white-space:pre-wrap;line-height:var(--uid-line-height-normal)}.admin-tags{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:4px;min-height:36px;padding:4px 8px;border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);cursor:text}.admin-tags--focused{border-color:var(--uid-accent);outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent)}.admin-tags--disabled{opacity:.6;cursor:not-allowed}.admin-tags__chip{display:inline-flex;align-items:center;gap:4px;padding:2px 6px 2px 8px;background:color-mix(in srgb,var(--uid-accent) 14%,transparent);color:var(--uid-accent);border-radius:var(--uid-radius-sm);font-size:12px;font-weight:500;font-family:var(--uid-font-family-mono, ui-monospace, monospace)}.admin-tags__chip-remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:0;background:transparent;color:inherit;border-radius:50%;cursor:pointer}.admin-tags__chip-remove:hover{background:color-mix(in srgb,var(--uid-accent) 28%,transparent)}.admin-tags__input{flex:1;min-width:80px;height:24px;padding:0 4px;border:0;background:transparent;outline:none;font:inherit;font-size:13px;color:var(--uid-text-primary)}.admin-tags__dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:10;margin:0;padding:4px;display:flex;flex-direction:column;background:var(--uid-surface-raised);border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-md);box-shadow:var(--uid-shadow-md);max-height:320px;overflow-y:auto}.admin-tags__group-label{padding:8px 10px 4px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--uid-text-tertiary);font-weight:var(--uid-font-weight-semibold);position:sticky;top:0;background:var(--uid-surface-raised);z-index:1}.admin-tags__group-label:first-child{padding-top:4px}.admin-tags__option{display:block;width:100%;text-align:left;padding:6px 10px;border:0;background:transparent;border-radius:var(--uid-radius-sm);font-size:13px;cursor:pointer;color:var(--uid-text-primary);font-family:var(--uid-font-family-mono, ui-monospace, monospace)}.admin-tags__option:hover,.admin-tags__option--active{background:var(--uid-color-surface-hover, var(--uid-border-subtle))}.admin-translatable{display:flex;flex-direction:column;gap:6px}.admin-translatable__tabs{display:inline-flex;align-items:center;gap:2px;align-self:flex-start;padding:2px;background:var(--uid-surface-base);border:1px solid var(--uid-border-subtle);border-radius:var(--uid-radius-md)}.admin-translatable__tab{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border:0;background:transparent;border-radius:var(--uid-radius-sm);font-size:11px;font-weight:600;color:var(--uid-text-secondary);cursor:pointer;letter-spacing:.04em}.admin-translatable__tab:hover{color:var(--uid-text-primary)}.admin-translatable__tab--active{background:var(--uid-surface-raised);color:var(--uid-text-primary);box-shadow:0 1px 2px #0000000a}.admin-translatable__dot{width:5px;height:5px;border-radius:50%;background:var(--uid-color-success, #10b981)}.admin-translatable__textarea{width:100%;padding:8px 10px;border:1px solid var(--uid-border-subtle);background:var(--uid-surface-base);border-radius:var(--uid-radius-md);color:var(--uid-text-primary);font:inherit;font-size:13px;resize:vertical}.admin-translatable__textarea:focus{outline:2px solid color-mix(in srgb,var(--uid-accent) 18%,transparent);border-color:var(--uid-accent)}.admin-section{margin-bottom:var(--uid-space-md)}.admin-section__header{margin-bottom:var(--uid-space-sm)}.admin-section__title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-section__description{margin:var(--uid-space-2xs) 0 0;font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-section__body{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-infolist-entry{display:flex;flex-direction:column;gap:var(--uid-space-2xs);padding:var(--uid-space-sm) 0}.admin-infolist-entry+.admin-infolist-entry{border-top:1px solid var(--uid-border-subtle)}.admin-infolist-entry__label{font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary);text-transform:uppercase;letter-spacing:.04em;font-weight:var(--uid-font-weight-medium)}.admin-infolist-entry__value{font-size:var(--uid-font-size-sm);color:var(--uid-text-primary);word-break:break-word;white-space:pre-wrap}.admin-infolist-entry__value--mono{font-family:var(--uid-font-family-mono);font-size:var(--uid-font-size-xs)}.admin-infolist-text{font-size:var(--uid-font-size-sm);color:var(--uid-text-primary)}.admin-infolist-text--mono{font-family:var(--uid-font-family-mono);font-size:var(--uid-font-size-xs)}.admin-infolist-icon{display:inline-flex;align-items:center;gap:var(--uid-space-xs);font-size:var(--uid-font-size-sm)}.admin-infolist-icon--on{color:var(--uid-success)}.admin-infolist-icon--off{color:var(--uid-text-tertiary)}.admin-infolist-icon__glyph{display:inline-block;width:14px;height:14px}.admin-notifs__hd{display:flex;align-items:center;justify-content:space-between;gap:var(--uid-space-sm)}.admin-notifs__title{margin:0;font-size:var(--uid-font-size-md);font-weight:var(--uid-font-weight-semibold)}.admin-notifs__count{color:var(--uid-text-tertiary);font-weight:var(--uid-font-weight-regular);font-size:var(--uid-font-size-sm)}.admin-notifs__list{list-style:none;margin:0;padding:0}.admin-notifs__empty{padding:var(--uid-space-xl) var(--uid-space-md);text-align:center;color:var(--uid-text-tertiary);font-size:var(--uid-font-size-sm)}.admin-notifs__item{position:relative;display:flex;gap:var(--uid-space-sm);padding:var(--uid-space-sm) var(--uid-space-md);cursor:pointer;border-bottom:1px solid var(--uid-border-subtle)}.admin-notifs__item:hover{background:var(--uid-surface-hover)}.admin-notifs__item--unread{background:color-mix(in srgb,var(--uid-accent) 6%,transparent)}.admin-notifs__item--unread:hover{background:color-mix(in srgb,var(--uid-accent) 10%,transparent)}.admin-notifs__icon{width:28px;height:28px;border-radius:var(--uid-radius-md);flex:none;margin-top:2px}.admin-notifs__icon[data-kind=info]{background:color-mix(in srgb,var(--uid-info) 14%,transparent)}.admin-notifs__icon[data-kind=success]{background:color-mix(in srgb,var(--uid-success) 14%,transparent)}.admin-notifs__icon[data-kind=warning]{background:color-mix(in srgb,var(--uid-warning) 14%,transparent)}.admin-notifs__icon[data-kind=danger]{background:color-mix(in srgb,var(--uid-danger) 14%,transparent)}.admin-notifs__body{flex:1;min-width:0}.admin-notifs__row1{display:flex;align-items:baseline;gap:var(--uid-space-sm);margin-bottom:2px}.admin-notifs__title-strong{font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary);flex:1;min-width:0}.admin-notifs__title-soft{font-size:var(--uid-font-size-sm);color:var(--uid-text-primary);flex:1;min-width:0}.admin-notifs__time{font-size:11px;color:var(--uid-text-tertiary);flex:none;font-variant-numeric:tabular-nums}.admin-notifs__text{margin:0;font-size:var(--uid-font-size-xs);color:var(--uid-text-secondary);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.admin-notifs__close{position:absolute;top:6px;right:8px;appearance:none;border:0;background:transparent;color:var(--uid-text-tertiary);cursor:pointer;font-size:18px;width:22px;height:22px;border-radius:var(--uid-radius-sm);opacity:0;transition:opacity var(--uid-duration-fast, .1s)}.admin-notifs__item:hover .admin-notifs__close{opacity:1}.admin-notifs__close:hover{background:var(--uid-surface-hover);color:var(--uid-text-primary)}.admin-import-wizard{max-width:1100px;margin:0 auto}.admin-import-wizard__card{margin-top:var(--uid-space-md)}.admin-import-wizard__card-hd{margin-bottom:var(--uid-space-md)}.admin-import-wizard__card-hd h3{margin:0 0 var(--uid-space-2xs);font-size:var(--uid-font-size-md);font-weight:var(--uid-font-weight-semibold)}.admin-import-wizard__card-hd p{margin:0;font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary)}.admin-import-wizard__empty{padding:var(--uid-space-md);text-align:center;color:var(--uid-text-tertiary);font-size:var(--uid-font-size-sm)}.admin-import-wizard__mapping{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-import-wizard__map-row{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--uid-space-md);align-items:center}.admin-import-wizard__map-source{display:flex;align-items:center;gap:var(--uid-space-sm)}.admin-import-wizard__map-sample{color:var(--uid-text-tertiary);font-size:var(--uid-font-size-xs);font-style:italic}.admin-import-wizard__map-arrow{color:var(--uid-text-tertiary);font-size:var(--uid-font-size-md)}.admin-import-wizard__kpi{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--uid-space-md);margin-top:var(--uid-space-md)}.admin-import-wizard__nav{display:flex;align-items:center;gap:var(--uid-space-sm);margin-top:var(--uid-space-md)}.admin-gallery__group{margin-bottom:var(--uid-space-2xl)}.admin-gallery__group-title{margin:0 0 var(--uid-space-md);font-size:var(--uid-font-size-lg);font-weight:var(--uid-font-weight-semibold);color:var(--uid-text-primary)}.admin-gallery__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--uid-space-md)}@media(max-width:960px){.admin-gallery__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.admin-gallery__grid{grid-template-columns:1fr}}.admin-gallery__card{display:flex;flex-direction:column}.admin-gallery__card-hd{display:flex;align-items:center;justify-content:space-between;gap:var(--uid-space-sm);margin-bottom:var(--uid-space-xs)}.admin-gallery__card-title{margin:0;font-size:var(--uid-font-size-sm);font-weight:var(--uid-font-weight-semibold)}.admin-gallery__card-type{font-family:var(--uid-font-family-mono);font-size:11px;color:var(--uid-text-tertiary);background:var(--uid-surface-base);padding:1px 6px;border-radius:var(--uid-radius-sm);border:1px solid var(--uid-border-subtle)}.admin-gallery__card-desc{margin:0 0 var(--uid-space-md);font-size:var(--uid-font-size-xs);color:var(--uid-text-tertiary);line-height:var(--uid-line-height-normal)}.admin-gallery__card-demo{flex:1;display:flex;flex-direction:column;justify-content:flex-end}.admin-field__control--quill .ql-container{min-height:200px;font-size:14px;font-family:inherit}.admin-field__control--quill .ql-toolbar.ql-snow,.admin-field__control--quill .ql-container.ql-snow{border-color:var(--uid-border-subtle)}.admin-field__control--quill .ql-toolbar.ql-snow{border-radius:var(--uid-radius-md) var(--uid-radius-md) 0 0;background:var(--uid-surface-base)}.admin-field__control--quill .ql-container.ql-snow{border-radius:0 0 var(--uid-radius-md) var(--uid-radius-md);background:var(--uid-surface-raised);color:var(--uid-text-primary)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dskripchenko/laravel-admin",
3
- "version": "1.1.23",
3
+ "version": "1.2.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },