@ornery/ui-grid-react 0.1.7 → 0.1.8

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.
@@ -1,4 +1,9 @@
1
+ import React from 'react';
1
2
  import { type Root } from 'react-dom/client';
2
3
  import { type UiGridProps } from './UiGrid';
3
4
  export declare function mountUiGrid(container: Element | DocumentFragment, props: UiGridProps): Root;
5
+ /** Re-render an already-mounted UiGrid root with new props (for live data updates). */
6
+ export declare function updateUiGrid(root: Root, props: UiGridProps): void;
7
+ /** Create a styled <span> React node — usable from non-TSX contexts (e.g. Angular). */
8
+ export declare function styledCell(text: string, color: string, extraStyle?: React.CSSProperties): React.ReactNode;
4
9
  //# sourceMappingURL=mountUiGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mountUiGrid.d.ts","sourceRoot":"","sources":["../src/mountUiGrid.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,wBAAgB,WAAW,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAI3F"}
1
+ {"version":3,"file":"mountUiGrid.d.ts","sourceRoot":"","sources":["../src/mountUiGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,wBAAgB,WAAW,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAI3F;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAEjE;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,GAC/B,KAAK,CAAC,SAAS,CAMjB"}
@@ -0,0 +1,720 @@
1
+ .ui-grid-host {
2
+ --ui-grid-border-color: var(--app-ui-grid-border-color, #d4d4d8);
3
+ --ui-grid-header-background: var(--app-ui-grid-header-background, #f3f4f6);
4
+ --ui-grid-row-odd: var(--app-ui-grid-row-odd, #fcfcfd);
5
+ --ui-grid-row-even: var(--app-ui-grid-row-even, #f7f7f8);
6
+ --ui-grid-row-hover: var(--app-ui-grid-row-hover, #eef4ff);
7
+ --ui-grid-cell-color: var(--app-ui-grid-cell-color, #111827);
8
+ --ui-grid-muted-color: var(--app-ui-grid-muted-color, #6b7280);
9
+ --ui-grid-surface: var(--app-ui-grid-surface, #ffffff);
10
+ --ui-grid-radius: var(--app-ui-grid-radius, 4px);
11
+ --ui-grid-shadow: var(--app-ui-grid-shadow, 0 10px 24px rgba(15, 23, 42, 0.08));
12
+ --ui-grid-header-weight: var(--app-ui-grid-header-weight, 700);
13
+ --ui-grid-accent: var(--app-ui-grid-accent, #2563eb);
14
+ --ui-grid-group-background: var(--app-ui-grid-group-background, #eceff3);
15
+ --ui-grid-status-active-bg: var(--app-ui-grid-status-active-bg, rgba(22, 163, 74, 0.14));
16
+ --ui-grid-status-active-color: var(--app-ui-grid-status-active-color, #166534);
17
+ --ui-grid-status-expansion-bg: var(--app-ui-grid-status-expansion-bg, rgba(37, 99, 235, 0.14));
18
+ --ui-grid-status-expansion-color: var(--app-ui-grid-status-expansion-color, #1d4ed8);
19
+ --ui-grid-status-enterprise-bg: var(--app-ui-grid-status-enterprise-bg, rgba(15, 118, 110, 0.14));
20
+ --ui-grid-status-enterprise-color: var(--app-ui-grid-status-enterprise-color, #115e59);
21
+ --ui-grid-status-pilot-bg: var(--app-ui-grid-status-pilot-bg, rgba(234, 88, 12, 0.14));
22
+ --ui-grid-status-pilot-color: var(--app-ui-grid-status-pilot-color, #c2410c);
23
+ --ui-grid-pin-menu-open-z-index: var(--app-ui-grid-pin-menu-open-z-index, 8);
24
+ --ui-grid-pin-menu-z-index: var(--app-ui-grid-pin-menu-z-index, 20);
25
+ --ui-grid-pin-menu-gap: var(--app-ui-grid-pin-menu-gap, 0.25rem);
26
+ --ui-grid-pin-menu-padding: var(--app-ui-grid-pin-menu-padding, 0.25rem);
27
+ --ui-grid-pin-menu-radius: var(--app-ui-grid-pin-menu-radius, 999px);
28
+ --ui-grid-pin-menu-shadow: var(
29
+ --app-ui-grid-pin-menu-shadow,
30
+ 0 10px 24px color-mix(in srgb, var(--ui-grid-cell-color) 10%, transparent)
31
+ );
32
+ --ui-grid-pin-menu-action-size: var(--app-ui-grid-pin-menu-action-size, 1.75rem);
33
+ --ui-grid-pin-control-collapsed-size: var(--app-ui-grid-pin-control-collapsed-size, 1px);
34
+ --ui-grid-pin-control-transition-duration: var(
35
+ --app-ui-grid-pin-control-transition-duration,
36
+ 160ms
37
+ );
38
+ --ui-grid-pin-control-transition-easing: var(
39
+ --app-ui-grid-pin-control-transition-easing,
40
+ cubic-bezier(0.22, 1, 0.36, 1)
41
+ );
42
+ --ui-grid-pin-menu-scale-closed: var(--app-ui-grid-pin-menu-scale-closed, 0.72);
43
+ display: block;
44
+ color: var(--ui-grid-cell-color);
45
+ }
46
+
47
+ .ui-grid-host,
48
+ .ui-grid-host *,
49
+ .ui-grid-host *::before,
50
+ .ui-grid-host *::after {
51
+ box-sizing: border-box;
52
+ }
53
+
54
+ .grid-shell {
55
+ display: grid;
56
+ gap: 1.5rem;
57
+ }
58
+
59
+ .grid-hero {
60
+ display: flex;
61
+ justify-content: space-between;
62
+ flex-wrap: wrap;
63
+ gap: 1.5rem;
64
+ align-items: flex-start;
65
+ padding: 1rem 0;
66
+ color: var(--ui-grid-cell-color);
67
+ }
68
+
69
+ .grid-hero > :first-child {
70
+ flex: 1 1 28rem;
71
+ min-width: min(100%, 20rem);
72
+ }
73
+
74
+ .ui-grid-host .eyebrow {
75
+ margin: 0 0 0.5rem;
76
+ text-transform: uppercase;
77
+ letter-spacing: 0.18em;
78
+ font-size: 0.72rem;
79
+ color: var(--ui-grid-muted-color);
80
+ }
81
+
82
+ .ui-grid-host h1 {
83
+ margin: 0;
84
+ font-size: clamp(1.4rem, 2vw, 2rem);
85
+ line-height: 1.1;
86
+ }
87
+
88
+ .deck {
89
+ max-width: 56ch;
90
+ margin: 0.75rem 0 0;
91
+ color: var(--ui-grid-muted-color);
92
+ }
93
+
94
+ .hero-actions {
95
+ display: flex;
96
+ gap: 1rem;
97
+ align-items: center;
98
+ flex-wrap: wrap;
99
+ flex: 0 1 auto;
100
+ margin-left: auto;
101
+ justify-content: flex-end;
102
+ }
103
+
104
+ .action {
105
+ border: 0;
106
+ border-radius: 999px;
107
+ padding: 0.8rem 1.1rem;
108
+ font: inherit;
109
+ cursor: pointer;
110
+ }
111
+
112
+ .action-secondary {
113
+ background: var(--ui-grid-surface);
114
+ color: var(--ui-grid-cell-color);
115
+ border: 1px solid var(--ui-grid-border-color);
116
+ }
117
+
118
+ .stats-card {
119
+ min-width: 8rem;
120
+ padding: 0.85rem 1rem;
121
+ border-radius: var(--ui-grid-radius);
122
+ background: var(--ui-grid-surface);
123
+ border: 1px solid var(--ui-grid-border-color);
124
+ display: grid;
125
+ }
126
+
127
+ .stats-card span {
128
+ font-size: 1.9rem;
129
+ font-weight: 700;
130
+ }
131
+
132
+ .stats-card small {
133
+ color: var(--ui-grid-muted-color);
134
+ }
135
+
136
+ .grid-frame {
137
+ border-radius: var(--ui-grid-radius);
138
+ background: var(--ui-grid-surface);
139
+ border: 1px solid var(--ui-grid-border-color);
140
+ box-shadow: var(--ui-grid-shadow);
141
+ overflow: hidden;
142
+ }
143
+
144
+ .metrics-strip {
145
+ display: grid;
146
+ grid-template-columns: repeat(4, minmax(0, 1fr));
147
+ gap: 1rem;
148
+ }
149
+
150
+ .metrics-strip article {
151
+ padding: 1rem 1.1rem;
152
+ border-radius: var(--ui-grid-radius);
153
+ background: var(--ui-grid-surface);
154
+ border: 1px solid var(--ui-grid-border-color);
155
+ display: grid;
156
+ }
157
+
158
+ .metrics-strip strong {
159
+ font-size: 1.3rem;
160
+ }
161
+
162
+ .metrics-strip span {
163
+ color: var(--ui-grid-muted-color);
164
+ }
165
+
166
+ .grid-toolbar {
167
+ display: flex;
168
+ justify-content: space-between;
169
+ gap: 1rem;
170
+ padding: 1rem 1.25rem;
171
+ align-items: center;
172
+ background: var(--ui-grid-header-background);
173
+ border-bottom: 1px solid var(--ui-grid-border-color);
174
+ }
175
+
176
+ .grid-toolbar div {
177
+ display: flex;
178
+ gap: 0.4rem;
179
+ align-items: baseline;
180
+ }
181
+
182
+ .grid-toolbar p {
183
+ margin: 0;
184
+ color: var(--ui-grid-muted-color);
185
+ }
186
+
187
+ .grid-table {
188
+ display: grid;
189
+ min-height: 0;
190
+ width: 100%;
191
+ min-width: 0;
192
+ overflow-x: auto;
193
+ overflow-y: hidden;
194
+ }
195
+
196
+ .header-grid,
197
+ .filter-grid,
198
+ .body-grid {
199
+ display: grid;
200
+ width: max-content;
201
+ min-width: 100%;
202
+ }
203
+
204
+ .header-grid,
205
+ .filter-grid {
206
+ position: sticky;
207
+ z-index: 3;
208
+ }
209
+
210
+ .header-grid {
211
+ top: 0;
212
+ }
213
+
214
+ .filter-grid {
215
+ top: var(--ui-grid-header-sticky-top, 0px);
216
+ }
217
+
218
+ .header-cell,
219
+ .filter-cell,
220
+ .body-cell,
221
+ .group-row {
222
+ min-width: 0;
223
+ }
224
+
225
+ .header-cell {
226
+ display: grid;
227
+ grid-template-columns: minmax(0, 1fr) auto;
228
+ gap: 0.75rem;
229
+ padding: 0.85rem 1rem;
230
+ border-bottom: 1px solid var(--ui-grid-border-color);
231
+ background: var(--ui-grid-header-background);
232
+ font-weight: var(--ui-grid-header-weight);
233
+ align-items: center;
234
+ }
235
+
236
+ .header-cell[draggable='true'] {
237
+ cursor: grab;
238
+ }
239
+
240
+ .header-cell.is-dragging {
241
+ opacity: 0.6;
242
+ }
243
+
244
+ .header-cell.is-drag-target {
245
+ background: color-mix(in srgb, var(--ui-grid-accent) 9%, var(--ui-grid-header-background));
246
+ border: 1px dashed color-mix(in srgb, var(--ui-grid-accent) 45%, var(--ui-grid-border-color));
247
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ui-grid-accent) 18%, transparent);
248
+ }
249
+
250
+ .header-cell.is-active {
251
+ background: color-mix(in srgb, var(--ui-grid-accent) 8%, var(--ui-grid-header-background));
252
+ }
253
+
254
+ .header-cell.is-pin-menu-open {
255
+ z-index: var(--ui-grid-pin-menu-open-z-index);
256
+ }
257
+
258
+ .header-label {
259
+ min-width: 0;
260
+ display: block;
261
+ line-height: 1.25;
262
+ white-space: nowrap;
263
+ overflow: hidden;
264
+ text-overflow: clip;
265
+ hyphens: none;
266
+ }
267
+
268
+ .header-actions {
269
+ display: inline-flex;
270
+ align-items: center;
271
+ gap: 0.4rem;
272
+ justify-self: end;
273
+ flex-wrap: nowrap;
274
+ flex-shrink: 0;
275
+ }
276
+
277
+ .header-action,
278
+ .chip-action {
279
+ display: inline-flex;
280
+ align-items: center;
281
+ justify-content: center;
282
+ width: 2rem;
283
+ height: 2rem;
284
+ border: 0;
285
+ background: var(--ui-grid-surface);
286
+ padding: 0;
287
+ font: inherit;
288
+ border-radius: 999px;
289
+ cursor: pointer;
290
+ }
291
+
292
+ .header-action-disabled {
293
+ cursor: default;
294
+ }
295
+
296
+ .header-action svg,
297
+ .chip-action svg {
298
+ width: 1rem;
299
+ height: 1rem;
300
+ fill: currentColor;
301
+ }
302
+
303
+ .header-action {
304
+ color: var(--ui-grid-muted-color);
305
+ border: 1px solid var(--ui-grid-border-color);
306
+ }
307
+
308
+ .header-cell.is-active .header-action {
309
+ color: var(--ui-grid-accent);
310
+ border-color: color-mix(in srgb, var(--ui-grid-accent) 35%, var(--ui-grid-border-color));
311
+ }
312
+
313
+ .chip-action {
314
+ border: 1px solid var(--ui-grid-border-color);
315
+ color: var(--ui-grid-muted-color);
316
+ }
317
+
318
+ .chip-action-active {
319
+ background: color-mix(in srgb, var(--ui-grid-accent) 12%, var(--ui-grid-surface));
320
+ border-color: color-mix(in srgb, var(--ui-grid-accent) 35%, var(--ui-grid-border-color));
321
+ color: var(--ui-grid-accent);
322
+ }
323
+
324
+ .pin-control {
325
+ position: relative;
326
+ display: inline-grid;
327
+ place-items: center;
328
+ justify-items: center;
329
+ min-width: 2rem;
330
+ overflow: hidden;
331
+ }
332
+
333
+ .pin-trigger {
334
+ grid-area: 1 / 1;
335
+ transform-origin: center;
336
+ transition:
337
+ width var(--ui-grid-pin-control-transition-duration)
338
+ var(--ui-grid-pin-control-transition-easing),
339
+ height var(--ui-grid-pin-control-transition-duration)
340
+ var(--ui-grid-pin-control-transition-easing),
341
+ opacity var(--ui-grid-pin-control-transition-duration)
342
+ var(--ui-grid-pin-control-transition-easing),
343
+ transform var(--ui-grid-pin-control-transition-duration)
344
+ var(--ui-grid-pin-control-transition-easing),
345
+ border-color var(--ui-grid-pin-control-transition-duration)
346
+ var(--ui-grid-pin-control-transition-easing),
347
+ background-color var(--ui-grid-pin-control-transition-duration)
348
+ var(--ui-grid-pin-control-transition-easing),
349
+ color var(--ui-grid-pin-control-transition-duration)
350
+ var(--ui-grid-pin-control-transition-easing);
351
+ }
352
+
353
+ .pin-menu {
354
+ grid-area: 1 / 1;
355
+ z-index: var(--ui-grid-pin-menu-z-index);
356
+ display: grid;
357
+ grid-auto-rows: var(--ui-grid-pin-menu-action-size);
358
+ gap: var(--ui-grid-pin-menu-gap);
359
+ padding: var(--ui-grid-pin-menu-padding);
360
+ border: 1px solid var(--ui-grid-border-color);
361
+ border-radius: var(--ui-grid-pin-menu-radius);
362
+ background: var(--ui-grid-surface);
363
+ box-shadow: var(--ui-grid-pin-menu-shadow);
364
+ justify-items: center;
365
+ align-items: center;
366
+ width: 2rem;
367
+ max-height: var(--ui-grid-pin-control-collapsed-size);
368
+ opacity: 0;
369
+ pointer-events: none;
370
+ transform: scale(var(--ui-grid-pin-menu-scale-closed));
371
+ transform-origin: center;
372
+ transition:
373
+ max-height var(--ui-grid-pin-control-transition-duration)
374
+ var(--ui-grid-pin-control-transition-easing),
375
+ opacity var(--ui-grid-pin-control-transition-duration)
376
+ var(--ui-grid-pin-control-transition-easing),
377
+ transform var(--ui-grid-pin-control-transition-duration)
378
+ var(--ui-grid-pin-control-transition-easing),
379
+ padding var(--ui-grid-pin-control-transition-duration)
380
+ var(--ui-grid-pin-control-transition-easing),
381
+ border-color var(--ui-grid-pin-control-transition-duration)
382
+ var(--ui-grid-pin-control-transition-easing),
383
+ box-shadow var(--ui-grid-pin-control-transition-duration)
384
+ var(--ui-grid-pin-control-transition-easing);
385
+ }
386
+
387
+ .pin-control-open {
388
+ align-items: start;
389
+ }
390
+
391
+ .pin-control-open .pin-trigger {
392
+ width: var(--ui-grid-pin-control-collapsed-size);
393
+ height: var(--ui-grid-pin-control-collapsed-size);
394
+ opacity: 0;
395
+ transform: scale(0.72);
396
+ pointer-events: none;
397
+ }
398
+
399
+ .pin-control-open .pin-menu {
400
+ max-height: calc(
401
+ (var(--ui-grid-pin-menu-action-size) * 2) + var(--ui-grid-pin-menu-gap) +
402
+ (var(--ui-grid-pin-menu-padding) * 2)
403
+ );
404
+ opacity: 1;
405
+ pointer-events: auto;
406
+ transform: scale(1);
407
+ }
408
+
409
+ .pin-menu-action {
410
+ display: inline-flex;
411
+ align-items: center;
412
+ justify-content: center;
413
+ width: var(--ui-grid-pin-menu-action-size);
414
+ height: var(--ui-grid-pin-menu-action-size);
415
+ border: 0;
416
+ border-radius: 999px;
417
+ background: transparent;
418
+ color: var(--ui-grid-cell-color);
419
+ cursor: pointer;
420
+ }
421
+
422
+ .pin-menu-action:hover,
423
+ .pin-menu-action:focus-visible {
424
+ outline: 0;
425
+ background: color-mix(in srgb, var(--ui-grid-accent) 12%, var(--ui-grid-surface));
426
+ color: var(--ui-grid-accent);
427
+ }
428
+
429
+ .pin-menu-action svg {
430
+ width: 1rem;
431
+ height: 1rem;
432
+ fill: currentColor;
433
+ }
434
+
435
+ .filter-cell {
436
+ padding: 0.75rem 1rem 1rem;
437
+ border-bottom: 1px solid var(--ui-grid-border-color);
438
+ background: var(--ui-grid-header-background);
439
+ overflow: hidden;
440
+ }
441
+
442
+ .filter-cell input {
443
+ display: block;
444
+ width: 100%;
445
+ min-width: 0;
446
+ max-width: 100%;
447
+ min-inline-size: 0;
448
+ max-inline-size: 100%;
449
+ border: 1px solid var(--ui-grid-border-color);
450
+ border-radius: var(--ui-grid-radius);
451
+ background: var(--ui-grid-surface);
452
+ padding: 0.55rem 0.7rem;
453
+ font: inherit;
454
+ }
455
+
456
+ .filter-cell input:focus {
457
+ outline: 2px solid color-mix(in srgb, var(--ui-grid-accent) 18%, transparent);
458
+ border-color: var(--ui-grid-accent);
459
+ }
460
+
461
+ .body-cell {
462
+ padding: 0.95rem 1rem;
463
+ border-bottom: 1px solid var(--ui-grid-border-color);
464
+ color: var(--ui-grid-cell-color);
465
+ background: var(--ui-grid-row-even);
466
+ outline: 0;
467
+ }
468
+
469
+ .body-cell.body-cell-odd {
470
+ background: var(--ui-grid-row-odd);
471
+ }
472
+
473
+ .cell-shell {
474
+ display: flex;
475
+ align-items: center;
476
+ gap: 0.55rem;
477
+ min-width: 0;
478
+ }
479
+
480
+ .cell-value {
481
+ min-width: 0;
482
+ flex: 1 1 auto;
483
+ }
484
+
485
+ .row-toggle {
486
+ border: 1px solid var(--ui-grid-border-color);
487
+ background: var(--ui-grid-surface);
488
+ color: var(--ui-grid-cell-color);
489
+ width: 1.55rem;
490
+ height: 1.55rem;
491
+ border-radius: 999px;
492
+ display: inline-flex;
493
+ align-items: center;
494
+ justify-content: center;
495
+ cursor: pointer;
496
+ flex: 0 0 auto;
497
+ padding: 0;
498
+ font: inherit;
499
+ }
500
+
501
+ .toggle-icon {
502
+ width: 1.1rem;
503
+ height: 1.1rem;
504
+ fill: currentColor;
505
+ pointer-events: none;
506
+ }
507
+
508
+ .group-disclosure-icon {
509
+ width: 0.9rem;
510
+ height: 0.9rem;
511
+ }
512
+
513
+ .pagination-icon {
514
+ width: 1.2rem;
515
+ height: 1.2rem;
516
+ fill: currentColor;
517
+ }
518
+
519
+ .expandable-row {
520
+ padding: 1rem 1.25rem;
521
+ border-bottom: 1px solid var(--ui-grid-border-color);
522
+ background: color-mix(in srgb, var(--ui-grid-accent) 4%, var(--ui-grid-surface));
523
+ }
524
+
525
+ .body-grid > .body-cell:hover {
526
+ background: var(--ui-grid-row-hover);
527
+ }
528
+
529
+ .body-cell.cell-focused,
530
+ .body-grid > .body-cell.cell-focused {
531
+ background: color-mix(in srgb, var(--ui-grid-accent) 10%, var(--ui-grid-surface));
532
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ui-grid-accent) 28%, transparent);
533
+ }
534
+
535
+ .body-cell.cell-editing,
536
+ .body-grid > .body-cell.cell-editing {
537
+ background: color-mix(in srgb, var(--ui-grid-accent) 7%, var(--ui-grid-surface));
538
+ }
539
+
540
+ .cell-editor {
541
+ display: block;
542
+ width: 100%;
543
+ min-width: 0;
544
+ max-width: 100%;
545
+ border: 1px solid color-mix(in srgb, var(--ui-grid-accent) 45%, var(--ui-grid-border-color));
546
+ border-radius: calc(var(--ui-grid-radius) - 1px);
547
+ background: var(--ui-grid-surface);
548
+ color: var(--ui-grid-cell-color);
549
+ padding: 0.45rem 0.55rem;
550
+ font: inherit;
551
+ }
552
+
553
+ .cell-editor:focus {
554
+ outline: 2px solid color-mix(in srgb, var(--ui-grid-accent) 18%, transparent);
555
+ }
556
+
557
+ .group-row {
558
+ display: flex;
559
+ align-items: center;
560
+ gap: 0.9rem;
561
+ border: 0;
562
+ width: 100%;
563
+ padding: 0.9rem 1rem;
564
+ background: var(--ui-grid-group-background);
565
+ border-bottom: 1px solid var(--ui-grid-border-color);
566
+ color: var(--ui-grid-cell-color);
567
+ cursor: pointer;
568
+ text-align: left;
569
+ font: inherit;
570
+ }
571
+
572
+ .group-row span,
573
+ .group-row small {
574
+ color: var(--ui-grid-muted-color);
575
+ }
576
+
577
+ .grid-viewport {
578
+ width: 100%;
579
+ }
580
+
581
+ .grid-virtual-spacer {
582
+ position: relative;
583
+ width: max-content;
584
+ min-width: 100%;
585
+ }
586
+
587
+ .grid-virtual-body {
588
+ position: absolute;
589
+ left: 0;
590
+ }
591
+
592
+ .body-cell.align-center {
593
+ text-align: center;
594
+ }
595
+
596
+ .body-cell.align-end {
597
+ text-align: right;
598
+ }
599
+
600
+ .empty-state {
601
+ display: grid;
602
+ place-items: center;
603
+ gap: 0.35rem;
604
+ min-height: 16rem;
605
+ text-align: center;
606
+ padding: 2rem;
607
+ color: var(--ui-grid-muted-color);
608
+ background: var(--ui-grid-surface);
609
+ }
610
+
611
+ .empty-state p,
612
+ .empty-state strong {
613
+ margin: 0;
614
+ }
615
+
616
+ .pagination-bar {
617
+ display: flex;
618
+ align-items: center;
619
+ justify-content: space-between;
620
+ gap: 1rem;
621
+ padding: 0.85rem 1.25rem;
622
+ border-top: 1px solid var(--ui-grid-border-color);
623
+ background: var(--ui-grid-header-background);
624
+ }
625
+
626
+ .pagination-bar p {
627
+ margin: 0;
628
+ color: var(--ui-grid-muted-color);
629
+ }
630
+
631
+ .pagination-controls {
632
+ display: flex;
633
+ align-items: center;
634
+ gap: 0.75rem;
635
+ flex-wrap: wrap;
636
+ }
637
+
638
+ .pagination-button {
639
+ padding: 0.45rem 0.8rem;
640
+ }
641
+
642
+ .pagination-size {
643
+ display: inline-flex;
644
+ align-items: center;
645
+ gap: 0.4rem;
646
+ }
647
+
648
+ .pagination-size select {
649
+ border: 1px solid var(--ui-grid-border-color);
650
+ border-radius: var(--ui-grid-radius);
651
+ background: var(--ui-grid-surface);
652
+ padding: 0.35rem 0.55rem;
653
+ font: inherit;
654
+ }
655
+
656
+ .sr-only {
657
+ position: absolute;
658
+ width: 1px;
659
+ height: 1px;
660
+ padding: 0;
661
+ margin: -1px;
662
+ overflow: hidden;
663
+ clip: rect(0, 0, 0, 0);
664
+ white-space: nowrap;
665
+ border: 0;
666
+ }
667
+
668
+ .status-pill {
669
+ display: inline-flex;
670
+ align-items: center;
671
+ justify-content: center;
672
+ padding: 0.2rem 0.55rem;
673
+ border-radius: 999px;
674
+ background: rgba(15, 23, 42, 0.07);
675
+ color: var(--ui-grid-cell-color);
676
+ font-size: 0.85rem;
677
+ font-weight: 700;
678
+ }
679
+
680
+ .status-pill-enterprise {
681
+ background: var(--ui-grid-status-enterprise-bg);
682
+ color: var(--ui-grid-status-enterprise-color);
683
+ }
684
+
685
+ .status-pill-active {
686
+ background: var(--ui-grid-status-active-bg);
687
+ color: var(--ui-grid-status-active-color);
688
+ }
689
+
690
+ .status-pill-expansion {
691
+ background: var(--ui-grid-status-expansion-bg);
692
+ color: var(--ui-grid-status-expansion-color);
693
+ }
694
+
695
+ .status-pill-pilot {
696
+ background: var(--ui-grid-status-pilot-bg);
697
+ color: var(--ui-grid-status-pilot-color);
698
+ }
699
+
700
+ @media (max-width: 900px) {
701
+ .metrics-strip {
702
+ grid-template-columns: repeat(2, minmax(0, 1fr));
703
+ }
704
+
705
+ .grid-hero,
706
+ .grid-toolbar {
707
+ grid-template-columns: 1fr;
708
+ display: grid;
709
+ }
710
+
711
+ .hero-actions {
712
+ justify-content: space-between;
713
+ }
714
+ }
715
+
716
+ @media (max-width: 640px) {
717
+ .metrics-strip {
718
+ grid-template-columns: 1fr;
719
+ }
720
+ }