@twentyfirstmedia/pro 0.5.0 → 0.6.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/dist/scoped.css CHANGED
@@ -303,6 +303,11 @@
303
303
  --chart-lilac: var(--fg-300);
304
304
  --chart-butter: var(--fg-200);
305
305
  --chart-blush: var(--line-300);
306
+ --ramp-1: color-mix(in oklab, var(--chart-1) 12%, var(--background));
307
+ --ramp-2: color-mix(in oklab, var(--chart-1) 28%, var(--background));
308
+ --ramp-3: color-mix(in oklab, var(--chart-1) 46%, var(--background));
309
+ --ramp-4: color-mix(in oklab, var(--chart-1) 66%, var(--background));
310
+ --ramp-5: color-mix(in oklab, var(--chart-1) 88%, var(--background));
306
311
  --ok: #5cc28f;
307
312
  --ok-bg: rgba(92,194,143,0.12);
308
313
  --info: #7aa7f5;
@@ -451,6 +456,11 @@
451
456
  --chart-lilac: var(--fg-300);
452
457
  --chart-butter: var(--fg-200);
453
458
  --chart-blush: var(--line-300);
459
+ --ramp-1: color-mix(in oklab, var(--chart-1) 12%, var(--background));
460
+ --ramp-2: color-mix(in oklab, var(--chart-1) 28%, var(--background));
461
+ --ramp-3: color-mix(in oklab, var(--chart-1) 46%, var(--background));
462
+ --ramp-4: color-mix(in oklab, var(--chart-1) 66%, var(--background));
463
+ --ramp-5: color-mix(in oklab, var(--chart-1) 88%, var(--background));
454
464
  --ok: #5cc28f;
455
465
  --ok-bg: rgba(92,194,143,0.12);
456
466
  --info: #7aa7f5;
@@ -600,6 +610,11 @@
600
610
  --chart-lilac: var(--fg-300);
601
611
  --chart-butter: var(--fg-200);
602
612
  --chart-blush: var(--line-300);
613
+ --ramp-1: color-mix(in oklab, var(--chart-1) 12%, var(--background));
614
+ --ramp-2: color-mix(in oklab, var(--chart-1) 28%, var(--background));
615
+ --ramp-3: color-mix(in oklab, var(--chart-1) 46%, var(--background));
616
+ --ramp-4: color-mix(in oklab, var(--chart-1) 66%, var(--background));
617
+ --ramp-5: color-mix(in oklab, var(--chart-1) 88%, var(--background));
603
618
  --ok: #177447;
604
619
  --ok-bg: rgba(23,116,71,0.09);
605
620
  --info: #2856b0;
@@ -748,6 +763,11 @@
748
763
  --chart-lilac: var(--fg-300);
749
764
  --chart-butter: var(--fg-200);
750
765
  --chart-blush: var(--line-300);
766
+ --ramp-1: color-mix(in oklab, var(--chart-1) 12%, var(--background));
767
+ --ramp-2: color-mix(in oklab, var(--chart-1) 28%, var(--background));
768
+ --ramp-3: color-mix(in oklab, var(--chart-1) 46%, var(--background));
769
+ --ramp-4: color-mix(in oklab, var(--chart-1) 66%, var(--background));
770
+ --ramp-5: color-mix(in oklab, var(--chart-1) 88%, var(--background));
751
771
  --ok: #5cc28f;
752
772
  --ok-bg: rgba(92,194,143,0.12);
753
773
  --info: #7aa7f5;
@@ -895,6 +915,11 @@
895
915
  --chart-lilac: var(--fg-300);
896
916
  --chart-butter: var(--fg-200);
897
917
  --chart-blush: var(--line-300);
918
+ --ramp-1: color-mix(in oklab, var(--chart-1) 12%, var(--background));
919
+ --ramp-2: color-mix(in oklab, var(--chart-1) 28%, var(--background));
920
+ --ramp-3: color-mix(in oklab, var(--chart-1) 46%, var(--background));
921
+ --ramp-4: color-mix(in oklab, var(--chart-1) 66%, var(--background));
922
+ --ramp-5: color-mix(in oklab, var(--chart-1) 88%, var(--background));
898
923
  --ok: #177447;
899
924
  --ok-bg: rgba(23,116,71,0.09);
900
925
  --info: #2856b0;
@@ -1450,7 +1475,8 @@
1450
1475
  border-radius: var(--radius-pill);
1451
1476
  background: var(--surface-sunken);
1452
1477
  color: var(--ink-muted);
1453
- min-width: 220px;
1478
+ min-width: min(220px, 100%);
1479
+ box-sizing: border-box;
1454
1480
  }
1455
1481
  :where([data-kit="pro"]) .tf-search input {
1456
1482
  border: 0;
@@ -1459,6 +1485,7 @@
1459
1485
  font: 500 14px/20px var(--font-sans);
1460
1486
  color: var(--ink);
1461
1487
  width: 100%;
1488
+ min-width: 0;
1462
1489
  }
1463
1490
  :where([data-kit="pro"]) .tf-search input::placeholder {
1464
1491
  color: var(--ink-subtle);
@@ -1540,7 +1567,7 @@
1540
1567
  display: flex;
1541
1568
  }
1542
1569
  :where([data-kit="pro"]) .tf-tabs-block .tf-tab {
1543
- flex: 1;
1570
+ flex: 1 1 0;
1544
1571
  }
1545
1572
 
1546
1573
  /* StatTile */
@@ -1857,6 +1884,36 @@
1857
1884
  background: var(--accent);
1858
1885
  color: var(--accent-foreground);
1859
1886
  }
