@jvelo/tapemark 0.7.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,841 @@
1
+ /* tapemark — admin panel styles */
2
+ :root {
3
+ /* Theme-injected:
4
+ --tm-font, --tm-font-size-base, --tm-bg, --tm-text,
5
+ --tm-border, --tm-accent, --tm-accent-text */
6
+ --tm-font-size-sm: calc(var(--tm-font-size-base) * 0.89);
7
+
8
+ /* Surfaces derived from bg/text so they work on any theme */
9
+ --tm-row-hover-bg: color-mix(in srgb, var(--tm-bg) 93%, var(--tm-text));
10
+ --tm-surface-bg: color-mix(in srgb, var(--tm-bg) 90%, var(--tm-text));
11
+ --tm-btn-hover-bg: color-mix(in srgb, var(--tm-bg) 85%, var(--tm-text));
12
+
13
+ /* Borders and dividers */
14
+ --tm-input-border: color-mix(in srgb, var(--tm-bg) 70%, var(--tm-text));
15
+ --tm-input-border-hover: color-mix(in srgb, var(--tm-bg) 50%, var(--tm-text));
16
+ --tm-divider: color-mix(in srgb, var(--tm-bg) 92%, var(--tm-text));
17
+
18
+ /* Text tones */
19
+ --tm-input-color: color-mix(in srgb, var(--tm-text) 80%, var(--tm-bg));
20
+ --tm-text-dim: color-mix(in srgb, var(--tm-text) 55%, var(--tm-bg));
21
+ --tm-text-faint: color-mix(in srgb, var(--tm-text) 35%, var(--tm-bg));
22
+
23
+ /* Theme-invariant */
24
+ --tm-danger: #cc4444;
25
+ --tm-warning: #d89e2a;
26
+ --tm-muted: 0.4;
27
+ }
28
+
29
+ *,
30
+ *::before,
31
+ *::after {
32
+ box-sizing: border-box;
33
+ }
34
+ body {
35
+ margin: 0;
36
+ padding: 0;
37
+ overscroll-behavior: none;
38
+ }
39
+
40
+ /* Root container */
41
+ html {
42
+ overscroll-behavior: none;
43
+ }
44
+ .tm {
45
+ font-family: var(--tm-font);
46
+ font-size: var(--tm-font-size-base);
47
+ line-height: 1.35;
48
+ color: var(--tm-text);
49
+ background: var(--tm-bg);
50
+ min-height: 100vh;
51
+ }
52
+ .tm * {
53
+ color: inherit;
54
+ }
55
+ .tm a {
56
+ text-decoration: none;
57
+ }
58
+ .tm a:hover {
59
+ color: var(--tm-accent);
60
+ }
61
+
62
+ /* Top bar */
63
+ .tm-bar {
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: space-between;
67
+ padding: 0.45rem 0.9rem;
68
+ border-bottom: 1px solid var(--tm-border);
69
+ }
70
+ .tm-bar-title {
71
+ font-size: var(--tm-font-size-base);
72
+ letter-spacing: -0.5px;
73
+ }
74
+ .tm-crumbs {
75
+ display: flex;
76
+ gap: 0.36rem;
77
+ font-size: var(--tm-font-size-sm);
78
+ opacity: 0.6;
79
+ }
80
+ .tm-crumbs span {
81
+ opacity: 0.4;
82
+ }
83
+
84
+ /* Body */
85
+ .tm-body {
86
+ padding: 0.9rem;
87
+ }
88
+
89
+ .tm-section-title {
90
+ font-size: 1.08rem;
91
+ margin: 0 0 0.72rem 0;
92
+ letter-spacing: -0.5px;
93
+ }
94
+ .tm-section-views {
95
+ margin-top: 1.8rem;
96
+ }
97
+
98
+ /* Compact table (table/view listing) */
99
+ .tm-table-compact {
100
+ width: auto;
101
+ table-layout: auto;
102
+ }
103
+ .tm-table-compact td,
104
+ .tm-table-compact th {
105
+ padding-right: 2rem;
106
+ }
107
+
108
+ .tm-muted {
109
+ opacity: var(--tm-muted);
110
+ }
111
+ .tm-empty {
112
+ opacity: var(--tm-muted);
113
+ }
114
+
115
+ /* Tables */
116
+ .tm table {
117
+ width: 100%;
118
+ border-collapse: collapse;
119
+ font-size: var(--tm-font-size-sm);
120
+ table-layout: auto;
121
+ }
122
+ .tm-table-scroll {
123
+ overflow-x: auto;
124
+ max-width: 100%;
125
+ }
126
+ .tm th {
127
+ text-align: left;
128
+ padding: 0.27rem 0.45rem;
129
+ border-bottom: 1px solid var(--tm-border);
130
+ font-weight: normal;
131
+ opacity: 0.7;
132
+ font-size: var(--tm-font-size-sm);
133
+ text-transform: uppercase;
134
+ letter-spacing: 0.5px;
135
+ }
136
+ .tm td {
137
+ padding: 0.27rem 0.45rem;
138
+ border-bottom: 1px solid var(--tm-border);
139
+ max-width: 24rem;
140
+ overflow: hidden;
141
+ text-overflow: ellipsis;
142
+ white-space: nowrap;
143
+ position: relative;
144
+ }
145
+ .tm td:has(.tm-cell-image) {
146
+ overflow: visible;
147
+ }
148
+ .tm tr:hover td {
149
+ background: var(--tm-row-hover-bg);
150
+ }
151
+ .tm td a {
152
+ text-decoration: none;
153
+ display: block;
154
+ color: inherit;
155
+ }
156
+ .tm-pk-col {
157
+ opacity: 0.7;
158
+ }
159
+ .tm-select-col {
160
+ width: 1.8rem;
161
+ text-align: center;
162
+ }
163
+ .tm .tm-row-action-col {
164
+ white-space: nowrap;
165
+ text-align: right;
166
+ }
167
+ .tm .tm-row-action-col button + button {
168
+ margin-left: 0.36rem;
169
+ }
170
+ .tm-btn-sm {
171
+ font-size: var(--tm-font-size-sm);
172
+ padding: 0.18rem 0.45rem;
173
+ }
174
+ .tm-table-action-form {
175
+ display: none;
176
+ }
177
+
178
+ /* Cell display types */
179
+ .tm-cell-null {
180
+ opacity: 0.3;
181
+ font-style: italic;
182
+ }
183
+ .tm-cell-empty {
184
+ opacity: 0.2;
185
+ }
186
+ .tm td img {
187
+ border: 1px solid var(--tm-border);
188
+ }
189
+ .tm-cell-image {
190
+ position: relative;
191
+ display: inline-block;
192
+ }
193
+ .tm-cell-image img:not(.tm-cell-image-preview) {
194
+ height: var(--tm-thumb-h, 48px);
195
+ width: auto;
196
+ display: block;
197
+ }
198
+ .tm-cell-image-preview {
199
+ display: none;
200
+ position: absolute;
201
+ top: 100%;
202
+ left: 0;
203
+ z-index: 100;
204
+ width: auto;
205
+ margin-top: 0.27rem;
206
+ pointer-events: none;
207
+ filter: drop-shadow(0 2px 8px color-mix(in srgb, var(--tm-text) 40%, transparent));
208
+ }
209
+ .tm-cell-link {
210
+ color: var(--tm-accent);
211
+ }
212
+ .tm-cell-ref {
213
+ color: var(--tm-accent);
214
+ text-decoration: none;
215
+ border-bottom: 1px dotted currentColor;
216
+ }
217
+ .tm-cell-ref:hover {
218
+ opacity: 0.8;
219
+ }
220
+ .tm-cell-json {
221
+ font-family: var(--tm-font-mono);
222
+ opacity: 0.7;
223
+ font-size: 0.63rem;
224
+ }
225
+ .tm-cell-uuid {
226
+ font-family: var(--tm-font-mono);
227
+ font-size: var(--tm-font-size-sm);
228
+ opacity: 0.8;
229
+ }
230
+ .tm-cell-color {
231
+ display: flex;
232
+ align-items: center;
233
+ gap: 0.27rem;
234
+ }
235
+ .tm-swatch {
236
+ width: var(--tm-swatch-size, 12px);
237
+ height: var(--tm-swatch-size, 12px);
238
+ background: var(--tm-swatch-color);
239
+ display: inline-block;
240
+ border: 1px solid var(--tm-border);
241
+ }
242
+ .tm-cell-enum {
243
+ display: inline-block;
244
+ padding: 0.09rem 0.36rem;
245
+ background: var(--tm-enum-color, var(--tm-input-border));
246
+ font-size: 0.63rem;
247
+ letter-spacing: 0.5px;
248
+ }
249
+ .tm-cell-datetime {
250
+ opacity: 0.8;
251
+ }
252
+ .tm-cell-markdown {
253
+ opacity: 0.8;
254
+ }
255
+
256
+ /* Checkboxes — monospace style */
257
+ .tm input[type="checkbox"] {
258
+ appearance: none;
259
+ -webkit-appearance: none;
260
+ width: 1em;
261
+ height: 1em;
262
+ font-family: inherit;
263
+ font-size: var(--tm-font-size-base);
264
+ border: 1px solid var(--tm-input-border);
265
+ background: var(--tm-bg);
266
+ cursor: pointer;
267
+ display: inline-flex;
268
+ align-items: center;
269
+ justify-content: center;
270
+ vertical-align: middle;
271
+ }
272
+ .tm input[type="checkbox"]::after {
273
+ content: "\00a0";
274
+ font-family: var(--tm-font);
275
+ }
276
+ .tm input[type="checkbox"]:checked {
277
+ border-color: var(--tm-accent);
278
+ }
279
+ .tm input[type="checkbox"]:checked::after {
280
+ content: "\00d7";
281
+ color: var(--tm-accent);
282
+ }
283
+ .tm input[type="checkbox"]:hover {
284
+ border-color: var(--tm-text);
285
+ }
286
+
287
+ /* Pagination */
288
+ .tm-pager {
289
+ display: flex;
290
+ gap: 0.45rem;
291
+ align-items: center;
292
+ margin-top: 0.72rem;
293
+ margin-right: auto;
294
+ font-size: var(--tm-font-size-sm);
295
+ }
296
+ .tm-pager a {
297
+ padding: 0.18rem 0.36rem;
298
+ border: 1px solid var(--tm-border);
299
+ }
300
+ .tm-pager a:hover {
301
+ background: var(--tm-btn-hover-bg);
302
+ }
303
+ .tm-pager-current {
304
+ opacity: 0.5;
305
+ }
306
+
307
+ /* Forms */
308
+ .tm-form {
309
+ display: flex;
310
+ flex-direction: column;
311
+ gap: 0.54rem;
312
+ max-width: 36rem;
313
+ }
314
+ .tm-form-wide {
315
+ max-width: 48rem;
316
+ }
317
+ .tm-field {
318
+ display: flex;
319
+ flex-direction: column;
320
+ gap: 0.18rem;
321
+ }
322
+ .tm-field label {
323
+ font-size: var(--tm-font-size-sm);
324
+ text-transform: uppercase;
325
+ letter-spacing: 0.5px;
326
+ opacity: 0.7;
327
+ }
328
+ .tm-field input,
329
+ .tm-field textarea,
330
+ .tm-field select {
331
+ font-family: inherit;
332
+ font-size: var(--tm-font-size-base);
333
+ padding: 0.27rem 0.36rem;
334
+ border: 1px solid var(--tm-input-border);
335
+ background: var(--tm-bg);
336
+ color: var(--tm-input-color);
337
+ }
338
+ .tm-field input:focus,
339
+ .tm-field textarea:focus,
340
+ .tm-field select:focus {
341
+ color: var(--tm-text);
342
+ border-color: var(--tm-text);
343
+ outline: none;
344
+ }
345
+ .tm-field textarea {
346
+ min-height: 4.5rem;
347
+ resize: vertical;
348
+ }
349
+ .tm-field input:disabled {
350
+ color: var(--tm-text-faint);
351
+ border-color: var(--tm-divider);
352
+ cursor: not-allowed;
353
+ }
354
+ .tm-field input[type="color"] {
355
+ height: 2rem;
356
+ padding: 0.18rem;
357
+ cursor: pointer;
358
+ }
359
+ .tm-field-hint {
360
+ font-size: 0.54rem;
361
+ opacity: 0.35;
362
+ }
363
+
364
+ /* Config form table inputs */
365
+ .tm-form table input,
366
+ .tm-form table select {
367
+ font-family: inherit;
368
+ font-size: inherit;
369
+ padding: 0.18rem 0.27rem;
370
+ border: 1px solid var(--tm-input-border);
371
+ background: var(--tm-bg);
372
+ color: var(--tm-input-color);
373
+ width: 100%;
374
+ }
375
+ .tm-form table input:focus,
376
+ .tm-form table select:focus {
377
+ color: var(--tm-text);
378
+ border-color: var(--tm-text);
379
+ outline: none;
380
+ }
381
+ .tm-center {
382
+ text-align: center;
383
+ }
384
+
385
+ /* Config form: auto layout so options column can breathe */
386
+ .tm-form-wide {
387
+ max-width: none;
388
+ }
389
+ .tm-form-wide table {
390
+ table-layout: auto;
391
+ }
392
+ .tm-form-wide td,
393
+ .tm-form-wide th {
394
+ white-space: nowrap;
395
+ overflow: visible;
396
+ vertical-align: middle;
397
+ }
398
+
399
+ /* Reference input (web component) */
400
+ /* Reference input (inline) */
401
+ tm-reference-input {
402
+ display: block;
403
+ }
404
+ tm-reference-input .tm-ref-display {
405
+ display: none;
406
+ }
407
+ tm-reference-input.has-value .tm-ref-display {
408
+ display: flex;
409
+ }
410
+ tm-reference-input.has-value .tm-ref-search {
411
+ display: none;
412
+ }
413
+ .tm-ref-wrapper {
414
+ position: relative;
415
+ }
416
+ .tm-ref-input-row {
417
+ display: flex;
418
+ gap: 0;
419
+ }
420
+ .tm-ref-search {
421
+ flex: 1;
422
+ min-width: 0;
423
+ }
424
+ .tm-ref-display {
425
+ flex: 1;
426
+ min-width: 0;
427
+ align-items: center;
428
+ gap: 0.36rem;
429
+ padding: 0.27rem 0.36rem;
430
+ border: 1px solid var(--tm-input-border);
431
+ background: var(--tm-bg);
432
+ color: var(--tm-input-color);
433
+ font-size: var(--tm-font-size-base);
434
+ cursor: pointer;
435
+ }
436
+ .tm-ref-display:hover {
437
+ border-color: var(--tm-input-border-hover);
438
+ }
439
+ .tm-ref-display::after {
440
+ content: "\00d7";
441
+ opacity: 0.4;
442
+ margin-left: auto;
443
+ font-size: 0.9rem;
444
+ flex-shrink: 0;
445
+ }
446
+ .tm-ref-display:hover::after {
447
+ opacity: 0.8;
448
+ }
449
+ .tm-ref-browse-btn {
450
+ font-family: inherit;
451
+ font-size: var(--tm-font-size-base);
452
+ padding: 0.27rem 0.45rem;
453
+ border: 1px solid var(--tm-input-border);
454
+ border-left: none;
455
+ background: var(--tm-bg);
456
+ color: var(--tm-text-dim);
457
+ cursor: pointer;
458
+ flex-shrink: 0;
459
+ }
460
+ .tm-ref-browse-btn:hover {
461
+ background: var(--tm-btn-hover-bg);
462
+ color: var(--tm-text);
463
+ }
464
+ .tm-ref-dropdown {
465
+ position: absolute;
466
+ top: 100%;
467
+ left: 0;
468
+ right: 0;
469
+ z-index: 100;
470
+ max-height: 12rem;
471
+ overflow-y: auto;
472
+ border: 1px solid var(--tm-input-border);
473
+ border-top: none;
474
+ background: var(--tm-surface-bg);
475
+ display: none;
476
+ }
477
+ .tm-ref-dropdown.is-open {
478
+ display: block;
479
+ }
480
+ .tm-ref-option {
481
+ padding: 0.27rem 0.36rem;
482
+ font-size: var(--tm-font-size-base);
483
+ cursor: pointer;
484
+ color: var(--tm-input-color);
485
+ }
486
+ .tm-ref-option:hover,
487
+ .tm-ref-option.is-active {
488
+ background: var(--tm-btn-hover-bg);
489
+ color: var(--tm-text);
490
+ }
491
+ .tm-ref-hint {
492
+ padding: 0.27rem 0.36rem;
493
+ font-size: 0.63rem;
494
+ opacity: 0.5;
495
+ font-style: italic;
496
+ }
497
+
498
+ /* Modal */
499
+ .tm-modal-overlay {
500
+ position: fixed;
501
+ inset: 0;
502
+ z-index: 1000;
503
+ background: color-mix(in srgb, var(--tm-text) 60%, transparent);
504
+ display: flex;
505
+ align-items: center;
506
+ justify-content: center;
507
+ opacity: 0;
508
+ transition: opacity 150ms ease-out;
509
+ font-family: var(--tm-font);
510
+ font-size: var(--tm-font-size-base);
511
+ line-height: 1.35;
512
+ color: var(--tm-text);
513
+ }
514
+ .tm-modal-overlay.is-open {
515
+ opacity: 1;
516
+ }
517
+ .tm-modal {
518
+ background: var(--tm-bg);
519
+ border: 1px solid var(--tm-border);
520
+ width: min(36rem, 90vw);
521
+ max-height: 80vh;
522
+ display: flex;
523
+ flex-direction: column;
524
+ box-shadow:
525
+ 0 0 40px color-mix(in srgb, var(--tm-text) 30%, transparent),
526
+ 0 0 2px color-mix(in srgb, var(--tm-accent) 15%, transparent);
527
+ }
528
+ .tm-modal-header {
529
+ display: flex;
530
+ flex-direction: column;
531
+ gap: 0;
532
+ }
533
+ .tm-modal-header-top {
534
+ display: flex;
535
+ align-items: center;
536
+ justify-content: space-between;
537
+ padding: 0.45rem 0.9rem;
538
+ border-bottom: 1px solid var(--tm-border);
539
+ }
540
+ .tm-modal-title {
541
+ font-size: var(--tm-font-size-sm);
542
+ text-transform: uppercase;
543
+ letter-spacing: 0.5px;
544
+ opacity: 0.7;
545
+ white-space: nowrap;
546
+ }
547
+ .tm-modal-header-slot {
548
+ padding: 0.45rem 0.9rem;
549
+ border-bottom: 1px solid var(--tm-border);
550
+ }
551
+ .tm-modal-header-slot:empty {
552
+ display: none;
553
+ }
554
+ .tm-modal-search {
555
+ width: 100%;
556
+ font-family: inherit;
557
+ font-size: var(--tm-font-size-sm);
558
+ padding: 0.27rem 0.36rem;
559
+ border: 1px solid var(--tm-input-border);
560
+ background: var(--tm-bg);
561
+ color: var(--tm-input-color);
562
+ }
563
+ .tm-modal-search:focus {
564
+ color: var(--tm-text);
565
+ border-color: var(--tm-border);
566
+ outline: none;
567
+ }
568
+ .tm-modal-close {
569
+ font-family: inherit;
570
+ font-size: 1rem;
571
+ line-height: 1;
572
+ padding: 0.18rem 0.36rem;
573
+ border: 1px solid transparent;
574
+ background: none;
575
+ color: var(--tm-text-dim);
576
+ cursor: pointer;
577
+ }
578
+ .tm-modal-close:hover {
579
+ color: var(--tm-text);
580
+ border-color: var(--tm-border);
581
+ }
582
+ .tm-modal-body {
583
+ flex: 1;
584
+ overflow-y: auto;
585
+ min-height: 8rem;
586
+ }
587
+ .tm-modal-body .tm-ref-hint {
588
+ padding: 0.54rem 0.9rem;
589
+ }
590
+ .tm-modal-table {
591
+ width: 100%;
592
+ border-collapse: collapse;
593
+ font-size: var(--tm-font-size-sm);
594
+ }
595
+ .tm-modal-row {
596
+ cursor: pointer;
597
+ }
598
+ .tm-modal-row:hover td {
599
+ background: var(--tm-row-hover-bg);
600
+ }
601
+ .tm-modal-row:hover .tm-modal-cell-label {
602
+ color: var(--tm-accent);
603
+ }
604
+ .tm-modal-cell-value {
605
+ padding: 0.27rem 0.9rem;
606
+ border-bottom: 1px solid var(--tm-divider);
607
+ opacity: 0.4;
608
+ width: 1%;
609
+ white-space: nowrap;
610
+ }
611
+ .tm-modal-cell-label {
612
+ padding: 0.27rem 0.9rem;
613
+ border-bottom: 1px solid var(--tm-divider);
614
+ color: var(--tm-text);
615
+ transition: color 100ms;
616
+ }
617
+ .tm-modal-footer {
618
+ display: flex;
619
+ align-items: center;
620
+ justify-content: space-between;
621
+ padding: 0.36rem 0.9rem;
622
+ border-top: 1px solid var(--tm-border);
623
+ }
624
+ .tm-modal-info {
625
+ font-size: 0.63rem;
626
+ opacity: 0.4;
627
+ }
628
+ .tm-modal-nav {
629
+ display: flex;
630
+ gap: 0.27rem;
631
+ }
632
+ .tm-modal-nav .tm-btn {
633
+ padding: 0.18rem 0.45rem;
634
+ font-size: var(--tm-font-size-sm);
635
+ }
636
+
637
+ /* Display type options (web component) */
638
+ tm-display-options {
639
+ display: flex;
640
+ flex-direction: column;
641
+ gap: 0.45rem;
642
+ min-height: 1.6rem;
643
+ }
644
+ .tm-opt-field {
645
+ display: flex;
646
+ align-items: center;
647
+ gap: 0.36rem;
648
+ }
649
+ .tm-opt-field label {
650
+ opacity: 0.5;
651
+ text-transform: none;
652
+ font-size: 0.63rem;
653
+ white-space: nowrap;
654
+ }
655
+ .tm-opt-field input[type="number"],
656
+ .tm-opt-field input[type="text"] {
657
+ width: 100%;
658
+ font-family: inherit;
659
+ font-size: var(--tm-font-size-sm);
660
+ padding: 0.18rem 0.27rem;
661
+ border: 1px solid var(--tm-input-border);
662
+ background: var(--tm-bg);
663
+ color: var(--tm-input-color);
664
+ }
665
+ .tm-opt-field input:focus {
666
+ color: var(--tm-text);
667
+ border-color: var(--tm-text);
668
+ outline: none;
669
+ }
670
+
671
+ /* Buttons */
672
+ .tm-actions {
673
+ display: flex;
674
+ gap: 0.45rem;
675
+ margin-top: 0.45rem;
676
+ }
677
+ .tm-btn {
678
+ font-family: inherit;
679
+ font-size: var(--tm-font-size-sm);
680
+ padding: 0.27rem 0.54rem;
681
+ border: 1px solid var(--tm-border);
682
+ background: var(--tm-bg);
683
+ color: var(--tm-text);
684
+ cursor: pointer;
685
+ text-decoration: none;
686
+ display: inline-block;
687
+ }
688
+ .tm-btn:hover {
689
+ background: var(--tm-btn-hover-bg);
690
+ color: var(--tm-text);
691
+ }
692
+ .tm-btn:disabled {
693
+ opacity: 0.3;
694
+ cursor: not-allowed;
695
+ }
696
+ .tm-btn:disabled:hover {
697
+ background: var(--tm-bg);
698
+ color: var(--tm-text);
699
+ }
700
+ .tm-btn-primary {
701
+ background: var(--tm-text);
702
+ color: var(--tm-bg);
703
+ border-color: var(--tm-text);
704
+ }
705
+ .tm-btn-primary:hover,
706
+ .tm a.tm-btn-primary:hover {
707
+ background: var(--tm-accent);
708
+ border-color: var(--tm-accent);
709
+ color: var(--tm-accent-text);
710
+ }
711
+ .tm-btn-danger {
712
+ border-color: var(--tm-danger);
713
+ color: var(--tm-danger);
714
+ }
715
+ .tm-btn-danger:hover {
716
+ background: var(--tm-danger);
717
+ border-color: var(--tm-danger);
718
+ color: #fff;
719
+ }
720
+
721
+ /* Flash messages */
722
+ .tm-flash {
723
+ padding: 0.36rem 0.54rem;
724
+ margin-bottom: 0.72rem;
725
+ font-size: var(--tm-font-size-sm);
726
+ border: 1px solid var(--tm-border);
727
+ }
728
+ .tm-flash-success {
729
+ border-color: var(--tm-accent);
730
+ color: var(--tm-accent);
731
+ }
732
+ .tm-flash-error {
733
+ border-color: var(--tm-danger);
734
+ color: var(--tm-danger);
735
+ }
736
+ .tm-flash-warning {
737
+ border-color: var(--tm-warning);
738
+ color: var(--tm-warning);
739
+ }
740
+
741
+ /* Toolbar */
742
+ .tm-toolbar {
743
+ display: flex;
744
+ justify-content: space-between;
745
+ align-items: center;
746
+ margin-bottom: 0.72rem;
747
+ }
748
+
749
+ /* Table footer */
750
+ .tm-table-footer {
751
+ display: flex;
752
+ justify-content: flex-end;
753
+ align-items: center;
754
+ gap: 0.72rem;
755
+ margin-top: 0.72rem;
756
+ }
757
+
758
+ /* Row detail action bar — save (form) on the left, row ops (actions + delete)
759
+ on the right. max-width mirrors `.tm-form` so the right edge lines up. */
760
+ .tm-row-actions {
761
+ display: flex;
762
+ justify-content: space-between;
763
+ align-items: center;
764
+ gap: 1rem;
765
+ margin-top: 0.72rem;
766
+ flex-wrap: wrap;
767
+ max-width: 36rem;
768
+ }
769
+ .tm-row-actions-form,
770
+ .tm-row-actions-row {
771
+ display: flex;
772
+ gap: 0.45rem;
773
+ align-items: center;
774
+ }
775
+ .tm-delete-inline {
776
+ margin: 0;
777
+ }
778
+ .tm-action-inline {
779
+ margin: 0;
780
+ }
781
+
782
+ /* Error pages */
783
+ .tm-error {
784
+ display: flex;
785
+ flex-direction: column;
786
+ align-items: flex-start;
787
+ gap: 0.36rem;
788
+ padding-top: 2.7rem;
789
+ }
790
+ .tm-error-status {
791
+ font-size: 2.7rem;
792
+ letter-spacing: -1.5px;
793
+ line-height: 1;
794
+ opacity: 0.25;
795
+ }
796
+ .tm-error-label {
797
+ font-size: 1.08rem;
798
+ letter-spacing: -0.5px;
799
+ }
800
+ .tm-error-message {
801
+ font-size: var(--tm-font-size-sm);
802
+ opacity: 0.5;
803
+ margin: 0;
804
+ }
805
+ .tm-error .tm-btn {
806
+ margin-top: 0.72rem;
807
+ }
808
+
809
+ /* Responsive */
810
+ @media (max-width: 768px) {
811
+ .tm {
812
+ font-size: var(--tm-font-size-sm);
813
+ }
814
+ .tm table {
815
+ font-size: 0.63rem;
816
+ }
817
+ .tm th {
818
+ font-size: 0.54rem;
819
+ padding: 0.18rem 0.27rem;
820
+ }
821
+ .tm td {
822
+ max-width: 8rem;
823
+ padding: 0.18rem 0.27rem;
824
+ }
825
+ .tm-body {
826
+ padding: 0.45rem;
827
+ }
828
+ .tm-toolbar {
829
+ flex-direction: column;
830
+ align-items: flex-start;
831
+ gap: 0.36rem;
832
+ }
833
+ .tm-table-footer {
834
+ flex-direction: column;
835
+ align-items: flex-start;
836
+ gap: 0.36rem;
837
+ }
838
+ .tm-section-title {
839
+ font-size: 0.9rem;
840
+ }
841
+ }