@elasticias/ui 1.0.15 → 1.0.17
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/fesm2022/elasticias-ui.mjs +258 -72
- package/fesm2022/elasticias-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_comptoir.scss +11 -0
- package/styles/_patterns.scss +149 -44
- package/types/elasticias-ui.d.ts +139 -23
package/package.json
CHANGED
package/styles/_comptoir.scss
CHANGED
|
@@ -54,6 +54,17 @@
|
|
|
54
54
|
--st-refunded-fg: #826208; --st-refunded-bg: #fdf1c8;
|
|
55
55
|
--st-onhold-fg: #4f5560; --st-onhold-bg: #e7e9ee;
|
|
56
56
|
|
|
57
|
+
/* ── Typography ───────────────────────────────────────────────
|
|
58
|
+
The three faces, defined once. They were hardcoded 79 times across
|
|
59
|
+
16 files, and the same face carried different fallback chains in
|
|
60
|
+
different components — so a render without the webfont looked
|
|
61
|
+
different depending on which component drew it. Stacks match
|
|
62
|
+
libs/tokens/typography.json, which is the contract that ships to
|
|
63
|
+
web, iOS and Android. */
|
|
64
|
+
--font-display: 'Bricolage Grotesque', system-ui, sans-serif;
|
|
65
|
+
--font-ui: 'Manrope', system-ui, sans-serif;
|
|
66
|
+
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
|
|
67
|
+
|
|
57
68
|
/* ── Radii ───────────────────────────────────────────────────── */
|
|
58
69
|
--r-sm: 8px;
|
|
59
70
|
--r-md: 12px;
|
package/styles/_patterns.scss
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
.page-head-row h1 {
|
|
41
41
|
margin: 0;
|
|
42
|
-
font-family:
|
|
42
|
+
font-family: var(--font-display);
|
|
43
43
|
font-variation-settings:
|
|
44
44
|
'opsz' 96,
|
|
45
45
|
'wght' 700,
|
|
@@ -216,7 +216,7 @@
|
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
.pill-group .count {
|
|
219
|
-
font-family:
|
|
219
|
+
font-family: var(--font-mono);
|
|
220
220
|
font-size: 10.5px;
|
|
221
221
|
font-weight: 700;
|
|
222
222
|
color: inherit;
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
color: var(--paper);
|
|
290
290
|
display: grid;
|
|
291
291
|
place-items: center;
|
|
292
|
-
font-family:
|
|
292
|
+
font-family: var(--font-display);
|
|
293
293
|
font-variation-settings:
|
|
294
294
|
'opsz' 12,
|
|
295
295
|
'wght' 700,
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
/* ──────────── TYPOGRAPHY UTILITIES ─────────────────────────────── */
|
|
312
312
|
|
|
313
313
|
.label {
|
|
314
|
-
font-family:
|
|
314
|
+
font-family: var(--font-ui);
|
|
315
315
|
font-size: 11px;
|
|
316
316
|
font-weight: 700;
|
|
317
317
|
text-transform: uppercase;
|
|
@@ -350,7 +350,7 @@
|
|
|
350
350
|
|
|
351
351
|
.mono,
|
|
352
352
|
.num {
|
|
353
|
-
font-family:
|
|
353
|
+
font-family: var(--font-mono);
|
|
354
354
|
font-feature-settings: 'tnum', 'zero', 'ss01';
|
|
355
355
|
font-variant-numeric: tabular-nums slashed-zero;
|
|
356
356
|
}
|
|
@@ -415,15 +415,40 @@
|
|
|
415
415
|
background: transparent;
|
|
416
416
|
border: 0;
|
|
417
417
|
border-radius: var(--r-xl);
|
|
418
|
-
padding: 8px 14px 8px 38px
|
|
418
|
+
/* Logical, not `padding: 8px 14px 8px 38px`. The search icon is placed
|
|
419
|
+
with inset-inline-start, so a physical shorthand reserved the 38px on
|
|
420
|
+
the wrong side in Arabic and the placeholder ran under the glyph. */
|
|
421
|
+
padding-block: 8px;
|
|
422
|
+
padding-inline: 38px 14px;
|
|
419
423
|
color: var(--text);
|
|
420
|
-
|
|
421
|
-
min-height: 36px;
|
|
424
|
+
min-block-size: var(--hit-base);
|
|
422
425
|
letter-spacing: -0.005em;
|
|
423
426
|
}
|
|
424
427
|
|
|
428
|
+
/* This field had `outline: 0` and nothing in its place, so the primary
|
|
429
|
+
search box on every list screen was the one control with no visible
|
|
430
|
+
focus at all. The ring goes on the label so it frames the whole
|
|
431
|
+
affordance, icon and shortcut hint included. */
|
|
432
|
+
.smart-bar .search input:focus {
|
|
433
|
+
outline: 0;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.smart-bar .search:focus-within {
|
|
437
|
+
outline: 2px solid color-mix(in srgb, var(--ink-active) 35%, transparent);
|
|
438
|
+
outline-offset: 2px;
|
|
439
|
+
border-radius: var(--r-xl);
|
|
440
|
+
}
|
|
441
|
+
|
|
425
442
|
.smart-bar .search input::placeholder {
|
|
426
|
-
|
|
443
|
+
/* --text-soft is ink-400, about 2.5:1 on paper. A placeholder is real
|
|
444
|
+
text a user has to read, so it takes the 4.5:1 tier. */
|
|
445
|
+
color: var(--text-mute);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
@media (pointer: coarse) {
|
|
449
|
+
.smart-bar .search input {
|
|
450
|
+
min-block-size: var(--hit-touch);
|
|
451
|
+
}
|
|
427
452
|
}
|
|
428
453
|
|
|
429
454
|
.smart-bar .search .kbd {
|
|
@@ -431,7 +456,7 @@
|
|
|
431
456
|
inset-inline-end: 14px;
|
|
432
457
|
top: 50%;
|
|
433
458
|
transform: translateY(-50%);
|
|
434
|
-
font-family:
|
|
459
|
+
font-family: var(--font-mono);
|
|
435
460
|
font-size: 10.5px;
|
|
436
461
|
font-weight: 600;
|
|
437
462
|
color: var(--text-mute);
|
|
@@ -693,7 +718,7 @@
|
|
|
693
718
|
}
|
|
694
719
|
|
|
695
720
|
.popover .preset .hint {
|
|
696
|
-
font-family:
|
|
721
|
+
font-family: var(--font-mono);
|
|
697
722
|
font-size: 10.5px;
|
|
698
723
|
color: var(--text-mute);
|
|
699
724
|
font-weight: 500;
|
|
@@ -761,6 +786,46 @@
|
|
|
761
786
|
white-space: nowrap;
|
|
762
787
|
}
|
|
763
788
|
|
|
789
|
+
/* A sortable header is a real button now, so it inherits the cell's type
|
|
790
|
+
rather than restating it, and carries a focus ring the click handler on
|
|
791
|
+
the <th> never could. */
|
|
792
|
+
.tbl thead th .tbl-sort {
|
|
793
|
+
display: inline-flex;
|
|
794
|
+
align-items: center;
|
|
795
|
+
gap: 4px;
|
|
796
|
+
margin: 0;
|
|
797
|
+
padding: 0;
|
|
798
|
+
border: 0;
|
|
799
|
+
background: none;
|
|
800
|
+
font: inherit;
|
|
801
|
+
color: inherit;
|
|
802
|
+
letter-spacing: inherit;
|
|
803
|
+
text-transform: inherit;
|
|
804
|
+
text-align: inherit;
|
|
805
|
+
cursor: pointer;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
.tbl thead th .tbl-sort:focus-visible {
|
|
809
|
+
outline: 2px solid color-mix(in srgb, var(--ink-active) 40%, transparent);
|
|
810
|
+
outline-offset: 2px;
|
|
811
|
+
border-radius: var(--r-sm);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
.tbl thead th .tbl-sort:hover {
|
|
815
|
+
color: var(--text);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
.tbl-sort__arrow {
|
|
819
|
+
opacity: 0.7;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
/* The row itself is focusable when it opens, so it needs a visible ring.
|
|
823
|
+
Enter activates it; the double-click stays for the mouse. */
|
|
824
|
+
.tbl tbody tr.is-row-clickable:focus-visible {
|
|
825
|
+
outline: 2px solid color-mix(in srgb, var(--ink-active) 40%, transparent);
|
|
826
|
+
outline-offset: -2px;
|
|
827
|
+
}
|
|
828
|
+
|
|
764
829
|
.tbl tbody td {
|
|
765
830
|
padding: 14px 18px;
|
|
766
831
|
border-bottom: 1px solid var(--rule-soft, rgba(15, 17, 21, 0.05));
|
|
@@ -773,6 +838,12 @@
|
|
|
773
838
|
|
|
774
839
|
.tbl tbody tr {
|
|
775
840
|
transition: background-color var(--t-fast) var(--ease-out);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/* The pointer belongs only on rows that actually open. It used to be set
|
|
844
|
+
on every row in every table, so a row that did nothing still promised
|
|
845
|
+
it would, and single-clicking any of them did nothing anywhere. */
|
|
846
|
+
.tbl tbody tr.is-row-clickable {
|
|
776
847
|
cursor: pointer;
|
|
777
848
|
}
|
|
778
849
|
|
|
@@ -787,7 +858,7 @@
|
|
|
787
858
|
}
|
|
788
859
|
|
|
789
860
|
.tbl .ref {
|
|
790
|
-
font-family:
|
|
861
|
+
font-family: var(--font-mono);
|
|
791
862
|
font-size: 12px;
|
|
792
863
|
font-weight: 700;
|
|
793
864
|
}
|
|
@@ -799,7 +870,7 @@
|
|
|
799
870
|
}
|
|
800
871
|
|
|
801
872
|
.tbl .total {
|
|
802
|
-
font-family:
|
|
873
|
+
font-family: var(--font-display);
|
|
803
874
|
font-variation-settings:
|
|
804
875
|
'opsz' 12,
|
|
805
876
|
'wght' 700,
|
|
@@ -871,7 +942,7 @@
|
|
|
871
942
|
display: inline-flex;
|
|
872
943
|
align-items: center;
|
|
873
944
|
gap: 6px;
|
|
874
|
-
font-family:
|
|
945
|
+
font-family: var(--font-mono);
|
|
875
946
|
font-size: 11px;
|
|
876
947
|
letter-spacing: 0.02em;
|
|
877
948
|
color: var(--text-soft);
|
|
@@ -1074,14 +1145,14 @@
|
|
|
1074
1145
|
|
|
1075
1146
|
|
|
1076
1147
|
.detail-toolbar .ref {
|
|
1077
|
-
font-family:
|
|
1148
|
+
font-family: var(--font-mono);
|
|
1078
1149
|
font-size: 14px;
|
|
1079
1150
|
font-weight: 700;
|
|
1080
1151
|
letter-spacing: -0.01em;
|
|
1081
1152
|
}
|
|
1082
1153
|
|
|
1083
1154
|
.detail-toolbar .name {
|
|
1084
|
-
font-family:
|
|
1155
|
+
font-family: var(--font-display);
|
|
1085
1156
|
font-variation-settings:
|
|
1086
1157
|
'opsz' 12,
|
|
1087
1158
|
'wght' 700,
|
|
@@ -1136,7 +1207,7 @@
|
|
|
1136
1207
|
}
|
|
1137
1208
|
|
|
1138
1209
|
.card-head .title {
|
|
1139
|
-
font-family:
|
|
1210
|
+
font-family: var(--font-display);
|
|
1140
1211
|
font-variation-settings:
|
|
1141
1212
|
'opsz' 12,
|
|
1142
1213
|
'wght' 700,
|
|
@@ -1375,7 +1446,7 @@
|
|
|
1375
1446
|
}
|
|
1376
1447
|
|
|
1377
1448
|
.kpi-value {
|
|
1378
|
-
font-family:
|
|
1449
|
+
font-family: var(--font-display);
|
|
1379
1450
|
font-variation-settings:
|
|
1380
1451
|
'opsz' 96,
|
|
1381
1452
|
'wght' 700,
|
|
@@ -1388,7 +1459,7 @@
|
|
|
1388
1459
|
}
|
|
1389
1460
|
|
|
1390
1461
|
.kpi-value .unit {
|
|
1391
|
-
font-family:
|
|
1462
|
+
font-family: var(--font-mono);
|
|
1392
1463
|
font-size: 0.4em;
|
|
1393
1464
|
font-weight: 500;
|
|
1394
1465
|
color: var(--text-mute);
|
|
@@ -1403,7 +1474,7 @@
|
|
|
1403
1474
|
}
|
|
1404
1475
|
|
|
1405
1476
|
.delta {
|
|
1406
|
-
font-family:
|
|
1477
|
+
font-family: var(--font-mono);
|
|
1407
1478
|
font-size: 11px;
|
|
1408
1479
|
font-weight: 700;
|
|
1409
1480
|
padding: 2px 8px;
|
|
@@ -1471,7 +1542,7 @@
|
|
|
1471
1542
|
display: grid;
|
|
1472
1543
|
place-items: center;
|
|
1473
1544
|
color: var(--tenant-500);
|
|
1474
|
-
font-family:
|
|
1545
|
+
font-family: var(--font-display);
|
|
1475
1546
|
font-variation-settings:
|
|
1476
1547
|
'opsz' 12,
|
|
1477
1548
|
'wght' 700,
|
|
@@ -1654,7 +1725,7 @@
|
|
|
1654
1725
|
.row-actions__item .kbd,
|
|
1655
1726
|
.ef-menu__item .kbd {
|
|
1656
1727
|
margin-inline-start: auto;
|
|
1657
|
-
font-family:
|
|
1728
|
+
font-family: var(--font-mono);
|
|
1658
1729
|
font-size: 10px;
|
|
1659
1730
|
font-weight: 600;
|
|
1660
1731
|
color: var(--text-mute);
|
|
@@ -2049,7 +2120,7 @@
|
|
|
2049
2120
|
}
|
|
2050
2121
|
|
|
2051
2122
|
.dp__preset .hint {
|
|
2052
|
-
font-family:
|
|
2123
|
+
font-family: var(--font-mono);
|
|
2053
2124
|
font-size: 11.5px;
|
|
2054
2125
|
font-weight: 500;
|
|
2055
2126
|
color: var(--text-mute);
|
|
@@ -2262,7 +2333,7 @@
|
|
|
2262
2333
|
}
|
|
2263
2334
|
|
|
2264
2335
|
.dp__cal-dow {
|
|
2265
|
-
font-family:
|
|
2336
|
+
font-family: var(--font-mono);
|
|
2266
2337
|
font-size: 10px;
|
|
2267
2338
|
font-weight: 700;
|
|
2268
2339
|
color: var(--text-mute);
|
|
@@ -2390,7 +2461,7 @@
|
|
|
2390
2461
|
|
|
2391
2462
|
.dp__field input {
|
|
2392
2463
|
font: inherit;
|
|
2393
|
-
font-family:
|
|
2464
|
+
font-family: var(--font-mono);
|
|
2394
2465
|
font-size: 12.5px;
|
|
2395
2466
|
background: var(--paper);
|
|
2396
2467
|
border: 1px solid var(--rule);
|
|
@@ -2423,7 +2494,7 @@
|
|
|
2423
2494
|
}
|
|
2424
2495
|
|
|
2425
2496
|
.dp__actions .duration {
|
|
2426
|
-
font-family:
|
|
2497
|
+
font-family: var(--font-mono);
|
|
2427
2498
|
font-size: 11.5px;
|
|
2428
2499
|
font-weight: 600;
|
|
2429
2500
|
color: var(--text-mute);
|
|
@@ -2716,7 +2787,7 @@
|
|
|
2716
2787
|
}
|
|
2717
2788
|
|
|
2718
2789
|
.detail-toolbar .ref {
|
|
2719
|
-
font-family:
|
|
2790
|
+
font-family: var(--font-mono);
|
|
2720
2791
|
font-size: 14px;
|
|
2721
2792
|
font-weight: 700;
|
|
2722
2793
|
letter-spacing: -0.01em;
|
|
@@ -2747,7 +2818,7 @@
|
|
|
2747
2818
|
|
|
2748
2819
|
.search-toolbar h1 {
|
|
2749
2820
|
margin: 0;
|
|
2750
|
-
font-family:
|
|
2821
|
+
font-family: var(--font-display);
|
|
2751
2822
|
font-variation-settings:
|
|
2752
2823
|
'opsz' 96,
|
|
2753
2824
|
'wght' 700,
|
|
@@ -2845,7 +2916,7 @@
|
|
|
2845
2916
|
}
|
|
2846
2917
|
|
|
2847
2918
|
.card-head .title {
|
|
2848
|
-
font-family:
|
|
2919
|
+
font-family: var(--font-display);
|
|
2849
2920
|
font-variation-settings:
|
|
2850
2921
|
'opsz' 12,
|
|
2851
2922
|
'wght' 700,
|
|
@@ -2968,7 +3039,7 @@
|
|
|
2968
3039
|
}
|
|
2969
3040
|
|
|
2970
3041
|
.totals .row .v {
|
|
2971
|
-
font-family:
|
|
3042
|
+
font-family: var(--font-mono);
|
|
2972
3043
|
font-feature-settings: 'tnum';
|
|
2973
3044
|
font-variant-numeric: tabular-nums;
|
|
2974
3045
|
font-weight: 700;
|
|
@@ -2990,7 +3061,7 @@
|
|
|
2990
3061
|
}
|
|
2991
3062
|
|
|
2992
3063
|
.totals .grand-row .lbl {
|
|
2993
|
-
font-family:
|
|
3064
|
+
font-family: var(--font-display);
|
|
2994
3065
|
font-variation-settings:
|
|
2995
3066
|
'opsz' 12,
|
|
2996
3067
|
'wght' 700,
|
|
@@ -3002,7 +3073,7 @@
|
|
|
3002
3073
|
}
|
|
3003
3074
|
|
|
3004
3075
|
.totals .grand-row .v {
|
|
3005
|
-
font-family:
|
|
3076
|
+
font-family: var(--font-display);
|
|
3006
3077
|
font-variation-settings:
|
|
3007
3078
|
'opsz' 96,
|
|
3008
3079
|
'wght' 700,
|
|
@@ -3013,7 +3084,7 @@
|
|
|
3013
3084
|
}
|
|
3014
3085
|
|
|
3015
3086
|
.totals .currency {
|
|
3016
|
-
font-family:
|
|
3087
|
+
font-family: var(--font-mono);
|
|
3017
3088
|
font-size: 0.35em;
|
|
3018
3089
|
color: var(--text-mute);
|
|
3019
3090
|
margin-inline-start: 4px;
|
|
@@ -3046,7 +3117,7 @@
|
|
|
3046
3117
|
}
|
|
3047
3118
|
|
|
3048
3119
|
.stats .row .v {
|
|
3049
|
-
font-family:
|
|
3120
|
+
font-family: var(--font-mono);
|
|
3050
3121
|
font-size: 13.5px;
|
|
3051
3122
|
font-weight: 700;
|
|
3052
3123
|
font-feature-settings: 'tnum';
|
|
@@ -3061,7 +3132,7 @@
|
|
|
3061
3132
|
}
|
|
3062
3133
|
|
|
3063
3134
|
.stats .row.big .v {
|
|
3064
|
-
font-family:
|
|
3135
|
+
font-family: var(--font-display);
|
|
3065
3136
|
font-variation-settings:
|
|
3066
3137
|
'opsz' 12,
|
|
3067
3138
|
'wght' 700,
|
|
@@ -3146,7 +3217,7 @@
|
|
|
3146
3217
|
}
|
|
3147
3218
|
|
|
3148
3219
|
.kpi-value {
|
|
3149
|
-
font-family:
|
|
3220
|
+
font-family: var(--font-display);
|
|
3150
3221
|
font-variation-settings:
|
|
3151
3222
|
'opsz' 96,
|
|
3152
3223
|
'wght' 700,
|
|
@@ -3159,7 +3230,7 @@
|
|
|
3159
3230
|
}
|
|
3160
3231
|
|
|
3161
3232
|
.kpi-value .unit {
|
|
3162
|
-
font-family:
|
|
3233
|
+
font-family: var(--font-mono);
|
|
3163
3234
|
font-size: 0.32em;
|
|
3164
3235
|
font-weight: 500;
|
|
3165
3236
|
color: var(--text-mute);
|
|
@@ -3168,7 +3239,7 @@
|
|
|
3168
3239
|
}
|
|
3169
3240
|
|
|
3170
3241
|
.delta {
|
|
3171
|
-
font-family:
|
|
3242
|
+
font-family: var(--font-mono);
|
|
3172
3243
|
font-size: 11px;
|
|
3173
3244
|
font-weight: 600;
|
|
3174
3245
|
}
|
|
@@ -3203,7 +3274,7 @@
|
|
|
3203
3274
|
|
|
3204
3275
|
.ef-label {
|
|
3205
3276
|
display: inline-block;
|
|
3206
|
-
font-family:
|
|
3277
|
+
font-family: var(--font-ui);
|
|
3207
3278
|
font-size: 11px;
|
|
3208
3279
|
font-weight: 700;
|
|
3209
3280
|
color: var(--text-mute);
|
|
@@ -3453,7 +3524,7 @@
|
|
|
3453
3524
|
.ef-input-group .ef-input-addon {
|
|
3454
3525
|
background: var(--paper);
|
|
3455
3526
|
padding: 9px 12px;
|
|
3456
|
-
font-family:
|
|
3527
|
+
font-family: var(--font-mono);
|
|
3457
3528
|
font-size: 12.5px;
|
|
3458
3529
|
color: var(--text-mute);
|
|
3459
3530
|
display: flex;
|
|
@@ -3907,7 +3978,7 @@ input.ef-input[type='number'] {
|
|
|
3907
3978
|
/* Group headers */
|
|
3908
3979
|
.es__panel .p-select-option-group,
|
|
3909
3980
|
.es__panel .p-multiselect-option-group {
|
|
3910
|
-
font-family:
|
|
3981
|
+
font-family: var(--font-mono);
|
|
3911
3982
|
font-size: 10px;
|
|
3912
3983
|
font-weight: 800;
|
|
3913
3984
|
letter-spacing: 0.06em;
|
|
@@ -4076,7 +4147,7 @@ input.ef-input[type='number'] {
|
|
|
4076
4147
|
|
|
4077
4148
|
.es-dialog .p-dialog-title,
|
|
4078
4149
|
.es-dialog .p-dialog-header-title {
|
|
4079
|
-
font-family:
|
|
4150
|
+
font-family: var(--font-display);
|
|
4080
4151
|
font-variation-settings:
|
|
4081
4152
|
'opsz' 14,
|
|
4082
4153
|
'wght' 700,
|
|
@@ -4329,7 +4400,7 @@ input.ef-input[type='number'] {
|
|
|
4329
4400
|
}
|
|
4330
4401
|
|
|
4331
4402
|
.es-dialog .es-dialog__title {
|
|
4332
|
-
font-family:
|
|
4403
|
+
font-family: var(--font-display);
|
|
4333
4404
|
font-variation-settings:
|
|
4334
4405
|
'opsz' 14,
|
|
4335
4406
|
'wght' 700,
|
|
@@ -4403,7 +4474,7 @@ input.ef-input[type='number'] {
|
|
|
4403
4474
|
color: var(--paper);
|
|
4404
4475
|
display: grid;
|
|
4405
4476
|
place-items: center;
|
|
4406
|
-
font-family:
|
|
4477
|
+
font-family: var(--font-display);
|
|
4407
4478
|
font-variation-settings:
|
|
4408
4479
|
'opsz' 12,
|
|
4409
4480
|
'wght' 700,
|
|
@@ -4512,3 +4583,37 @@ input.ef-input[type='number'] {
|
|
|
4512
4583
|
text-overflow: ellipsis;
|
|
4513
4584
|
}
|
|
4514
4585
|
}
|
|
4586
|
+
|
|
4587
|
+
/* ── TOUCH TARGET TIER ──────────────────────────────────────────────
|
|
4588
|
+
The design system documents three tiers: --hit-base 40px for forms,
|
|
4589
|
+
--hit-touch 48px for touch, --hit-pos 64px for the till. Until now
|
|
4590
|
+
--hit-touch appeared exactly once in this file, and every top-bar
|
|
4591
|
+
icon, pagination control and row-actions trigger rendered at 32px on
|
|
4592
|
+
a phone as well as a desktop, against a guide that promises 48.
|
|
4593
|
+
|
|
4594
|
+
Keyed on `pointer: coarse` rather than a width breakpoint, so a touch
|
|
4595
|
+
laptop is treated as touch and a narrow desktop window is not. Only
|
|
4596
|
+
the box grows; type and icon sizes are left alone. */
|
|
4597
|
+
@media (pointer: coarse) {
|
|
4598
|
+
.btn,
|
|
4599
|
+
.btn-sm {
|
|
4600
|
+
min-block-size: var(--hit-touch);
|
|
4601
|
+
}
|
|
4602
|
+
|
|
4603
|
+
/* An icon-only button has no label to give it width, so the height tier
|
|
4604
|
+
alone leaves a 40px-wide target. Square it off. */
|
|
4605
|
+
.btn:has(> i:only-child),
|
|
4606
|
+
.btn-sm:has(> i:only-child) {
|
|
4607
|
+
min-inline-size: var(--hit-touch);
|
|
4608
|
+
}
|
|
4609
|
+
|
|
4610
|
+
.ef-app-top__action,
|
|
4611
|
+
.ef-theme-toggle,
|
|
4612
|
+
.ef-app-top__logout,
|
|
4613
|
+
.row-actions__trigger,
|
|
4614
|
+
.ef-clear,
|
|
4615
|
+
.pg {
|
|
4616
|
+
inline-size: var(--hit-touch);
|
|
4617
|
+
block-size: var(--hit-touch);
|
|
4618
|
+
}
|
|
4619
|
+
}
|