1887
+ /* expanded: names next to the icons (the sheet's first column follows the rail's width) */
1888
+ :where([data-kit="pro"]) .tf-rail {
1889
+ transition: width var(--dur-base) var(--ease-out);
1890
+ }
1891
+ :where([data-kit="pro"]) .tf-rail.expanded {
1892
+ width: 200px;
1893
+ }
1894
+ :where([data-kit="pro"]) .tf-rail.expanded .tf-rail-group {
1895
+ align-items: stretch;
1896
+ }
1897
+ :where([data-kit="pro"]) .tf-rail.expanded .tf-rail-btn {
1898
+ display: flex;
1899
+ align-items: center;
1900
+ gap: 12px;
1901
+ width: 100%;
1902
+ padding: 0 10px;
1903
+ box-sizing: border-box;
1904
+ border-radius: var(--radius-pill);
1905
+ }
1906
+ :where([data-kit="pro"]) .tf-rail-label {
1907
+ min-width: 0;
1908
+ overflow: hidden;
1909
+ text-overflow: ellipsis;
1910
+ white-space: nowrap;
1911
+ font: 500 13px/18px var(--font-sans);
1912
+ }
1913
+ :where([data-kit="pro"]) .tf-rail.expanded .tf-dotcount {
1914
+ position: static;
1915
+ margin-left: auto;
1916
+ }
1860
1917
  :where([data-kit="pro"]) .tf-rail-btn[aria-current="page"] {
1861
1918
  background: var(--primary);
1862
1919
  color: var(--primary-foreground);
@@ -2006,9 +2063,28 @@
2006
2063
  :where([data-kit="pro"]) .tf-shell .tf-topbar {
2007
2064
  padding: 0 var(--space-6);
2008
2065
  }
2066
+ /* AppShell with navigation="sidebar": the labelled sidebar on the frame, the sheet beside it */
2067
+ :where([data-kit="pro"]) .tf-shell.tf-shell-sidebar {
2068
+ display: grid;
2069
+ grid-template-columns: auto minmax(0, 1fr);
2070
+ align-items: stretch;
2071
+ padding: 8px;
2072
+ }
2073
+ :where([data-kit="pro"]) .tf-shell-tools {
2074
+ display: flex;
2075
+ justify-content: flex-end;
2076
+ flex-wrap: wrap;
2077
+ gap: 8px;
2078
+ }
2079
+ :where([data-kit="pro"]) .tf-sheet.tf-sheet-norail {
2080
+ grid-template-columns: minmax(0, 1fr) 300px;
2081
+ }
2082
+ :where([data-kit="pro"]) .tf-sheet.tf-sheet-norail.tf-sheet-2 {
2083
+ grid-template-columns: minmax(0, 1fr);
2084
+ }
2009
2085
  :where([data-kit="pro"]) .tf-sheet {
2010
2086
  display: grid;
2011
- grid-template-columns: 44px 1fr 300px;
2087
+ grid-template-columns: auto 1fr 300px;
2012
2088
  gap: var(--space-6);
2013
2089
  padding: var(--space-6);
2014
2090
  background: var(--canvas);
@@ -2525,6 +2601,64 @@
2525
2601
  background: var(--accent);
2526
2602
  color: var(--accent-foreground);
2527
2603
  }
2604
+ :where([data-kit="pro"]) a.tf-row-item {
2605
+ text-decoration: none;
2606
+ }
2607
+ :where([data-kit="pro"]) .tf-row-text {
2608
+ min-width: 0;
2609
+ }
2610
+ /* not interactive: no hover, no pointer */
2611
+ :where([data-kit="pro"]) .tf-row-item.static {
2612
+ cursor: default;
2613
+ }
2614
+ :where([data-kit="pro"]) .tf-row-item.static:hover {
2615
+ background: transparent;
2616
+ color: var(--ink);
2617
+ }
2618
+ /* own buttons: the title is the link or button and its hit area stretches over the row */
2619
+ :where([data-kit="pro"]) .tf-row-item.has-hit {
2620
+ position: relative;
2621
+ }
2622
+ :where([data-kit="pro"]) .tf-row-item.has-hit:hover {
2623
+ background: transparent;
2624
+ color: var(--ink);
2625
+ }
2626
+ :where([data-kit="pro"]) .tf-row-item.has-hit:has(.tf-row-hit:hover) {
2627
+ background: var(--accent);
2628
+ color: var(--accent-foreground);
2629
+ }
2630
+ :where([data-kit="pro"]) .tf-row-item.has-hit:has(.tf-row-hit:focus-visible) {
2631
+ outline: 2px solid var(--focus);
2632
+ outline-offset: 2px;
2633
+ }
2634
+ :where([data-kit="pro"]) .tf-row-hit {
2635
+ display: block;
2636
+ padding: 0;
2637
+ border: 0;
2638
+ background: none;
2639
+ color: inherit;
2640
+ font: inherit;
2641
+ text-align: left;
2642
+ text-decoration: none;
2643
+ cursor: pointer;
2644
+ outline: none;
2645
+ }
2646
+ :where([data-kit="pro"]) .tf-row-hit::after {
2647
+ content: "";
2648
+ position: absolute;
2649
+ inset: 0;
2650
+ border-radius: inherit;
2651
+ }
2652
+ :where([data-kit="pro"]) .tf-row-item.has-actions {
2653
+ grid-template-columns: auto 1fr auto auto;
2654
+ }
2655
+ :where([data-kit="pro"]) .tf-row-actions {
2656
+ position: relative;
2657
+ z-index: 1;
2658
+ display: flex;
2659
+ align-items: center;
2660
+ gap: 4px;
2661
+ }
2528
2662
  :where([data-kit="pro"]) .tf-row-item[aria-current="true"] {
2529
2663
  background: var(--surface);
2530
2664
  box-shadow: 0 0 0 var(--line-width) var(--line);
@@ -2536,12 +2670,27 @@
2536
2670
  gap: 8px;
2537
2671
  }
2538
2672
  :where([data-kit="pro"]) .tf-row-sub {
2673
+ display: block;
2539
2674
  font: 500 13px/18px var(--font-sans);
2540
2675
  color: var(--ink-muted);
2541
2676
  white-space: nowrap;
2542
2677
  overflow: hidden;
2543
2678
  text-overflow: ellipsis;
2544
2679
  }
2680
+ /* titleLines / subtitleLines: wrap, then end in an ellipsis after that many lines */
2681
+ :where([data-kit="pro"]) .tf-row-sub.clamp,
2682
+ :where([data-kit="pro"]) .tf-row-clamp {
2683
+ display: -webkit-box;
2684
+ -webkit-box-orient: vertical;
2685
+ -webkit-line-clamp: var(--lines, 2);
2686
+ line-clamp: var(--lines, 2);
2687
+ white-space: normal;
2688
+ overflow: hidden;
2689
+ min-width: 0;
2690
+ }
2691
+ :where([data-kit="pro"]) .tf-row-title.clamp {
2692
+ align-items: flex-start;
2693
+ }
2545
2694
  :where([data-kit="pro"]) .tf-row-meta {
2546
2695
  font: 500 12px/16px var(--font-sans);
2547
2696
  color: var(--ink-muted);
@@ -2728,6 +2877,13 @@
2728
2877
  font: 500 13px/1 var(--font-sans);
2729
2878
  cursor: pointer;
2730
2879
  }
2880
+ :where([data-kit="pro"]) a.tf-page {
2881
+ display: inline-flex;
2882
+ align-items: center;
2883
+ justify-content: center;
2884
+ box-sizing: border-box;
2885
+ text-decoration: none;
2886
+ }
2731
2887
  :where([data-kit="pro"]) .tf-page:hover {
2732
2888
  background: var(--accent);
2733
2889
  color: var(--ink);
@@ -2738,18 +2894,42 @@
2738
2894
  }
2739
2895
  :where([data-kit="pro"]) .tf-crumbs {
2740
2896
  display: flex;
2897
+ flex-wrap: wrap;
2741
2898
  align-items: center;
2742
2899
  gap: 6px;
2900
+ min-width: 0;
2743
2901
  font: 500 13px/18px var(--font-sans);
2744
2902
  color: var(--ink-muted);
2745
2903
  }
2746
- :where([data-kit="pro"]) .tf-crumbs a {
2904
+ /* links and buttons get a 24px target without moving the text */
2905
+ :where([data-kit="pro"]) .tf-crumb {
2906
+ display: inline-flex;
2907
+ align-items: center;
2908
+ min-height: 24px;
2909
+ max-width: 100%;
2910
+ padding: 0 4px;
2911
+ /* the target grows to 24px around the 18px line without moving the text */
2912
+ margin: -3px -4px;
2913
+ border: 0;
2914
+ border-radius: var(--radius-sm);
2915
+ background: none;
2747
2916
  color: inherit;
2917
+ font: inherit;
2748
2918
  text-decoration: none;
2919
+ overflow-wrap: anywhere;
2920
+ }
2921
+ :where([data-kit="pro"]) a.tf-crumb,
2922
+ :where([data-kit="pro"]) button.tf-crumb {
2923
+ cursor: pointer;
2749
2924
  }
2750
- :where([data-kit="pro"]) .tf-crumbs a:hover {
2925
+ :where([data-kit="pro"]) a.tf-crumb:hover,
2926
+ :where([data-kit="pro"]) button.tf-crumb:hover {
2751
2927
  color: var(--ink);
2752
2928
  }
2929
+ :where([data-kit="pro"]) .tf-crumb:focus-visible {
2930
+ outline: 2px solid var(--focus);
2931
+ outline-offset: 0;
2932
+ }
2753
2933
  :where([data-kit="pro"]) .tf-crumbs [aria-current] {
2754
2934
  color: var(--ink);
2755
2935
  }
@@ -2791,7 +2971,7 @@
2791
2971
  cursor: pointer;
2792
2972
  }
2793
2973
  :where([data-kit="pro"]) .tf-sheet-2 {
2794
- grid-template-columns: 44px 1fr;
2974
+ grid-template-columns: auto 1fr;
2795
2975
  }
2796
2976
  :where([data-kit="pro"]) .tf-main {
2797
2977
  display: flex;
@@ -2864,6 +3044,26 @@
2864
3044
  justify-content: center;
2865
3045
  }
2866
3046
  }
3047
+ /* the TopBar measured that the labels do not fit: icons only, at any width */
3048
+ :where([data-kit="pro"]) .tf-nav.tight .tf-nav-label {
3049
+ display: none;
3050
+ }
3051
+ :where([data-kit="pro"]) .tf-nav.tight .tf-nav-item {
3052
+ position: relative;
3053
+ width: 36px;
3054
+ padding: 0;
3055
+ justify-content: center;
3056
+ }
3057
+ :where([data-kit="pro"]) .tf-nav.tight .tf-nav-item .tf-nav-count {
3058
+ position: absolute;
3059
+ top: -2px;
3060
+ right: -4px;
3061
+ min-width: 16px;
3062
+ height: 16px;
3063
+ padding: 0 4px;
3064
+ font-size: 10px;
3065
+ line-height: 16px;
3066
+ }
2867
3067
  :where([data-kit="pro"]) .tf-main {
2868
3068
  animation: none;
2869
3069
  }
@@ -2989,6 +3189,19 @@
2989
3189
  :where([data-kit="pro"]) .tf-user-text {
2990
3190
  display: flex;
2991
3191
  flex-direction: column;
3192
+ min-width: 0;
3193
+ max-width: 200px;
3194
+ }
3195
+ /* a long name or address ends in an ellipsis instead of pushing the nav out (title has it whole) */
3196
+ :where([data-kit="pro"]) .tf-user-name,
3197
+ :where([data-kit="pro"]) .tf-user-mail {
3198
+ overflow: hidden;
3199
+ text-overflow: ellipsis;
3200
+ white-space: nowrap;
3201
+ }
3202
+ :where([data-kit="pro"]) .tf-user {
3203
+ min-width: 0;
3204
+ flex-shrink: 1;
2992
3205
  }
2993
3206
 
2994
3207
  /* Checkbox: real box + SVG check (no pseudo-elements on the input) */
@@ -3001,9 +3214,12 @@
3001
3214
  }
3002
3215
  :where([data-kit="pro"]) .tf-checkbox input {
3003
3216
  position: absolute;
3004
- inset: 0;
3005
- width: 100%;
3006
- height: 100%;
3217
+ /* the box keeps its size; the hit area is at least 24px (WCAG 2.2 target size) */
3218
+ top: 50%;
3219
+ left: 50%;
3220
+ translate: -50% -50%;
3221
+ width: max(24px, 100%);
3222
+ height: max(24px, 100%);
3007
3223
  margin: 0;
3008
3224
  opacity: 0;
3009
3225
  cursor: pointer;
@@ -4078,6 +4294,23 @@
4078
4294
  font: 500 13px/18px var(--font-sans);
4079
4295
  pointer-events: none;
4080
4296
  }
