neiki-table 1.0.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.
@@ -0,0 +1,636 @@
1
+ /*!
2
+ * Neiki's Table 1.0.0 — styles
3
+ * MIT License
4
+ */
5
+
6
+ :host {
7
+ --ntbl-radius: 14px;
8
+ --ntbl-radius-inner: 10px;
9
+ --ntbl-radius-control: 9px;
10
+ --ntbl-font-size: 14px;
11
+ --ntbl-transition: 140ms ease;
12
+ --ntbl-shadow: 0 1px 2px rgba(16, 24, 40, 0.04), 0 6px 20px rgba(16, 24, 40, 0.08);
13
+ --ntbl-row-height: 44px;
14
+
15
+ /* Density (overridden by [density] below) */
16
+ --ntbl-cell-py: 9px;
17
+ --ntbl-cell-px: 13px;
18
+ --ntbl-head-py: 10px;
19
+
20
+ --ntbl-bg: #ffffff;
21
+ --ntbl-color: #1f2328;
22
+ --ntbl-muted: #6b7280;
23
+ --ntbl-border: rgba(16, 24, 40, 0.09);
24
+ --ntbl-border-strong: rgba(16, 24, 40, 0.14);
25
+ --ntbl-header-bg: #f7f8fa;
26
+ --ntbl-row-hover: #f3f6fc;
27
+ --ntbl-row-selected: #e9f0ff;
28
+ --ntbl-stripe: rgba(16, 24, 40, 0.018);
29
+ --ntbl-accent: #2563eb;
30
+ --ntbl-accent-hover: #1d4ed8;
31
+ --ntbl-accent-color: #ffffff;
32
+ --ntbl-accent-soft: rgba(37, 99, 235, 0.10);
33
+ --ntbl-focus-ring: rgba(37, 99, 235, 0.45);
34
+ --ntbl-input-bg: #ffffff;
35
+ --ntbl-input-border: rgba(16, 24, 40, 0.16);
36
+ --ntbl-badge-true-bg: #dcfce7;
37
+ --ntbl-badge-true-color: #166534;
38
+ --ntbl-badge-false-bg: #f3f4f6;
39
+ --ntbl-badge-false-color: #6b7280;
40
+ --ntbl-skeleton: linear-gradient(90deg, rgba(16,24,40,0.05) 25%, rgba(16,24,40,0.11) 37%, rgba(16,24,40,0.05) 63%);
41
+
42
+ display: block;
43
+ font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
44
+ font-size: var(--ntbl-font-size);
45
+ color: var(--ntbl-color);
46
+ line-height: 1.45;
47
+ -webkit-text-size-adjust: 100%;
48
+ }
49
+
50
+ :host([hidden]) {
51
+ display: none !important;
52
+ }
53
+
54
+ :host([resolved-theme="dark"]) {
55
+ --ntbl-shadow: 0 1px 2px rgba(0, 0, 0, 0.30), 0 8px 26px rgba(0, 0, 0, 0.40);
56
+ --ntbl-bg: #1a1d23;
57
+ --ntbl-color: #eef0f3;
58
+ --ntbl-muted: #9aa3af;
59
+ --ntbl-border: rgba(255, 255, 255, 0.09);
60
+ --ntbl-border-strong: rgba(255, 255, 255, 0.16);
61
+ --ntbl-header-bg: #21252c;
62
+ --ntbl-row-hover: #262b33;
63
+ --ntbl-row-selected: #22314f;
64
+ --ntbl-stripe: rgba(255, 255, 255, 0.02);
65
+ --ntbl-accent: #3b82f6;
66
+ --ntbl-accent-hover: #60a5fa;
67
+ --ntbl-accent-soft: rgba(59, 130, 246, 0.16);
68
+ --ntbl-focus-ring: rgba(96, 165, 250, 0.55);
69
+ --ntbl-input-bg: #21252c;
70
+ --ntbl-input-border: rgba(255, 255, 255, 0.16);
71
+ --ntbl-badge-true-bg: rgba(34, 197, 94, 0.18);
72
+ --ntbl-badge-true-color: #4ade80;
73
+ --ntbl-badge-false-bg: rgba(255, 255, 255, 0.08);
74
+ --ntbl-badge-false-color: #9aa3af;
75
+ --ntbl-skeleton: linear-gradient(90deg, rgba(255,255,255,0.04) 25%, rgba(255,255,255,0.09) 37%, rgba(255,255,255,0.04) 63%);
76
+ }
77
+
78
+ /* Density */
79
+ :host([density="compact"]) {
80
+ --ntbl-cell-py: 5px;
81
+ --ntbl-cell-px: 10px;
82
+ --ntbl-head-py: 7px;
83
+ --ntbl-font-size: 13px;
84
+ }
85
+ :host([density="spacious"]) {
86
+ --ntbl-cell-py: 14px;
87
+ --ntbl-cell-px: 16px;
88
+ --ntbl-head-py: 14px;
89
+ }
90
+
91
+ * {
92
+ box-sizing: border-box;
93
+ }
94
+
95
+ .ntbl-root {
96
+ position: relative;
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: 12px;
100
+ background: var(--ntbl-bg);
101
+ border: 1px solid var(--ntbl-border);
102
+ border-radius: var(--ntbl-radius);
103
+ box-shadow: var(--ntbl-shadow);
104
+ padding: 14px;
105
+ }
106
+
107
+ /* Toolbar */
108
+ .ntbl-toolbar {
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: space-between;
112
+ gap: 12px;
113
+ flex-wrap: wrap;
114
+ }
115
+
116
+ .ntbl-search-wrap {
117
+ position: relative;
118
+ flex: 1 1 240px;
119
+ min-width: 160px;
120
+ display: flex;
121
+ align-items: center;
122
+ }
123
+ .ntbl-search-wrap[hidden] {
124
+ display: none;
125
+ }
126
+ .ntbl-search-wrap::before {
127
+ content: "";
128
+ position: absolute;
129
+ left: 11px;
130
+ width: 16px;
131
+ height: 16px;
132
+ pointer-events: none;
133
+ opacity: 0.5;
134
+ background: currentColor;
135
+ -webkit-mask: no-repeat center / contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E");
136
+ mask: no-repeat center / contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E");
137
+ }
138
+
139
+ .ntbl-search {
140
+ width: 100%;
141
+ padding: 9px 12px 9px 34px;
142
+ font: inherit;
143
+ color: var(--ntbl-color);
144
+ background: var(--ntbl-input-bg);
145
+ border: 1px solid var(--ntbl-input-border);
146
+ border-radius: var(--ntbl-radius-control);
147
+ outline: none;
148
+ transition: border-color var(--ntbl-transition), box-shadow var(--ntbl-transition);
149
+ }
150
+ .ntbl-search::placeholder {
151
+ color: var(--ntbl-muted);
152
+ }
153
+ .ntbl-search:hover {
154
+ border-color: var(--ntbl-border-strong);
155
+ }
156
+ .ntbl-search:focus-visible {
157
+ border-color: var(--ntbl-accent);
158
+ box-shadow: 0 0 0 3px var(--ntbl-focus-ring);
159
+ }
160
+
161
+ .ntbl-toolbar-actions {
162
+ display: flex;
163
+ align-items: center;
164
+ gap: 8px;
165
+ flex-wrap: wrap;
166
+ }
167
+
168
+ .ntbl-selected-count {
169
+ font-size: 0.85em;
170
+ font-weight: 600;
171
+ color: var(--ntbl-accent);
172
+ background: var(--ntbl-accent-soft);
173
+ padding: 4px 10px;
174
+ border-radius: 999px;
175
+ }
176
+ .ntbl-selected-count[hidden] {
177
+ display: none;
178
+ }
179
+
180
+ .ntbl-btn,
181
+ .ntbl-toolbar-actions button,
182
+ .ntbl-pagination button {
183
+ font: inherit;
184
+ display: inline-flex;
185
+ align-items: center;
186
+ gap: 6px;
187
+ padding: 8px 13px;
188
+ border: 1px solid var(--ntbl-input-border);
189
+ border-radius: var(--ntbl-radius-control);
190
+ background: var(--ntbl-input-bg);
191
+ color: var(--ntbl-color);
192
+ cursor: pointer;
193
+ white-space: nowrap;
194
+ transition: background var(--ntbl-transition), border-color var(--ntbl-transition), color var(--ntbl-transition), opacity var(--ntbl-transition), transform var(--ntbl-transition);
195
+ }
196
+ .ntbl-toolbar-actions button[hidden] {
197
+ display: none;
198
+ }
199
+ .ntbl-toolbar-actions button:hover,
200
+ .ntbl-pagination button:not(:disabled):hover {
201
+ background: var(--ntbl-row-hover);
202
+ border-color: var(--ntbl-border-strong);
203
+ }
204
+ .ntbl-toolbar-actions button:active,
205
+ .ntbl-pagination button:not(:disabled):active {
206
+ transform: translateY(1px);
207
+ }
208
+ .ntbl-export-csv {
209
+ color: var(--ntbl-accent);
210
+ border-color: color-mix(in srgb, var(--ntbl-accent) 40%, transparent);
211
+ }
212
+ .ntbl-export-csv:hover {
213
+ background: var(--ntbl-accent-soft) !important;
214
+ }
215
+ .ntbl-toolbar-actions button:focus-visible,
216
+ .ntbl-pagination button:focus-visible,
217
+ .ntbl-page-size:focus-visible {
218
+ outline: none;
219
+ border-color: var(--ntbl-accent);
220
+ box-shadow: 0 0 0 3px var(--ntbl-focus-ring);
221
+ }
222
+ .ntbl-pagination button:disabled {
223
+ opacity: 0.4;
224
+ cursor: not-allowed;
225
+ }
226
+
227
+ /* Icons inside buttons */
228
+ .ntbl-icon {
229
+ width: 15px;
230
+ height: 15px;
231
+ flex: none;
232
+ }
233
+
234
+ /* Scroll area / table */
235
+ .ntbl-scroll {
236
+ position: relative;
237
+ overflow-x: auto;
238
+ border: 1px solid var(--ntbl-border);
239
+ border-radius: var(--ntbl-radius-inner);
240
+ }
241
+
242
+ .ntbl-table {
243
+ width: 100%;
244
+ border-collapse: collapse;
245
+ min-width: 480px;
246
+ }
247
+
248
+ .ntbl-thead {
249
+ position: sticky;
250
+ top: 0;
251
+ z-index: 2;
252
+ }
253
+
254
+ .ntbl-th {
255
+ position: relative;
256
+ background: var(--ntbl-header-bg);
257
+ color: var(--ntbl-color);
258
+ text-align: left;
259
+ padding: var(--ntbl-head-py) var(--ntbl-cell-px);
260
+ font-weight: 600;
261
+ font-size: 0.9em;
262
+ letter-spacing: 0.01em;
263
+ border-bottom: 1px solid var(--ntbl-border-strong);
264
+ white-space: nowrap;
265
+ user-select: none;
266
+ }
267
+
268
+ .ntbl-th-label {
269
+ display: inline-flex;
270
+ align-items: center;
271
+ vertical-align: middle;
272
+ }
273
+
274
+ .ntbl-th-align-center { text-align: center; }
275
+ .ntbl-th-align-right { text-align: right; }
276
+
277
+ .ntbl-th-sortable {
278
+ cursor: pointer;
279
+ }
280
+ .ntbl-th-sortable:hover {
281
+ background: var(--ntbl-row-hover);
282
+ color: var(--ntbl-accent);
283
+ }
284
+ .ntbl-th-sortable:focus-visible {
285
+ outline: none;
286
+ box-shadow: inset 0 0 0 2px var(--ntbl-accent);
287
+ }
288
+
289
+ .ntbl-sort-icon {
290
+ display: inline-block;
291
+ width: 0.85em;
292
+ height: 0.85em;
293
+ margin-left: 5px;
294
+ vertical-align: middle;
295
+ opacity: 0.3;
296
+ background: currentColor;
297
+ -webkit-mask: no-repeat center / contain var(--ntbl-sort-mask, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M8 9l4-4 4 4M8 15l4 4 4-4' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"));
298
+ mask: no-repeat center / contain var(--ntbl-sort-mask, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M8 9l4-4 4 4M8 15l4 4 4-4' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"));
299
+ }
300
+ .ntbl-th-sorted-asc,
301
+ .ntbl-th-sorted-desc {
302
+ color: var(--ntbl-accent);
303
+ }
304
+ .ntbl-th-sorted-asc .ntbl-sort-icon,
305
+ .ntbl-th-sorted-desc .ntbl-sort-icon {
306
+ opacity: 1;
307
+ }
308
+ .ntbl-th-sorted-asc .ntbl-sort-icon {
309
+ --ntbl-sort-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 14l6-6 6 6' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
310
+ }
311
+ .ntbl-th-sorted-desc .ntbl-sort-icon {
312
+ --ntbl-sort-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 10l6 6 6-6' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
313
+ }
314
+
315
+ /* Column resize handle */
316
+ .ntbl-resize-handle {
317
+ position: absolute;
318
+ top: 0;
319
+ right: 0;
320
+ width: 9px;
321
+ height: 100%;
322
+ cursor: col-resize;
323
+ z-index: 3;
324
+ touch-action: none;
325
+ }
326
+ .ntbl-resize-handle::after {
327
+ content: "";
328
+ position: absolute;
329
+ top: 20%;
330
+ right: 3px;
331
+ width: 2px;
332
+ height: 60%;
333
+ background: var(--ntbl-border-strong);
334
+ opacity: 0;
335
+ border-radius: 2px;
336
+ transition: opacity var(--ntbl-transition);
337
+ }
338
+ .ntbl-resize-handle:hover::after,
339
+ .ntbl-th-resizing .ntbl-resize-handle::after {
340
+ opacity: 1;
341
+ background: var(--ntbl-accent);
342
+ }
343
+
344
+ .ntbl-th-select {
345
+ width: 44px;
346
+ padding-left: 12px;
347
+ padding-right: 8px;
348
+ }
349
+
350
+ .ntbl-filter-row {
351
+ background: var(--ntbl-bg);
352
+ }
353
+ .ntbl-filter-row[hidden] {
354
+ display: none;
355
+ }
356
+ .ntbl-filter-cell {
357
+ padding: 6px 10px;
358
+ font-weight: normal;
359
+ background: var(--ntbl-bg);
360
+ border-bottom: 1px solid var(--ntbl-border);
361
+ }
362
+
363
+ .ntbl-filter-input {
364
+ width: 100%;
365
+ min-width: 80px;
366
+ font: inherit;
367
+ font-size: 0.9em;
368
+ padding: 6px 9px;
369
+ color: var(--ntbl-color);
370
+ background: var(--ntbl-input-bg);
371
+ border: 1px solid var(--ntbl-input-border);
372
+ border-radius: var(--ntbl-radius-control);
373
+ transition: border-color var(--ntbl-transition), box-shadow var(--ntbl-transition);
374
+ }
375
+ .ntbl-filter-input:hover {
376
+ border-color: var(--ntbl-border-strong);
377
+ }
378
+ .ntbl-filter-input:focus-visible {
379
+ outline: none;
380
+ border-color: var(--ntbl-accent);
381
+ box-shadow: 0 0 0 3px var(--ntbl-focus-ring);
382
+ }
383
+
384
+ .ntbl-tbody .ntbl-tr {
385
+ transition: background var(--ntbl-transition);
386
+ }
387
+ .ntbl-tbody .ntbl-tr:nth-child(even) {
388
+ background: var(--ntbl-stripe);
389
+ }
390
+ .ntbl-tbody .ntbl-tr:hover {
391
+ background: var(--ntbl-row-hover);
392
+ }
393
+ .ntbl-tbody .ntbl-tr-selected,
394
+ .ntbl-tbody .ntbl-tr-selected:hover {
395
+ background: var(--ntbl-row-selected);
396
+ }
397
+ .ntbl-tbody .ntbl-tr-selected .ntbl-td-select {
398
+ box-shadow: inset 3px 0 0 var(--ntbl-accent);
399
+ }
400
+
401
+ .ntbl-td {
402
+ padding: var(--ntbl-cell-py) var(--ntbl-cell-px);
403
+ border-bottom: 1px solid var(--ntbl-border);
404
+ vertical-align: middle;
405
+ }
406
+ .ntbl-td-align-center { text-align: center; }
407
+ .ntbl-td-align-right { text-align: right; font-variant-numeric: tabular-nums; }
408
+ .ntbl-td-num { font-variant-numeric: tabular-nums; }
409
+ .ntbl-tbody .ntbl-tr:last-child .ntbl-td {
410
+ border-bottom: none;
411
+ }
412
+
413
+ .ntbl-td-select {
414
+ width: 44px;
415
+ padding-left: 12px;
416
+ padding-right: 8px;
417
+ }
418
+
419
+ /* Checkboxes */
420
+ .ntbl-td-select input,
421
+ .ntbl-th-select input {
422
+ width: 16px;
423
+ height: 16px;
424
+ accent-color: var(--ntbl-accent);
425
+ cursor: pointer;
426
+ }
427
+
428
+ .ntbl-td-editable {
429
+ cursor: text;
430
+ border-radius: 6px;
431
+ transition: box-shadow var(--ntbl-transition);
432
+ }
433
+ .ntbl-td-editable:hover {
434
+ box-shadow: inset 0 0 0 1px var(--ntbl-border-strong);
435
+ }
436
+ .ntbl-td-editable:focus-visible {
437
+ outline: none;
438
+ box-shadow: inset 0 0 0 2px var(--ntbl-accent);
439
+ }
440
+
441
+ .ntbl-td-editing {
442
+ padding: 4px 6px;
443
+ }
444
+
445
+ .ntbl-edit-input {
446
+ width: 100%;
447
+ font: inherit;
448
+ padding: 6px 9px;
449
+ color: var(--ntbl-color);
450
+ background: var(--ntbl-input-bg);
451
+ border: 1px solid var(--ntbl-accent);
452
+ border-radius: var(--ntbl-radius-control);
453
+ box-shadow: 0 0 0 3px var(--ntbl-focus-ring);
454
+ outline: none;
455
+ }
456
+
457
+ .ntbl-badge {
458
+ display: inline-flex;
459
+ align-items: center;
460
+ gap: 5px;
461
+ padding: 2px 10px;
462
+ border-radius: 999px;
463
+ font-size: 0.82em;
464
+ font-weight: 600;
465
+ line-height: 1.6;
466
+ }
467
+ .ntbl-badge::before {
468
+ content: "";
469
+ width: 6px;
470
+ height: 6px;
471
+ border-radius: 50%;
472
+ background: currentColor;
473
+ }
474
+ .ntbl-badge-true {
475
+ background: var(--ntbl-badge-true-bg);
476
+ color: var(--ntbl-badge-true-color);
477
+ }
478
+ .ntbl-badge-false {
479
+ background: var(--ntbl-badge-false-bg);
480
+ color: var(--ntbl-badge-false-color);
481
+ }
482
+ .ntbl-td-editable .ntbl-badge {
483
+ cursor: pointer;
484
+ }
485
+
486
+ .ntbl-empty {
487
+ padding: 44px 16px;
488
+ text-align: center;
489
+ color: var(--ntbl-muted);
490
+ }
491
+ .ntbl-empty[hidden] {
492
+ display: none;
493
+ }
494
+
495
+ /* Loading overlay */
496
+ .ntbl-loading-overlay {
497
+ position: absolute;
498
+ inset: 0;
499
+ display: none;
500
+ align-items: center;
501
+ justify-content: center;
502
+ background: color-mix(in srgb, var(--ntbl-bg) 62%, transparent);
503
+ backdrop-filter: blur(1px);
504
+ border-radius: var(--ntbl-radius-inner);
505
+ z-index: 4;
506
+ }
507
+ :host([loading]) .ntbl-loading-overlay {
508
+ display: flex;
509
+ }
510
+ :host([loading]) .ntbl-scroll {
511
+ min-height: 160px;
512
+ }
513
+ .ntbl-spinner {
514
+ width: 26px;
515
+ height: 26px;
516
+ border-radius: 50%;
517
+ border: 3px solid var(--ntbl-border-strong);
518
+ border-top-color: var(--ntbl-accent);
519
+ animation: ntbl-spin 0.7s linear infinite;
520
+ }
521
+ @keyframes ntbl-spin {
522
+ to { transform: rotate(360deg); }
523
+ }
524
+
525
+ /* Footer / pagination */
526
+ .ntbl-footer {
527
+ display: flex;
528
+ align-items: center;
529
+ justify-content: space-between;
530
+ gap: 12px;
531
+ flex-wrap: wrap;
532
+ font-size: 0.88em;
533
+ color: var(--ntbl-muted);
534
+ }
535
+
536
+ .ntbl-info {
537
+ font-variant-numeric: tabular-nums;
538
+ }
539
+
540
+ .ntbl-pagination {
541
+ display: flex;
542
+ align-items: center;
543
+ gap: 6px;
544
+ }
545
+ .ntbl-pagination[hidden] {
546
+ display: none;
547
+ }
548
+
549
+ .ntbl-pagination button {
550
+ padding: 7px 10px;
551
+ min-width: 36px;
552
+ justify-content: center;
553
+ }
554
+ .ntbl-page-numbers {
555
+ display: flex;
556
+ align-items: center;
557
+ gap: 4px;
558
+ }
559
+ .ntbl-page-btn {
560
+ font-variant-numeric: tabular-nums;
561
+ }
562
+ .ntbl-page-btn.ntbl-page-current {
563
+ background: var(--ntbl-accent);
564
+ border-color: var(--ntbl-accent);
565
+ color: var(--ntbl-accent-color);
566
+ cursor: default;
567
+ }
568
+ .ntbl-page-btn.ntbl-page-current:hover {
569
+ background: var(--ntbl-accent) !important;
570
+ }
571
+ .ntbl-page-ellipsis {
572
+ padding: 0 2px;
573
+ color: var(--ntbl-muted);
574
+ user-select: none;
575
+ }
576
+
577
+ .ntbl-page-size {
578
+ font: inherit;
579
+ font-size: 0.9em;
580
+ padding: 7px 8px;
581
+ color: var(--ntbl-color);
582
+ background: var(--ntbl-input-bg);
583
+ border: 1px solid var(--ntbl-input-border);
584
+ border-radius: var(--ntbl-radius-control);
585
+ cursor: pointer;
586
+ }
587
+
588
+ .ntbl-page-indicator {
589
+ min-width: 84px;
590
+ text-align: center;
591
+ font-variant-numeric: tabular-nums;
592
+ }
593
+
594
+ /* Visually-hidden live region for screen readers */
595
+ .ntbl-sr-only {
596
+ position: absolute;
597
+ width: 1px;
598
+ height: 1px;
599
+ padding: 0;
600
+ margin: -1px;
601
+ overflow: hidden;
602
+ clip: rect(0 0 0 0);
603
+ white-space: nowrap;
604
+ border: 0;
605
+ }
606
+
607
+ /* Reduced motion */
608
+ @media (prefers-reduced-motion: reduce) {
609
+ .ntbl-search,
610
+ .ntbl-tbody .ntbl-tr,
611
+ .ntbl-toolbar-actions button,
612
+ .ntbl-pagination button,
613
+ .ntbl-filter-input,
614
+ .ntbl-td-editable,
615
+ .ntbl-resize-handle::after {
616
+ transition: none !important;
617
+ }
618
+ .ntbl-spinner {
619
+ animation-duration: 1.4s;
620
+ }
621
+ }
622
+
623
+ /* Mobile */
624
+ @media (max-width: 640px) {
625
+ .ntbl-root {
626
+ padding: 10px;
627
+ }
628
+ .ntbl-footer {
629
+ flex-direction: column;
630
+ align-items: stretch;
631
+ }
632
+ .ntbl-pagination {
633
+ justify-content: center;
634
+ flex-wrap: wrap;
635
+ }
636
+ }