@dskripchenko/laravel-admin 1.2.4 → 1.4.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.
@@ -84,6 +84,7 @@ export declare const useDashboardStore: import("pinia").StoreDefinition<"admin-d
84
84
  removeWidget: (slugKey: string) => void;
85
85
  updateWidget: (slugKey: string, patch: Partial<WidgetLayoutItem>) => void;
86
86
  moveWidget: (fromIdx: number, toIdx: number) => void;
87
+ setDraft: (items: WidgetLayoutItem[]) => void;
87
88
  reset: () => void;
88
89
  }, "loading" | "slug" | "editMode" | "draft" | "original" | "saving">, Pick<{
89
90
  slug: import("vue").Ref<string | null, string | null>;
@@ -146,6 +147,7 @@ export declare const useDashboardStore: import("pinia").StoreDefinition<"admin-d
146
147
  removeWidget: (slugKey: string) => void;
147
148
  updateWidget: (slugKey: string, patch: Partial<WidgetLayoutItem>) => void;
148
149
  moveWidget: (fromIdx: number, toIdx: number) => void;
150
+ setDraft: (items: WidgetLayoutItem[]) => void;
149
151
  reset: () => void;
150
152
  }, "isDirty">, Pick<{
151
153
  slug: import("vue").Ref<string | null, string | null>;
@@ -208,5 +210,6 @@ export declare const useDashboardStore: import("pinia").StoreDefinition<"admin-d
208
210
  removeWidget: (slugKey: string) => void;
209
211
  updateWidget: (slugKey: string, patch: Partial<WidgetLayoutItem>) => void;
210
212
  moveWidget: (fromIdx: number, toIdx: number) => void;
213
+ setDraft: (items: WidgetLayoutItem[]) => void;
211
214
  reset: () => void;
212
- }, "reset" | "openDashboard" | "enterEditMode" | "cancelEdit" | "saveLayout" | "resetToDefault" | "addWidget" | "removeWidget" | "updateWidget" | "moveWidget">>;
215
+ }, "reset" | "openDashboard" | "enterEditMode" | "cancelEdit" | "saveLayout" | "resetToDefault" | "addWidget" | "removeWidget" | "updateWidget" | "moveWidget" | "setDraft">>;
@@ -19,3 +19,5 @@ export { useThemeStore } from './theme';
19
19
  export { useLocaleStore } from './locale';
20
20
  export { useNotificationsStore } from './notifications';
21
21
  export type { NotificationItem, NotificationFilter } from './notifications';
22
+ export { useScreenStore } from './screen';
23
+ export type { ScreenLayoutNode, ScreenAction, ScreenStateSnapshot, ScreenMethodResult, } from './screen';
@@ -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" | "mode" | "loading" | "error" | "initial" | "slug" | "saving" | "recordId" | "errors" | "deleting">, Pick<{
43
+ }, "state" | "mode" | "loading" | "error" | "initial" | "slug" | "saving" | "errors" | "recordId" | "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>;
@@ -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" | "save" | "prepareCreate" | "setField" | "setErrors" | "clearErrors">>;
91
+ }, "reset" | "load" | "destroy" | "save" | "setField" | "setErrors" | "clearErrors" | "prepareCreate">>;
@@ -109,7 +109,7 @@ export declare const useResourceIndexStore: import("pinia").StoreDefinition<"adm
109
109
  clearSelection: () => void;
110
110
  isSelected: (id: string | number) => boolean;
111
111
  rowId: (row: Record<string, unknown>) => string | number;