4297
+ /* an interactive control at the end (reveal password, clear, copy) */
4298
+ :where([data-kit="pro"]) .tf-input-action {
4299
+ position: absolute;
4300
+ right: 4px;
4301
+ top: 50%;
4302
+ transform: translateY(-50%);
4303
+ display: inline-flex;
4304
+ }
4305
+ :where([data-kit="pro"]) .tf-inputwrap.has-action .tf-input {
4306
+ padding-right: 44px;
4307
+ }
4308
+ :where([data-kit="pro"]) .tf-inputwrap.has-action.has-suffix .tf-input {
4309
+ padding-right: 72px;
4310
+ }
4311
+ :where([data-kit="pro"]) .tf-inputwrap.has-action .tf-input-suffix {
4312
+ right: 44px;
4313
+ }
4081
4314
  :where([data-kit="pro"]) .tf-input-suffix.err {
4082
4315
  color: var(--blush-ink);
4083
4316
  }
@@ -4237,7 +4470,7 @@
4237
4470
  display: flex;
4238
4471
  }
4239
4472
  :where([data-kit="pro"]) .tf-seg.block .tf-seg-item {
4240
- flex: 1;
4473
+ flex: 1 1 0;
4241
4474
  }
4242
4475
  :where([data-kit="pro"]) .tf-seg-item {
4243
4476
  position: relative;
@@ -4849,6 +5082,10 @@
4849
5082
  border-color var(--dur-fast) ease,
4850
5083
  background-color var(--dur-fast) ease;
4851
5084
  }
