@twentyfirstmedia/pro 0.7.0 → 0.8.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/styles.css CHANGED
@@ -14626,7 +14626,14 @@ textarea.tf-input,
14626
14626
  .tf-insight,
14627
14627
  .tf-consent-item,
14628
14628
  .tf-nw,
14629
- .tf-policy
14629
+ .tf-policy,
14630
+ .tf-connector,
14631
+ .tf-device,
14632
+ .tf-vehicle,
14633
+ .tf-nowplaying,
14634
+ .tf-workout,
14635
+ .tf-booking,
14636
+ .tf-scorecard
14630
14637
  ):not(
14631
14638
  :is(
14632
14639
  .tf-panel,
@@ -14649,6 +14656,13 @@ textarea.tf-input,
14649
14656
  .tf-consent-item,
14650
14657
  .tf-nw,
14651
14658
  .tf-policy,
14659
+ .tf-connector,
14660
+ .tf-device,
14661
+ .tf-vehicle,
14662
+ .tf-nowplaying,
14663
+ .tf-workout,
14664
+ .tf-booking,
14665
+ .tf-scorecard,
14652
14666
  .tf-glass
14653
14667
  )
14654
14668
  *
@@ -14747,6 +14761,13 @@ textarea.tf-input,
14747
14761
  .tf-policy,
14748
14762
  .tf-consent-item,
14749
14763
  .tf-journal,
14764
+ .tf-connector,
14765
+ .tf-device,
14766
+ .tf-vehicle,
14767
+ .tf-nowplaying,
14768
+ .tf-workout,
14769
+ .tf-booking,
14770
+ .tf-scorecard,
14750
14771
  .tf-btngroup,
14751
14772
  .tf-map-ctl,
14752
14773
  .tf-topbar
@@ -14784,6 +14805,13 @@ textarea.tf-input,
14784
14805
  .tf-policy,
14785
14806
  .tf-consent-item,
14786
14807
  .tf-journal,
14808
+ .tf-connector,
14809
+ .tf-device,
14810
+ .tf-vehicle,
14811
+ .tf-nowplaying,
14812
+ .tf-workout,
14813
+ .tf-booking,
14814
+ .tf-scorecard,
14787
14815
  .tf-glass
14788
14816
  )
14789
14817
  *
@@ -14847,7 +14875,14 @@ textarea.tf-input,
14847
14875
  .tf-insight,
14848
14876
  .tf-consent-item,
14849
14877
  .tf-nw,