112
- }, "isEmpty" | "hasError" | "hasSelection" | "selectedCount" | "selectionState">, Pick<{
112
+ }, "hasError" | "isEmpty" | "hasSelection" | "selectedCount" | "selectionState">, Pick<{
113
113
  slug: import("vue").Ref<string | null, string | null>;
114
114
  items: import("vue").Ref<Record<string, unknown>[], Record<string, unknown>[]>;
115
115
  meta: import("vue").Ref<{
@@ -0,0 +1,255 @@
1
+ /**
2
+ * useScreenStore — state для произвольных Screen (custom forms / pages вне CRUD).
3
+ *
4
+ * Управляет:
5
+ * - slug + state (working copy формы — провайдится через provideFormState)
6
+ * - layout / commandBar / name / description (snapshot из backend `state` action)
7
+ * - errors (field-keyed) — устанавливаются при ValidationError из runMethod
8
+ * - loading / running — UX-флаги
9
+ *
10
+ * Endpoints (laravel-admin contract):
11
+ * GET /{slug}/state — compile() snapshot
12
+ * POST /{slug}/runMethod — диспатч command-метода
13
+ *
14
+ * Не кэширует ответы между slug'ами — переключение на другой screen
15
+ * сбрасывает state. Сохранение dirty между screen'ами не нужно (custom
16
+ * forms обычно atomic submit, не resume-able black box).
17
+ */
18
+ export interface ScreenLayoutNode {
19
+ kind: 'layout' | 'field';
20
+ type?: string;
21
+ name?: string;
22
+ children?: ScreenLayoutNode[];
23
+ [key: string]: unknown;
24
+ }
25
+ export interface ScreenAction {
26
+ kind: 'action';
27
+ name: string;
28
+ label: string;
29
+ type: string;
30
+ icon?: string | null;
31
+ primary?: boolean;
32
+ destructive?: boolean;
33
+ permission?: string | null;
34
+ confirm?: {
35
+ message: string;
36
+ title?: string;
37
+ } | null;
38
+ position?: string[];
39
+ attributes?: Record<string, unknown>;
40
+ }
41
+ export interface ScreenStateSnapshot {
42
+ state: Record<string, unknown>;
43
+ name: string;
44
+ description: string | null;
45
+ layout: ScreenLayoutNode[];
46
+ command_bar: ScreenAction[];
47
+ permissions: string[];
48
+ etag: string;
49
+ }
50
+ export interface ScreenMethodResult {
51
+ state?: Record<string, unknown>;
52
+ message?: string;
53
+ alerts?: Array<{
54
+ type: string;
55
+ message: string;
56
+ duration_ms?: number;
57
+ }>;
58
+ redirect_url?: string | null;
59
+ refresh?: boolean;
60
+ download_url?: string | null;
61
+ extra?: Record<string, unknown>;
62
+ }
63
+ export declare const useScreenStore: import("pinia").StoreDefinition<"admin-screen", Pick<{
64
+ slug: import("vue").Ref<string | null, string | null>;
65
+ name: import("vue").Ref<string, string>;
66
+ description: import("vue").Ref<string | null, string | null>;
67
+ layout: import("vue").Ref<{
68
+ [x: string]: unknown;
69
+ kind: "layout" | "field";
70
+ type?: string | undefined;
71
+ name?: string | undefined;
72
+ children?: /*elided*/ any[] | undefined;
73
+ }[], ScreenLayoutNode[] | {
74
+ [x: string]: unknown;
75
+ kind: "layout" | "field";
76
+ type?: string | undefined;
77
+ name?: string | undefined;
78
+ children?: /*elided*/ any[] | undefined;
79
+ }[]>;
80
+ commandBar: import("vue").Ref<{
81
+ kind: "action";
82
+ name: string;
83
+ label: string;
84
+ type: string;
85
+ icon?: string | null | undefined;
86
+ primary?: boolean | undefined;
87
+ destructive?: boolean | undefined;
88
+ permission?: string | null | undefined;
89
+ confirm?: {
90
+ message: string;
91
+ title?: string | undefined;
92
+ } | null | undefined;
93
+ position?: string[] | undefined;
94
+ attributes?: Record<string, unknown> | undefined;
95
+ }[], ScreenAction[] | {
96
+ kind: "action";
97
+ name: string;
98
+ label: string;
99
+ type: string;
100
+ icon?: string | null | undefined;
101
+ primary?: boolean | undefined;
102
+ destructive?: boolean | undefined;
103
+ permission?: string | null | undefined;
104
+ confirm?: {
105
+ message: string;
106
+ title?: string | undefined;
107
+ } | null | undefined;
108
+ position?: string[] | undefined;
109
+ attributes?: Record<string, unknown> | undefined;
110
+ }[]>;
111
+ permissions: import("vue").Ref<string[], string[]>;
112
+ etag: import("vue").Ref<string | null, string | null>;
113
+ state: import("vue").Ref<Record<string, unknown>, Record<string, unknown>>;
114
+ initial: import("vue").Ref<Record<string, unknown>, Record<string, unknown>>;
115
+ errors: import("vue").Ref<Record<string, string[]>, Record<string, string[]>>;
116
+ loading: import("vue").Ref<boolean, boolean>;
117
+ running: import("vue").Ref<boolean, boolean>;
118
+ error: import("vue").Ref<Error | null, Error | null>;
119
+ lastMessage: import("vue").Ref<string | null, string | null>;
120
+ hasError: import("vue").ComputedRef<boolean>;
121
+ reset: () => void;
122
+ load: (screenSlug: string, params?: Record<string, unknown>) => Promise<void>;
123
+ runMethod: (method: string, overridePayload?: Record<string, unknown>) => Promise<ScreenMethodResult>;
124
+ setField: (name: string, value: unknown) => void;
125
+ setErrors: (next: Record<string, string[]>) => void;
126
+ clearErrors: () => void;
127
+ }, "state" | "name" | "loading" | "permissions" | "error" | "layout" | "initial" | "description" | "slug" | "commandBar" | "etag" | "errors" | "running" | "lastMessage">, Pick<{
128
+ slug: import("vue").Ref<string | null, string | null>;
129
+ name: import("vue").Ref<string, string>;
130
+ description: import("vue").Ref<string | null, string | null>;
131
+ layout: import("vue").Ref<{
132
+ [x: string]: unknown;
133
+ kind: "layout" | "field";
134
+ type?: string | undefined;
135
+ name?: string | undefined;
136
+ children?: /*elided*/ any[] | undefined;
137
+ }[], ScreenLayoutNode[] | {
138
+ [x: string]: unknown;
139
+ kind: "layout" | "field";
140
+ type?: string | undefined;
141
+ name?: string | undefined;
142
+ children?: /*elided*/ any[] | undefined;
143
+ }[]>;
144
+ commandBar: import("vue").Ref<{
145
+ kind: "action";
146
+ name: string;
147
+ label: string;
148
+ type: string;
149
+ icon?: string | null | undefined;
150
+ primary?: boolean | undefined;
151
+ destructive?: boolean | undefined;
152
+ permission?: string | null | undefined;
153
+ confirm?: {
154
+ message: string;
155
+ title?: string | undefined;
156
+ } | null | undefined;
157
+ position?: string[] | undefined;
158
+ attributes?: Record<string, unknown> | undefined;
159
+ }[], ScreenAction[] | {
160
+ kind: "action";
161
+ name: string;
162
+ label: string;
163
+ type: string;
164
+ icon?: string | null | undefined;
165
+ primary?: boolean | undefined;
166
+ destructive?: boolean | undefined;
167
+ permission?: string | null | undefined;
168
+ confirm?: {
169
+ message: string;
170
+ title?: string | undefined;
171
+ } | null | undefined;
172
+ position?: string[] | undefined;
173
+ attributes?: Record<string, unknown> | undefined;
174
+ }[]>;
175
+ permissions: import("vue").Ref<string[], string[]>;
176
+ etag: import("vue").Ref<string | null, string | null>;
177
+ state: import("vue").Ref<Record<string, unknown>, Record<string, unknown>>;
178
+ initial: import("vue").Ref<Record<string, unknown>, Record<string, unknown>>;
179
+ errors: import("vue").Ref<Record<string, string[]>, Record<string, string[]>>;
180
+ loading: import("vue").Ref<boolean, boolean>;
181
+ running: import("vue").Ref<boolean, boolean>;
182
+ error: import("vue").Ref<Error | null, Error | null>;
183
+ lastMessage: import("vue").Ref<string | null, string | null>;
184
+ hasError: import("vue").ComputedRef<boolean>;
185
+ reset: () => void;
186
+ load: (screenSlug: string, params?: Record<string, unknown>) => Promise<void>;
187
+ runMethod: (method: string, overridePayload?: Record<string, unknown>) => Promise<ScreenMethodResult>;
188
+ setField: (name: string, value: unknown) => void;
189
+ setErrors: (next: Record<string, string[]>) => void;
190
+ clearErrors: () => void;
191
+ }, "hasError">, Pick<{
192
+ slug: import("vue").Ref<string | null, string | null>;
193
+ name: import("vue").Ref<string, string>;
194
+ description: import("vue").Ref<string | null, string | null>;
195
+ layout: import("vue").Ref<{
196
+ [x: string]: unknown;
197
+ kind: "layout" | "field";
198
+ type?: string | undefined;
199
+ name?: string | undefined;
200
+ children?: /*elided*/ any[] | undefined;
201
+ }[], ScreenLayoutNode[] | {
202
+ [x: string]: unknown;
203
+ kind: "layout" | "field";
204
+ type?: string | undefined;
205
+ name?: string | undefined;
206
+ children?: /*elided*/ any[] | undefined;
207
+ }[]>;
208
+ commandBar: import("vue").Ref<{
209
+ kind: "action";
210
+ name: string;
211
+ label: string;
212
+ type: string;
213
+ icon?: string | null | undefined;
214
+ primary?: boolean | undefined;
215
+ destructive?: boolean | undefined;
216
+ permission?: string | null | undefined;
217
+ confirm?: {
218
+ message: string;
219
+ title?: string | undefined;
220
+ } | null | undefined;
221
+ position?: string[] | undefined;
222
+ attributes?: Record<string, unknown> | undefined;
223
+ }[], ScreenAction[] | {
224
+ kind: "action";
225
+ name: string;
226
+ label: string;
227
+ type: string;
228
+ icon?: string | null | undefined;
229
+ primary?: boolean | undefined;
230
+ destructive?: boolean | undefined;
231
+ permission?: string | null | undefined;
232
+ confirm?: {
233
+ message: string;
234
+ title?: string | undefined;
235
+ } | null | undefined;
236
+ position?: string[] | undefined;
237
+ attributes?: Record<string, unknown> | undefined;
238
+ }[]>;
239
+ permissions: import("vue").Ref<string[], string[]>;
240
+ etag: import("vue").Ref<string | null, string | null>;
241
+ state: import("vue").Ref<Record<string, unknown>, Record<string, unknown>>;
242
+ initial: import("vue").Ref<Record<string, unknown>, Record<string, unknown>>;
243
+ errors: import("vue").Ref<Record<string, string[]>, Record<string, string[]>>;
244
+ loading: import("vue").Ref<boolean, boolean>;
245
+ running: import("vue").Ref<boolean, boolean>;
246
+ error: import("vue").Ref<Error | null, Error | null>;
247
+ lastMessage: import("vue").Ref<string | null, string | null>;
248
+ hasError: import("vue").ComputedRef<boolean>;
249
+ reset: () => void;
250
+ load: (screenSlug: string, params?: Record<string, unknown>) => Promise<void>;
251
+ runMethod: (method: string, overridePayload?: Record<string, unknown>) => Promise<ScreenMethodResult>;
252
+ setField: (name: string, value: unknown) => void;
253
+ setErrors: (next: Record<string, string[]>) => void;
254
+ clearErrors: () => void;
255
+ }, "reset" | "load" | "runMethod" | "setField" | "setErrors" | "clearErrors">>;
@@ -0,0 +1 @@
1
+ export {};
package/dist/style.css CHANGED
@@ -1 +1 @@
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-drag{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;cursor:grab;color:var(--uid-text-tertiary);border-radius:var(--uid-radius-sm)}.admin-resource-index__row-drag:hover{background:var(--uid-color-surface-hover, var(--uid-border-subtle));color:var(--uid-text-primary)}.admin-resource-index__row-drag:active{cursor:grabbing}.admin-resource-index__row-drag--ghost{opacity:.4}.admin-resource-index__row-drag--drop-before:before,.admin-resource-index__row-drag--drop-after:before{content:"";position:absolute;left:0;right:-9999px;height:2px;background:var(--uid-accent);pointer-events:none;z-index:5}.admin-resource-index__row-drag--drop-before:before{top:-1px}.admin-resource-index__row-drag--drop-after:before{bottom:-1px}.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)}
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)}.admin-sidebar-node{--admin-sidebar-stripe-color: color-mix( in srgb, var(--uid-color-primary, #14b8a6) calc(var(--admin-sidebar-stripe-alpha, 0) * 100%), transparent )}.admin-sidebar-node>.admin-sidebar-node__group,.admin-sidebar-node>.admin-sidebar-node__leaf{padding-inline-start:calc(12px + var(--admin-sidebar-indent, 0px))}.admin-sidebar-node--stripe>.admin-sidebar-node__group,.admin-sidebar-node--stripe>.admin-sidebar-node__leaf{box-shadow:inset 2px 0 0 0 var(--admin-sidebar-stripe-color)}.admin-sidebar-node__group{width:calc(100% - var(--uid-space-sm) * 2);margin:1px var(--uid-space-sm);border:0;background:transparent;cursor:pointer;font:inherit;color:var(--uid-sidebar-item-color, var(--uid-color-text-secondary));text-align:left}.admin-sidebar-node__chev{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;margin-inline-start:auto;color:var(--uid-color-text-tertiary);transition:transform var(--uid-duration-fast, .12s) var(--uid-ease-out, ease)}.admin-sidebar-node__chev--open{transform:rotate(90deg)}.admin-sidebar-node--has-children.admin-sidebar-node--active>.admin-sidebar-node__group{color:var(--uid-color-text-primary)}.admin-sidebar-node__children{display:flex;flex-direction:column}.uid-pattern-sidebar--collapsed .admin-sidebar-node__children,.uid-pattern-sidebar--collapsed .admin-sidebar-node__chev{display:none}.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-dialog__required{color:var(--uid-color-danger, #dc2626);font-weight:var(--uid-font-weight-semibold);margin-inline-start:2px}.admin-dialog__hint{flex:1;font-size:var(--uid-font-size-xs, 11px);color:var(--uid-text-tertiary, #9ca3af)}.admin-dashboard__grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-rows:140px;gap:var(--uid-space-md)}.admin-dashboard__grid--editing .admin-dashboard__cell{outline:1px dashed transparent;transition:outline-color .12s ease,opacity .12s ease}.admin-dashboard__grid--editing .admin-dashboard__cell:hover{outline-color:var(--uid-accent)}.admin-dashboard__cell--dragging{opacity:.45}.admin-dashboard__cell--drop-target{outline:2px solid var(--uid-color-primary, var(--uid-accent, #14b8a6))!important;outline-offset:-2px;background:color-mix(in srgb,var(--uid-color-primary, #14b8a6) 6%,transparent)}.admin-dashboard__cell{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column}.admin-dashboard__cell>*{flex:1 1 auto;min-height:0}.admin-dashboard__cell .admin-widget,.admin-dashboard__cell>.uid-card,.admin-dashboard__cell>.uid-stat,.admin-dashboard__cell .admin-widget>.uid-card{height:100%;display:flex;flex-direction:column}.admin-dashboard__cell .uid-card__body,.admin-dashboard__cell .admin-widget__body{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.admin-dashboard__resize{position:absolute;bottom:4px;right:4px;width:16px;height:16px;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;border-radius:2px}.admin-dashboard__resize:hover{background:linear-gradient(135deg,transparent 0 45%,var(--uid-color-primary, var(--uid-text-primary)) 45% 60%,transparent 60% 70%,var(--uid-color-primary, var(--uid-text-primary)) 70% 85%,transparent 85%)}.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-screen-page__description{margin:4px 0 0;font-size:var(--uid-font-size-sm);color:var(--uid-text-secondary)}.admin-screen-page__alert{margin-bottom:var(--uid-space-md)}.admin-screen-page__loading{display:flex;flex-direction:column;gap:var(--uid-space-sm)}.admin-screen-page__body{margin-bottom:var(--uid-space-2xl)}.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-drag{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;cursor:grab;color:var(--uid-text-tertiary);border-radius:var(--uid-radius-sm)}.admin-resource-index__row-drag:hover{background:var(--uid-color-surface-hover, var(--uid-border-subtle));color:var(--uid-text-primary)}.admin-resource-index__row-drag:active{cursor:grabbing}.admin-resource-index__row-drag--ghost{opacity:.4}.admin-resource-index__row-drag--drop-before:before,.admin-resource-index__row-drag--drop-after:before{content:"";position:absolute;left:0;right:-9999px;height:2px;background:var(--uid-accent);pointer-events:none;z-index:5}.admin-resource-index__row-drag--drop-before:before{top:-1px}.admin-resource-index__row-drag--drop-after:before{bottom:-1px}.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%;flex:1 1 auto;min-height:0;height:auto!important}.admin-donut-widget__row{display:flex;align-items:center;gap:var(--uid-space-md);flex:1 1 auto;min-height:0}.admin-widget__empty{flex:1 1 auto;display:flex;align-items:center;justify-content:center;color:var(--uid-text-tertiary, #9ca3af);font-size:var(--uid-font-size-sm)}.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-heatmap{display:flex;flex-direction:column;gap:2px;font-size:var(--uid-font-size-xs, 11px)}.admin-heatmap__cols-axis{display:grid;grid-template-columns:32px repeat(var(--admin-heatmap-cols),1fr);gap:2px;color:var(--uid-text-tertiary, #9ca3af);margin-bottom:4px}.admin-heatmap__cols-axis:before{content:""}.admin-heatmap__col-label{font-size:10px;text-align:center;white-space:nowrap}.admin-heatmap__row{display:grid;grid-template-columns:32px 1fr;gap:6px;align-items:center}.admin-heatmap__row-label{color:var(--uid-text-secondary, #6b7280);font-size:11px;text-align:right}.admin-heatmap__cells{display:grid;grid-template-columns:repeat(var(--admin-heatmap-cols),1fr);gap:2px}.admin-heatmap__cell{display:block;width:100%;height:14px;border-radius:2px;background:var(--uid-color-primary, #14b8a6);opacity:0;transition:transform 80ms ease}.admin-heatmap__cell:hover{transform:scale(1.4);z-index:1}.admin-heatmap__empty{padding:var(--uid-space-md);text-align:center;color:var(--uid-text-tertiary);font-size:var(--uid-font-size-sm)}.admin-gauge-widget__body{flex:1 1 auto;display:flex;align-items:center;justify-content:center;min-height:0}.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-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-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.2.4",
3
+ "version": "1.4.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -150,7 +150,7 @@
150
150
  },
151
151
  "devDependencies": {
152
152
  "@dskripchenko/ui": "^1.1.0",
153
- "@dskripchenko/wysiwyg": "^0.2.0",
153
+ "@dskripchenko/wysiwyg": "^0.2.3",
154
154
  "@eslint/js": "^10.0.1",
155
155
  "@size-limit/preset-small-lib": "^12.1.0",
156
156
  "@types/node": "^22",