@maykonpaulo/maestro-admin 0.3.0 → 0.4.0-next.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.
package/src/styles.css CHANGED
@@ -1 +1,1716 @@
1
- @import 'tailwindcss';
1
+ /*
2
+ * @maykonpaulo/maestro-admin — the whole stylesheet.
3
+ *
4
+ * Plain CSS on custom properties, deliberately: a component library whose look depends on the
5
+ * consumer's Tailwind build scanning `node_modules/**\/dist` is a library that renders unstyled the
6
+ * first time someone forgets a `@source`. One import, no build coupling, and every colour is a token
7
+ * the consumer can override — per theme, or one variable at a time.
8
+ *
9
+ * import '@maykonpaulo/maestro-admin/styles.css';
10
+ *
11
+ * Three built-in themes (cobalto · latao · teal), each in light and dark. The palette is chosen with
12
+ * `data-maestro-theme` on the admin root and the light/dark decision with `data-maestro-scheme`,
13
+ * which has three states: absent (or "system") follows `prefers-color-scheme`, "light"/"dark" force it.
14
+ */
15
+
16
+ /* ══════════════════════════════════════════════════════════════════
17
+ 1 · Tokens
18
+ ══════════════════════════════════════════════════════════════════ */
19
+
20
+ [data-maestro-theme] {
21
+ /* Shape and type — shared by every theme; override for a different feel. */
22
+ --maestro-font: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
23
+ --maestro-font-mono: ui-monospace, SFMono-Regular, 'Cascadia Mono', 'JetBrains Mono', Menlo, monospace;
24
+ --maestro-radius-sm: 6px;
25
+ --maestro-radius: 8px;
26
+ --maestro-radius-lg: 11px;
27
+ --maestro-sidebar-width: 232px;
28
+ --maestro-header-height: 52px;
29
+
30
+ /* Density — the only thing the compact toggle moves. */
31
+ --maestro-row-py: 9px;
32
+ }
33
+
34
+ [data-maestro-density='compact'] {
35
+ --maestro-row-py: 5px;
36
+ }
37
+
38
+ /* ── Grafite & Cobalto ─────────────────────────────────────────── */
39
+ [data-maestro-theme='cobalto'] {
40
+ --maestro-brand: #3557e8;
41
+ --maestro-brand-hover: #2a46c7;
42
+ --maestro-brand-soft: #edf1fe;
43
+ --maestro-brand-on: #ffffff;
44
+ --maestro-shell: #141a24;
45
+ --maestro-shell-fg: #e9ecf3;
46
+ --maestro-shell-fg-muted: #8e97aa;
47
+ --maestro-shell-hover: rgba(255, 255, 255, 0.06);
48
+ --maestro-shell-border: rgba(255, 255, 255, 0.09);
49
+ --maestro-shell-accent: #7d96ff;
50
+ --maestro-bg: #f5f6f9;
51
+ --maestro-surface: #ffffff;
52
+ --maestro-surface-2: #f9fafc;
53
+ --maestro-border: #e3e6ee;
54
+ --maestro-border-strong: #cdd3e0;
55
+ --maestro-fg: #171c27;
56
+ --maestro-fg-muted: #5c6474;
57
+ --maestro-fg-subtle: #8a91a1;
58
+ --maestro-ok: #17864f;
59
+ --maestro-ok-soft: #e6f5ec;
60
+ --maestro-warn: #a96a0b;
61
+ --maestro-warn-soft: #fbf1df;
62
+ --maestro-danger: #c43b3b;
63
+ --maestro-danger-soft: #fcebeb;
64
+ --maestro-shadow-card: 0 1px 2px rgba(16, 24, 40, 0.06), 0 1px 3px rgba(16, 24, 40, 0.05);
65
+ --maestro-shadow-panel: 0 12px 32px -8px rgba(16, 24, 40, 0.22);
66
+ }
67
+ @media (prefers-color-scheme: dark) {
68
+ [data-maestro-theme='cobalto']:not([data-maestro-scheme='light']) {
69
+ --maestro-brand: #7b95ff;
70
+ --maestro-brand-hover: #94a9ff;
71
+ --maestro-brand-soft: rgba(123, 149, 255, 0.15);
72
+ --maestro-brand-on: #0b0f17;
73
+ --maestro-shell: #090c12;
74
+ --maestro-shell-fg: #e4e8f1;
75
+ --maestro-shell-fg-muted: #7e8799;
76
+ --maestro-shell-hover: rgba(255, 255, 255, 0.05);
77
+ --maestro-shell-border: rgba(255, 255, 255, 0.07);
78
+ --maestro-shell-accent: #7b95ff;
79
+ --maestro-bg: #0d1118;
80
+ --maestro-surface: #141922;
81
+ --maestro-surface-2: #191f29;
82
+ --maestro-border: #232a37;
83
+ --maestro-border-strong: #323b4c;
84
+ --maestro-fg: #e6eaf2;
85
+ --maestro-fg-muted: #99a2b4;
86
+ --maestro-fg-subtle: #6e7688;
87
+ --maestro-ok: #46c185;
88
+ --maestro-ok-soft: rgba(70, 193, 133, 0.14);
89
+ --maestro-warn: #e0a93b;
90
+ --maestro-warn-soft: rgba(224, 169, 59, 0.14);
91
+ --maestro-danger: #f07575;
92
+ --maestro-danger-soft: rgba(240, 117, 117, 0.14);
93
+ --maestro-shadow-card: 0 1px 2px rgba(0, 0, 0, 0.4);
94
+ --maestro-shadow-panel: 0 16px 40px -10px rgba(0, 0, 0, 0.7);
95
+ }
96
+ }
97
+ [data-maestro-theme='cobalto'][data-maestro-scheme='dark'] {
98
+ --maestro-brand: #7b95ff;
99
+ --maestro-brand-hover: #94a9ff;
100
+ --maestro-brand-soft: rgba(123, 149, 255, 0.15);
101
+ --maestro-brand-on: #0b0f17;
102
+ --maestro-shell: #090c12;
103
+ --maestro-shell-fg: #e4e8f1;
104
+ --maestro-shell-fg-muted: #7e8799;
105
+ --maestro-shell-hover: rgba(255, 255, 255, 0.05);
106
+ --maestro-shell-border: rgba(255, 255, 255, 0.07);
107
+ --maestro-shell-accent: #7b95ff;
108
+ --maestro-bg: #0d1118;
109
+ --maestro-surface: #141922;
110
+ --maestro-surface-2: #191f29;
111
+ --maestro-border: #232a37;
112
+ --maestro-border-strong: #323b4c;
113
+ --maestro-fg: #e6eaf2;
114
+ --maestro-fg-muted: #99a2b4;
115
+ --maestro-fg-subtle: #6e7688;
116
+ --maestro-ok: #46c185;
117
+ --maestro-ok-soft: rgba(70, 193, 133, 0.14);
118
+ --maestro-warn: #e0a93b;
119
+ --maestro-warn-soft: rgba(224, 169, 59, 0.14);
120
+ --maestro-danger: #f07575;
121
+ --maestro-danger-soft: rgba(240, 117, 117, 0.14);
122
+ --maestro-shadow-card: 0 1px 2px rgba(0, 0, 0, 0.4);
123
+ --maestro-shadow-panel: 0 16px 40px -10px rgba(0, 0, 0, 0.7);
124
+ }
125
+
126
+ /* ── Ardósia & Latão ───────────────────────────────────────────── */
127
+ [data-maestro-theme='latao'] {
128
+ --maestro-brand: #9a6a22;
129
+ --maestro-brand-hover: #7f571b;
130
+ --maestro-brand-soft: #f8f0e2;
131
+ --maestro-brand-on: #ffffff;
132
+ --maestro-shell: #1b1814;
133
+ --maestro-shell-fg: #f0ece4;
134
+ --maestro-shell-fg-muted: #9c948a;
135
+ --maestro-shell-hover: rgba(255, 255, 255, 0.06);
136
+ --maestro-shell-border: rgba(255, 255, 255, 0.09);
137
+ --maestro-shell-accent: #dca94e;
138
+ --maestro-bg: #f6f5f2;
139
+ --maestro-surface: #ffffff;
140
+ --maestro-surface-2: #faf9f6;
141
+ --maestro-border: #e6e2da;
142
+ --maestro-border-strong: #d2ccc1;
143
+ --maestro-fg: #1e1b17;
144
+ --maestro-fg-muted: #635c52;
145
+ --maestro-fg-subtle: #8e877c;
146
+ --maestro-ok: #2e7d53;
147
+ --maestro-ok-soft: #e8f3ec;
148
+ /* Warning sits next to brass on the hue wheel, so it is pushed to a redder orange — the two must
149
+ never be confused when one means "brand" and the other means "look at this". */
150
+ --maestro-warn: #c2551a;
151
+ --maestro-warn-soft: #faede4;
152
+ --maestro-danger: #bc3838;
153
+ --maestro-danger-soft: #faeaea;
154
+ --maestro-shadow-card: 0 1px 2px rgba(40, 32, 20, 0.07), 0 1px 3px rgba(40, 32, 20, 0.05);
155
+ --maestro-shadow-panel: 0 12px 32px -8px rgba(40, 32, 20, 0.2);
156
+ }
157
+ @media (prefers-color-scheme: dark) {
158
+ [data-maestro-theme='latao']:not([data-maestro-scheme='light']) {
159
+ --maestro-brand: #d9aa55;
160
+ --maestro-brand-hover: #e7bc6c;
161
+ --maestro-brand-soft: rgba(217, 170, 85, 0.15);
162
+ --maestro-brand-on: #17120a;
163
+ --maestro-shell: #100e0b;
164
+ --maestro-shell-fg: #efeae1;
165
+ --maestro-shell-fg-muted: #8f877c;
166
+ --maestro-shell-hover: rgba(255, 255, 255, 0.05);
167
+ --maestro-shell-border: rgba(255, 255, 255, 0.07);
168
+ --maestro-shell-accent: #d9aa55;
169
+ --maestro-bg: #14120f;
170
+ --maestro-surface: #1b1815;
171
+ --maestro-surface-2: #211e1a;
172
+ --maestro-border: #2b2721;
173
+ --maestro-border-strong: #3c372f;
174
+ --maestro-fg: #ede8df;
175
+ --maestro-fg-muted: #a29a8e;
176
+ --maestro-fg-subtle: #7a7367;
177
+ --maestro-ok: #56c089;
178
+ --maestro-ok-soft: rgba(86, 192, 137, 0.14);
179
+ --maestro-warn: #e2843f;
180
+ --maestro-warn-soft: rgba(226, 132, 63, 0.15);
181
+ --maestro-danger: #ee7070;
182
+ --maestro-danger-soft: rgba(238, 112, 112, 0.14);
183
+ --maestro-shadow-card: 0 1px 2px rgba(0, 0, 0, 0.4);
184
+ --maestro-shadow-panel: 0 16px 40px -10px rgba(0, 0, 0, 0.7);
185
+ }
186
+ }
187
+ [data-maestro-theme='latao'][data-maestro-scheme='dark'] {
188
+ --maestro-brand: #d9aa55;
189
+ --maestro-brand-hover: #e7bc6c;
190
+ --maestro-brand-soft: rgba(217, 170, 85, 0.15);
191
+ --maestro-brand-on: #17120a;
192
+ --maestro-shell: #100e0b;
193
+ --maestro-shell-fg: #efeae1;
194
+ --maestro-shell-fg-muted: #8f877c;
195
+ --maestro-shell-hover: rgba(255, 255, 255, 0.05);
196
+ --maestro-shell-border: rgba(255, 255, 255, 0.07);
197
+ --maestro-shell-accent: #d9aa55;
198
+ --maestro-bg: #14120f;
199
+ --maestro-surface: #1b1815;
200
+ --maestro-surface-2: #211e1a;
201
+ --maestro-border: #2b2721;
202
+ --maestro-border-strong: #3c372f;
203
+ --maestro-fg: #ede8df;
204
+ --maestro-fg-muted: #a29a8e;
205
+ --maestro-fg-subtle: #7a7367;
206
+ --maestro-ok: #56c089;
207
+ --maestro-ok-soft: rgba(86, 192, 137, 0.14);
208
+ --maestro-warn: #e2843f;
209
+ --maestro-warn-soft: rgba(226, 132, 63, 0.15);
210
+ --maestro-danger: #ee7070;
211
+ --maestro-danger-soft: rgba(238, 112, 112, 0.14);
212
+ --maestro-shadow-card: 0 1px 2px rgba(0, 0, 0, 0.4);
213
+ --maestro-shadow-panel: 0 16px 40px -10px rgba(0, 0, 0, 0.7);
214
+ }
215
+
216
+ /* ── Tinta & Teal ──────────────────────────────────────────────── */
217
+ [data-maestro-theme='teal'] {
218
+ --maestro-brand: #0e7c74;
219
+ --maestro-brand-hover: #0b6159;
220
+ --maestro-brand-soft: #e4f3f1;
221
+ --maestro-brand-on: #ffffff;
222
+ --maestro-shell: #0e1a1d;
223
+ --maestro-shell-fg: #e6efee;
224
+ --maestro-shell-fg-muted: #8aa09d;
225
+ --maestro-shell-hover: rgba(255, 255, 255, 0.06);
226
+ --maestro-shell-border: rgba(255, 255, 255, 0.09);
227
+ --maestro-shell-accent: #3fbfb2;
228
+ --maestro-bg: #f3f7f6;
229
+ --maestro-surface: #ffffff;
230
+ --maestro-surface-2: #f8fbfa;
231
+ --maestro-border: #dfe8e6;
232
+ --maestro-border-strong: #c7d4d1;
233
+ --maestro-fg: #142020;
234
+ --maestro-fg-muted: #566765;
235
+ --maestro-fg-subtle: #85918f;
236
+ --maestro-ok: #1b7f4f;
237
+ --maestro-ok-soft: #e5f3eb;
238
+ --maestro-warn: #a96a0b;
239
+ --maestro-warn-soft: #fbf1df;
240
+ --maestro-danger: #c13b3b;
241
+ --maestro-danger-soft: #fbeaea;
242
+ --maestro-shadow-card: 0 1px 2px rgba(12, 32, 30, 0.07), 0 1px 3px rgba(12, 32, 30, 0.05);
243
+ --maestro-shadow-panel: 0 12px 32px -8px rgba(12, 32, 30, 0.2);
244
+ }
245
+ @media (prefers-color-scheme: dark) {
246
+ [data-maestro-theme='teal']:not([data-maestro-scheme='light']) {
247
+ --maestro-brand: #35b5a8;
248
+ --maestro-brand-hover: #4fc7ba;
249
+ --maestro-brand-soft: rgba(53, 181, 168, 0.15);
250
+ --maestro-brand-on: #06110f;
251
+ --maestro-shell: #071113;
252
+ --maestro-shell-fg: #e2ecea;
253
+ --maestro-shell-fg-muted: #7b908d;
254
+ --maestro-shell-hover: rgba(255, 255, 255, 0.05);
255
+ --maestro-shell-border: rgba(255, 255, 255, 0.07);
256
+ --maestro-shell-accent: #35b5a8;
257
+ --maestro-bg: #0a1214;
258
+ --maestro-surface: #101a1c;
259
+ --maestro-surface-2: #152023;
260
+ --maestro-border: #1f2c2e;
261
+ --maestro-border-strong: #2e4043;
262
+ --maestro-fg: #e2ecea;
263
+ --maestro-fg-muted: #94a6a3;
264
+ --maestro-fg-subtle: #6b7d7a;
265
+ --maestro-ok: #46c185;
266
+ --maestro-ok-soft: rgba(70, 193, 133, 0.14);
267
+ --maestro-warn: #e0a93b;
268
+ --maestro-warn-soft: rgba(224, 169, 59, 0.14);
269
+ --maestro-danger: #ef7272;
270
+ --maestro-danger-soft: rgba(239, 114, 114, 0.14);
271
+ --maestro-shadow-card: 0 1px 2px rgba(0, 0, 0, 0.4);
272
+ --maestro-shadow-panel: 0 16px 40px -10px rgba(0, 0, 0, 0.7);
273
+ }
274
+ }
275
+ [data-maestro-theme='teal'][data-maestro-scheme='dark'] {
276
+ --maestro-brand: #35b5a8;
277
+ --maestro-brand-hover: #4fc7ba;
278
+ --maestro-brand-soft: rgba(53, 181, 168, 0.15);
279
+ --maestro-brand-on: #06110f;
280
+ --maestro-shell: #071113;
281
+ --maestro-shell-fg: #e2ecea;
282
+ --maestro-shell-fg-muted: #7b908d;
283
+ --maestro-shell-hover: rgba(255, 255, 255, 0.05);
284
+ --maestro-shell-border: rgba(255, 255, 255, 0.07);
285
+ --maestro-shell-accent: #35b5a8;
286
+ --maestro-bg: #0a1214;
287
+ --maestro-surface: #101a1c;
288
+ --maestro-surface-2: #152023;
289
+ --maestro-border: #1f2c2e;
290
+ --maestro-border-strong: #2e4043;
291
+ --maestro-fg: #e2ecea;
292
+ --maestro-fg-muted: #94a6a3;
293
+ --maestro-fg-subtle: #6b7d7a;
294
+ --maestro-ok: #46c185;
295
+ --maestro-ok-soft: rgba(70, 193, 133, 0.14);
296
+ --maestro-warn: #e0a93b;
297
+ --maestro-warn-soft: rgba(224, 169, 59, 0.14);
298
+ --maestro-danger: #ef7272;
299
+ --maestro-danger-soft: rgba(239, 114, 114, 0.14);
300
+ --maestro-shadow-card: 0 1px 2px rgba(0, 0, 0, 0.4);
301
+ --maestro-shadow-panel: 0 16px 40px -10px rgba(0, 0, 0, 0.7);
302
+ }
303
+
304
+ /* ══════════════════════════════════════════════════════════════════
305
+ 2 · Shell
306
+ ══════════════════════════════════════════════════════════════════ */
307
+
308
+ .mst-root,
309
+ .mst-root *,
310
+ .mst-root *::before,
311
+ .mst-root *::after {
312
+ box-sizing: border-box;
313
+ }
314
+
315
+ .mst-root {
316
+ display: flex;
317
+ height: 100%;
318
+ min-height: 0;
319
+ font-family: var(--maestro-font);
320
+ font-size: 13px;
321
+ line-height: 1.5;
322
+ background: var(--maestro-bg);
323
+ color: var(--maestro-fg);
324
+ -webkit-font-smoothing: antialiased;
325
+ }
326
+
327
+ .mst-root :focus-visible {
328
+ outline: 2px solid var(--maestro-brand);
329
+ outline-offset: 2px;
330
+ border-radius: var(--maestro-radius-sm);
331
+ }
332
+
333
+ /* No `color` here on purpose: `.mst-root button` (0,1,1) outranks every component class (0,1,0), so
334
+ setting it would silently repaint `.mst-btn--primary` and friends with the body colour. Each button
335
+ class states its own colour. */
336
+ .mst-root button {
337
+ font: inherit;
338
+ cursor: pointer;
339
+ }
340
+
341
+ /* Boot state — the admin owns the whole box before there is a shell to draw. */
342
+ .mst-boot {
343
+ flex: 1;
344
+ display: grid;
345
+ place-items: center;
346
+ }
347
+
348
+ .mst-sr-only {
349
+ position: absolute;
350
+ width: 1px;
351
+ height: 1px;
352
+ padding: 0;
353
+ margin: -1px;
354
+ overflow: hidden;
355
+ clip-path: inset(50%);
356
+ white-space: nowrap;
357
+ border: 0;
358
+ }
359
+
360
+ .mst-icon {
361
+ flex: none;
362
+ stroke: currentColor;
363
+ fill: none;
364
+ stroke-width: 1.6;
365
+ stroke-linecap: round;
366
+ stroke-linejoin: round;
367
+ }
368
+
369
+ /* ── Sidebar ─────────────────────────────────────────────────── */
370
+ .mst-side {
371
+ width: var(--maestro-sidebar-width);
372
+ flex: none;
373
+ display: flex;
374
+ flex-direction: column;
375
+ min-height: 0;
376
+ background: var(--maestro-shell);
377
+ color: var(--maestro-shell-fg);
378
+ /* In light schemes the dark shell separates itself; in dark ones it sits a few points from the
379
+ content ground, and this hairline is what keeps the two from reading as one surface. */
380
+ border-right: 1px solid var(--maestro-shell-border);
381
+ }
382
+
383
+ .mst-side__brand {
384
+ display: flex;
385
+ align-items: center;
386
+ gap: 9px;
387
+ height: var(--maestro-header-height);
388
+ padding: 0 14px;
389
+ flex: none;
390
+ border-bottom: 1px solid var(--maestro-shell-border);
391
+ }
392
+
393
+ .mst-mark {
394
+ width: 26px;
395
+ height: 26px;
396
+ border-radius: 7px;
397
+ flex: none;
398
+ display: grid;
399
+ place-items: center;
400
+ background: var(--maestro-brand);
401
+ color: var(--maestro-brand-on);
402
+ }
403
+
404
+ .mst-side__title {
405
+ font-weight: 600;
406
+ font-size: 13.5px;
407
+ letter-spacing: 0.04em;
408
+ overflow: hidden;
409
+ text-overflow: ellipsis;
410
+ white-space: nowrap;
411
+ }
412
+
413
+ .mst-side__search {
414
+ margin: 11px 10px 8px;
415
+ flex: none;
416
+ }
417
+
418
+ .mst-side__search input {
419
+ width: 100%;
420
+ font: inherit;
421
+ font-size: 12px;
422
+ color: var(--maestro-shell-fg);
423
+ background: var(--maestro-shell-hover);
424
+ border: 1px solid transparent;
425
+ border-radius: var(--maestro-radius);
426
+ padding: 7px 10px;
427
+ }
428
+ .mst-side__search input::placeholder {
429
+ color: var(--maestro-shell-fg-muted);
430
+ }
431
+ .mst-side__search input:focus {
432
+ outline: none;
433
+ border-color: var(--maestro-shell-accent);
434
+ }
435
+
436
+ .mst-side__nav {
437
+ flex: 1;
438
+ min-height: 0;
439
+ overflow-y: auto;
440
+ overflow-x: hidden;
441
+ padding: 2px 8px 10px;
442
+ scrollbar-width: thin;
443
+ scrollbar-color: var(--maestro-shell-border) transparent;
444
+ }
445
+ .mst-side__nav::-webkit-scrollbar {
446
+ width: 5px;
447
+ }
448
+ .mst-side__nav::-webkit-scrollbar-thumb {
449
+ background: var(--maestro-shell-border);
450
+ border-radius: 4px;
451
+ }
452
+
453
+ .mst-side__section {
454
+ font-family: var(--maestro-font-mono);
455
+ font-size: 9.5px;
456
+ letter-spacing: 0.14em;
457
+ text-transform: uppercase;
458
+ color: var(--maestro-shell-fg-muted);
459
+ opacity: 0.75;
460
+ margin: 14px 0 5px;
461
+ padding: 0 8px;
462
+ }
463
+ .mst-side__section:first-child {
464
+ margin-top: 6px;
465
+ }
466
+
467
+ .mst-navitem {
468
+ position: relative;
469
+ display: flex;
470
+ align-items: center;
471
+ gap: 9px;
472
+ width: 100%;
473
+ padding: 6px 8px;
474
+ border: 0;
475
+ border-radius: 7px;
476
+ background: none;
477
+ text-align: left;
478
+ font-size: 12.5px;
479
+ font-weight: 500;
480
+ color: var(--maestro-shell-fg-muted);
481
+ transition: color 0.14s, background 0.14s;
482
+ }
483
+ .mst-navitem:hover {
484
+ color: var(--maestro-shell-fg);
485
+ background: var(--maestro-shell-hover);
486
+ }
487
+ .mst-navitem[aria-current='true'] {
488
+ color: var(--maestro-shell-fg);
489
+ background: var(--maestro-shell-hover);
490
+ }
491
+ .mst-navitem[aria-current='true']::before {
492
+ content: '';
493
+ position: absolute;
494
+ left: -8px;
495
+ top: 6px;
496
+ bottom: 6px;
497
+ width: 2.5px;
498
+ border-radius: 0 2px 2px 0;
499
+ background: var(--maestro-shell-accent);
500
+ }
501
+ .mst-navitem__label {
502
+ flex: 1;
503
+ min-width: 0;
504
+ overflow: hidden;
505
+ text-overflow: ellipsis;
506
+ white-space: nowrap;
507
+ }
508
+ .mst-navitem__sub {
509
+ font-size: 10.5px;
510
+ font-weight: 400;
511
+ color: var(--maestro-shell-fg-muted);
512
+ opacity: 0.8;
513
+ overflow: hidden;
514
+ text-overflow: ellipsis;
515
+ white-space: nowrap;
516
+ }
517
+ .mst-navitem__count {
518
+ font-family: var(--maestro-font-mono);
519
+ font-size: 10px;
520
+ opacity: 0.6;
521
+ flex: none;
522
+ }
523
+ .mst-navitem--folder {
524
+ color: var(--maestro-shell-fg);
525
+ opacity: 0.85;
526
+ }
527
+ .mst-navitem__chev {
528
+ transition: transform 0.16s;
529
+ }
530
+ .mst-navitem__chev--open {
531
+ transform: rotate(90deg);
532
+ }
533
+ .mst-side__children {
534
+ margin-left: 12px;
535
+ padding-left: 6px;
536
+ border-left: 1px solid var(--maestro-shell-border);
537
+ }
538
+
539
+ .mst-side__foot {
540
+ flex: none;
541
+ border-top: 1px solid var(--maestro-shell-border);
542
+ padding: 9px 14px;
543
+ display: flex;
544
+ align-items: center;
545
+ gap: 8px;
546
+ font-size: 11px;
547
+ color: var(--maestro-shell-fg-muted);
548
+ }
549
+ .mst-pulse {
550
+ width: 6px;
551
+ height: 6px;
552
+ border-radius: 50%;
553
+ flex: none;
554
+ background: var(--maestro-ok);
555
+ }
556
+ .mst-side__empty {
557
+ padding: 8px 10px;
558
+ font-size: 12px;
559
+ color: var(--maestro-shell-fg-muted);
560
+ }
561
+ .mst-root mark {
562
+ background: color-mix(in srgb, var(--maestro-warn) 32%, transparent);
563
+ color: inherit;
564
+ border-radius: 3px;
565
+ }
566
+ .mst-side mark {
567
+ background: color-mix(in srgb, var(--maestro-shell-accent) 34%, transparent);
568
+ color: inherit;
569
+ }
570
+
571
+ /* ── Main column + header ────────────────────────────────────── */
572
+ .mst-main {
573
+ flex: 1;
574
+ min-width: 0;
575
+ display: flex;
576
+ flex-direction: column;
577
+ min-height: 0;
578
+ }
579
+
580
+ .mst-header {
581
+ height: var(--maestro-header-height);
582
+ flex: none;
583
+ display: flex;
584
+ align-items: center;
585
+ gap: 8px;
586
+ padding: 0 16px;
587
+ background: var(--maestro-surface);
588
+ border-bottom: 1px solid var(--maestro-border);
589
+ }
590
+
591
+ .mst-crumbs {
592
+ display: flex;
593
+ align-items: center;
594
+ gap: 7px;
595
+ flex: 1;
596
+ min-width: 0;
597
+ font-size: 12.5px;
598
+ overflow: hidden;
599
+ }
600
+ .mst-crumbs__link {
601
+ display: inline-flex;
602
+ align-items: center;
603
+ gap: 6px;
604
+ border: 0;
605
+ background: none;
606
+ padding: 0;
607
+ color: var(--maestro-fg-subtle);
608
+ white-space: nowrap;
609
+ }
610
+ .mst-crumbs__link:hover {
611
+ color: var(--maestro-fg-muted);
612
+ }
613
+ .mst-crumbs__now {
614
+ display: inline-flex;
615
+ align-items: center;
616
+ gap: 6px;
617
+ font-weight: 600;
618
+ color: var(--maestro-fg);
619
+ min-width: 0;
620
+ overflow: hidden;
621
+ text-overflow: ellipsis;
622
+ white-space: nowrap;
623
+ }
624
+ .mst-crumbs__now .mst-icon {
625
+ color: var(--maestro-brand);
626
+ }
627
+ .mst-crumbs__sep {
628
+ color: var(--maestro-border-strong);
629
+ flex: none;
630
+ }
631
+ .mst-crumbs__item {
632
+ display: inline-flex;
633
+ align-items: center;
634
+ gap: 7px;
635
+ min-width: 0;
636
+ }
637
+ .mst-crumbs__item:last-child {
638
+ overflow: hidden;
639
+ }
640
+
641
+ .mst-kbd {
642
+ font-family: var(--maestro-font-mono);
643
+ font-size: 10px;
644
+ padding: 1px 5px;
645
+ border-radius: 4px;
646
+ background: var(--maestro-surface);
647
+ border: 1px solid var(--maestro-border);
648
+ color: inherit;
649
+ }
650
+
651
+ .mst-searchchip {
652
+ display: inline-flex;
653
+ align-items: center;
654
+ gap: 7px;
655
+ height: 28px;
656
+ padding: 0 9px;
657
+ flex: none;
658
+ border-radius: 7px;
659
+ border: 1px solid var(--maestro-border);
660
+ background: var(--maestro-surface-2);
661
+ color: var(--maestro-fg-subtle);
662
+ font-size: 11.5px;
663
+ transition: color 0.14s, border-color 0.14s;
664
+ }
665
+ .mst-searchchip:hover {
666
+ color: var(--maestro-fg-muted);
667
+ border-color: var(--maestro-border-strong);
668
+ }
669
+
670
+ .mst-iconbtn {
671
+ width: 28px;
672
+ height: 28px;
673
+ flex: none;
674
+ border-radius: 7px;
675
+ border: 1px solid var(--maestro-border);
676
+ background: var(--maestro-surface);
677
+ color: var(--maestro-fg-subtle);
678
+ display: grid;
679
+ place-items: center;
680
+ transition: color 0.14s, border-color 0.14s;
681
+ }
682
+ .mst-iconbtn:hover {
683
+ color: var(--maestro-fg);
684
+ border-color: var(--maestro-border-strong);
685
+ }
686
+ .mst-iconbtn[aria-pressed='true'] {
687
+ color: var(--maestro-brand);
688
+ border-color: var(--maestro-brand);
689
+ background: var(--maestro-brand-soft);
690
+ }
691
+
692
+ .mst-content {
693
+ flex: 1;
694
+ min-height: 0;
695
+ overflow-y: auto;
696
+ overflow-x: hidden;
697
+ padding: 20px;
698
+ }
699
+
700
+ /* ══════════════════════════════════════════════════════════════════
701
+ 3 · Primitives
702
+ ══════════════════════════════════════════════════════════════════ */
703
+
704
+ .mst-btn {
705
+ display: inline-flex;
706
+ align-items: center;
707
+ justify-content: center;
708
+ gap: 6px;
709
+ height: 32px;
710
+ padding: 0 12px;
711
+ border-radius: var(--maestro-radius);
712
+ border: 1px solid transparent;
713
+ font-size: 12.5px;
714
+ font-weight: 500;
715
+ white-space: nowrap;
716
+ transition: background 0.14s, border-color 0.14s, color 0.14s;
717
+ }
718
+ .mst-btn:disabled {
719
+ opacity: 0.5;
720
+ cursor: not-allowed;
721
+ }
722
+ .mst-btn--primary {
723
+ background: var(--maestro-brand);
724
+ color: var(--maestro-brand-on);
725
+ }
726
+ .mst-btn--primary:not(:disabled):hover {
727
+ background: var(--maestro-brand-hover);
728
+ }
729
+ .mst-btn--secondary {
730
+ background: var(--maestro-surface);
731
+ color: var(--maestro-fg-muted);
732
+ border-color: var(--maestro-border);
733
+ }
734
+ .mst-btn--secondary:not(:disabled):hover {
735
+ color: var(--maestro-fg);
736
+ border-color: var(--maestro-border-strong);
737
+ }
738
+ .mst-btn--danger {
739
+ background: var(--maestro-danger);
740
+ color: #fff;
741
+ }
742
+ .mst-btn--danger:not(:disabled):hover {
743
+ filter: brightness(1.08);
744
+ }
745
+ .mst-btn--ghost {
746
+ background: none;
747
+ color: var(--maestro-fg-muted);
748
+ }
749
+ .mst-btn--ghost:not(:disabled):hover {
750
+ background: var(--maestro-surface-2);
751
+ color: var(--maestro-fg);
752
+ }
753
+
754
+ .mst-badge {
755
+ display: inline-flex;
756
+ align-items: center;
757
+ gap: 5px;
758
+ padding: 2px 8px;
759
+ border-radius: 20px;
760
+ font-size: 11px;
761
+ font-weight: 500;
762
+ white-space: nowrap;
763
+ background: var(--maestro-surface-2);
764
+ color: var(--maestro-fg-muted);
765
+ border: 1px solid var(--maestro-border);
766
+ }
767
+ .mst-badge--brand {
768
+ background: var(--maestro-brand-soft);
769
+ color: var(--maestro-brand);
770
+ border-color: transparent;
771
+ }
772
+ .mst-badge--ok {
773
+ background: var(--maestro-ok-soft);
774
+ color: var(--maestro-ok);
775
+ border-color: transparent;
776
+ }
777
+ .mst-badge--warn {
778
+ background: var(--maestro-warn-soft);
779
+ color: var(--maestro-warn);
780
+ border-color: transparent;
781
+ }
782
+ .mst-badge--danger {
783
+ background: var(--maestro-danger-soft);
784
+ color: var(--maestro-danger);
785
+ border-color: transparent;
786
+ }
787
+ .mst-badge--dot::before {
788
+ content: '';
789
+ width: 5px;
790
+ height: 5px;
791
+ border-radius: 50%;
792
+ background: currentColor;
793
+ flex: none;
794
+ }
795
+
796
+ .mst-card {
797
+ background: var(--maestro-surface);
798
+ border: 1px solid var(--maestro-border);
799
+ border-radius: var(--maestro-radius-lg);
800
+ box-shadow: var(--maestro-shadow-card);
801
+ }
802
+
803
+ .mst-input,
804
+ .mst-select,
805
+ .mst-textarea {
806
+ display: block;
807
+ width: 100%;
808
+ font: inherit;
809
+ font-size: 12.5px;
810
+ color: var(--maestro-fg);
811
+ background: var(--maestro-surface);
812
+ border: 1px solid var(--maestro-border);
813
+ border-radius: var(--maestro-radius);
814
+ padding: 7px 10px;
815
+ transition: border-color 0.14s;
816
+ }
817
+ .mst-textarea {
818
+ min-height: 84px;
819
+ resize: vertical;
820
+ }
821
+ .mst-input::placeholder,
822
+ .mst-textarea::placeholder {
823
+ color: var(--maestro-fg-subtle);
824
+ }
825
+ .mst-input:focus,
826
+ .mst-select:focus,
827
+ .mst-textarea:focus {
828
+ outline: none;
829
+ border-color: var(--maestro-brand);
830
+ box-shadow: 0 0 0 3px var(--maestro-brand-soft);
831
+ }
832
+ .mst-input:disabled,
833
+ .mst-select:disabled,
834
+ .mst-textarea:disabled {
835
+ background: var(--maestro-surface-2);
836
+ color: var(--maestro-fg-subtle);
837
+ cursor: not-allowed;
838
+ }
839
+ .mst-input--inline {
840
+ width: auto;
841
+ min-width: 200px;
842
+ }
843
+ .mst-checkbox {
844
+ width: 15px;
845
+ height: 15px;
846
+ accent-color: var(--maestro-brand);
847
+ }
848
+
849
+ .mst-mono {
850
+ font-family: var(--maestro-font-mono);
851
+ font-size: 11.5px;
852
+ }
853
+ .mst-muted {
854
+ color: var(--maestro-fg-muted);
855
+ }
856
+ .mst-subtle {
857
+ color: var(--maestro-fg-subtle);
858
+ }
859
+ .mst-nums {
860
+ font-variant-numeric: tabular-nums;
861
+ }
862
+
863
+ .mst-spinner {
864
+ display: inline-flex;
865
+ align-items: center;
866
+ gap: 9px;
867
+ font-size: 12.5px;
868
+ color: var(--maestro-fg-muted);
869
+ }
870
+ .mst-spinner::before {
871
+ content: '';
872
+ width: 15px;
873
+ height: 15px;
874
+ border-radius: 50%;
875
+ border: 2px solid var(--maestro-border-strong);
876
+ border-top-color: var(--maestro-brand);
877
+ animation: mst-spin 0.7s linear infinite;
878
+ }
879
+ @keyframes mst-spin {
880
+ to {
881
+ transform: rotate(360deg);
882
+ }
883
+ }
884
+
885
+ .mst-empty {
886
+ border: 1px dashed var(--maestro-border-strong);
887
+ border-radius: var(--maestro-radius-lg);
888
+ padding: 36px 20px;
889
+ text-align: center;
890
+ }
891
+ .mst-empty__title {
892
+ font-size: 13px;
893
+ font-weight: 600;
894
+ color: var(--maestro-fg);
895
+ margin: 0;
896
+ }
897
+ .mst-empty__hint {
898
+ margin: 5px 0 0;
899
+ font-size: 12.5px;
900
+ color: var(--maestro-fg-muted);
901
+ }
902
+
903
+ .mst-error {
904
+ display: flex;
905
+ align-items: flex-start;
906
+ gap: 9px;
907
+ border: 1px solid var(--maestro-danger);
908
+ background: var(--maestro-danger-soft);
909
+ color: var(--maestro-danger);
910
+ border-radius: var(--maestro-radius);
911
+ padding: 10px 12px;
912
+ font-size: 12.5px;
913
+ }
914
+
915
+ .mst-toast {
916
+ position: fixed;
917
+ bottom: 18px;
918
+ right: 18px;
919
+ z-index: 60;
920
+ background: var(--maestro-shell);
921
+ color: var(--maestro-shell-fg);
922
+ border-radius: var(--maestro-radius);
923
+ padding: 8px 14px;
924
+ font-size: 12.5px;
925
+ box-shadow: var(--maestro-shadow-panel);
926
+ }
927
+
928
+ /* ── Floating menu ───────────────────────────────────────────── */
929
+ .mst-menu {
930
+ position: fixed;
931
+ z-index: 70;
932
+ min-width: 184px;
933
+ padding: 5px;
934
+ background: var(--maestro-surface);
935
+ border: 1px solid var(--maestro-border);
936
+ border-radius: var(--maestro-radius);
937
+ box-shadow: var(--maestro-shadow-panel);
938
+ }
939
+ .mst-menu__item {
940
+ display: flex;
941
+ align-items: center;
942
+ gap: 9px;
943
+ width: 100%;
944
+ padding: 6px 9px;
945
+ border: 0;
946
+ border-radius: var(--maestro-radius-sm);
947
+ background: none;
948
+ text-align: left;
949
+ font-size: 12.5px;
950
+ color: var(--maestro-fg-muted);
951
+ }
952
+ .mst-menu__item:hover {
953
+ background: var(--maestro-surface-2);
954
+ color: var(--maestro-fg);
955
+ }
956
+ .mst-menu__item--danger {
957
+ color: var(--maestro-danger);
958
+ }
959
+ .mst-menu__item--danger:hover {
960
+ background: var(--maestro-danger-soft);
961
+ color: var(--maestro-danger);
962
+ }
963
+ .mst-menu__sep {
964
+ height: 1px;
965
+ margin: 4px 0;
966
+ background: var(--maestro-border);
967
+ }
968
+
969
+ /* ══════════════════════════════════════════════════════════════════
970
+ 4 · Page furniture
971
+ ══════════════════════════════════════════════════════════════════ */
972
+
973
+ .mst-page {
974
+ display: flex;
975
+ flex-direction: column;
976
+ gap: 18px;
977
+ min-height: 0;
978
+ }
979
+ .mst-page--fill {
980
+ height: 100%;
981
+ }
982
+
983
+ .mst-pagehead {
984
+ display: flex;
985
+ align-items: flex-end;
986
+ justify-content: space-between;
987
+ gap: 14px;
988
+ flex-wrap: wrap;
989
+ }
990
+ .mst-pagehead__title {
991
+ margin: 0;
992
+ font-size: 17px;
993
+ font-weight: 600;
994
+ letter-spacing: -0.01em;
995
+ color: var(--maestro-fg);
996
+ }
997
+ .mst-pagehead__meta {
998
+ margin: 3px 0 0;
999
+ font-size: 12.5px;
1000
+ color: var(--maestro-fg-muted);
1001
+ display: flex;
1002
+ align-items: center;
1003
+ gap: 7px;
1004
+ flex-wrap: wrap;
1005
+ }
1006
+ .mst-pagehead__actions {
1007
+ display: flex;
1008
+ align-items: center;
1009
+ gap: 8px;
1010
+ flex-wrap: wrap;
1011
+ }
1012
+
1013
+ .mst-grouplabel {
1014
+ font-family: var(--maestro-font-mono);
1015
+ font-size: 10px;
1016
+ letter-spacing: 0.14em;
1017
+ text-transform: uppercase;
1018
+ color: var(--maestro-fg-subtle);
1019
+ margin: 0 0 9px;
1020
+ }
1021
+
1022
+ .mst-backlink {
1023
+ display: inline-flex;
1024
+ align-items: center;
1025
+ gap: 5px;
1026
+ border: 0;
1027
+ background: none;
1028
+ padding: 0;
1029
+ font-size: 12px;
1030
+ color: var(--maestro-brand);
1031
+ }
1032
+ .mst-backlink:hover {
1033
+ text-decoration: underline;
1034
+ }
1035
+
1036
+ /* ── Hub ─────────────────────────────────────────────────────── */
1037
+ .mst-hub {
1038
+ display: flex;
1039
+ flex-direction: column;
1040
+ gap: 22px;
1041
+ }
1042
+ .mst-cards {
1043
+ display: grid;
1044
+ grid-template-columns: repeat(auto-fill, minmax(224px, 1fr));
1045
+ gap: 10px;
1046
+ }
1047
+ .mst-ecard {
1048
+ display: flex;
1049
+ gap: 11px;
1050
+ min-width: 0;
1051
+ padding: 13px;
1052
+ text-align: left;
1053
+ border: 1px solid var(--maestro-border);
1054
+ border-radius: var(--maestro-radius-lg);
1055
+ background: var(--maestro-surface);
1056
+ color: var(--maestro-fg);
1057
+ box-shadow: var(--maestro-shadow-card);
1058
+ transition: border-color 0.16s, transform 0.16s, box-shadow 0.16s;
1059
+ }
1060
+ .mst-ecard:hover {
1061
+ border-color: var(--maestro-brand);
1062
+ transform: translateY(-2px);
1063
+ box-shadow: var(--maestro-shadow-panel);
1064
+ }
1065
+ .mst-ecard__tile {
1066
+ width: 32px;
1067
+ height: 32px;
1068
+ flex: none;
1069
+ border-radius: 9px;
1070
+ display: grid;
1071
+ place-items: center;
1072
+ background: var(--maestro-brand-soft);
1073
+ color: var(--maestro-brand);
1074
+ }
1075
+ .mst-ecard__body {
1076
+ flex: 1;
1077
+ min-width: 0;
1078
+ }
1079
+ .mst-ecard__name {
1080
+ display: block;
1081
+ margin: 0;
1082
+ font-size: 13px;
1083
+ font-weight: 600;
1084
+ color: var(--maestro-fg);
1085
+ overflow: hidden;
1086
+ text-overflow: ellipsis;
1087
+ white-space: nowrap;
1088
+ }
1089
+ .mst-ecard__desc {
1090
+ display: block;
1091
+ margin: 3px 0 0;
1092
+ font-size: 11.5px;
1093
+ color: var(--maestro-fg-muted);
1094
+ overflow: hidden;
1095
+ text-overflow: ellipsis;
1096
+ white-space: nowrap;
1097
+ }
1098
+ .mst-caps {
1099
+ display: flex;
1100
+ flex-wrap: wrap;
1101
+ gap: 4px;
1102
+ margin-top: 8px;
1103
+ }
1104
+ .mst-cap {
1105
+ font-family: var(--maestro-font-mono);
1106
+ font-size: 9px;
1107
+ letter-spacing: 0.06em;
1108
+ padding: 1px 5px;
1109
+ border-radius: 4px;
1110
+ background: var(--maestro-surface-2);
1111
+ border: 1px solid var(--maestro-border);
1112
+ color: var(--maestro-fg-subtle);
1113
+ }
1114
+ .mst-cap[data-on='true'] {
1115
+ background: var(--maestro-brand-soft);
1116
+ border-color: transparent;
1117
+ color: var(--maestro-brand);
1118
+ }
1119
+ .mst-source {
1120
+ display: flex;
1121
+ align-items: center;
1122
+ gap: 4px;
1123
+ min-width: 0;
1124
+ margin-top: 7px;
1125
+ font-family: var(--maestro-font-mono);
1126
+ font-size: 9.5px;
1127
+ color: var(--maestro-fg-subtle);
1128
+ }
1129
+ .mst-source span {
1130
+ overflow: hidden;
1131
+ text-overflow: ellipsis;
1132
+ white-space: nowrap;
1133
+ }
1134
+
1135
+ /* ── Filters ─────────────────────────────────────────────────── */
1136
+ .mst-chips {
1137
+ display: flex;
1138
+ align-items: center;
1139
+ gap: 7px;
1140
+ flex-wrap: wrap;
1141
+ }
1142
+ .mst-chip {
1143
+ display: inline-flex;
1144
+ align-items: center;
1145
+ gap: 6px;
1146
+ padding: 3px 9px;
1147
+ border: 0;
1148
+ border-radius: 20px;
1149
+ font-size: 11.5px;
1150
+ font-weight: 500;
1151
+ background: var(--maestro-brand-soft);
1152
+ color: var(--maestro-brand);
1153
+ }
1154
+ .mst-chip:hover {
1155
+ filter: brightness(0.96);
1156
+ }
1157
+
1158
+ /* ── Table ───────────────────────────────────────────────────── */
1159
+ .mst-tablewrap {
1160
+ display: flex;
1161
+ flex-direction: column;
1162
+ min-height: 0;
1163
+ overflow: hidden;
1164
+ }
1165
+ .mst-tablescroll {
1166
+ flex: 1;
1167
+ min-height: 0;
1168
+ overflow-y: auto;
1169
+ /* Deliberate: the admin never scrolls sideways. Columns are fixed-width and truncate; when an
1170
+ entity has more fields than fit, the column picker decides which ones are on screen. */
1171
+ overflow-x: hidden;
1172
+ }
1173
+ .mst-table {
1174
+ width: 100%;
1175
+ border-collapse: collapse;
1176
+ table-layout: fixed;
1177
+ }
1178
+ .mst-table th {
1179
+ position: sticky;
1180
+ top: 0;
1181
+ z-index: 1;
1182
+ text-align: left;
1183
+ padding: 8px 12px;
1184
+ background: var(--maestro-surface-2);
1185
+ border-bottom: 1px solid var(--maestro-border);
1186
+ font-family: var(--maestro-font-mono);
1187
+ font-size: 9.5px;
1188
+ font-weight: 500;
1189
+ letter-spacing: 0.1em;
1190
+ text-transform: uppercase;
1191
+ color: var(--maestro-fg-subtle);
1192
+ white-space: nowrap;
1193
+ }
1194
+ .mst-table th[aria-sort]:not([aria-sort='none']) {
1195
+ color: var(--maestro-brand);
1196
+ }
1197
+ .mst-th__button {
1198
+ display: inline-flex;
1199
+ align-items: center;
1200
+ gap: 4px;
1201
+ border: 0;
1202
+ background: none;
1203
+ padding: 0;
1204
+ font: inherit;
1205
+ letter-spacing: inherit;
1206
+ text-transform: inherit;
1207
+ color: inherit;
1208
+ max-width: 100%;
1209
+ }
1210
+ .mst-th__button:hover {
1211
+ color: var(--maestro-fg-muted);
1212
+ }
1213
+ .mst-th__label {
1214
+ overflow: hidden;
1215
+ text-overflow: ellipsis;
1216
+ }
1217
+ .mst-table td {
1218
+ padding: var(--maestro-row-py) 12px;
1219
+ border-bottom: 1px solid var(--maestro-border);
1220
+ font-size: 12.5px;
1221
+ color: var(--maestro-fg-muted);
1222
+ vertical-align: middle;
1223
+ overflow: hidden;
1224
+ text-overflow: ellipsis;
1225
+ white-space: nowrap;
1226
+ transition: padding 0.16s;
1227
+ }
1228
+ .mst-table tbody tr:last-child td {
1229
+ border-bottom: 0;
1230
+ }
1231
+ .mst-table tbody tr:hover td {
1232
+ background: var(--maestro-surface-2);
1233
+ }
1234
+ .mst-table td.mst-td--actions {
1235
+ overflow: visible;
1236
+ text-align: right;
1237
+ padding-left: 0;
1238
+ padding-right: 6px;
1239
+ }
1240
+ .mst-table__cell {
1241
+ cursor: pointer;
1242
+ }
1243
+
1244
+ .mst-pagination {
1245
+ display: flex;
1246
+ align-items: center;
1247
+ gap: 8px;
1248
+ flex-wrap: wrap;
1249
+ padding: 8px 12px;
1250
+ border-top: 1px solid var(--maestro-border);
1251
+ font-size: 11.5px;
1252
+ color: var(--maestro-fg-subtle);
1253
+ }
1254
+ .mst-pagination__nums {
1255
+ margin-left: auto;
1256
+ display: flex;
1257
+ align-items: center;
1258
+ gap: 3px;
1259
+ }
1260
+ .mst-pagination__nums button {
1261
+ min-width: 26px;
1262
+ height: 26px;
1263
+ padding: 0 5px;
1264
+ border: 0;
1265
+ border-radius: var(--maestro-radius-sm);
1266
+ background: none;
1267
+ font-size: 11.5px;
1268
+ font-variant-numeric: tabular-nums;
1269
+ color: var(--maestro-fg-subtle);
1270
+ }
1271
+ .mst-pagination__nums button:not(:disabled):hover {
1272
+ background: var(--maestro-surface-2);
1273
+ color: var(--maestro-fg);
1274
+ }
1275
+ .mst-pagination__nums button:disabled {
1276
+ opacity: 0.35;
1277
+ cursor: not-allowed;
1278
+ }
1279
+ .mst-pagination__nums button[aria-current='true'] {
1280
+ background: var(--maestro-brand);
1281
+ color: var(--maestro-brand-on);
1282
+ font-weight: 600;
1283
+ }
1284
+
1285
+ /* ── Detail ──────────────────────────────────────────────────── */
1286
+ .mst-fields {
1287
+ margin: 0;
1288
+ border: 1px solid var(--maestro-border);
1289
+ border-radius: var(--maestro-radius-lg);
1290
+ background: var(--maestro-surface);
1291
+ overflow: hidden;
1292
+ box-shadow: var(--maestro-shadow-card);
1293
+ }
1294
+ .mst-fields__row {
1295
+ display: grid;
1296
+ grid-template-columns: minmax(120px, 1fr) minmax(0, 2.4fr);
1297
+ gap: 16px;
1298
+ padding: 10px 14px;
1299
+ border-bottom: 1px solid var(--maestro-border);
1300
+ }
1301
+ .mst-fields__row:last-child {
1302
+ border-bottom: 0;
1303
+ }
1304
+ .mst-fields__key {
1305
+ font-size: 12px;
1306
+ font-weight: 500;
1307
+ color: var(--maestro-fg-subtle);
1308
+ min-width: 0;
1309
+ overflow-wrap: break-word;
1310
+ }
1311
+ .mst-fields__value {
1312
+ margin: 0;
1313
+ display: flex;
1314
+ align-items: center;
1315
+ gap: 9px;
1316
+ min-width: 0;
1317
+ font-size: 12.5px;
1318
+ color: var(--maestro-fg);
1319
+ overflow-wrap: break-word;
1320
+ }
1321
+
1322
+ /* ── Form ────────────────────────────────────────────────────── */
1323
+ .mst-form {
1324
+ display: flex;
1325
+ flex-direction: column;
1326
+ gap: 14px;
1327
+ padding: 18px;
1328
+ }
1329
+ .mst-field {
1330
+ display: flex;
1331
+ flex-direction: column;
1332
+ gap: 5px;
1333
+ min-width: 0;
1334
+ }
1335
+ .mst-label {
1336
+ font-size: 12px;
1337
+ font-weight: 500;
1338
+ color: var(--maestro-fg-muted);
1339
+ }
1340
+ .mst-label__req {
1341
+ color: var(--maestro-danger);
1342
+ margin-left: 2px;
1343
+ }
1344
+ .mst-help {
1345
+ margin: 0;
1346
+ font-size: 11.5px;
1347
+ color: var(--maestro-fg-subtle);
1348
+ }
1349
+ .mst-form__foot {
1350
+ display: flex;
1351
+ justify-content: flex-end;
1352
+ gap: 8px;
1353
+ padding-top: 14px;
1354
+ border-top: 1px solid var(--maestro-border);
1355
+ }
1356
+ .mst-inline {
1357
+ display: flex;
1358
+ align-items: center;
1359
+ gap: 8px;
1360
+ flex-wrap: wrap;
1361
+ }
1362
+
1363
+ /* ── JSON / object values ────────────────────────────────────── */
1364
+ .mst-code {
1365
+ display: block;
1366
+ font-family: var(--maestro-font-mono);
1367
+ font-size: 11.5px;
1368
+ background: var(--maestro-surface-2);
1369
+ border: 1px solid var(--maestro-border);
1370
+ border-radius: var(--maestro-radius-sm);
1371
+ padding: 3px 6px;
1372
+ color: var(--maestro-fg-muted);
1373
+ overflow: hidden;
1374
+ text-overflow: ellipsis;
1375
+ white-space: nowrap;
1376
+ }
1377
+ .mst-code--block {
1378
+ white-space: pre-wrap;
1379
+ overflow-wrap: anywhere;
1380
+ padding: 9px 11px;
1381
+ }
1382
+ .mst-json {
1383
+ border: 1px solid var(--maestro-border);
1384
+ border-radius: var(--maestro-radius);
1385
+ background: var(--maestro-surface);
1386
+ overflow: hidden;
1387
+ }
1388
+ .mst-json__head {
1389
+ display: flex;
1390
+ align-items: center;
1391
+ justify-content: flex-end;
1392
+ gap: 4px;
1393
+ padding: 4px 6px;
1394
+ background: var(--maestro-surface-2);
1395
+ border-bottom: 1px solid var(--maestro-border);
1396
+ }
1397
+ .mst-json__tab {
1398
+ border: 1px solid transparent;
1399
+ border-radius: var(--maestro-radius-sm);
1400
+ background: none;
1401
+ padding: 2px 9px;
1402
+ font-size: 11.5px;
1403
+ font-weight: 500;
1404
+ color: var(--maestro-fg-subtle);
1405
+ }
1406
+ .mst-json__tab:not(:disabled):hover {
1407
+ color: var(--maestro-fg-muted);
1408
+ }
1409
+ .mst-json__tab--active {
1410
+ background: var(--maestro-surface);
1411
+ border-color: var(--maestro-border-strong);
1412
+ color: var(--maestro-fg);
1413
+ }
1414
+ .mst-json__tab:disabled {
1415
+ opacity: 0.45;
1416
+ cursor: not-allowed;
1417
+ }
1418
+ .mst-json__body {
1419
+ padding: 4px;
1420
+ }
1421
+ .mst-json__nest {
1422
+ border: 1px solid var(--maestro-border);
1423
+ border-radius: var(--maestro-radius-sm);
1424
+ }
1425
+ .mst-json__rows {
1426
+ display: flex;
1427
+ flex-direction: column;
1428
+ }
1429
+ .mst-json__row {
1430
+ display: flex;
1431
+ flex-wrap: wrap;
1432
+ align-items: flex-start;
1433
+ gap: 6px 12px;
1434
+ min-width: 0;
1435
+ padding: 6px 10px;
1436
+ border-top: 1px solid var(--maestro-border);
1437
+ }
1438
+ .mst-json__rows > :first-child .mst-json__row,
1439
+ .mst-json__rows > .mst-json__row:first-child {
1440
+ border-top: 0;
1441
+ }
1442
+ .mst-json__key {
1443
+ width: 140px;
1444
+ flex: none;
1445
+ padding-top: 7px;
1446
+ font-size: 11.5px;
1447
+ font-weight: 500;
1448
+ color: var(--maestro-fg-subtle);
1449
+ overflow: hidden;
1450
+ text-overflow: ellipsis;
1451
+ white-space: nowrap;
1452
+ }
1453
+ .mst-json__index {
1454
+ width: 28px;
1455
+ flex: none;
1456
+ padding-top: 7px;
1457
+ text-align: right;
1458
+ font-family: var(--maestro-font-mono);
1459
+ font-size: 11px;
1460
+ color: var(--maestro-fg-subtle);
1461
+ }
1462
+ .mst-json__field {
1463
+ flex: 1 1 260px;
1464
+ min-width: 0;
1465
+ }
1466
+ .mst-json__remove {
1467
+ flex: none;
1468
+ border: 0;
1469
+ background: none;
1470
+ padding-top: 7px;
1471
+ font-size: 11.5px;
1472
+ color: var(--maestro-fg-subtle);
1473
+ }
1474
+ .mst-json__remove:hover {
1475
+ color: var(--maestro-danger);
1476
+ }
1477
+ .mst-json__empty {
1478
+ margin: 0;
1479
+ padding: 8px 10px;
1480
+ font-size: 11.5px;
1481
+ color: var(--maestro-fg-subtle);
1482
+ }
1483
+ .mst-json__addrow {
1484
+ padding: 6px 10px;
1485
+ border-top: 1px solid var(--maestro-border);
1486
+ }
1487
+ .mst-input--invalid,
1488
+ .mst-input--invalid:focus {
1489
+ border-color: var(--maestro-warn);
1490
+ box-shadow: 0 0 0 3px var(--maestro-warn-soft);
1491
+ }
1492
+ .mst-help--warn {
1493
+ color: var(--maestro-warn);
1494
+ }
1495
+
1496
+ .mst-objectvalue {
1497
+ display: flex;
1498
+ flex-direction: column;
1499
+ min-width: 0;
1500
+ width: 100%;
1501
+ margin: 0;
1502
+ }
1503
+ .mst-objectvalue--root {
1504
+ border: 1px solid var(--maestro-border);
1505
+ border-radius: var(--maestro-radius-sm);
1506
+ background: var(--maestro-surface-2);
1507
+ }
1508
+ .mst-objectvalue--nested {
1509
+ border-left: 2px solid var(--maestro-border);
1510
+ padding-left: 8px;
1511
+ }
1512
+ .mst-objectvalue__row {
1513
+ display: flex;
1514
+ flex-wrap: wrap;
1515
+ align-items: flex-start;
1516
+ gap: 3px 12px;
1517
+ min-width: 0;
1518
+ padding: 5px 10px;
1519
+ border-top: 1px solid var(--maestro-border);
1520
+ font-size: 12px;
1521
+ }
1522
+ .mst-objectvalue__row:first-child {
1523
+ border-top: 0;
1524
+ }
1525
+ .mst-objectvalue__key {
1526
+ width: 132px;
1527
+ flex: none;
1528
+ font-family: var(--maestro-font-mono);
1529
+ font-size: 11px;
1530
+ color: var(--maestro-fg-subtle);
1531
+ overflow: hidden;
1532
+ text-overflow: ellipsis;
1533
+ white-space: nowrap;
1534
+ }
1535
+ .mst-objectvalue__val {
1536
+ flex: 1 1 220px;
1537
+ min-width: 0;
1538
+ margin: 0;
1539
+ }
1540
+
1541
+ .mst-relation {
1542
+ display: inline-flex;
1543
+ align-items: center;
1544
+ gap: 5px;
1545
+ max-width: 100%;
1546
+ min-width: 0;
1547
+ padding: 1px 7px;
1548
+ border: 1px solid var(--maestro-border);
1549
+ border-radius: var(--maestro-radius-sm);
1550
+ background: var(--maestro-surface-2);
1551
+ font-size: 11.5px;
1552
+ font-weight: 500;
1553
+ vertical-align: middle;
1554
+ }
1555
+ .mst-relation__label {
1556
+ overflow: hidden;
1557
+ text-overflow: ellipsis;
1558
+ white-space: nowrap;
1559
+ }
1560
+
1561
+ /* ── Command palette ─────────────────────────────────────────── */
1562
+ .mst-overlay {
1563
+ position: fixed;
1564
+ inset: 0;
1565
+ z-index: 80;
1566
+ display: flex;
1567
+ justify-content: center;
1568
+ align-items: flex-start;
1569
+ padding: 12vh 16px 16px;
1570
+ background: color-mix(in srgb, var(--maestro-shell) 46%, transparent);
1571
+ }
1572
+ .mst-palette {
1573
+ width: min(540px, 100%);
1574
+ max-height: 62vh;
1575
+ display: flex;
1576
+ flex-direction: column;
1577
+ background: var(--maestro-surface);
1578
+ border: 1px solid var(--maestro-border);
1579
+ border-radius: var(--maestro-radius-lg);
1580
+ box-shadow: var(--maestro-shadow-panel);
1581
+ overflow: hidden;
1582
+ }
1583
+ .mst-palette__input {
1584
+ display: flex;
1585
+ align-items: center;
1586
+ gap: 9px;
1587
+ padding: 11px 14px;
1588
+ border-bottom: 1px solid var(--maestro-border);
1589
+ color: var(--maestro-fg-subtle);
1590
+ flex: none;
1591
+ }
1592
+ .mst-palette__input input {
1593
+ flex: 1;
1594
+ min-width: 0;
1595
+ border: 0;
1596
+ outline: none;
1597
+ background: none;
1598
+ font: inherit;
1599
+ font-size: 14px;
1600
+ color: var(--maestro-fg);
1601
+ }
1602
+ .mst-palette__input input::placeholder {
1603
+ color: var(--maestro-fg-subtle);
1604
+ }
1605
+ /* The dialog itself is the focus indicator here: it opens focused, the caret is visible, and a ring
1606
+ around a borderless field inside a modal only adds a box. */
1607
+ .mst-palette__input input:focus-visible {
1608
+ outline: none;
1609
+ }
1610
+ .mst-palette__list {
1611
+ flex: 1;
1612
+ min-height: 0;
1613
+ overflow-y: auto;
1614
+ overflow-x: hidden;
1615
+ padding: 6px;
1616
+ }
1617
+ .mst-palette__section {
1618
+ font-family: var(--maestro-font-mono);
1619
+ font-size: 9.5px;
1620
+ letter-spacing: 0.12em;
1621
+ text-transform: uppercase;
1622
+ color: var(--maestro-fg-subtle);
1623
+ margin: 8px 10px 4px;
1624
+ }
1625
+ .mst-palette__row {
1626
+ display: flex;
1627
+ align-items: center;
1628
+ gap: 9px;
1629
+ width: 100%;
1630
+ padding: 7px 10px;
1631
+ border: 0;
1632
+ border-radius: var(--maestro-radius);
1633
+ background: none;
1634
+ text-align: left;
1635
+ font-size: 12.5px;
1636
+ color: var(--maestro-fg-muted);
1637
+ }
1638
+ .mst-palette__row[data-active='true'] {
1639
+ background: var(--maestro-brand-soft);
1640
+ color: var(--maestro-brand);
1641
+ font-weight: 500;
1642
+ }
1643
+ .mst-palette__label {
1644
+ flex: 1;
1645
+ min-width: 0;
1646
+ overflow: hidden;
1647
+ text-overflow: ellipsis;
1648
+ white-space: nowrap;
1649
+ }
1650
+ .mst-palette__hint {
1651
+ flex: none;
1652
+ font-family: var(--maestro-font-mono);
1653
+ font-size: 10px;
1654
+ opacity: 0.75;
1655
+ }
1656
+ .mst-palette__empty {
1657
+ padding: 22px;
1658
+ text-align: center;
1659
+ font-size: 12.5px;
1660
+ color: var(--maestro-fg-subtle);
1661
+ }
1662
+
1663
+ /* ── Theme picker ────────────────────────────────────────────── */
1664
+ .mst-swatch {
1665
+ width: 12px;
1666
+ height: 12px;
1667
+ flex: none;
1668
+ border-radius: 3px;
1669
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12);
1670
+ }
1671
+
1672
+ /* ══════════════════════════════════════════════════════════════════
1673
+ 5 · Responsive — the shell shrinks, the content never scrolls sideways
1674
+ ══════════════════════════════════════════════════════════════════ */
1675
+
1676
+ @media (max-width: 900px) {
1677
+ .mst-root {
1678
+ --maestro-sidebar-width: 60px;
1679
+ }
1680
+ .mst-side__title,
1681
+ .mst-side__search,
1682
+ .mst-side__section,
1683
+ .mst-navitem__label,
1684
+ .mst-navitem__sub,
1685
+ .mst-navitem__count,
1686
+ .mst-navitem__chev,
1687
+ .mst-side__foot span,
1688
+ .mst-searchchip span {
1689
+ display: none;
1690
+ }
1691
+ .mst-side__brand,
1692
+ .mst-navitem,
1693
+ .mst-side__foot {
1694
+ justify-content: center;
1695
+ padding-left: 6px;
1696
+ padding-right: 6px;
1697
+ }
1698
+ .mst-side__children {
1699
+ margin-left: 0;
1700
+ padding-left: 0;
1701
+ border-left: 0;
1702
+ }
1703
+ .mst-content {
1704
+ padding: 14px;
1705
+ }
1706
+ }
1707
+
1708
+ @media (prefers-reduced-motion: reduce) {
1709
+ .mst-root *,
1710
+ .mst-root *::before,
1711
+ .mst-root *::after {
1712
+ animation-duration: 0.01ms !important;
1713
+ animation-iteration-count: 1 !important;
1714
+ transition-duration: 0.01ms !important;
1715
+ }
1716
+ }