5085
+ :where([data-kit="pro"]) .tf-drop.disabled {
5086
+ opacity: 0.5;
5087
+ cursor: not-allowed;
5088
+ }
4852
5089
  :where([data-kit="pro"]) .tf-drop b {
4853
5090
  font: 500 14px/20px var(--font-sans);
4854
5091
  margin-top: 4px;
@@ -4911,6 +5148,7 @@
4911
5148
  /* Alert, confirm, toaster */
4912
5149
  :where([data-kit="pro"]) .tf-alert {
4913
5150
  display: flex;
5151
+ flex-wrap: wrap;
4914
5152
  align-items: flex-start;
4915
5153
  gap: 12px;
4916
5154
  padding: 12px 12px 12px 16px;
@@ -4954,7 +5192,8 @@
4954
5192
  color: var(--lilac-ink);
4955
5193
  }
4956
5194
  :where([data-kit="pro"]) .tf-alert-body {
4957
- flex: 1;
5195
+ /* when the alert is too narrow for text and actions, the actions move to their own line */
5196
+ flex: 1 1 200px;
4958
5197
  min-width: 0;
4959
5198
  display: flex;
4960
5199
  flex-direction: column;
@@ -4970,8 +5209,11 @@
4970
5209
  :where([data-kit="pro"]) .tf-alert-actions {
4971
5210
  flex: none;
4972
5211
  display: flex;
5212
+ flex-wrap: wrap;
4973
5213
  align-items: center;
4974
5214
  gap: 4px;
5215
+ max-width: 100%;
5216
+ margin-left: auto;
4975
5217
  }
4976
5218
  :where([data-kit="pro"]) .tf-alert .tf-iconbtn-ghost {
4977
5219
  background: transparent;
@@ -5981,14 +6223,29 @@
5981
6223
  display: inline-flex;
5982
6224
  align-items: center;
5983
6225
  gap: 8px;
5984
- height: var(--control-sm);
5985
- padding: 0 12px 0 4px;
6226
+ /* grows with a long title (two lines at most) instead of spilling over */
6227
+ min-height: var(--control-sm);
6228
+ box-sizing: border-box;
6229
+ padding: 4px 12px 4px 4px;
5986
6230
  border-radius: var(--radius-pill);
5987
6231
  background: var(--surface-sunken);
5988
6232
  color: var(--ink);
5989
6233
  text-decoration: none;
5990
6234
  font: 500 12px/16px var(--font-sans);
5991
- max-width: 260px;
6235
+ max-width: min(260px, 100%);
6236
+ }
6237
+ :where([data-kit="pro"]) .tf-source-title {
6238
+ min-width: 0;
6239
+ display: -webkit-box;
6240
+ -webkit-box-orient: vertical;
6241
+ -webkit-line-clamp: 2;
6242
+ line-clamp: 2;
6243
+ overflow: hidden;
6244
+ overflow-wrap: anywhere;
6245
+ }
6246
+ :where([data-kit="pro"]) .tf-source > .tf-ico,
6247
+ :where([data-kit="pro"]) .tf-source-n {
6248
+ flex: none;
5992
6249
  }
5993
6250
  :where([data-kit="pro"]) .tf-source:hover {
5994
6251
  background: var(--line);
@@ -7111,17 +7368,25 @@
7111
7368
  color: var(--ink-muted);
7112
7369
  }
7113
7370
  :where([data-kit="pro"]) .tf-csteps {
7371
+ /* one row at every width: steps shrink to their numbers instead of wrapping */
7372
+ container: tf-csteps / inline-size;
7114
7373
  display: flex;
7115
7374
  gap: 8px;
7116
7375
  margin: 0;
7117
7376
  padding: 0;
7118
7377
  list-style: none;
7119
- flex-wrap: wrap;
7120
7378
  }
7121
7379
  :where([data-kit="pro"]) .tf-csteps li {
7122
7380
  display: flex;
7123
7381
  align-items: center;
7124
7382
  gap: 8px;
7383
+ min-width: 0;
7384
+ }
7385
+ :where([data-kit="pro"]) .tf-cstep-label {
7386
+ min-width: 0;
7387
+ overflow: hidden;
7388
+ text-overflow: ellipsis;
7389
+ white-space: nowrap;
7125
7390
  }
7126
7391
  :where([data-kit="pro"]) .tf-csteps li + li::before {
7127
7392
  content: "";
@@ -7150,6 +7415,40 @@
7150
7415
  :where([data-kit="pro"]) .tf-csteps button:disabled {
7151
7416
  cursor: default;
7152
7417
  }
7418
+ :where([data-kit="pro"]) .tf-csteps button {
7419
+ min-width: 0;
7420
+ max-width: 100%;
7421
+ }
7422
+ :where([data-kit="pro"]) .tf-csteps.compact li:not(.cur) .tf-cstep-label {
7423
+ position: absolute;
7424
+ width: 1px;
7425
+ height: 1px;
7426
+ overflow: hidden;
7427
+ clip-path: inset(50%);
7428
+ white-space: nowrap;
7429
+ }
7430
+ :where([data-kit="pro"]) .tf-csteps.compact li:not(.cur) button {
7431
+ padding: 0 4px;
7432
+ }
7433
+ :where([data-kit="pro"]) .tf-csteps.compact li + li::before {
7434
+ width: 12px;
7435
+ }
7436
+ @container tf-csteps (max-width: 560px) {
7437
+ :where([data-kit="pro"]) .tf-csteps li:not(.cur) .tf-cstep-label {
7438
+ position: absolute;
7439
+ width: 1px;
7440
+ height: 1px;
7441
+ overflow: hidden;
7442
+ clip-path: inset(50%);
7443
+ white-space: nowrap;
7444
+ }
7445
+ :where([data-kit="pro"]) .tf-csteps li:not(.cur) button {
7446
+ padding: 0 4px;
7447
+ }
7448
+ :where([data-kit="pro"]) .tf-csteps li + li::before {
7449
+ width: 12px;
7450
+ }
7451
+ }
7153
7452
  :where([data-kit="pro"]) .tf-csteps li.cur button {
7154
7453
  background: var(--surface);
7155
7454
  color: var(--ink);
@@ -7316,7 +7615,7 @@
7316
7615
  color: var(--on-frame);
7317
7616
  box-shadow: var(--shadow-float), 0 0 0 var(--line-width) var(--line);
7318
7617
  }
7319
- :where([data-kit="pro"]) .tf-plan.featured .tf-plan-head span,
7618
+ :where([data-kit="pro"]) .tf-plan.featured .tf-plan-head span:not(.tf-badge),
7320
7619
  :where([data-kit="pro"]) .tf-plan.featured .tf-plan-price span,
7321
7620
  :where([data-kit="pro"]) .tf-plan.featured .tf-plan-price s,
7322
7621
  :where([data-kit="pro"]) .tf-plan.featured .tf-plan-feats li.no {
@@ -7347,10 +7646,22 @@
7347
7646
  :where([data-kit="pro"]) .tf-plan-head b {
7348
7647
  font: 600 18px/24px var(--font-sans);
7349
7648
  }
7350
- :where([data-kit="pro"]) .tf-plan-head span {
7649
+ :where([data-kit="pro"]) .tf-plan-head span:not(.tf-badge) {
7351
7650
  font: 500 13px/18px var(--font-sans);
7352
7651
  color: var(--ink-muted);
7353
7652
  }
7653
+ /* "Current plan" next to the name, and the note under the price */
7654
+ :where([data-kit="pro"]) .tf-plan-head .tf-plan-current {
7655
+ align-self: flex-start;
7656
+ }
7657
+ :where([data-kit="pro"]) .tf-plan-note {
7658
+ margin: -4px 0 0;
7659
+ font: 500 12px/16px var(--font-sans);
7660
+ color: var(--ink-muted);
7661
+ }
7662
+ :where([data-kit="pro"]) a.tf-plan-cta {
7663
+ text-decoration: none;
7664
+ }
7354
7665
  :where([data-kit="pro"]) .tf-plan-price {
7355
7666
  display: flex;
7356
7667
  align-items: baseline;
@@ -9456,7 +9767,7 @@
9456
9767
  :where([data-kit="pro"]) .tf-tabbar {
9457
9768
  display: grid;
9458
9769
  grid-auto-flow: column;
9459
- grid-auto-columns: 1fr;
9770
+ grid-auto-columns: minmax(0, 1fr);
9460
9771
  padding: 4px 8px calc(4px + env(safe-area-inset-bottom, 0px));
9461
9772
  background: var(--frame);
9462
9773
  border-radius: var(--radius-1) var(--radius-1) 0 0;
@@ -9475,6 +9786,17 @@
9475
9786
  cursor: pointer;
9476
9787
  border-radius: var(--radius-1);
9477
9788
  }
9789
+ :where([data-kit="pro"]) .tf-tabbar-item {
9790
+ min-width: 0;
9791
+ }
9792
+ :where([data-kit="pro"]) .tf-tabbar-label {
9793
+ max-width: 100%;
9794
+ padding: 0 4px;
9795
+ box-sizing: border-box;
9796
+ overflow: hidden;
9797
+ text-overflow: ellipsis;
9798
+ white-space: nowrap;
9799
+ }
9478
9800
  :where([data-kit="pro"]) .tf-tabbar-item.on {
9479
9801
  color: var(--on-frame);
9480
9802
  background: var(--frame-hover);
@@ -9787,6 +10109,22 @@
9787
10109
  padding-bottom: 10px;
9788
10110
  color: var(--ink-muted);
9789
10111
  }
10112
+ /* in a narrow column (a filter sidebar) the number fields give their padding to the digits */
10113
+ :where([data-kit="pro"]) .tf-range {
10114
+ container: tf-range / inline-size;
10115
+ }
10116
+ @container tf-range (max-width: 280px) {
10117
+ :where([data-kit="pro"]) .tf-range-inputs {
10118
+ gap: 4px;
10119
+ }
10120
+ :where([data-kit="pro"]) .tf-range-num .tf-input {
10121
+ padding-left: 10px;
10122
+ padding-right: 24px;
10123
+ }
10124
+ :where([data-kit="pro"]) .tf-range-num > span {
10125
+ right: 10px;
10126
+ }
10127
+ }
9790
10128
  :where([data-kit="pro"]) .tf-range-vals {
9791
10129
  display: flex;
9792
10130
  justify-content: space-between;
@@ -9940,6 +10278,31 @@
9940
10278
  font: 500 12px/16px var(--font-sans);
9941
10279
  color: var(--ink-muted);
9942
10280
  }
10281
+ /* layout="list": compact rows */
10282
+ :where([data-kit="pro"]) .tf-tiles.list {
10283
+ grid-template-columns: minmax(0, 1fr);
10284
+ gap: 8px;
10285
+ }
10286
+ :where([data-kit="pro"]) .tf-tiles.list .tf-tile {
10287
+ flex-direction: row;
10288
+ align-items: center;
10289
+ gap: 12px;
10290
+ padding: 8px 44px 8px 8px;
10291
+ }
10292
+ :where([data-kit="pro"]) .tf-tiles.list .tf-tile-art {
10293
+ flex: none;
10294
+ width: 40px;
10295
+ height: var(--density-control);
10296
+ aspect-ratio: auto;
10297
+ }
10298
+ :where([data-kit="pro"]) .tf-tiles.list .tf-tile-label {
10299
+ min-width: 0;
10300
+ padding: 0;
10301
+ }
10302
+ :where([data-kit="pro"]) .tf-tiles.list .tf-tile-check {
10303
+ top: 50%;
10304
+ translate: 0 -50%;
10305
+ }
9943
10306
  :where([data-kit="pro"]) .tf-tile-check {
9944
10307
  position: absolute;
9945
10308
  top: 14px;
@@ -11049,6 +11412,16 @@
11049
11412
  color: var(--paper-ink);
11050
11413
  box-shadow: inset 0 0 0 1px var(--line);
11051
11414
  }
11415
+ /* QrCode: dark modules on paper, in every theme (scanners expect dark on light) */
11416
+ :where([data-kit="pro"]) .tf-qr {
11417
+ display: block;
11418
+ width: 100%;
11419
+ height: auto;
11420
+ color: var(--paper-ink);
11421
+ }
11422
+ :where([data-kit="pro"]) .tf-qr-bg {
11423
+ fill: var(--paper);
11424
+ }
11052
11425
  :where([data-kit="pro"]) .tf-2fa-qr > * {
11053
11426
  max-width: 100%;
11054
11427
  max-height: 100%;
@@ -11300,7 +11673,8 @@
11300
11673
  border-radius: var(--radius-md);
11301
11674
  overflow: hidden;
11302
11675
  background: var(--surface-sunken);
11303
- touch-action: none;
11676
+ /* sideways drags move the divider; the page still scrolls up and down over it */
11677
+ touch-action: pan-y;
11304
11678
  user-select: none;
11305
11679
  cursor: ew-resize;
11306
11680
  }
@@ -12204,6 +12578,14 @@
12204
12578
  :where([data-kit="pro"]) .tf-togglegroup .tf-toggle {
12205
12579
  height: var(--control-sm);
12206
12580
  }
12581
+ :where([data-kit="pro"]) .tf-togglegroup.block {
12582
+ display: flex;
12583
+ flex-wrap: nowrap;
12584
+ width: auto;
12585
+ }
12586
+ :where([data-kit="pro"]) .tf-togglegroup.block .tf-toggle {
12587
+ flex: 1 1 0;
12588
+ }
12207
12589
  :where([data-kit="pro"]) .tf-togglegroup .tf-toggle.icon {
12208
12590
  width: 32px;
12209
12591
  }
@@ -12414,6 +12796,11 @@
12414
12796
  text-align: left;
12415
12797
  cursor: pointer;
12416
12798
  }
12799
+ :where([data-kit="pro"]) .tf-selectmenu.sm {
12800
+ height: var(--control-sm);
12801
+ padding: 0 12px;
12802
+ font-size: 13px;
12803
+ }
12417
12804
  :where([data-kit="pro"]) .tf-selectmenu.empty .tf-selectmenu-value {
12418
12805
  color: var(--ink-subtle);
12419
12806
  }
@@ -12690,26 +13077,44 @@
12690
13077
  outline-offset: -2px;
12691
13078
  }
12692
13079
 
12693
- /* Sidebar */
13080
+ /* Sidebar: floating (a card), attached (flush with the screen's edge) or on the AppShell frame */
12694
13081
  :where([data-kit="pro"]) .tf-sidebar {
12695
13082
  display: flex;
12696
13083
  flex-direction: column;
12697
- gap: 16px;
13084
+ flex: none;
13085
+ gap: 12px;
12698
13086
  width: 248px;
12699
13087
  padding: 12px;
12700
13088
  box-sizing: border-box;
12701
13089
  border-radius: var(--radius-lg);
12702
13090
  background: var(--surface);
12703
13091
  box-shadow: 0 0 0 var(--line-width) var(--line);
13092
+ color: var(--ink);
12704
13093
  transition: width var(--dur-base) var(--ease-out);
12705
13094
  }
12706
13095
  :where([data-kit="pro"]) .tf-sidebar.collapsed {
12707
13096
  width: 64px;
12708
13097
  }
13098
+ :where([data-kit="pro"]) .tf-sidebar.attached {
13099
+ align-self: stretch;
13100
+ min-height: 100%;
13101
+ border-radius: 0;
13102
+ box-shadow: none;
13103
+ background: var(--sidebar);
13104
+ border-right: 1px solid var(--sidebar-border);
13105
+ }
13106
+ :where([data-kit="pro"]) .tf-sidebar-head {
13107
+ display: flex;
13108
+ align-items: center;
13109
+ gap: 8px;
13110
+ min-height: var(--density-control);
13111
+ padding: 0 4px;
13112
+ }
12709
13113
  :where([data-kit="pro"]) .tf-sidebar-body {
12710
13114
  display: flex;
12711
13115
  flex-direction: column;
12712
- gap: 16px;
13116
+ /* groups sit clearly apart; a label sits close to its own items */
13117
+ gap: 20px;
12713
13118
  flex: 1;
12714
13119
  min-height: 0;
12715
13120
  overflow-y: auto;
@@ -12722,13 +13127,49 @@
12722
13127
  padding: 0;
12723
13128
  list-style: none;
12724
13129
  }
13130
+ :where([data-kit="pro"]) .tf-sidebar-grouphead {
13131
+ display: flex;
13132
+ align-items: center;
13133
+ gap: 4px;
13134
+ min-height: 24px;
13135
+ margin-bottom: 8px;
13136
+ padding: 0 4px 0 12px;
13137
+ }
12725
13138
  :where([data-kit="pro"]) .tf-sidebar-grouplabel {
12726
- padding: 0 12px 6px;
13139
+ display: flex;
13140
+ align-items: center;
13141
+ gap: 4px;
13142
+ flex: 1;
13143
+ min-width: 0;
13144
+ padding: 0;
13145
+ border: 0;
13146
+ background: none;
12727
13147
  font: 500 11px/14px var(--font-sans);
12728
13148
  letter-spacing: 0.06em;
12729
13149
  text-transform: uppercase;
13150
+ text-align: left;
12730
13151
  color: var(--ink-muted);
12731
13152
  }
13153
+ :where([data-kit="pro"]) button.tf-sidebar-grouplabel {
13154
+ cursor: pointer;
13155
+ }
13156
+ :where([data-kit="pro"]) button.tf-sidebar-grouplabel:hover {
13157
+ color: var(--ink);
13158
+ }
13159
+ :where([data-kit="pro"]) button.tf-sidebar-grouplabel:focus-visible {
13160
+ outline: 2px solid var(--focus);
13161
+ outline-offset: 2px;
13162
+ }
13163
+ :where([data-kit="pro"]) .tf-sidebar-grouplabel[aria-expanded="false"] .tf-sidebar-chev {
13164
+ transform: rotate(-90deg);
13165
+ }
13166
+ :where([data-kit="pro"]) .tf-sidebar-groupaction {
13167
+ flex: none;
13168
+ margin-left: auto;
13169
+ }
13170
+ :where([data-kit="pro"]) .tf-sidebar-li {
13171
+ position: relative;
13172
+ }
12732
13173
  :where([data-kit="pro"]) .tf-sidebar-item {
12733
13174
  display: flex;
12734
13175
  align-items: center;
@@ -12736,15 +13177,86 @@
12736
13177
  width: 100%;
12737
13178
  height: var(--density-control);
12738
13179
  padding: 0 12px;
13180
+ box-sizing: border-box;
12739
13181
  border: 0;
12740
13182
  border-radius: var(--radius-pill);
12741
13183
  background: transparent;
12742
13184
  color: var(--ink-muted);
12743
13185
  font: 500 13px/18px var(--font-sans);
12744
13186
  text-align: left;
13187
+ text-decoration: none;
12745
13188
  cursor: pointer;
12746
13189
  }
12747
- :where([data-kit="pro"]) .tf-sidebar-item:hover {
13190
+ /* Filter options (Sidebar as="aside"): a checkbox or radio mark, the label and a count */
13191
+ :where([data-kit="pro"]) .tf-sidebar-option {
13192
+ position: relative;
13193
+ }
13194
+ :where([data-kit="pro"]) .tf-sidebar-option.disabled {
13195
+ opacity: 0.45;
13196
+ cursor: default;
13197
+ }
13198
+ :where([data-kit="pro"]) .tf-sidebar-input {
13199
+ position: absolute;
13200
+ width: 1px;
13201
+ height: 1px;
13202
+ margin: 0;
13203
+ opacity: 0;
13204
+ pointer-events: none;
13205
+ }
13206
+ :where([data-kit="pro"]) .tf-sidebar-mark {
13207
+ display: grid;
13208
+ place-items: center;
13209
+ flex: none;
13210
+ width: 18px;
13211
+ height: 18px;
13212
+ box-sizing: border-box;
13213
+ border-radius: var(--radius-1);
13214
+ border: 1.5px solid var(--line-strong);
13215
+ background: var(--surface);
13216
+ color: var(--primary-foreground);
13217
+ transition:
13218
+ background-color var(--dur-fast) var(--ease-out),
13219
+ border-color var(--dur-fast) var(--ease-out);
13220
+ }
13221
+ :where([data-kit="pro"]) .tf-sidebar-mark.radio {
13222
+ border-radius: var(--radius-full);
13223
+ }
13224
+ :where([data-kit="pro"]) .tf-sidebar-mark svg {
13225
+ opacity: 0;
13226
+ }
13227
+ :where([data-kit="pro"]) .tf-sidebar-input:checked + .tf-sidebar-mark {
13228
+ background: var(--primary);
13229
+ border-color: var(--primary);
13230
+ }
13231
+ :where([data-kit="pro"]) .tf-sidebar-input:checked + .tf-sidebar-mark.radio {
13232
+ box-shadow: inset 0 0 0 3px var(--surface);
13233
+ }
13234
+ :where([data-kit="pro"]) .tf-sidebar-input:checked + .tf-sidebar-mark svg {
13235
+ opacity: 1;
13236
+ }
13237
+ :where([data-kit="pro"]) .tf-sidebar-input:focus-visible + .tf-sidebar-mark {
13238
+ outline: 2px solid var(--focus);
13239
+ outline-offset: 2px;
13240
+ }
13241
+ :where([data-kit="pro"]) .tf-sidebar-option:has(.tf-sidebar-input:checked) {
13242
+ color: var(--ink);
13243
+ }
13244
+ /* free content in a group (sliders, date fields, chips) */
13245
+ :where([data-kit="pro"]) .tf-sidebar-content {
13246
+ display: flex;
13247
+ flex-direction: column;
13248
+ gap: 12px;
13249
+ padding: 4px 12px 0;
13250
+ min-width: 0;
13251
+ }
13252
+ :where([data-kit="pro"]) .tf-sidebar-groupbody {
13253
+ display: flex;
13254
+ flex-direction: column;
13255
+ gap: 2px;
13256
+ min-width: 0;
13257
+ }
13258
+ :where([data-kit="pro"]) .tf-sidebar-item:hover,
13259
+ :where([data-kit="pro"]) .tf-sidebar-item.flying {
12748
13260
  background: var(--sidebar-accent);
12749
13261
  color: var(--ink);
12750
13262
  }
@@ -12759,10 +13271,21 @@
12759
13271
  outline: 2px solid var(--focus);
12760
13272
  outline-offset: 2px;
12761
13273
  }
13274
+ :where([data-kit="pro"]) .tf-sidebar-item:disabled {
13275
+ opacity: 0.45;
13276
+ cursor: not-allowed;
13277
+ }
13278
+ :where([data-kit="pro"]) .tf-sidebar-item:disabled:hover {
13279
+ background: transparent;
13280
+ color: var(--ink-muted);
13281
+ }
12762
13282
  :where([data-kit="pro"]) .tf-sidebar-item.nested {
12763
13283
  height: var(--control-sm);
12764
13284
  padding-left: 40px;
12765
13285
  }
13286
+ :where([data-kit="pro"]) .tf-sidebar-sub {
13287
+ margin-top: 2px !important;
13288
+ }
12766
13289
  :where([data-kit="pro"]) .tf-sidebar-label {
12767
13290
  flex: 1;
12768
13291
  min-width: 0;
@@ -12771,22 +13294,107 @@
12771
13294
  white-space: nowrap;
12772
13295
  }
12773
13296
  :where([data-kit="pro"]) .tf-sidebar-chev {
13297
+ flex: none;
12774
13298
  transition: transform var(--dur-base) var(--ease-out);
12775
13299
  }
12776
13300
  :where([data-kit="pro"]) .tf-sidebar-item[aria-expanded="true"] .tf-sidebar-chev {
12777
13301
  transform: rotate(180deg);
12778
13302
  }
13303
+ :where([data-kit="pro"]) .tf-sidebar-ext {
13304
+ flex: none;
13305
+ opacity: 0.7;
13306
+ }
13307
+ :where([data-kit="pro"]) .tf-sidebar-count {
13308
+ flex: none;
13309
+ min-width: 20px;
13310
+ height: 20px;
13311
+ padding: 0 6px;
13312
+ box-sizing: border-box;
13313
+ border-radius: var(--radius-pill);
13314
+ background: var(--count);
13315
+ color: var(--on-count);
13316
+ font: 600 11px/20px var(--font-sans);
13317
+ text-align: center;
13318
+ }
13319
+ :where([data-kit="pro"]) .tf-sidebar-badge {
13320
+ flex: none;
13321
+ height: 20px;
13322
+ padding: 0 8px;
13323
+ box-sizing: border-box;
13324
+ border-radius: var(--radius-pill);
13325
+ background: var(--count);
13326
+ color: var(--on-count);
13327
+ font: 600 10px/20px var(--font-sans);
13328
+ letter-spacing: 0.04em;
13329
+ text-transform: uppercase;
13330
+ }
13331
+ :where([data-kit="pro"]) .tf-sidebar-dot {
13332
+ flex: none;
13333
+ width: 8px;
13334
+ height: 8px;
13335
+ border-radius: var(--radius-full);
13336
+ background: var(--count);
13337
+ }
13338
+ :where([data-kit="pro"]) .tf-sidebar-sr {
13339
+ position: absolute;
13340
+ width: 1px;
13341
+ height: 1px;
13342
+ overflow: hidden;
13343
+ clip-path: inset(50%);
13344
+ white-space: nowrap;
13345
+ }
13346
+ /* the "…" menu of an item shows on hover and focus */
13347
+ :where([data-kit="pro"]) .tf-sidebar-li.with-actions > .tf-sidebar-item {
13348
+ padding-right: 40px;
13349
+ }
13350
+ :where([data-kit="pro"]) .tf-sidebar-more {
13351
+ position: absolute;
13352
+ top: 4px;
13353
+ right: 4px;
13354
+ opacity: 0;
13355
+ transition: opacity var(--dur-fast) var(--ease-out);
13356
+ }
13357
+ :where([data-kit="pro"]) .tf-sidebar-li:hover > .tf-sidebar-more,
13358
+ :where([data-kit="pro"]) .tf-sidebar-more:focus-visible,
13359
+ :where([data-kit="pro"]) .tf-sidebar-more[aria-expanded="true"] {
13360
+ opacity: 1;
13361
+ }
12779
13362
  :where([data-kit="pro"]) .tf-sidebar-foot {
12780
13363
  display: flex;
12781
13364
  align-items: center;
12782
- justify-content: space-between;
12783
13365
  gap: 8px;
12784
13366
  padding-top: 12px;
12785
13367
  border-top: 1px solid var(--sidebar-border);
12786
13368
  }
13369
+ :where([data-kit="pro"]) .tf-sidebar-foot > :not(.tf-sidebar-toggle) {
13370
+ flex: 1;
13371
+ min-width: 0;
13372
+ }
13373
+ :where([data-kit="pro"]) .tf-sidebar-toggle {
13374
+ flex: none;
13375
+ margin-left: auto;
13376
+ }
13377
+ :where([data-kit="pro"]) .tf-sidebar-head .tf-pop-anchor,
13378
+ :where([data-kit="pro"]) .tf-sidebar-foot .tf-pop-anchor {
13379
+ display: block;
13380
+ min-width: 0;
13381
+ }
13382
+ :where([data-kit="pro"]) .tf-sidebar-head .tf-wssw {
13383
+ width: 100%;
13384
+ }
13385
+ :where([data-kit="pro"]) .tf-sidebar-head .tf-wssw .tf-option-text {
13386
+ flex: 1;
13387
+ min-width: 0;
13388
+ }
13389
+
13390
+ /* collapsed: icons only; labels stay the accessible names, tooltips and flyouts show them */
13391
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-body {
13392
+ gap: 12px;
13393
+ }
12787
13394
  :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-label,
12788
13395
  :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-chev,
12789
- :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-grouplabel {
13396
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-ext,
13397
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-grouphead {
12790
13398
  position: absolute;
12791
13399
  width: 1px;
12792
13400
  height: 1px;
@@ -12794,12 +13402,19 @@
12794
13402
  clip-path: inset(50%);
12795
13403
  white-space: nowrap;
12796
13404
  }
13405
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-group + .tf-sidebar-group {
13406
+ padding-top: 12px;
13407
+ border-top: 1px solid var(--sidebar-border);
13408
+ }
12797
13409
  :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-item {
12798
13410
  position: relative;
12799
13411
  justify-content: center;
12800
13412
  padding: 0;
12801
13413
  }
12802
- :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-subnav-count {
13414
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-item.has-current {
13415
+ background: var(--sidebar-accent);
13416
+ }
13417
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-count {
12803
13418
  position: absolute;
12804
13419
  top: -2px;
12805
13420
  right: -2px;
@@ -12809,13 +13424,273 @@
12809
13424
  font-size: 10px;
12810
13425
  line-height: 16px;
12811
13426
  }
13427
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-dot,
13428
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-badge {
13429
+ position: absolute;
13430
+ top: 6px;
13431
+ right: 8px;
13432
+ width: 8px;
13433
+ height: 8px;
13434
+ padding: 0;
13435
+ font-size: 0;
13436
+ }
13437
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-head {
13438
+ justify-content: center;
13439
+ padding: 0;
13440
+ }
12812
13441
  :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-foot {
12813
13442
  flex-direction: column;
12814
13443
  }
13444
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-foot > :not(.tf-sidebar-toggle) {
13445
+ flex: none;
13446
+ }
13447
+ :where([data-kit="pro"]) .tf-sidebar.collapsed .tf-sidebar-toggle {
13448
+ margin-left: 0;
13449
+ }
13450
+
13451
+ /* tooltips, flyouts and item menus float in the portal, so the scrolling body does not clip them */
13452
+ :where([data-kit="pro"]) .tf-sidebar-layer {
13453
+ position: fixed;
13454
+ z-index: var(--z-palette);
13455
+ }
13456
+ :where([data-kit="pro"]) .tf-sidebar-tip {
13457
+ display: inline-flex;
13458
+ align-items: center;
13459
+ gap: 8px;
13460
+ padding: 4px 8px;
13461
+ border-radius: var(--radius-sm);
13462
+ background: var(--frame);
13463
+ color: var(--on-frame);
13464
+ font: 500 12px/16px var(--font-sans);
13465
+ white-space: nowrap;
13466
+ pointer-events: none;
13467
+ animation: tf-pro-fade var(--dur-fast) var(--ease-out) both;
13468
+ }
13469
+ :where([data-kit="pro"]) .tf-sidebar-tipcount {
13470
+ color: var(--on-frame-muted);
13471
+ }
13472
+ :where([data-kit="pro"]) .tf-sidebar-flyout {
13473
+ min-width: 200px;
13474
+ padding: 6px;
13475
+ border-radius: var(--radius-md);
13476
+ background: var(--surface);
13477
+ color: var(--ink);
13478
+ box-shadow: var(--shadow-float), 0 0 0 var(--line-width) var(--line);
13479
+ animation: tf-pro-fade var(--dur-fast) var(--ease-out) both;
13480
+ }
13481
+ :where([data-kit="pro"]) .tf-sidebar-flyout ul {
13482
+ display: flex;
13483
+ flex-direction: column;
13484
+ gap: 2px;
13485
+ margin: 0;
13486
+ padding: 0;
13487
+ list-style: none;
13488
+ }
13489
+ :where([data-kit="pro"]) .tf-sidebar-flytitle {
13490
+ padding: 6px 12px 8px;
13491
+ font: 500 11px/14px var(--font-sans);
13492
+ letter-spacing: 0.06em;
13493
+ text-transform: uppercase;
13494
+ color: var(--ink-muted);
13495
+ }
13496
+ :where([data-kit="pro"]) .tf-sidebar-flyout .tf-sidebar-item.nested {
13497
+ padding-left: 12px;
13498
+ }
13499
+
13500
+ /* on the AppShell frame */
13501
+ :where([data-kit="pro"]) .tf-sidebar.shell {
13502
+ align-self: stretch;
13503
+ padding: 16px 8px 8px;
13504
+ border-radius: 0;
13505
+ background: transparent;
13506
+ box-shadow: none;
13507
+ color: var(--on-frame);
13508
+ }
13509
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-item,
13510
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-grouplabel {
13511
+ color: var(--on-frame-muted);
13512
+ }
13513
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-item:hover,
13514
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-item.flying,
13515
+ :where([data-kit="pro"]) .tf-sidebar.shell.collapsed .tf-sidebar-item.has-current {
13516
+ background: var(--frame-hover);
13517
+ color: var(--on-frame);
13518
+ }
13519
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-item.has-current,
13520
+ :where([data-kit="pro"]) .tf-sidebar.shell button.tf-sidebar-grouplabel:hover {
13521
+ color: var(--on-frame);
13522
+ }
13523
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-item[aria-current="page"] {
13524
+ background: var(--frame-active);
13525
+ color: var(--on-frame);
13526
+ }
13527
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-item:disabled:hover {
13528
+ background: transparent;
13529
+ color: var(--on-frame-muted);
13530
+ }
13531
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-foot,
13532
+ :where([data-kit="pro"]) .tf-sidebar.shell.collapsed .tf-sidebar-group + .tf-sidebar-group {
13533
+ border-color: var(--frame-hover);
13534
+ }
13535
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-iconbtn-ghost {
13536
+ color: var(--on-frame-muted);
13537
+ }
13538
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-iconbtn-ghost:hover {
13539
+ background: var(--frame-hover);
13540
+ color: var(--on-frame);
13541
+ }
13542
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-sidebar-head {
13543
+ min-height: 44px;
13544
+ }
13545
+
13546
+ /* UserMenu: the signed-in person, opening their account menu */
13547
+ :where([data-kit="pro"]) .tf-usermenu {
13548
+ display: flex;
13549
+ align-items: center;
13550
+ gap: 10px;
13551
+ width: 100%;
13552
+ min-height: 44px;
13553
+ padding: 4px 8px 4px 4px;
13554
+ box-sizing: border-box;
13555
+ border: 0;
13556
+ border-radius: var(--radius-pill);
13557
+ background: transparent;
13558
+ color: var(--ink);
13559
+ font: inherit;
13560
+ text-align: left;
13561
+ cursor: pointer;
13562
+ }
13563
+ :where([data-kit="pro"]) .tf-usermenu.compact {
13564
+ width: auto;
13565
+ padding: 4px;
13566
+ }
13567
+ :where([data-kit="pro"]) .tf-usermenu:hover,
13568
+ :where([data-kit="pro"]) .tf-usermenu[aria-expanded="true"] {
13569
+ background: var(--sidebar-accent);
13570
+ }
13571
+ :where([data-kit="pro"]) .tf-usermenu:focus-visible {
13572
+ outline: 2px solid var(--focus);
13573
+ outline-offset: 2px;
13574
+ }
13575
+ :where([data-kit="pro"]) .tf-usermenu-avatar {
13576
+ display: inline-flex;
13577
+ flex: none;
13578
+ }
13579
+ :where([data-kit="pro"]) .tf-usermenu-text {
13580
+ display: flex;
13581
+ flex-direction: column;
13582
+ flex: 1;
13583
+ min-width: 0;
13584
+ }
13585
+ :where([data-kit="pro"]) .tf-usermenu-name {
13586
+ font: 500 13px/18px var(--font-sans);
13587
+ overflow: hidden;
13588
+ text-overflow: ellipsis;
13589
+ white-space: nowrap;
13590
+ }
13591
+ :where([data-kit="pro"]) .tf-usermenu-mail {
13592
+ font: 500 11px/14px var(--font-sans);
13593
+ color: var(--ink-muted);
13594
+ overflow: hidden;
13595
+ text-overflow: ellipsis;
13596
+ white-space: nowrap;
13597
+ }
13598
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-usermenu {
13599
+ color: var(--on-frame);
13600
+ }
13601
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-usermenu:hover,
13602
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-usermenu[aria-expanded="true"] {
13603
+ background: var(--frame-hover);
13604
+ }
13605
+ :where([data-kit="pro"]) .tf-sidebar.shell .tf-usermenu-mail {
13606
+ color: var(--on-frame-muted);
13607
+ }
13608
+ :where([data-kit="pro"]) .tf-wssw.compact {
13609
+ padding: 4px;
13610
+ }
13611
+
13612
+ /* the bar that opens the sidebar as a drawer on phones */
13613
+ :where([data-kit="pro"]) .tf-sidebar-bar,
13614
+ :where([data-kit="pro"]) .tf-sidebar-scrim {
13615
+ display: none;
13616
+ }
12815
13617
  @media (max-width: 760px) {
12816
- :where([data-kit="pro"]) .tf-sidebar {
12817
- width: 100%;
13618
+ :where([data-kit="pro"]) .tf-sidebar-bar {
13619
+ display: flex;
13620
+ align-items: center;
13621
+ gap: 8px;
13622
+ min-height: 52px;
13623
+ padding: 6px 12px 6px 6px;
13624
+ box-sizing: border-box;
13625
+ border-radius: var(--radius-lg);
13626
+ background: var(--surface);
13627
+ box-shadow: 0 0 0 var(--line-width) var(--line);
13628
+ color: var(--ink);
12818
13629
  }
13630
+ :where([data-kit="pro"]) .tf-sidebar-bar.attached {
13631
+ border-radius: 0;
13632
+ box-shadow: none;
13633
+ background: var(--sidebar);
13634
+ border-bottom: 1px solid var(--sidebar-border);
13635
+ }
13636
+ :where([data-kit="pro"]) .tf-sidebar-bar.shell {
13637
+ min-height: 56px;
13638
+ padding: 8px 8px 8px 0;
13639
+ border-radius: 0;
13640
+ box-shadow: none;
13641
+ background: transparent;
13642
+ color: var(--on-frame);
13643
+ }
13644
+ :where([data-kit="pro"]) .tf-sidebar-bar.shell .tf-iconbtn-ghost {
13645
+ color: var(--on-frame);
13646
+ }
13647
+ :where([data-kit="pro"]) .tf-sidebar-bar > :not(.tf-iconbtn) {
13648
+ min-width: 0;
13649
+ }
13650
+ :where([data-kit="pro"]) .tf-sidebar,
13651
+ :where([data-kit="pro"]) .tf-sidebar.attached,
13652
+ :where([data-kit="pro"]) .tf-sidebar.shell {
13653
+ position: fixed;
13654
+ top: 0;
13655
+ bottom: 0;
13656
+ left: 0;
13657
+ z-index: var(--z-overlay);
13658
+ width: min(300px, 86vw);
13659
+ min-height: 0;
13660
+ padding: 12px;
13661
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
13662
+ box-shadow: var(--shadow-float), 0 0 0 var(--line-width) var(--line);
13663
+ transform: translateX(-105%);
13664
+ visibility: hidden;
13665
+ transition:
13666
+ transform var(--dur-base) var(--ease-out),
13667
+ visibility 0s linear var(--dur-base);
13668
+ }
13669
+ :where([data-kit="pro"]) .tf-sidebar.shell {
13670
+ background: var(--frame);
13671
+ }
13672
+ :where([data-kit="pro"]) .tf-sidebar.attached {
13673
+ background: var(--sidebar);
13674
+ }
13675
+ :where([data-kit="pro"]) .tf-sidebar.open {
13676
+ transform: none;
13677
+ visibility: visible;
13678
+ transition: transform var(--dur-base) var(--ease-out);
13679
+ }
13680
+ :where([data-kit="pro"]) .tf-sidebar-toggle {
13681
+ display: none;
13682
+ }
13683
+ :where([data-kit="pro"]) .tf-sidebar-scrim {
13684
+ display: block;
13685
+ position: fixed;
13686
+ inset: 0;
13687
+ z-index: var(--z-overlay);
13688
+ background: var(--scrim-strong);
13689
+ animation: tf-pro-fade var(--dur-base) var(--ease-out) both;
13690
+ }
13691
+ }
13692
+
13693
+ @media (max-width: 760px) {
12819
13694
  :where([data-kit="pro"]) .tf-navmenu-panel.with-feature {
12820
13695
  grid-template-columns: minmax(0, 1fr);
12821
13696
  }
@@ -12998,7 +13873,7 @@
12998
13873
  /* Tablet: asides move below the main column, nav labels and the page nav shrink to icons */
12999
13874
  @container tf-shell (max-width: 1180px) {
13000
13875
  :where([data-kit="pro"]) .tf-sheet:not(.tf-sheet-2):not(.tf-sheet-nav) {
13001
- grid-template-columns: 44px minmax(0, 1fr);
13876
+ grid-template-columns: auto minmax(0, 1fr);
13002
13877
  }
13003
13878
  :where([data-kit="pro"]) .tf-sheet-nav.tf-sheet-aside {
13004
13879
  grid-template-columns: 208px minmax(0, 1fr);
@@ -13006,6 +13881,13 @@
13006
13881
  :where([data-kit="pro"]) .tf-sheet > .tf-main ~ :not(.tf-dock-float) {
13007
13882
  grid-column: 2;
13008
13883
  }
13884
+ /* with the sidebar there is no rail column: asides go below the main column */
13885
+ :where([data-kit="pro"]) .tf-sheet.tf-sheet-norail:not(.tf-sheet-2) {
13886
+ grid-template-columns: minmax(0, 1fr);
13887
+ }
13888
+ :where([data-kit="pro"]) .tf-sheet-norail > .tf-main ~ :not(.tf-dock-float) {
13889
+ grid-column: 1;
13890
+ }
13009
13891
  /* the dock floats over the end of the sheet, not of the main column (asides follow it) */
13010
13892
  :where([data-kit="pro"]) .tf-main-dock {
13011
13893
  padding-bottom: 0;
@@ -13036,7 +13918,7 @@
13036
13918
  @container tf-shell (max-width: 1040px) {
13037
13919
  :where([data-kit="pro"]) .tf-sheet-nav,
13038
13920
  :where([data-kit="pro"]) .tf-sheet-nav.tf-sheet-aside {
13039
- grid-template-columns: 44px minmax(0, 1fr);
13921
+ grid-template-columns: auto minmax(0, 1fr);
13040
13922
  }
13041
13923
  :where([data-kit="pro"]) .tf-subnav-eyebrow {
13042
13924
  display: none;
@@ -13133,6 +14015,21 @@
13133
14015
  :where([data-kit="pro"]) .tf-rail-group {
13134
14016
  flex-direction: row;
13135
14017
  }
14018
+ /* on phones the rail is a row of icons, expanded or not */
14019
+ :where([data-kit="pro"]) .tf-rail.expanded {
14020
+ width: auto;
14021
+ }
14022
+ :where([data-kit="pro"]) .tf-rail.expanded .tf-rail-btn {
14023
+ display: grid;
14024
+ width: 40px;
14025
+ padding: 0;
14026
+ }
14027
+ :where([data-kit="pro"]) .tf-rail.expanded .tf-rail-label {
14028
+ display: none;
14029
+ }
14030
+ :where([data-kit="pro"]) .tf-rail.expanded .tf-dotcount {
14031
+ position: absolute;
14032
+ }
13136
14033
  :where([data-kit="pro"]) .tf-main {
13137
14034
  gap: var(--space-4);
13138
14035
  }
@@ -13224,6 +14121,56 @@
13224
14121
  max-width: 100%;
13225
14122
  overflow-x: auto;
13226
14123
  }
14124
+ /* Table stack: narrow boxes show every row as a card, each cell with its column label */
14125
+ :where([data-kit="pro"]) .tf-table-stackbox {
14126
+ container: tf-table / inline-size;
14127
+ }
14128
+ @container tf-table (max-width: 600px) {
14129
+ :where([data-kit="pro"]) .tf-table.stack thead {
14130
+ position: absolute;
14131
+ width: 1px;
14132
+ height: 1px;
14133
+ overflow: hidden;
14134
+ clip-path: inset(50%);
14135
+ }
14136
+ :where([data-kit="pro"]) .tf-table.stack,
14137
+ :where([data-kit="pro"]) .tf-table.stack tbody,
14138
+ :where([data-kit="pro"]) .tf-table.stack tr {
14139
+ display: block;
14140
+ }
14141
+ :where([data-kit="pro"]) .tf-table.stack tr {
14142
+ padding: 8px 0;
14143
+ border-bottom: 1px solid var(--line);
14144
+ }
14145
+ :where([data-kit="pro"]) .tf-table.stack tr:last-child {
14146
+ border-bottom: 0;
14147
+ }
14148
+ :where([data-kit="pro"]) .tf-table.stack td {
14149
+ display: flex;
14150
+ align-items: center;
14151
+ justify-content: space-between;
14152
+ gap: 16px;
14153
+ height: auto;
14154
+ min-height: var(--control-sm);
14155
+ padding: 4px 0;
14156
+ border-bottom: 0;
14157
+ text-align: right;
14158
+ white-space: normal;
14159
+ }
14160
+ :where([data-kit="pro"]) .tf-table.stack td::before {
14161
+ content: attr(data-label);
14162
+ flex: none;
14163
+ max-width: 50%;
14164
+ text-align: left;
14165
+ font: 500 11px/14px var(--font-sans);
14166
+ letter-spacing: 0.06em;
14167
+ text-transform: uppercase;
14168
+ color: var(--ink-muted);
14169
+ }
14170
+ :where([data-kit="pro"]) .tf-table.stack tbody tr:hover td {
14171
+ background: transparent;
14172
+ }
14173
+ }
13227
14174
 
13228
14175
  /* ── Phone: components ── */
13229
14176
  @media (max-width: 760px) {
@@ -13258,15 +14205,15 @@
13258
14205
  height: 52px;
13259
14206
  }
13260
14207
 
13261
- /* segmented controls and tabs scroll sideways when the labels do not fit */
13262
- :where([data-kit="pro"]) .tf-seg,
13263
- :where([data-kit="pro"]) .tf-tabs {
14208
+ /* segmented controls and tabs scroll sideways when the labels do not fit (block ones shrink) */
14209
+ :where([data-kit="pro"]) .tf-seg:not(.block),
14210
+ :where([data-kit="pro"]) .tf-tabs:not(.tf-tabs-block) {
13264
14211
  max-width: 100%;
13265
14212
  overflow-x: auto;
13266
14213
  scrollbar-width: none;
13267
14214
  }
13268
- :where([data-kit="pro"]) .tf-seg-item,
13269
- :where([data-kit="pro"]) .tf-tab {
14215
+ :where([data-kit="pro"]) .tf-seg:not(.block) .tf-seg-item,
14216
+ :where([data-kit="pro"]) .tf-tabs:not(.tf-tabs-block) .tf-tab {
13270
14217
  flex: none;
13271
14218
  }
13272
14219
  :where([data-kit="pro"]) .tf-seg,
@@ -13415,6 +14362,40 @@
13415
14362
  }
13416
14363
  }
13417
14364
 
14365
+ /* AppShell with a sidebar on phones: the sidebar's bar on top of the frame, the sheet below */
14366
+ @media (max-width: 760px) {
14367
+ :where([data-kit="pro"]) .tf-shell.tf-shell-sidebar {
14368
+ grid-template-columns: minmax(0, 1fr);
14369
+ padding: 0 8px 8px;
14370
+ }
14371
+ }
14372
+
14373
+ /* Fluid at every width: segmented controls, tabs and toggle groups never push past their
14374
+ container. When space runs short the items shrink and their labels end in an ellipsis. */
14375
+ :where([data-kit="pro"]) .tf-tabs {
14376
+ max-width: 100%;
14377
+ box-sizing: border-box;
14378
+ }
14379
+ :where([data-kit="pro"]) .tf-seg-item,
14380
+ :where([data-kit="pro"]) .tf-tab,
14381
+ :where([data-kit="pro"]) .tf-togglegroup .tf-toggle {
14382
+ min-width: 0;
14383
+ }
14384
+ :where([data-kit="pro"]) .tf-seg-label,
14385
+ :where([data-kit="pro"]) .tf-tab,
14386
+ :where([data-kit="pro"]) .tf-toggle-label {
14387
+ overflow: hidden;
14388
+ text-overflow: ellipsis;
14389
+ white-space: nowrap;
14390
+ }
14391
+
14392
+ /* key hints mean nothing on touch screens */
14393
+ @media (pointer: coarse) {
14394
+ :where([data-kit="pro"]) .tf-search .tf-kbd {
14395
+ display: none;
14396
+ }
14397
+ }
14398
+
13418
14399
  /* 07-polish.css */
13419
14400
  /* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
13420
14401
  /* ───────────── Polish ─────────────
@@ -13940,11 +14921,13 @@
13940
14921
  inset: 0;
13941
14922
  z-index: 1;
13942
14923
  display: grid;
13943
- grid-template-columns: minmax(0, 320px) minmax(0, 1fr) minmax(0, 340px);
14924
+ grid-template-columns:
14925
+ minmax(0, var(--floating-start, 320px)) minmax(0, 1fr)
14926
+ minmax(0, var(--floating-end, 340px));
13944
14927
  grid-template-rows: auto minmax(0, 1fr) auto;
13945
14928
  grid-template-areas:
13946
14929
  "top top top"
13947
- "start . end"
14930
+ "start controls end"
13948
14931
  "bottom bottom bottom";
13949
14932
  gap: var(--space-4);
13950
14933
  padding: var(--space-4);
@@ -13975,6 +14958,32 @@
13975
14958
  grid-area: bottom;
13976
14959
  justify-self: center;
13977
14960
  }
14961
+ /* background controls and source notes: the free corner, clear of the panels and the dock */
14962
+ :where([data-kit="pro"]) .tf-floating-ui > .tf-floating-controls {
14963
+ grid-area: controls;
14964
+ align-self: end;
14965
+ justify-self: end;
14966
+ display: flex;
14967
+ flex-direction: column;
14968
+ align-items: flex-end;
14969
+ gap: var(--space-2);
14970
+ pointer-events: none;
14971
+ }
14972
+ :where([data-kit="pro"]) .tf-floating-controls > * {
14973
+ pointer-events: auto;
14974
+ }
14975
+ :where([data-kit="pro"]) .tf-floating-attribution {
14976
+ max-width: 100%;
14977
+ padding: 2px 8px;
14978
+ border-radius: var(--radius-sm);
14979
+ background: var(--surface);
14980
+ color: var(--ink-muted);
14981
+ font: 500 11px/16px var(--font-sans);
14982
+ overflow-wrap: anywhere;
14983
+ }
14984
+ :where([data-kit="pro"]) .tf-floating-handle {
14985
+ display: none;
14986
+ }
13978
14987
  :where([data-kit="pro"]) .tf-floating-ui > :is(.tf-floating-top, .tf-floating-bottom) {
13979
14988
  pointer-events: none;
13980
14989
  }
@@ -14000,6 +15009,75 @@
14000
15009
  gap: var(--space-3);
14001
15010
  padding: var(--space-3);
14002
15011
  }
15012
+ :where([data-kit="pro"]) .tf-floating-ui > .tf-floating-controls {
15013
+ grid-area: auto;
15014
+ grid-row: 3;
15015
+ }
15016
+ /* the end slot as a bottom sheet over the background: a peek, or most of the height */
15017
+ :where([data-kit="pro"]) .tf-floating.has-sheet .tf-floating-ui {
15018
+ grid-template-rows: auto auto minmax(120px, 1fr) auto;
15019
+ grid-template-areas:
15020
+ "top"
15021
+ "start"
15022
+ "."
15023
+ "bottom";
15024
+ padding-bottom: calc(var(--space-3) + 96px);
15025
+ }
15026
+ :where([data-kit="pro"]) .tf-floating.has-sheet .tf-floating-end {
15027
+ position: absolute;
15028
+ left: var(--space-3);
15029
+ right: var(--space-3);
15030
+ bottom: 0;
15031
+ z-index: 2;
15032
+ max-height: 96px;
15033
+ overflow: hidden;
15034
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
15035
+ background: var(--surface);
15036
+ box-shadow: 0 0 0 var(--line-width) var(--line);
15037
+ transition: max-height var(--dur-base) var(--ease-out);
15038
+ }
15039
+ :where([data-kit="pro"])[data-surface="glass"].tf-floating.has-sheet .tf-floating-end, :where([data-kit="pro"]) [data-surface="glass"].tf-floating.has-sheet .tf-floating-end {
15040
+ background: var(--glass);
15041
+ -webkit-backdrop-filter: var(--glass-filter);
15042
+ backdrop-filter: var(--glass-filter);
15043
+ }
15044
+ :where([data-kit="pro"]) .tf-floating.has-sheet.sheet-full .tf-floating-end {
15045
+ max-height: 75%;
15046
+ overflow-y: auto;
15047
+ }
15048
+ :where([data-kit="pro"]) .tf-floating.has-sheet .tf-floating-handle {
15049
+ display: block;
15050
+ position: sticky;
15051
+ top: 0;
15052
+ z-index: 1;
15053
+ width: 100%;
15054
+ height: 24px;
15055
+ margin: 0;
15056
+ padding: 0;
15057
+ border: 0;
15058
+ background: transparent;
15059
+ cursor: pointer;
15060
+ }
15061
+ :where([data-kit="pro"]) .tf-floating.has-sheet .tf-floating-handle::before {
15062
+ content: "";
15063
+ display: block;
15064
+ width: 40px;
15065
+ height: 4px;
15066
+ margin: 10px auto;
15067
+ border-radius: var(--radius-pill);
15068
+ background: var(--line-strong);
15069
+ }
15070
+ :where([data-kit="pro"]) .tf-floating.has-sheet .tf-floating-handle:focus-visible {
15071
+ outline: 2px solid var(--focus);
15072
+ outline-offset: -2px;
15073
+ }
15074
+ }
15075
+
15076
+ /* in a glass layout the attribution is glass too */
15077
+ :where([data-kit="pro"])[data-surface="glass"] .tf-floating-attribution, :where([data-kit="pro"]) [data-surface="glass"] .tf-floating-attribution {
15078
+ background: var(--glass);
15079
+ -webkit-backdrop-filter: var(--glass-filter);
15080
+ backdrop-filter: var(--glass-filter);
14003
15081
  }
14004
15082
 
14005
15083
  /* 09-motion.css */
@@ -14625,6 +15703,14 @@
14625
15703
  gap: var(--line-width);
14626
15704
  box-shadow: 0 0 0 var(--line-width) var(--line);
14627
15705
  }
15706
+ /* with the sidebar, the sidebar and the sheet sit side by side on the same hairline */
15707
+ :where([data-kit="pro"]) .tf-shell.tf-shell-sidebar {
15708
+ padding: 0;
15709
+ gap: var(--line-width);
15710
+ }
15711
+ :where([data-kit="pro"]) .tf-shell-sidebar > .tf-sidebar.shell {
15712
+ border-radius: 0;
15713
+ }
14628
15714
  :where([data-kit="pro"]) .tf-topbar,
14629
15715
  :where([data-kit="pro"]) .tf-shell .tf-topbar {
14630
15716
  border-radius: 0;