14850
- .tf-policy
14878
+ .tf-policy,
14879
+ .tf-connector,
14880
+ .tf-device,
14881
+ .tf-vehicle,
14882
+ .tf-nowplaying,
14883
+ .tf-workout,
14884
+ .tf-booking,
14885
+ .tf-scorecard
14851
14886
  ) {
14852
14887
  outline: 1px solid CanvasText;
14853
14888
  outline-offset: -1px;
@@ -16614,6 +16649,1057 @@ button.tf-doc:focus-visible {
16614
16649
  color: var(--ink-muted);
16615
16650
  }
16616
16651
 
16652
+ /* 13-connectors.css */
16653
+ /* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
16654
+ /* Connectors: service marks, the connector gallery, sync status, agent activity */
16655
+
16656
+ /* ServiceMark */
16657
+ .tf-svc {
16658
+ position: relative;
16659
+ display: inline-grid;
16660
+ flex: none;
16661
+ place-items: center;
16662
+ width: 36px;
16663
+ height: var(--density-control);
16664
+ box-sizing: border-box;
16665
+ border-radius: var(--radius-md);
16666
+ }
16667
+ .tf-svc-sm {
16668
+ width: 24px;
16669
+ height: 24px;
16670
+ border-radius: var(--radius-sm);
16671
+ }
16672
+ .tf-svc-lg {
16673
+ width: 48px;
16674
+ height: 48px;
16675
+ border-radius: var(--radius-lg);
16676
+ }
16677
+ .tf-svc > img,
16678
+ .tf-svc > svg:not(.tf-ico) {
16679
+ width: 62%;
16680
+ height: 62%;
16681
+ object-fit: contain;
16682
+ }
16683
+ .tf-svc-mono {
16684
+ font: 600 13px/1 var(--font-sans);
16685
+ letter-spacing: 0.02em;
16686
+ }
16687
+ .tf-svc-sm .tf-svc-mono {
16688
+ font-size: 10px;
16689
+ }
16690
+ .tf-svc-lg .tf-svc-mono {
16691
+ font-size: 17px;
16692
+ }
16693
+ /* the state dot sits on the corner, ringed in the surface colour */
16694
+ .tf-svc-dot {
16695
+ position: absolute;
16696
+ right: -2px;
16697
+ bottom: -2px;
16698
+ width: 10px;
16699
+ height: 10px;
16700
+ box-sizing: border-box;
16701
+ border: 2px solid var(--card);
16702
+ border-radius: var(--radius-full);
16703
+ background: var(--idle);
16704
+ }
16705
+ .tf-svc-sm .tf-svc-dot {
16706
+ width: 8px;
16707
+ height: 8px;
16708
+ border-width: 1.5px;
16709
+ }
16710
+ .tf-svc-dot.is-connected {
16711
+ background: var(--ok);
16712
+ }
16713
+ .tf-svc-dot.is-syncing {
16714
+ background: var(--info);
16715
+ }
16716
+ .tf-svc-dot.is-error {
16717
+ background: var(--danger);
16718
+ }
16719
+ .tf-svc-dot.is-paused {
16720
+ background: var(--warn);
16721
+ }
16722
+
16723
+ /* ConnectorGallery */
16724
+ .tf-connectors {
16725
+ display: flex;
16726
+ flex-direction: column;
16727
+ gap: 20px;
16728
+ min-width: 0;
16729
+ }
16730
+ .tf-connectors-filters {
16731
+ display: flex;
16732
+ flex-direction: column;
16733
+ gap: 12px;
16734
+ }
16735
+ .tf-connectors-chips {
16736
+ display: flex;
16737
+ flex-wrap: wrap;
16738
+ gap: 6px;
16739
+ }
16740
+ .tf-connectors-group {
16741
+ display: flex;
16742
+ flex-direction: column;
16743
+ gap: 10px;
16744
+ }
16745
+ .tf-connectors-title {
16746
+ margin: 0;
16747
+ font: 500 13px/18px var(--font-sans);
16748
+ color: var(--ink-muted);
16749
+ }
16750
+ .tf-connectors-grid {
16751
+ display: grid;
16752
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));
16753
+ gap: 12px;
16754
+ margin: 0;
16755
+ padding: 0;
16756
+ list-style: none;
16757
+ }
16758
+ .tf-connector {
16759
+ display: flex;
16760
+ flex-direction: column;
16761
+ gap: 8px;
16762
+ min-width: 0;
16763
+ padding: 16px;
16764
+ border-radius: var(--radius-lg);
16765
+ background: var(--surface);
16766
+ box-shadow: 0 0 0 var(--line-width) var(--line);
16767
+ }
16768
+ .tf-connector-head {
16769
+ display: flex;
16770
+ align-items: center;
16771
+ gap: 12px;
16772
+ min-width: 0;
16773
+ }
16774
+ .tf-connector-head .tf-option-text {
16775
+ min-width: 0;
16776
+ padding: 0;
16777
+ }
16778
+ .tf-connector-head b {
16779
+ font: 500 14px/20px var(--font-sans);
16780
+ }
16781
+ .tf-connector-head small {
16782
+ overflow: hidden;
16783
+ text-overflow: ellipsis;
16784
+ white-space: nowrap;
16785
+ }
16786
+ .tf-connector-desc {
16787
+ display: -webkit-box;
16788
+ margin: 0;
16789
+ overflow: hidden;
16790
+ -webkit-box-orient: vertical;
16791
+ -webkit-line-clamp: 2;
16792
+ font: 500 13px/18px var(--font-sans);
16793
+ color: var(--ink-muted);
16794
+ }
16795
+ .tf-connector-note {
16796
+ margin: 0;
16797
+ font: 500 12px/16px var(--font-sans);
16798
+ color: var(--ink-subtle);
16799
+ }
16800
+ .tf-connector-foot {
16801
+ display: flex;
16802
+ flex-wrap: wrap;
16803
+ align-items: center;
16804
+ justify-content: space-between;
16805
+ gap: 8px;
16806
+ margin-top: auto;
16807
+ padding-top: 4px;
16808
+ }
16809
+ .tf-connector.is-soon {
16810
+ box-shadow: inset 0 0 0 1px var(--line);
16811
+ background: transparent;
16812
+ }
16813
+
16814
+ /* SyncStatus */
16815
+ .tf-sync {
16816
+ display: flex;
16817
+ flex-direction: column;
16818
+ gap: 6px;
16819
+ min-width: 0;
16820
+ font: 500 13px/18px var(--font-sans);
16821
+ color: var(--ink);
16822
+ }
16823
+ .tf-sync-line {
16824
+ display: flex;
16825
+ flex-wrap: wrap;
16826
+ align-items: center;
16827
+ gap: 4px 8px;
16828
+ }
16829
+ .tf-sync-icon {
16830
+ display: inline-grid;
16831
+ flex: none;
16832
+ place-items: center;
16833
+ width: 20px;
16834
+ height: 20px;
16835
+ border-radius: var(--radius-1);
16836
+ background: var(--mint);
16837
+ color: var(--mint-ink);
16838
+ }
16839
+ .tf-sync.is-syncing .tf-sync-icon {
16840
+ background: var(--sky);
16841
+ color: var(--sky-ink);
16842
+ }
16843
+ .tf-sync.is-syncing .tf-sync-icon .tf-ico {
16844
+ animation: tf-spin 1.2s linear infinite;
16845
+ }
16846
+ .tf-sync.is-error .tf-sync-icon {
16847
+ background: var(--blush);
16848
+ color: var(--blush-ink);
16849
+ }
16850
+ .tf-sync.is-paused .tf-sync-icon {
16851
+ background: var(--butter);
16852
+ color: var(--butter-ink);
16853
+ }
16854
+ .tf-sync.is-never .tf-sync-icon {
16855
+ background: var(--surface-sunken);
16856
+ color: var(--ink-muted);
16857
+ }
16858
+ .tf-sync-text small,
16859
+ .tf-sync-next {
16860
+ font: 500 12px/16px var(--font-sans);
16861
+ color: var(--ink-muted);
16862
+ }
16863
+ .tf-sync-line > .tf-btn {
16864
+ margin-left: auto;
16865
+ }
16866
+ .tf-sync-error {
16867
+ margin: 0;
16868
+ font: 500 12px/16px var(--font-sans);
16869
+ color: var(--blush-ink);
16870
+ }
16871
+ .tf-sync-counts {
16872
+ display: flex;
16873
+ flex-wrap: wrap;
16874
+ gap: 4px 14px;
16875
+ margin: 0;
16876
+ padding: 0 0 0 28px;
16877
+ list-style: none;
16878
+ font: 500 12px/16px var(--font-sans);
16879
+ color: var(--ink-muted);
16880
+ }
16881
+ .tf-sync-counts b {
16882
+ font-weight: 500;
16883
+ color: var(--ink);
16884
+ font-variant-numeric: tabular-nums;
16885
+ }
16886
+ .tf-sync.compact {
16887
+ font-size: 12px;
16888
+ line-height: 16px;
16889
+ color: var(--ink-muted);
16890
+ }
16891
+ .tf-sync.compact .tf-sync-icon {
16892
+ width: 16px;
16893
+ height: 16px;
16894
+ }
16895
+ .tf-sync.compact .tf-sync-icon .tf-ico {
16896
+ width: 11px;
16897
+ height: 11px;
16898
+ }
16899
+
16900
+ /* AgentActivity */
16901
+ .tf-agentlog {
16902
+ display: flex;
16903
+ flex-direction: column;
16904
+ gap: 16px;
16905
+ min-width: 0;
16906
+ }
16907
+ .tf-agentlog-day ul {
16908
+ display: flex;
16909
+ flex-direction: column;
16910
+ margin: 0;
16911
+ padding: 0;
16912
+ list-style: none;
16913
+ }
16914
+ .tf-agentlog-title {
16915
+ margin: 0 0 4px;
16916
+ font: 500 12px/16px var(--font-sans);
16917
+ letter-spacing: 0.04em;
16918
+ text-transform: uppercase;
16919
+ color: var(--ink-muted);
16920
+ }
16921
+ .tf-agentlog-item {
16922
+ display: flex;
16923
+ flex-wrap: wrap;
16924
+ align-items: flex-start;
16925
+ gap: 4px 12px;
16926
+ padding: 10px 0;
16927
+ border-bottom: 1px solid var(--line);
16928
+ }
16929
+ .tf-agentlog-item:last-child {
16930
+ border-bottom: 0;
16931
+ }
16932
+ .tf-agentlog-item > .tf-svc {
16933
+ margin-top: 1px;
16934
+ }
16935
+ .tf-agentlog-main {
16936
+ display: flex;
16937
+ flex: 1 1 200px;
16938
+ flex-direction: column;
16939
+ gap: 2px;
16940
+ min-width: 0;
16941
+ }
16942
+ .tf-agentlog-text {
16943
+ margin: 0;
16944
+ font: 500 14px/20px var(--font-sans);
16945
+ color: var(--ink);
16946
+ }
16947
+ .tf-agentlog-item.is-declined .tf-agentlog-text,
16948
+ .tf-agentlog-item.is-undone .tf-agentlog-text {
16949
+ color: var(--ink-muted);
16950
+ text-decoration: line-through;
16951
+ }
16952
+ .tf-agentlog-detail {
16953
+ margin: 0;
16954
+ font: 500 13px/18px var(--font-sans);
16955
+ color: var(--ink-muted);
16956
+ }
16957
+ .tf-agentlog-meta {
16958
+ display: flex;
16959
+ flex-wrap: wrap;
16960
+ align-items: center;
16961
+ gap: 4px 8px;
16962
+ margin: 2px 0 0;
16963
+ font: 500 12px/16px var(--font-sans);
16964
+ color: var(--ink-muted);
16965
+ }
16966
+ .tf-agentlog-kind,
16967
+ .tf-agentlog-state,
16968
+ .tf-scope-level {
16969
+ display: inline-flex;
16970
+ align-items: center;
16971
+ padding: 0 6px;
16972
+ border-radius: var(--radius-pill);
16973
+ font: 500 11px/18px var(--font-sans);
16974
+ white-space: nowrap;
16975
+ background: var(--surface-sunken);
16976
+ color: var(--ink-muted);
16977
+ }
16978
+ .tf-agentlog-kind.kind-act,
16979
+ .tf-scope-level.is-act {
16980
+ background: var(--sky);
16981
+ color: var(--sky-ink);
16982
+ }
16983
+ .tf-agentlog-kind.kind-money,
16984
+ .tf-scope-level.is-money {
16985
+ background: var(--butter);
16986
+ color: var(--butter-ink);
16987
+ }
16988
+ .tf-agentlog-state.is-waiting {
16989
+ background: var(--lilac);
16990
+ color: var(--lilac-ink);
16991
+ }
16992
+ .tf-agentlog-state.is-failed {
16993
+ background: var(--blush);
16994
+ color: var(--blush-ink);
16995
+ }
16996
+ .tf-agentlog-item > .tf-btn {
16997
+ flex: none;
16998
+ align-self: center;
16999
+ }
17000
+
17001
+ /* ConsentList: what a permission allows */
17002
+ .tf-scope-level {
17003
+ align-self: flex-start;
17004
+ margin-top: 4px;
17005
+ }
17006
+
17007
+ /* ConnectionList */
17008
+ .tf-connlist {
17009
+ container: tf-connlist / inline-size;
17010
+ display: flex;
17011
+ flex-direction: column;
17012
+ margin: 0;
17013
+ padding: 0;
17014
+ list-style: none;
17015
+ }
17016
+ .tf-connlist-item {
17017
+ display: grid;
17018
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
17019
+ align-items: center;
17020
+ gap: 4px 12px;
17021
+ padding: 10px 0;
17022
+ border-bottom: 1px solid var(--line);
17023
+ }
17024
+ .tf-connlist-item:last-child {
17025
+ border-bottom: 0;
17026
+ }
17027
+ .tf-connlist-item .tf-option-text {
17028
+ min-width: 0;
17029
+ padding: 0;
17030
+ }
17031
+ .tf-connlist-item .tf-option-text small {
17032
+ overflow: hidden;
17033
+ text-overflow: ellipsis;
17034
+ white-space: nowrap;
17035
+ }
17036
+ .tf-connlist-item > .tf-btn {
17037
+ grid-column: 4;
17038
+ }
17039
+ /* narrow: the sync line goes under the name */
17040
+ @container tf-connlist (max-width: 480px) {
17041
+ .tf-connlist-item {
17042
+ grid-template-columns: auto minmax(0, 1fr) auto;
17043
+ }
17044
+ .tf-connlist-item > .tf-sync {
17045
+ grid-column: 2;
17046
+ grid-row: 2;
17047
+ }
17048
+ .tf-connlist-item > .tf-btn {
17049
+ grid-column: 3;
17050
+ grid-row: 1;
17051
+ }
17052
+ }
17053
+
17054
+ /* 14-connected-data.css */
17055
+ /* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
17056
+ /* Connected data: devices, car, now playing, workouts, calls, bookings, golf, holdings */
17057
+
17058
+ /* the cards */
17059
+ .tf-device,
17060
+ .tf-vehicle,
17061
+ .tf-nowplaying,
17062
+ .tf-workout,
17063
+ .tf-booking,
17064
+ .tf-scorecard {
17065
+ display: flex;
17066
+ flex-direction: column;
17067
+ gap: 12px;
17068
+ min-width: 0;
17069
+ padding: 16px;
17070
+ box-sizing: border-box;
17071
+ border-radius: var(--radius-lg);
17072
+ background: var(--surface);
17073
+ box-shadow: 0 0 0 var(--line-width) var(--line);
17074
+ }
17075
+ :is(
17076
+ .tf-device-head,
17077
+ .tf-vehicle-head,
17078
+ .tf-nowplaying-head,
17079
+ .tf-workout-head,
17080
+ .tf-booking-head,
17081
+ .tf-scorecard-head
17082
+ ) {
17083
+ display: flex;
17084
+ align-items: center;
17085
+ gap: 12px;
17086
+ min-width: 0;
17087
+ }
17088
+ :is(
17089
+ .tf-device-head,
17090
+ .tf-vehicle-head,
17091
+ .tf-nowplaying-head,
17092
+ .tf-workout-head,
17093
+ .tf-booking-head,
17094
+ .tf-scorecard-head
17095
+ )
17096
+ > .tf-option-text {
17097
+ flex: 1;
17098
+ min-width: 0;
17099
+ padding: 0;
17100
+ }
17101
+ :is(
17102
+ .tf-device-head,
17103
+ .tf-vehicle-head,
17104
+ .tf-nowplaying-head,
17105
+ .tf-workout-head,
17106
+ .tf-booking-head,
17107
+ .tf-scorecard-head
17108
+ )
17109
+ b {
17110
+ font: 500 14px/20px var(--font-sans);
17111
+ }
17112
+
17113
+ /* DeviceTile */
17114
+ .tf-device-ico {
17115
+ display: inline-grid;
17116
+ flex: none;
17117
+ place-items: center;
17118
+ width: 36px;
17119
+ height: var(--density-control);
17120
+ border-radius: var(--radius-pill);
17121
+ background: var(--surface-sunken);
17122
+ color: var(--ink-muted);
17123
+ }
17124
+ .tf-device-ico.is-on {
17125
+ background: var(--butter);
17126
+ color: var(--butter-ink);
17127
+ }
17128
+ .tf-device.kind-thermostat .tf-device-ico.is-on {
17129
+ background: var(--blush);
17130
+ color: var(--blush-ink);
17131
+ }
17132
+ .tf-device.kind-vacuum .tf-device-ico.is-on,
17133
+ .tf-device.kind-purifier .tf-device-ico.is-on {
17134
+ background: var(--sky);
17135
+ color: var(--sky-ink);
17136
+ }
17137
+ .tf-device-body {
17138
+ display: flex;
17139
+ flex-direction: column;
17140
+ gap: 2px;
17141
+ }
17142
+ .tf-device-value {
17143
+ font: 600 22px/28px var(--font-sans);
17144
+ font-variant-numeric: tabular-nums;
17145
+ }
17146
+ .tf-device.is-offline .tf-device-value,
17147
+ .tf-device.is-off .tf-device-value {
17148
+ font-size: 14px;
17149
+ line-height: 22px;
17150
+ color: var(--ink-muted);
17151
+ }
17152
+ .tf-device-status {
17153
+ font: 500 13px/18px var(--font-sans);
17154
+ color: var(--ink-muted);
17155
+ }
17156
+ .tf-device-stepper {
17157
+ display: flex;
17158
+ align-items: center;
17159
+ justify-content: space-between;
17160
+ gap: 8px;
17161
+ padding: 4px;
17162
+ border-radius: var(--radius-pill);
17163
+ background: var(--surface-sunken);
17164
+ font: 500 13px/18px var(--font-sans);
17165
+ font-variant-numeric: tabular-nums;
17166
+ }
17167
+ .tf-device-stepper > span {
17168
+ flex: 1;
17169
+ text-align: center;
17170
+ }
17171
+ .tf-device-foot {
17172
+ display: flex;
17173
+ flex-wrap: wrap;
17174
+ align-items: center;
17175
+ gap: 8px;
17176
+ }
17177
+ .tf-device-battery {
17178
+ display: inline-flex;
17179
+ align-items: center;
17180
+ gap: 4px;
17181
+ margin-right: auto;
17182
+ font: 500 12px/16px var(--font-sans);
17183
+ color: var(--ink-muted);
17184
+ }
17185
+ .tf-device-battery.is-low {
17186
+ color: var(--blush-ink);
17187
+ }
17188
+
17189
+ /* VehicleCard */
17190
+ .tf-vehicle-charge {
17191
+ display: flex;
17192
+ flex-wrap: wrap;
17193
+ align-items: baseline;
17194
+ gap: 4px 12px;
17195
+ }
17196
+ .tf-vehicle-pct {
17197
+ font: 600 24px/38px var(--font-sans);
17198
+ font-variant-numeric: tabular-nums;
17199
+ }
17200
+ .tf-vehicle-range {
17201
+ font: 500 14px/20px var(--font-sans);
17202
+ color: var(--ink-muted);
17203
+ }
17204
+ .tf-vehicle-bar {
17205
+ position: relative;
17206
+ height: 12px;
17207
+ border-radius: var(--radius-pill);
17208
+ background: var(--surface-sunken);
17209
+ }
17210
+ .tf-vehicle-fill {
17211
+ height: 100%;
17212
+ border-radius: var(--radius-pill);
17213
+ background: var(--mint-ink);
17214
+ }
17215
+ .tf-vehicle-fill.is-charging {
17216
+ background: var(--sky-ink);
17217
+ }
17218
+ .tf-vehicle-limit {
17219
+ position: absolute;
17220
+ top: -3px;
17221
+ bottom: -3px;
17222
+ width: 2px;
17223
+ margin-left: -1px;
17224
+ border-radius: 1px;
17225
+ background: var(--ink);
17226
+ }
17227
+ .tf-vehicle-line {
17228
+ display: flex;
17229
+ flex-wrap: wrap;
17230
+ gap: 4px 14px;
17231
+ margin: 0;
17232
+ font: 500 13px/18px var(--font-sans);
17233
+ color: var(--ink-muted);
17234
+ }
17235
+ .tf-vehicle-line > span {
17236
+ display: inline-flex;
17237
+ align-items: center;
17238
+ gap: 4px;
17239
+ }
17240
+ .tf-vehicle-state.is-charging {
17241
+ color: var(--sky-ink);
17242
+ }
17243
+ .tf-vehicle-controls {
17244
+ display: flex;
17245
+ flex-wrap: wrap;
17246
+ align-items: center;
17247
+ gap: 8px;
17248
+ }
17249
+ .tf-vehicle-inside {
17250
+ margin-left: auto;
17251
+ font: 500 13px/18px var(--font-sans);
17252
+ color: var(--ink-muted);
17253
+ }
17254
+
17255
+ /* NowPlaying */
17256
+ .tf-nowplaying {
17257
+ flex-direction: row;
17258
+ align-items: stretch;
17259
+ }
17260
+ .tf-nowplaying-art {
17261
+ display: grid;
17262
+ flex: none;
17263
+ place-items: center;
17264
+ width: 88px;
17265
+ height: 88px;
17266
+ overflow: hidden;
17267
+ border-radius: var(--radius-md);
17268
+ background: var(--lilac);
17269
+ color: var(--lilac-ink);
17270
+ }
17271
+ .tf-nowplaying-art > img {
17272
+ width: 100%;
17273
+ height: 100%;
17274
+ object-fit: cover;
17275
+ }
17276
+ .tf-nowplaying-main {
17277
+ display: flex;
17278
+ flex: 1;
17279
+ flex-direction: column;
17280
+ gap: 8px;
17281
+ min-width: 0;
17282
+ }
17283
+ .tf-nowplaying-head small {
17284
+ overflow: hidden;
17285
+ text-overflow: ellipsis;
17286
+ white-space: nowrap;
17287
+ }
17288
+ .tf-nowplaying-progress {
17289
+ display: flex;
17290
+ flex-direction: column;
17291
+ gap: 2px;
17292
+ }
17293
+ .tf-nowplaying-bar {
17294
+ height: 4px;
17295
+ overflow: hidden;
17296
+ border-radius: var(--radius-pill);
17297
+ background: var(--surface-sunken);
17298
+ }
17299
+ .tf-nowplaying-bar > span {
17300
+ display: block;
17301
+ height: 100%;
17302
+ background: var(--ink);
17303
+ }
17304
+ .tf-nowplaying-times {
17305
+ display: flex;
17306
+ justify-content: space-between;
17307
+ font: 500 11px/14px var(--font-sans);
17308
+ font-variant-numeric: tabular-nums;
17309
+ color: var(--ink-muted);
17310
+ }
17311
+ .tf-nowplaying-foot {
17312
+ display: flex;
17313
+ flex-wrap: wrap;
17314
+ align-items: center;
17315
+ justify-content: space-between;
17316
+ gap: 4px 8px;
17317
+ margin-top: auto;
17318
+ }
17319
+ .tf-nowplaying-device {
17320
+ font: 500 12px/16px var(--font-sans);
17321
+ color: var(--ink-muted);
17322
+ }
17323
+ .tf-nowplaying-controls {
17324
+ display: inline-flex;
17325
+ align-items: center;
17326
+ gap: 4px;
17327
+ margin-left: auto;
17328
+ }
17329
+
17330
+ /* WorkoutCard */
17331
+ .tf-workout-stats {
17332
+ display: grid;
17333
+ grid-template-columns: repeat(auto-fit, minmax(96px, 1fr));
17334
+ gap: 10px 16px;
17335
+ margin: 0;
17336
+ }
17337
+ .tf-workout-stats dt {
17338
+ font: 500 12px/16px var(--font-sans);
17339
+ color: var(--ink-muted);
17340
+ }
17341
+ .tf-workout-stats dd {
17342
+ margin: 0;
17343
+ font: 600 14px/20px var(--font-sans);
17344
+ font-variant-numeric: tabular-nums;
17345
+ }
17346
+ .tf-workout-zones {
17347
+ display: flex;
17348
+ flex-direction: column;
17349
+ gap: 6px;
17350
+ }
17351
+ .tf-workout-zones-title {
17352
+ font: 500 12px/16px var(--font-sans);
17353
+ color: var(--ink-muted);
17354
+ }
17355
+ .tf-workout-zonebar {
17356
+ display: flex;
17357
+ gap: 2px;
17358
+ height: 8px;
17359
+ overflow: hidden;
17360
+ border-radius: var(--radius-pill);
17361
+ }
17362
+ .tf-workout-zonebar > span {
17363
+ flex-basis: 0;
17364
+ min-width: 2px;
17365
+ }
17366
+ .tf-workout-legend {
17367
+ display: flex;
17368
+ flex-wrap: wrap;
17369
+ gap: 4px 12px;
17370
+ margin: 0;
17371
+ padding: 0;
17372
+ list-style: none;
17373
+ font: 500 12px/16px var(--font-sans);
17374
+ color: var(--ink-muted);
17375
+ }
17376
+ .tf-workout-legend li {
17377
+ display: inline-flex;
17378
+ align-items: center;
17379
+ gap: 4px;
17380
+ }
17381
+ .tf-workout-legend i {
17382
+ width: 8px;
17383
+ height: 8px;
17384
+ border-radius: 2px;
17385
+ }
17386
+
17387
+ /* CallLog */
17388
+ .tf-calls {
17389
+ display: flex;
17390
+ flex-direction: column;
17391
+ gap: 16px;
17392
+ min-width: 0;
17393
+ }
17394
+ .tf-calls-day ul {
17395
+ margin: 0;
17396
+ padding: 0;
17397
+ list-style: none;
17398
+ }
17399
+ .tf-call {
17400
+ display: flex;
17401
+ align-items: flex-start;
17402
+ gap: 12px;
17403
+ padding: 10px 0;
17404
+ border-bottom: 1px solid var(--line);
17405
+ }
17406
+ .tf-call:last-child {
17407
+ border-bottom: 0;
17408
+ }
17409
+ .tf-call-ico {
17410
+ display: inline-grid;
17411
+ flex: none;
17412
+ place-items: center;
17413
+ width: 32px;
17414
+ height: var(--control-sm);
17415
+ border-radius: var(--radius-pill);
17416
+ background: var(--surface-sunken);
17417
+ color: var(--ink-muted);
17418
+ }
17419
+ .tf-call.is-missed .tf-call-ico {
17420
+ background: var(--blush);
17421
+ color: var(--blush-ink);
17422
+ }
17423
+ .tf-call-main {
17424
+ display: flex;
17425
+ flex: 1;
17426
+ flex-direction: column;
17427
+ gap: 2px;
17428
+ min-width: 0;
17429
+ }
17430
+ .tf-call-name {
17431
+ align-self: flex-start;
17432
+ padding: 0;
17433
+ border: 0;
17434
+ background: none;
17435
+ color: var(--ink);
17436
+ font: 500 14px/20px var(--font-sans);
17437
+ text-align: left;
17438
+ }
17439
+ button.tf-call-name {
17440
+ cursor: pointer;
17441
+ }
17442
+ button.tf-call-name:hover {
17443
+ text-decoration: underline;
17444
+ }
17445
+ button.tf-call-name:focus-visible {
17446
+ outline: 2px solid var(--focus);
17447
+ outline-offset: 2px;
17448
+ border-radius: var(--radius-sm);
17449
+ }
17450
+ .tf-call.is-missed .tf-call-name {
17451
+ color: var(--blush-ink);
17452
+ }
17453
+ .tf-call-meta {
17454
+ font: 500 12px/16px var(--font-sans);
17455
+ color: var(--ink-muted);
17456
+ }
17457
+ .tf-call-summary {
17458
+ margin: 2px 0 0;
17459
+ font: 500 13px/18px var(--font-sans);
17460
+ color: var(--ink);
17461
+ }
17462
+
17463
+ /* ReservationCard */
17464
+ .tf-booking-when {
17465
+ margin: 0;
17466
+ font: 500 15px/20px var(--font-sans);
17467
+ }
17468
+ .tf-booking-place {
17469
+ display: flex;
17470
+ align-items: center;
17471
+ gap: 4px;
17472
+ margin: 0;
17473
+ font: 500 13px/18px var(--font-sans);
17474
+ color: var(--ink-muted);
17475
+ }
17476
+ .tf-booking-foot {
17477
+ display: flex;
17478
+ flex-wrap: wrap;
17479
+ align-items: center;
17480
+ justify-content: space-between;
17481
+ gap: 8px;
17482
+ }
17483
+ .tf-booking-code {
17484
+ font: 500 12px/16px var(--font-sans);
17485
+ color: var(--ink-muted);
17486
+ }
17487
+ .tf-booking-code b {
17488
+ font: 500 12px/16px var(--font-mono);
17489
+ color: var(--ink);
17490
+ }
17491
+ .tf-booking.is-cancelled .tf-booking-when {
17492
+ color: var(--ink-muted);
17493
+ text-decoration: line-through;
17494
+ }
17495
+ .tf-booking-actions {
17496
+ display: flex;
17497
+ flex-wrap: wrap;
17498
+ gap: 8px;
17499
+ }
17500
+
17501
+ /* Scorecard */
17502
+ .tf-scorecard-total {
17503
+ display: flex;
17504
+ flex: none;
17505
+ flex-direction: column;
17506
+ align-items: flex-end;
17507
+ }
17508
+ .tf-scorecard-total b {
17509
+ font: 600 24px/28px var(--font-sans);
17510
+ font-variant-numeric: tabular-nums;
17511
+ }
17512
+ .tf-scorecard-total small {
17513
+ font: 500 12px/16px var(--font-sans);
17514
+ color: var(--ink-muted);
17515
+ }
17516
+ .tf-scorecard-scroll {
17517
+ overflow-x: auto;
17518
+ }
17519
+ .tf-scorecard-table {
17520
+ width: 100%;
17521
+ min-width: 360px;
17522
+ border-collapse: collapse;
17523
+ font: 500 13px/18px var(--font-sans);
17524
+ font-variant-numeric: tabular-nums;
17525
+ text-align: center;
17526
+ }
17527
+ .tf-scorecard-table th,
17528
+ .tf-scorecard-table td {
17529
+ padding: 6px 2px;
17530
+ border-bottom: 1px solid var(--line);
17531
+ }
17532
+ .tf-scorecard-table th[scope="row"] {
17533
+ padding-right: 8px;
17534
+ text-align: left;
17535
+ font-weight: 500;
17536
+ color: var(--ink-muted);
17537
+ white-space: nowrap;
17538
+ }
17539
+ .tf-scorecard-table thead th {
17540
+ font-weight: 500;
17541
+ color: var(--ink-muted);
17542
+ }
17543
+ .tf-scorecard-table td:last-child,
17544
+ .tf-scorecard-table th:last-child {
17545
+ background: var(--surface-sunken);
17546
+ }
17547
+ .tf-scorecard-par td,
17548
+ .tf-scorecard-putts td {
17549
+ color: var(--ink-muted);
17550
+ }
17551
+ .tf-score {
17552
+ display: inline-grid;
17553
+ place-items: center;
17554
+ min-width: 22px;
17555
+ height: 22px;
17556
+ box-sizing: border-box;
17557
+ font-weight: 500;
17558
+ }
17559
+ /* the usual marks: circles under par, squares over it */
17560
+ .tf-score.is-birdie {
17561
+ border: 1.5px solid currentColor;
17562
+ border-radius: var(--radius-1);
17563
+ }
17564
+ .tf-score.is-eagle {
17565
+ border: 1.5px solid currentColor;
17566
+ border-radius: var(--radius-1);
17567
+ box-shadow:
17568
+ 0 0 0 2px var(--surface),
17569
+ 0 0 0 3.5px currentColor;
17570
+ }
17571
+ .tf-score.is-bogey {
17572
+ border: 1.5px solid currentColor;
17573
+ border-radius: 2px;
17574
+ }
17575
+ .tf-score.is-double {
17576
+ border: 1.5px solid currentColor;
17577
+ border-radius: 2px;
17578
+ box-shadow:
17579
+ 0 0 0 2px var(--surface),
17580
+ 0 0 0 3.5px currentColor;
17581
+ }
17582
+ .tf-scorecard-legend {
17583
+ display: flex;
17584
+ flex-wrap: wrap;
17585
+ gap: 6px 16px;
17586
+ margin: 0;
17587
+ padding: 0;
17588
+ list-style: none;
17589
+ font: 500 12px/16px var(--font-sans);
17590
+ color: var(--ink-muted);
17591
+ }
17592
+ .tf-scorecard-legend li {
17593
+ display: inline-flex;
17594
+ align-items: center;
17595
+ gap: 8px;
17596
+ }
17597
+ .tf-scorecard-legend .tf-score {
17598
+ min-width: 14px;
17599
+ height: 14px;
17600
+ }
17601
+
17602
+ /* HoldingsList */
17603
+ .tf-holdings {
17604
+ container: tf-holdings / inline-size;
17605
+ display: flex;
17606
+ flex-direction: column;
17607
+ margin: 0;
17608
+ padding: 0;
17609
+ list-style: none;
17610
+ }
17611
+ .tf-holdings > li {
17612
+ border-bottom: 1px solid var(--line);
17613
+ }
17614
+ .tf-holdings > li:last-child {
17615
+ border-bottom: 0;
17616
+ }
17617
+ .tf-holding {
17618
+ display: grid;
17619
+ grid-template-columns: minmax(0, 1fr) auto minmax(96px, 160px);
17620
+ align-items: center;
17621
+ gap: 4px 16px;
17622
+ width: 100%;
17623
+ padding: 10px 0;
17624
+ border: 0;
17625
+ background: none;
17626
+ color: var(--ink);
17627
+ font: inherit;
17628
+ text-align: left;
17629
+ }
17630
+ button.tf-holding {
17631
+ cursor: pointer;
17632
+ }
17633
+ button.tf-holding:hover {
17634
+ background: var(--accent);
17635
+ }
17636
+ button.tf-holding:focus-visible {
17637
+ outline: 2px solid var(--focus);
17638
+ outline-offset: 2px;
17639
+ }
17640
+ .tf-holding .tf-option-text {
17641
+ min-width: 0;
17642
+ padding: 0;
17643
+ }
17644
+ .tf-holding .tf-option-text b {
17645
+ overflow: hidden;
17646
+ text-overflow: ellipsis;
17647
+ white-space: nowrap;
17648
+ font: 500 14px/20px var(--font-sans);
17649
+ }
17650
+ .tf-holding-nums {
17651
+ display: flex;
17652
+ flex-direction: column;
17653
+ align-items: flex-end;
17654
+ font-variant-numeric: tabular-nums;
17655
+ }
17656
+ .tf-holding-nums b {
17657
+ font: 500 14px/20px var(--font-sans);
17658
+ }
17659
+ .tf-holding-change {
17660
+ display: inline-flex;
17661
+ align-items: center;
17662
+ gap: 2px;
17663
+ font: 500 12px/16px var(--font-sans);
17664
+ color: var(--ink-muted);
17665
+ }
17666
+ .tf-holding-change.is-up {
17667
+ color: var(--mint-ink);
17668
+ }
17669
+ .tf-holding-change.is-down {
17670
+ color: var(--blush-ink);
17671
+ }
17672
+ .tf-holding-change.is-down .tf-ico {
17673
+ transform: rotate(180deg);
17674
+ }
17675
+ .tf-holding-weight {
17676
+ display: flex;
17677
+ flex-direction: column;
17678
+ gap: 4px;
17679
+ font: 500 11px/14px var(--font-sans);
17680
+ color: var(--ink-muted);
17681
+ }
17682
+ .tf-holding-bar {
17683
+ height: 6px;
17684
+ overflow: hidden;
17685
+ border-radius: var(--radius-pill);
17686
+ background: var(--surface-sunken);
17687
+ }
17688
+ .tf-holding-bar > span {
17689
+ display: block;
17690
+ height: 100%;
17691
+ background: var(--lilac-ink);
17692
+ }
17693
+ /* narrow: the share goes under the name */
17694
+ @container tf-holdings (max-width: 420px) {
17695
+ .tf-holding {
17696
+ grid-template-columns: minmax(0, 1fr) auto;
17697
+ }
17698
+ .tf-holding-weight {
17699
+ grid-column: 1 / -1;
17700
+ }
17701
+ }
17702
+
16617
17703
  /* 90-pro-look.css */
16618
17704
  /* Pro look ("Clean Dark Pro", reference/pro): monochrome surfaces on a visible 1px hairline grid,
16619
17705
  square corners (2px on controls), Geist and Geist Mono, colour only for state, dense by default.