@twentyfirstmedia/pro 0.6.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
@@ -14375,6 +14375,37 @@ a.tf-iconbtn {
14375
14375
  }
14376
14376
  }
14377
14377
 
14378
+ /* Fluid actions: an action row measures itself, so its buttons answer to the box it sits in (a
14379
+ thin card, a side panel, a phone) instead of the window. When the row is narrow it wraps and
14380
+ its buttons share the full width; when it is very narrow each button takes a line. The rows are
14381
+ the kit's own footers and action bars, and plain `.tf-row`s of buttons placed directly in a
14382
+ column box (panel, card, dialog, form …), where they always span the box. */
14383
+ :is(
14384
+ .tf-modal-foot,
14385
+ .tf-card-foot,
14386
+ .tf-approval-foot,
14387
+ .tf-review-actions,
14388
+ .tf-cookie-actions,
14389
+ .tf-push-actions,
14390
+ .tf-insight-actions,
14391
+ .tf-journal-foot,
14392
+ :is(.tf-panel, .tf-card, .tf-modal, .tf-drawer, .tf-popover, .tf-form, .tf-col)
14393
+ > .tf-row:not(:has(> :not(.tf-btn, .tf-iconbtn)))
14394
+ ) {
14395
+ container: tf-actions / inline-size;
14396
+ flex-wrap: wrap;
14397
+ }
14398
+ @container tf-actions (max-width: 400px) {
14399
+ .tf-btn {
14400
+ flex: 1 1 auto;
14401
+ }
14402
+ }
14403
+ @container tf-actions (max-width: 240px) {
14404
+ .tf-btn {
14405
+ flex-basis: 100%;
14406
+ }
14407
+ }
14408
+
14378
14409
  /* 07-polish.css */
14379
14410
  /* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
14380
14411
  /* ───────────── Polish ─────────────
@@ -14585,10 +14616,24 @@ textarea.tf-input,
14585
14616
  .tf-card,
14586
14617
  .tf-stat,
14587
14618
  .tf-dock,
14588
- .tf-sidebar,
14619
+ .tf-sidebar:not(.shell),
14589
14620
  .tf-map-legend,
14590
14621
  .tf-map-ctl,
14591
- .tf-map-pop
14622
+ .tf-map-pop,
14623
+ .tf-vital,
14624
+ .tf-journal,
14625
+ .tf-goal,
14626
+ .tf-insight,
14627
+ .tf-consent-item,
14628
+ .tf-nw,
14629
+ .tf-policy,
14630
+ .tf-connector,
14631
+ .tf-device,
14632
+ .tf-vehicle,
14633
+ .tf-nowplaying,
14634
+ .tf-workout,
14635
+ .tf-booking,
14636
+ .tf-scorecard
14592
14637
  ):not(
14593
14638
  :is(
14594
14639
  .tf-panel,
@@ -14604,6 +14649,20 @@ textarea.tf-input,
14604
14649
  .tf-palette,
14605
14650
  .tf-modal,
14606
14651
  .tf-drawer,
14652
+ .tf-vital,
14653
+ .tf-journal,
14654
+ .tf-goal,
14655
+ .tf-insight,
14656
+ .tf-consent-item,
14657
+ .tf-nw,
14658
+ .tf-policy,
14659
+ .tf-connector,
14660
+ .tf-device,
14661
+ .tf-vehicle,
14662
+ .tf-nowplaying,
14663
+ .tf-workout,
14664
+ .tf-booking,
14665
+ .tf-scorecard,
14607
14666
  .tf-glass
14608
14667
  )
14609
14668
  *
@@ -14698,6 +14757,17 @@ textarea.tf-input,
14698
14757
  .tf-modal,
14699
14758
  .tf-drawer,
14700
14759
  .tf-glass,
14760
+ .tf-insight,
14761
+ .tf-policy,
14762
+ .tf-consent-item,
14763
+ .tf-journal,
14764
+ .tf-connector,
14765
+ .tf-device,
14766
+ .tf-vehicle,
14767
+ .tf-nowplaying,
14768
+ .tf-workout,
14769
+ .tf-booking,
14770
+ .tf-scorecard,
14701
14771
  .tf-btngroup,
14702
14772
  .tf-map-ctl,
14703
14773
  .tf-topbar
@@ -14723,7 +14793,28 @@ textarea.tf-input,
14723
14793
  }
14724
14794
  [data-surface="glass"]
14725
14795
  :is(.tf-iconbtn-soft, .tf-iconbtn-outline, .tf-btn-secondary, .tf-chip):not(
14726
- :is(.tf-panel, .tf-card, .tf-dock, .tf-popover, .tf-menu, .tf-modal, .tf-drawer, .tf-glass) *
14796
+ :is(
14797
+ .tf-panel,
14798
+ .tf-card,
14799
+ .tf-dock,
14800
+ .tf-popover,
14801
+ .tf-menu,
14802
+ .tf-modal,
14803
+ .tf-drawer,
14804
+ .tf-insight,
14805
+ .tf-policy,
14806
+ .tf-consent-item,
14807
+ .tf-journal,
14808
+ .tf-connector,
14809
+ .tf-device,
14810
+ .tf-vehicle,
14811
+ .tf-nowplaying,
14812
+ .tf-workout,
14813
+ .tf-booking,
14814
+ .tf-scorecard,
14815
+ .tf-glass
14816
+ )
14817
+ *
14727
14818
  ):not(.tf-solid):not([aria-pressed="true"]):hover {
14728
14819
  background:
14729
14820
  linear-gradient(var(--glass-hover), var(--glass-hover)) border-box,
@@ -14774,10 +14865,24 @@ textarea.tf-input,
14774
14865
  .tf-card,
14775
14866
  .tf-stat,
14776
14867
  .tf-dock,
14777
- .tf-sidebar,
14868
+ .tf-sidebar:not(.shell),
14778
14869
  .tf-map-legend,
14779
14870
  .tf-map-ctl,
14780
- .tf-map-pop
14871
+ .tf-map-pop,
14872
+ .tf-vital,
14873
+ .tf-journal,
14874
+ .tf-goal,
14875
+ .tf-insight,
14876
+ .tf-consent-item,
14877
+ .tf-nw,
14878
+ .tf-policy,
14879
+ .tf-connector,
14880
+ .tf-device,
14881
+ .tf-vehicle,
14882
+ .tf-nowplaying,
14883
+ .tf-workout,
14884
+ .tf-booking,
14885
+ .tf-scorecard
14781
14886
  ) {
14782
14887
  outline: 1px solid CanvasText;
14783
14888
  outline-offset: -1px;
@@ -15172,6 +15277,2429 @@ textarea.tf-input,
15172
15277
  animation: none;
15173
15278
  }
15174
15279
 
15280
+ /* 11-life.css */
15281
+ /* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
15282
+ /* Life: habits, mood, vitals, activity rings, sleep, medication, journal, goals, insights, consent */
15283
+
15284
+ /* HabitTracker */
15285
+ .tf-habits {
15286
+ container: tf-habits / inline-size;
15287
+ display: grid;
15288
+ gap: 4px;
15289
+ min-width: 0;
15290
+ }
15291
+ .tf-habit-days,
15292
+ .tf-habit-marks {
15293
+ display: grid;
15294
+ grid-auto-flow: column;
15295
+ grid-auto-columns: 24px;
15296
+ gap: 6px;
15297
+ }
15298
+ .tf-habit-days {
15299
+ justify-self: end;
15300
+ padding-right: 12px;
15301
+ font: 500 11px/16px var(--font-sans);
15302
+ color: var(--ink-muted);
15303
+ text-align: center;
15304
+ }
15305
+ .tf-habit {
15306
+ display: grid;
15307
+ grid-template-columns: auto minmax(0, 1fr) auto;
15308
+ align-items: center;
15309
+ gap: 12px;
15310
+ padding: 8px 12px;
15311
+ border-radius: var(--radius-md);
15312
+ }
15313
+ .tf-habit:hover {
15314
+ background: var(--surface-sunken);
15315
+ }
15316
+ .tf-habit-text {
15317
+ display: flex;
15318
+ flex-direction: column;
15319
+ min-width: 0;
15320
+ }
15321
+ .tf-habit-text b {
15322
+ overflow: hidden;
15323
+ text-overflow: ellipsis;
15324
+ white-space: nowrap;
15325
+ font: 500 14px/20px var(--font-sans);
15326
+ }
15327
+ .tf-habit-text small {
15328
+ display: flex;
15329
+ flex-wrap: wrap;
15330
+ gap: 4px 10px;
15331
+ font: 500 12px/16px var(--font-sans);
15332
+ color: var(--ink-muted);
15333
+ }
15334
+ .tf-habit-streak {
15335
+ display: inline-flex;
15336
+ align-items: center;
15337
+ gap: 4px;
15338
+ color: var(--butter-ink);
15339
+ }
15340
+ .tf-habit-mark {
15341
+ display: grid;
15342
+ place-items: center;
15343
+ width: 24px;
15344
+ height: 24px;
15345
+ box-sizing: border-box;
15346
+ padding: 0;
15347
+ border: 1.5px solid var(--line-strong);
15348
+ border-radius: var(--radius-1);
15349
+ background: transparent;
15350
+ color: var(--primary-foreground);
15351
+ }
15352
+ .tf-habit-mark.done {
15353
+ border-color: var(--mint-ink);
15354
+ background: var(--mint-ink);
15355
+ }
15356
+ /* missed: an empty ring with a small cross; no entry: a faint dashed ring */
15357
+ .tf-habit-mark.missed {
15358
+ color: var(--ink-subtle);
15359
+ }
15360
+ .tf-habit-mark:not(.done):not(.missed) {
15361
+ border-style: dashed;
15362
+ border-color: var(--line);
15363
+ }
15364
+ .tf-habit-mark.today {
15365
+ box-shadow:
15366
+ 0 0 0 2px var(--surface),
15367
+ 0 0 0 4px var(--line-strong);
15368
+ }
15369
+ /* narrow: the marks go under the name, the day labels line up with them */
15370
+ @container tf-habits (max-width: 400px) {
15371
+ .tf-habit {
15372
+ grid-template-columns: auto minmax(0, 1fr);
15373
+ row-gap: 8px;
15374
+ }
15375
+ .tf-habit-marks {
15376
+ grid-column: 1 / -1;
15377
+ }
15378
+ .tf-habit-days {
15379
+ justify-self: start;
15380
+ padding: 0 0 0 12px;
15381
+ }
15382
+ }
15383
+ @container tf-habits (max-width: 240px) {
15384
+ .tf-habit-days,
15385
+ .tf-habit-marks {
15386
+ gap: 2px;
15387
+ }
15388
+ }
15389
+ button.tf-habit-mark {
15390
+ cursor: pointer;
15391
+ }
15392
+ button.tf-habit-mark:focus-visible {
15393
+ outline: 2px solid var(--focus);
15394
+ outline-offset: 4px;
15395
+ }
15396
+
15397
+ /* MoodPicker */
15398
+ .tf-mood {
15399
+ min-width: 0;
15400
+ margin: 0;
15401
+ padding: 0;
15402
+ border: 0;
15403
+ }
15404
+ .tf-mood-q {
15405
+ padding: 0;
15406
+ margin-bottom: 12px;
15407
+ font: 500 14px/20px var(--font-sans);
15408
+ }
15409
+ .tf-mood-scale {
15410
+ container: tf-mood / inline-size;
15411
+ display: grid;
15412
+ grid-template-columns: repeat(5, minmax(0, 1fr));
15413
+ gap: 8px;
15414
+ }
15415
+ .tf-mood-opt {
15416
+ position: relative;
15417
+ display: flex;
15418
+ flex-direction: column;
15419
+ align-items: center;
15420
+ justify-content: center;
15421
+ gap: 4px;
15422
+ min-width: 0;
15423
+ min-height: 72px;
15424
+ padding: 8px 4px;
15425
+ box-sizing: border-box;
15426
+ border-radius: var(--radius-md);
15427
+ color: var(--ink-muted);
15428
+ font: 500 12px/16px var(--font-sans);
15429
+ cursor: pointer;
15430
+ }
15431
+ /* the picked level keeps the tint its tf-t-* class gives it */
15432
+ .tf-mood-opt:not(.on) {
15433
+ background: var(--surface-sunken);
15434
+ }
15435
+ .tf-mood.compact .tf-mood-opt {
15436
+ min-height: 48px;
15437
+ }
15438
+ .tf-mood-opt span {
15439
+ max-width: 100%;
15440
+ overflow: hidden;
15441
+ text-overflow: ellipsis;
15442
+ white-space: nowrap;
15443
+ }
15444
+ /* narrow: tighter cells so every word still fits */
15445
+ @container tf-mood (max-width: 300px) {
15446
+ .tf-mood-opt {
15447
+ padding: 8px 2px;
15448
+ font-size: 11px;
15449
+ }
15450
+ }
15451
+ .tf-mood-opt input {
15452
+ position: absolute;
15453
+ inset: 0;
15454
+ margin: 0;
15455
+ opacity: 0;
15456
+ cursor: pointer;
15457
+ }
15458
+ .tf-mood-opt:hover {
15459
+ color: var(--ink);
15460
+ }
15461
+ .tf-mood-opt.on {
15462
+ box-shadow: inset 0 0 0 2px currentColor;
15463
+ }
15464
+ .tf-mood-opt:has(input:focus-visible) {
15465
+ outline: 2px solid var(--focus);
15466
+ outline-offset: 2px;
15467
+ }
15468
+
15469
+ /* VitalTile */
15470
+ .tf-vital {
15471
+ display: flex;
15472
+ flex-direction: column;
15473
+ gap: 12px;
15474
+ min-width: 0;
15475
+ padding: 16px;
15476
+ border-radius: var(--radius-lg);
15477
+ background: var(--surface);
15478
+ box-shadow: 0 0 0 var(--line-width) var(--line);
15479
+ }
15480
+ .tf-vital-head {
15481
+ display: flex;
15482
+ align-items: center;
15483
+ justify-content: space-between;
15484
+ gap: 8px;
15485
+ }
15486
+ .tf-vital-head .tf-badge {
15487
+ flex: none;
15488
+ white-space: nowrap;
15489
+ }
15490
+ .tf-vital-label {
15491
+ display: inline-flex;
15492
+ align-items: center;
15493
+ gap: 6px;
15494
+ min-width: 0;
15495
+ font: 500 13px/18px var(--font-sans);
15496
+ color: var(--ink-muted);
15497
+ }
15498
+ .tf-vital-main {
15499
+ display: flex;
15500
+ align-items: flex-end;
15501
+ justify-content: space-between;
15502
+ gap: 12px;
15503
+ }
15504
+ .tf-vital-value {
15505
+ font: 600 22px/28px var(--font-sans);
15506
+ letter-spacing: -0.02em;
15507
+ font-variant-numeric: tabular-nums;
15508
+ }
15509
+ .tf-vital-value small {
15510
+ margin-left: 4px;
15511
+ font: 500 13px/18px var(--font-sans);
15512
+ letter-spacing: 0;
15513
+ color: var(--ink-muted);
15514
+ }
15515
+ .tf-vital-band {
15516
+ position: relative;
15517
+ height: 8px;
15518
+ border-radius: var(--radius-pill);
15519
+ background: var(--surface-sunken);
15520
+ }
15521
+ .tf-vital-normal {
15522
+ position: absolute;
15523
+ top: 0;
15524
+ bottom: 0;
15525
+ border-radius: var(--radius-pill);
15526
+ background: var(--mint);
15527
+ }
15528
+ .tf-vital-dot {
15529
+ position: absolute;
15530
+ top: 50%;
15531
+ width: 14px;
15532
+ height: 14px;
15533
+ box-sizing: border-box;
15534
+ border: 3px solid var(--surface);
15535
+ border-radius: var(--radius-full);
15536
+ background: var(--mint-ink);
15537
+ translate: -50% -50%;
15538
+ }
15539
+ .tf-vital.is-low .tf-vital-dot,
15540
+ .tf-vital.is-high .tf-vital-dot {
15541
+ background: var(--butter-ink);
15542
+ }
15543
+ .tf-vital-foot {
15544
+ display: flex;
15545
+ flex-wrap: wrap;
15546
+ justify-content: space-between;
15547
+ gap: 4px 12px;
15548
+ font: 500 12px/16px var(--font-sans);
15549
+ color: var(--ink-muted);
15550
+ }
15551
+
15552
+ /* ActivityRings */
15553
+ .tf-rings {
15554
+ display: flex;
15555
+ flex-wrap: wrap;
15556
+ align-items: center;
15557
+ gap: 20px;
15558
+ min-width: 0;
15559
+ }
15560
+ .tf-rings svg {
15561
+ flex: none;
15562
+ }
15563
+ .tf-rings-legend {
15564
+ display: flex;
15565
+ flex-direction: column;
15566
+ gap: 8px;
15567
+ min-width: 0;
15568
+ margin: 0;
15569
+ padding: 0;
15570
+ list-style: none;
15571
+ }
15572
+ .tf-rings-legend li {
15573
+ display: grid;
15574
+ grid-template-columns: auto minmax(0, 1fr);
15575
+ align-items: center;
15576
+ column-gap: 8px;
15577
+ }
15578
+ .tf-rings-key {
15579
+ width: 10px;
15580
+ height: 10px;
15581
+ border-radius: var(--radius-1);
15582
+ }
15583
+ .tf-rings-name {
15584
+ font: 500 12px/16px var(--font-sans);
15585
+ color: var(--ink-muted);
15586
+ }
15587
+ .tf-rings-legend b {
15588
+ grid-column: 2;
15589
+ font: 600 14px/20px var(--font-sans);
15590
+ font-variant-numeric: tabular-nums;
15591
+ }
15592
+
15593
+ /* SleepChart */
15594
+ .tf-sleep {
15595
+ display: flex;
15596
+ flex-direction: column;
15597
+ gap: 16px;
15598
+ min-width: 0;
15599
+ }
15600
+ .tf-sleep-chart {
15601
+ display: flex;
15602
+ flex-direction: column;
15603
+ gap: 6px;
15604
+ }
15605
+ .tf-sleep-lane {
15606
+ display: grid;
15607
+ grid-template-columns: 52px minmax(0, 1fr);
15608
+ align-items: center;
15609
+ gap: 12px;
15610
+ }
15611
+ .tf-sleep-name {
15612
+ font: 500 12px/16px var(--font-sans);
15613
+ color: var(--ink-muted);
15614
+ }
15615
+ .tf-sleep-track {
15616
+ position: relative;
15617
+ height: 20px;
15618
+ border-radius: var(--radius-sm);
15619
+ background: var(--surface-sunken);
15620
+ }
15621
+ .tf-sleep-seg {
15622
+ position: absolute;
15623
+ top: 2px;
15624
+ bottom: 2px;
15625
+ min-width: 2px;
15626
+ border-radius: var(--radius-sm);
15627
+ }
15628
+ .tf-sleep-axis {
15629
+ display: flex;
15630
+ justify-content: space-between;
15631
+ margin-left: 64px;
15632
+ font: 500 11px/16px var(--font-sans);
15633
+ color: var(--ink-muted);
15634
+ font-variant-numeric: tabular-nums;
15635
+ }
15636
+ .tf-sleep-sum {
15637
+ display: flex;
15638
+ flex-wrap: wrap;
15639
+ align-items: center;
15640
+ justify-content: space-between;
15641
+ gap: 8px 16px;
15642
+ }
15643
+ .tf-sleep-sum b {
15644
+ font: 600 14px/20px var(--font-sans);
15645
+ }
15646
+ .tf-sleep-sum ul {
15647
+ display: flex;
15648
+ flex-wrap: wrap;
15649
+ gap: 4px 14px;
15650
+ margin: 0;
15651
+ padding: 0;
15652
+ list-style: none;
15653
+ }
15654
+ .tf-sleep-sum li {
15655
+ display: inline-flex;
15656
+ align-items: center;
15657
+ gap: 6px;
15658
+ font: 500 12px/16px var(--font-sans);
15659
+ color: var(--ink-muted);
15660
+ }
15661
+ .tf-sleep-sum li span:last-child {
15662
+ color: var(--ink);
15663
+ font-weight: 500;
15664
+ font-variant-numeric: tabular-nums;
15665
+ }
15666
+
15667
+ /* MedicationList */
15668
+ .tf-meds {
15669
+ container: tf-meds / inline-size;
15670
+ display: flex;
15671
+ flex-direction: column;
15672
+ gap: 4px;
15673
+ min-width: 0;
15674
+ margin: 0;
15675
+ padding: 0;
15676
+ list-style: none;
15677
+ }
15678
+ .tf-med {
15679
+ display: grid;
15680
+ grid-template-columns: 48px auto minmax(0, 1fr) auto;
15681
+ align-items: center;
15682
+ gap: 12px;
15683
+ padding: 8px 12px;
15684
+ border-radius: var(--radius-md);
15685
+ }
15686
+ .tf-med.is-due {
15687
+ background: var(--surface-sunken);
15688
+ }
15689
+ .tf-med-time {
15690
+ font: 500 13px/18px var(--font-sans);
15691
+ font-variant-numeric: tabular-nums;
15692
+ color: var(--ink-muted);
15693
+ }
15694
+ .tf-med-text {
15695
+ display: flex;
15696
+ flex-direction: column;
15697
+ min-width: 0;
15698
+ }
15699
+ .tf-med-text b {
15700
+ font: 500 14px/20px var(--font-sans);
15701
+ overflow-wrap: break-word;
15702
+ }
15703
+ .tf-med-text small {
15704
+ font: 500 12px/16px var(--font-sans);
15705
+ color: var(--ink-muted);
15706
+ }
15707
+ .tf-med.is-taken .tf-med-text b {
15708
+ color: var(--ink-muted);
15709
+ }
15710
+ .tf-med-act {
15711
+ display: inline-flex;
15712
+ align-items: center;
15713
+ gap: 8px;
15714
+ }
15715
+ /* narrow: time, name and status; the icon gives way */
15716
+ @container tf-meds (max-width: 400px) {
15717
+ .tf-med {
15718
+ grid-template-columns: 44px minmax(0, 1fr) auto;
15719
+ gap: 8px;
15720
+ padding: 8px;
15721
+ }
15722
+ .tf-med > .tf-tinticon {
15723
+ display: none;
15724
+ }
15725
+ }
15726
+
15727
+ /* JournalEntry */
15728
+ .tf-journal {
15729
+ display: flex;
15730
+ flex-direction: column;
15731
+ gap: 8px;
15732
+ min-width: 0;
15733
+ padding: 20px;
15734
+ border-radius: var(--radius-lg);
15735
+ background: var(--surface);
15736
+ box-shadow: 0 0 0 var(--line-width) var(--line);
15737
+ }
15738
+ .tf-journal-head {
15739
+ display: flex;
15740
+ flex-wrap: wrap;
15741
+ align-items: center;
15742
+ justify-content: space-between;
15743
+ gap: 8px;
15744
+ font: 500 12px/16px var(--font-sans);
15745
+ color: var(--ink-muted);
15746
+ }
15747
+ .tf-journal-mood {
15748
+ display: inline-flex;
15749
+ align-items: center;
15750
+ gap: 4px;
15751
+ padding: 2px 8px;
15752
+ border-radius: var(--radius-pill);
15753
+ }
15754
+ .tf-journal-title {
15755
+ margin: 0;
15756
+ font: 600 14px/20px var(--font-sans);
15757
+ }
15758
+ .tf-journal-body {
15759
+ font: 500 14px/20px var(--font-sans);
15760
+ color: var(--ink);
15761
+ overflow-wrap: anywhere;
15762
+ }
15763
+ .tf-journal-body p {
15764
+ margin: 0 0 8px;
15765
+ }
15766
+ .tf-journal-foot {
15767
+ display: flex;
15768
+ flex-wrap: wrap;
15769
+ align-items: center;
15770
+ justify-content: space-between;
15771
+ gap: 8px;
15772
+ padding-top: 4px;
15773
+ }
15774
+ .tf-journal-tags {
15775
+ display: flex;
15776
+ flex-wrap: wrap;
15777
+ gap: 6px;
15778
+ }
15779
+
15780
+ /* GoalCard */
15781
+ .tf-goal {
15782
+ display: flex;
15783
+ flex-direction: column;
15784
+ gap: 12px;
15785
+ min-width: 0;
15786
+ padding: 20px;
15787
+ border-radius: var(--radius-lg);
15788
+ background: var(--surface);
15789
+ box-shadow: 0 0 0 var(--line-width) var(--line);
15790
+ }
15791
+ /* narrow: the icon steps aside so the title keeps whole words */
15792
+ @container tf-goal (max-width: 280px) {
15793
+ .tf-goal-head > .tf-tinticon {
15794
+ display: none;
15795
+ }
15796
+ }
15797
+ .tf-goal-head {
15798
+ container: tf-goal / inline-size;
15799
+ display: flex;
15800
+ align-items: center;
15801
+ gap: 12px;
15802
+ }
15803
+ .tf-goal-head .tf-option-text {
15804
+ flex: 1;
15805
+ padding: 0;
15806
+ }
15807
+ .tf-goal-head b {
15808
+ font: 600 14px/20px var(--font-sans);
15809
+ }
15810
+ .tf-goal-pct {
15811
+ font: 600 18px/24px var(--font-sans);
15812
+ font-variant-numeric: tabular-nums;
15813
+ }
15814
+ .tf-goal-bar {
15815
+ height: 10px;
15816
+ overflow: hidden;
15817
+ border-radius: var(--radius-pill);
15818
+ background: var(--surface-sunken);
15819
+ }
15820
+ .tf-goal-bar > span {
15821
+ display: block;
15822
+ height: 100%;
15823
+ border-radius: var(--radius-pill);
15824
+ }
15825
+ .tf-goal-meta,
15826
+ .tf-goal-note {
15827
+ margin: 0;
15828
+ font: 500 12px/16px var(--font-sans);
15829
+ color: var(--ink-muted);
15830
+ }
15831
+ .tf-goal-steps {
15832
+ display: flex;
15833
+ flex-direction: column;
15834
+ gap: 6px;
15835
+ margin: 0;
15836
+ padding: 0;
15837
+ list-style: none;
15838
+ font: 500 13px/18px var(--font-sans);
15839
+ }
15840
+ .tf-goal-steps li {
15841
+ display: flex;
15842
+ align-items: center;
15843
+ gap: 8px;
15844
+ }
15845
+ .tf-goal-steps li.done {
15846
+ color: var(--ink-muted);
15847
+ }
15848
+ .tf-goal-step {
15849
+ display: grid;
15850
+ place-items: center;
15851
+ flex: none;
15852
+ width: 16px;
15853
+ height: 16px;
15854
+ box-sizing: border-box;
15855
+ border: 1.5px solid var(--line-strong);
15856
+ border-radius: var(--radius-1);
15857
+ color: var(--primary-foreground);
15858
+ }
15859
+ .tf-goal-steps li.done .tf-goal-step {
15860
+ border-color: var(--primary);
15861
+ background: var(--primary);
15862
+ }
15863
+
15864
+ /* InsightCard */
15865
+ .tf-insight {
15866
+ display: flex;
15867
+ flex-direction: column;
15868
+ gap: 12px;
15869
+ min-width: 0;
15870
+ padding: 16px 16px 16px 20px;
15871
+ border-radius: var(--radius-lg);
15872
+ background: var(--surface);
15873
+ box-shadow:
15874
+ 0 0 0 var(--line-width) var(--line),
15875
+ inset 3px 0 0 var(--sky-ink);
15876
+ /* on glass the card takes a faint wash of its tone */
15877
+ --tint: var(--sky);
15878
+ }
15879
+ .tf-insight.is-success {
15880
+ --tint: var(--mint);
15881
+ box-shadow:
15882
+ 0 0 0 var(--line-width) var(--line),
15883
+ inset 3px 0 0 var(--mint-ink);
15884
+ }
15885
+ .tf-insight.is-warning {
15886
+ --tint: var(--butter);
15887
+ box-shadow:
15888
+ 0 0 0 var(--line-width) var(--line),
15889
+ inset 3px 0 0 var(--butter-ink);
15890
+ }
15891
+ .tf-insight.is-highlight {
15892
+ --tint: var(--lilac);
15893
+ box-shadow:
15894
+ 0 0 0 var(--line-width) var(--line),
15895
+ inset 3px 0 0 var(--lilac-ink);
15896
+ }
15897
+ .tf-insight-head {
15898
+ display: flex;
15899
+ align-items: flex-start;
15900
+ gap: 12px;
15901
+ }
15902
+ .tf-insight-titles {
15903
+ display: flex;
15904
+ flex: 1;
15905
+ flex-direction: column;
15906
+ min-width: 0;
15907
+ }
15908
+ .tf-insight-titles small {
15909
+ font: 500 12px/16px var(--font-sans);
15910
+ color: var(--ink-muted);
15911
+ }
15912
+ .tf-insight-titles b {
15913
+ font: 600 15px/20px var(--font-sans);
15914
+ overflow-wrap: anywhere;
15915
+ }
15916
+ .tf-insight-body {
15917
+ font: 500 14px/20px var(--font-sans);
15918
+ color: var(--ink);
15919
+ }
15920
+ .tf-insight-why button {
15921
+ display: inline-flex;
15922
+ align-items: center;
15923
+ gap: 6px;
15924
+ min-height: 24px;
15925
+ padding: 0;
15926
+ border: 0;
15927
+ background: none;
15928
+ color: var(--ink-muted);
15929
+ font: 500 12px/16px var(--font-sans);
15930
+ cursor: pointer;
15931
+ }
15932
+ .tf-insight-why button:hover {
15933
+ color: var(--ink);
15934
+ }
15935
+ .tf-insight-why button:focus-visible {
15936
+ outline: 2px solid var(--focus);
15937
+ outline-offset: 2px;
15938
+ border-radius: var(--radius-sm);
15939
+ }
15940
+ .tf-insight-why button[aria-expanded="true"] .tf-insight-chev {
15941
+ rotate: 180deg;
15942
+ }
15943
+ .tf-insight-whytext {
15944
+ margin-top: 8px;
15945
+ padding: 12px;
15946
+ border-radius: var(--radius-md);
15947
+ background: var(--surface-sunken);
15948
+ font: 500 13px/18px var(--font-sans);
15949
+ color: var(--ink-muted);
15950
+ }
15951
+ .tf-insight-actions {
15952
+ display: flex;
15953
+ flex-wrap: wrap;
15954
+ justify-content: flex-end;
15955
+ gap: 8px;
15956
+ }
15957
+
15958
+ /* ConsentList */
15959
+ .tf-consent {
15960
+ display: flex;
15961
+ flex-direction: column;
15962
+ gap: 12px;
15963
+ min-width: 0;
15964
+ }
15965
+ .tf-consent-item {
15966
+ display: flex;
15967
+ flex-direction: column;
15968
+ gap: 12px;
15969
+ padding: 16px;
15970
+ border-radius: var(--radius-lg);
15971
+ background: var(--surface);
15972
+ box-shadow: 0 0 0 var(--line-width) var(--line);
15973
+ }
15974
+ .tf-consent-head {
15975
+ display: flex;
15976
+ flex-wrap: wrap;
15977
+ align-items: center;
15978
+ gap: 12px;
15979
+ }
15980
+ .tf-consent-head .tf-option-text {
15981
+ flex: 1;
15982
+ min-width: 140px;
15983
+ padding: 0;
15984
+ }
15985
+ .tf-consent-purpose {
15986
+ margin: 0;
15987
+ font: 500 13px/18px var(--font-sans);
15988
+ color: var(--ink-muted);
15989
+ }
15990
+ .tf-consent-scopes {
15991
+ display: flex;
15992
+ flex-direction: column;
15993
+ margin: 0;
15994
+ padding: 0;
15995
+ list-style: none;
15996
+ }
15997
+ .tf-consent-scopes li {
15998
+ display: flex;
15999
+ align-items: center;
16000
+ justify-content: space-between;
16001
+ gap: 12px;
16002
+ padding: 10px 0;
16003
+ border-top: 1px solid var(--line);
16004
+ }
16005
+ .tf-consent-scopes .tf-option-text {
16006
+ min-width: 0;
16007
+ padding: 0;
16008
+ }
16009
+ .tf-consent-req {
16010
+ flex: none;
16011
+ font: 500 12px/16px var(--font-sans);
16012
+ color: var(--ink-muted);
16013
+ }
16014
+
16015
+ /* 12-household.css */
16016
+ /* Generated by scripts/pro-css.ts from packages/halo/css. Do not edit; the Pro look lives in 90-pro-look.css. */
16017
+ /* Life: budgets, subscriptions, net worth, deadlines, policies, coverage, claims, documents */
16018
+
16019
+ /* BudgetList */
16020
+ .tf-budgets,
16021
+ .tf-subs ul,
16022
+ .tf-deadlines,
16023
+ .tf-docs,
16024
+ .tf-claim-steps,
16025
+ .tf-nw-side ul {
16026
+ margin: 0;
16027
+ padding: 0;
16028
+ list-style: none;
16029
+ }
16030
+ .tf-budgets {
16031
+ display: flex;
16032
+ flex-direction: column;
16033
+ gap: 4px;
16034
+ min-width: 0;
16035
+ }
16036
+ .tf-budget {
16037
+ container: tf-budget / inline-size;
16038
+ display: flex;
16039
+ align-items: center;
16040
+ gap: 12px;
16041
+ width: 100%;
16042
+ padding: 10px 12px;
16043
+ box-sizing: border-box;
16044
+ border: 0;
16045
+ border-radius: var(--radius-md);
16046
+ background: transparent;
16047
+ color: var(--ink);
16048
+ font: inherit;
16049
+ text-align: left;
16050
+ }
16051
+ button.tf-budget {
16052
+ cursor: pointer;
16053
+ }
16054
+ button.tf-budget:hover {
16055
+ background: var(--accent);
16056
+ }
16057
+ button.tf-budget:focus-visible {
16058
+ outline: 2px solid var(--focus);
16059
+ outline-offset: 2px;
16060
+ }
16061
+ .tf-budget-main {
16062
+ display: flex;
16063
+ flex: 1;
16064
+ flex-direction: column;
16065
+ gap: 6px;
16066
+ min-width: 0;
16067
+ }
16068
+ .tf-budget-top {
16069
+ display: flex;
16070
+ flex-wrap: wrap;
16071
+ align-items: baseline;
16072
+ justify-content: space-between;
16073
+ gap: 0 12px;
16074
+ }
16075
+ /* narrow: the icon steps aside so the category keeps its name */
16076
+ @container tf-budget (max-width: 300px) {
16077
+ .tf-budget > .tf-tinticon {
16078
+ display: none;
16079
+ }
16080
+ }
16081
+ .tf-budget-top b {
16082
+ min-width: 0;
16083
+ overflow: hidden;
16084
+ text-overflow: ellipsis;
16085
+ white-space: nowrap;
16086
+ font: 500 14px/20px var(--font-sans);
16087
+ }
16088
+ .tf-budget-nums {
16089
+ flex: none;
16090
+ font: 600 13px/18px var(--font-sans);
16091
+ font-variant-numeric: tabular-nums;
16092
+ }
16093
+ .tf-budget-nums small {
16094
+ font-weight: 500;
16095
+ color: var(--ink-muted);
16096
+ }
16097
+ .tf-budget-bar {
16098
+ display: block;
16099
+ height: 8px;
16100
+ overflow: hidden;
16101
+ border-radius: var(--radius-pill);
16102
+ background: var(--surface-sunken);
16103
+ }
16104
+ .tf-budget-bar > span {
16105
+ display: block;
16106
+ height: 100%;
16107
+ border-radius: var(--radius-pill);
16108
+ }
16109
+ .tf-budget-left {
16110
+ font: 500 12px/16px var(--font-sans);
16111
+ color: var(--ink-muted);
16112
+ }
16113
+ .tf-budget-left.over {
16114
+ color: var(--blush-ink);
16115
+ font-weight: 500;
16116
+ }
16117
+
16118
+ /* SubscriptionList */
16119
+ .tf-subs {
16120
+ display: flex;
16121
+ flex-direction: column;
16122
+ gap: 8px;
16123
+ min-width: 0;
16124
+ }
16125
+ .tf-subs ul {
16126
+ container: tf-subs / inline-size;
16127
+ display: flex;
16128
+ flex-direction: column;
16129
+ }
16130
+ .tf-sub {
16131
+ display: flex;
16132
+ align-items: center;
16133
+ gap: 12px;
16134
+ padding: 10px 4px;
16135
+ border-bottom: 1px solid var(--line);
16136
+ }
16137
+ .tf-sub:last-child {
16138
+ border-bottom: 0;
16139
+ }
16140
+ .tf-sub-text {
16141
+ display: flex;
16142
+ flex: 1;
16143
+ flex-direction: column;
16144
+ min-width: 0;
16145
+ }
16146
+ .tf-sub-text b {
16147
+ overflow: hidden;
16148
+ text-overflow: ellipsis;
16149
+ white-space: nowrap;
16150
+ font: 500 14px/20px var(--font-sans);
16151
+ }
16152
+ .tf-sub-text small {
16153
+ font: 500 12px/16px var(--font-sans);
16154
+ color: var(--ink-muted);
16155
+ }
16156
+ .tf-sub-amount {
16157
+ flex: none;
16158
+ font: 600 14px/20px var(--font-sans);
16159
+ font-variant-numeric: tabular-nums;
16160
+ text-align: right;
16161
+ }
16162
+ .tf-sub-amount small {
16163
+ margin-left: 2px;
16164
+ font-weight: 500;
16165
+ color: var(--ink-muted);
16166
+ }
16167
+ /* narrow: amount and trial badge go under the name, the menu stays at the end */
16168
+ @container tf-subs (max-width: 380px) {
16169
+ .tf-sub {
16170
+ display: grid;
16171
+ grid-template-columns: auto minmax(0, 1fr) auto;
16172
+ gap: 4px 12px;
16173
+ align-items: center;
16174
+ }
16175
+ .tf-sub > :first-child {
16176
+ grid-row: 1 / span 2;
16177
+ align-self: start;
16178
+ }
16179
+ .tf-sub > .tf-sub-text,
16180
+ .tf-sub > .tf-badge,
16181
+ .tf-sub > .tf-sub-amount {
16182
+ grid-column: 2;
16183
+ justify-self: start;
16184
+ text-align: left;
16185
+ }
16186
+ .tf-sub > :last-child:not(.tf-sub-amount) {
16187
+ grid-column: 3;
16188
+ grid-row: 1;
16189
+ }
16190
+ }
16191
+ .tf-sub.is-cancelled .tf-sub-text b,
16192
+ .tf-sub.is-cancelled .tf-sub-amount {
16193
+ color: var(--ink-muted);
16194
+ text-decoration: line-through;
16195
+ }
16196
+ .tf-subs-total {
16197
+ display: flex;
16198
+ flex-wrap: wrap;
16199
+ align-items: baseline;
16200
+ justify-content: space-between;
16201
+ gap: 4px 12px;
16202
+ padding: 12px;
16203
+ border-radius: var(--radius-md);
16204
+ background: var(--surface-sunken);
16205
+ font: 500 13px/18px var(--font-sans);
16206
+ color: var(--ink-muted);
16207
+ }
16208
+ .tf-subs-total b {
16209
+ color: var(--ink);
16210
+ font: 600 15px/20px var(--font-sans);
16211
+ }
16212
+
16213
+ /* NetWorthCard */
16214
+ .tf-nw {
16215
+ display: flex;
16216
+ flex-direction: column;
16217
+ gap: 16px;
16218
+ min-width: 0;
16219
+ padding: 20px;
16220
+ border-radius: var(--radius-lg);
16221
+ background: var(--surface);
16222
+ box-shadow: 0 0 0 var(--line-width) var(--line);
16223
+ }
16224
+ .tf-nw-head {
16225
+ display: flex;
16226
+ flex-wrap: wrap;
16227
+ align-items: flex-end;
16228
+ justify-content: space-between;
16229
+ gap: 12px;
16230
+ }
16231
+ .tf-nw-head > :first-child {
16232
+ flex: 1 1 200px;
16233
+ }
16234
+ .tf-nw-head > :last-child:not(:first-child) {
16235
+ flex: none;
16236
+ max-width: 45%;
16237
+ }
16238
+ .tf-nw-title {
16239
+ font: 500 13px/18px var(--font-sans);
16240
+ color: var(--ink-muted);
16241
+ }
16242
+ .tf-nw-total {
16243
+ font: 600 24px/38px var(--font-sans);
16244
+ letter-spacing: -0.02em;
16245
+ font-variant-numeric: tabular-nums;
16246
+ }
16247
+ .tf-nw-change {
16248
+ display: inline-flex;
16249
+ align-items: center;
16250
+ gap: 4px;
16251
+ font: 500 12px/16px var(--font-sans);
16252
+ color: var(--mint-ink);
16253
+ }
16254
+ .tf-nw-change.down {
16255
+ color: var(--blush-ink);
16256
+ }
16257
+ .tf-nw-change.down .tf-ico {
16258
+ rotate: 180deg;
16259
+ }
16260
+ .tf-nw-change span {
16261
+ font-weight: 500;
16262
+ color: var(--ink-muted);
16263
+ }
16264
+ .tf-nw-sides {
16265
+ display: grid;
16266
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
16267
+ gap: 16px;
16268
+ }
16269
+ .tf-nw-side {
16270
+ display: flex;
16271
+ flex-direction: column;
16272
+ gap: 8px;
16273
+ min-width: 0;
16274
+ }
16275
+ .tf-nw-sidehead {
16276
+ display: flex;
16277
+ justify-content: space-between;
16278
+ gap: 8px;
16279
+ padding-bottom: 8px;
16280
+ border-bottom: 1px solid var(--line);
16281
+ font: 500 12px/16px var(--font-sans);
16282
+ color: var(--ink-muted);
16283
+ }
16284
+ .tf-nw-sidehead b {
16285
+ color: var(--ink);
16286
+ font-variant-numeric: tabular-nums;
16287
+ }
16288
+ .tf-nw-side li {
16289
+ display: flex;
16290
+ justify-content: space-between;
16291
+ gap: 8px;
16292
+ padding: 4px 0;
16293
+ font: 500 13px/18px var(--font-sans);
16294
+ }
16295
+ .tf-nw-side li span:first-child {
16296
+ display: inline-flex;
16297
+ align-items: center;
16298
+ gap: 6px;
16299
+ min-width: 0;
16300
+ color: var(--ink-muted);
16301
+ }
16302
+ .tf-nw-side li span:last-child {
16303
+ font-variant-numeric: tabular-nums;
16304
+ }
16305
+
16306
+ /* DeadlineList */
16307
+ .tf-deadlines {
16308
+ display: flex;
16309
+ flex-direction: column;
16310
+ gap: 4px;
16311
+ min-width: 0;
16312
+ }
16313
+ .tf-deadline {
16314
+ display: flex;
16315
+ flex-wrap: wrap;
16316
+ align-items: center;
16317
+ gap: 8px 12px;
16318
+ padding: 8px 12px;
16319
+ border-radius: var(--radius-md);
16320
+ }
16321
+ .tf-deadline.is-overdue {
16322
+ background: var(--blush);
16323
+ }
16324
+ .tf-deadline.is-soon {
16325
+ background: var(--surface-sunken);
16326
+ }
16327
+ .tf-deadline-date {
16328
+ display: flex;
16329
+ flex: none;
16330
+ flex-direction: column;
16331
+ align-items: center;
16332
+ width: 40px;
16333
+ padding: 4px 0;
16334
+ border-radius: var(--radius-sm);
16335
+ background: var(--surface);
16336
+ box-shadow: inset 0 0 0 1px var(--line);
16337
+ }
16338
+ .tf-deadline-date b {
16339
+ font: 600 14px/20px var(--font-sans);
16340
+ font-variant-numeric: tabular-nums;
16341
+ }
16342
+ .tf-deadline-date small {
16343
+ font: 500 10px/12px var(--font-sans);
16344
+ text-transform: uppercase;
16345
+ color: var(--ink-muted);
16346
+ }
16347
+ .tf-deadline-text {
16348
+ display: flex;
16349
+ flex: 1 1 160px;
16350
+ flex-direction: column;
16351
+ min-width: 0;
16352
+ }
16353
+ .tf-deadline-text b {
16354
+ font: 500 14px/20px var(--font-sans);
16355
+ overflow-wrap: break-word;
16356
+ }
16357
+ .tf-deadline-text small {
16358
+ font: 500 12px/16px var(--font-sans);
16359
+ color: var(--ink-muted);
16360
+ }
16361
+ .tf-deadline-amount {
16362
+ font: 600 13px/18px var(--font-sans);
16363
+ font-variant-numeric: tabular-nums;
16364
+ }
16365
+ .tf-deadline.is-done .tf-deadline-text b {
16366
+ color: var(--ink-muted);
16367
+ text-decoration: line-through;
16368
+ }
16369
+ .tf-deadline-done {
16370
+ color: var(--mint-ink);
16371
+ }
16372
+
16373
+ /* PolicyCard */
16374
+ .tf-policy {
16375
+ display: flex;
16376
+ flex-direction: column;
16377
+ gap: 16px;
16378
+ min-width: 0;
16379
+ padding: 20px;
16380
+ border-radius: var(--radius-lg);
16381
+ background: var(--surface);
16382
+ box-shadow: 0 0 0 var(--line-width) var(--line);
16383
+ }
16384
+ .tf-policy-head {
16385
+ display: flex;
16386
+ flex-wrap: wrap;
16387
+ align-items: center;
16388
+ gap: 12px;
16389
+ }
16390
+ .tf-policy-head .tf-option-text {
16391
+ flex: 1;
16392
+ min-width: 120px;
16393
+ padding: 0;
16394
+ }
16395
+ .tf-policy-head b {
16396
+ font: 600 15px/20px var(--font-sans);
16397
+ }
16398
+ .tf-policy-facts {
16399
+ display: grid;
16400
+ grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
16401
+ gap: 12px;
16402
+ margin: 0;
16403
+ }
16404
+ .tf-policy-facts div {
16405
+ min-width: 0;
16406
+ }
16407
+ .tf-policy-facts dt {
16408
+ font: 500 11px/14px var(--font-sans);
16409
+ letter-spacing: 0.04em;
16410
+ text-transform: uppercase;
16411
+ color: var(--ink-muted);
16412
+ }
16413
+ .tf-policy-facts dd {
16414
+ margin: 2px 0 0;
16415
+ font: 600 15px/20px var(--font-sans);
16416
+ font-variant-numeric: tabular-nums;
16417
+ overflow-wrap: break-word;
16418
+ }
16419
+ .tf-policy-foot {
16420
+ display: flex;
16421
+ flex-wrap: wrap;
16422
+ align-items: center;
16423
+ justify-content: space-between;
16424
+ gap: 8px;
16425
+ padding-top: 12px;
16426
+ border-top: 1px solid var(--line);
16427
+ font: 500 12px/16px var(--font-sans);
16428
+ color: var(--ink-muted);
16429
+ }
16430
+ .tf-policy-actions {
16431
+ display: inline-flex;
16432
+ flex-wrap: wrap;
16433
+ gap: 8px;
16434
+ }
16435
+
16436
+ /* CoverageMatrix */
16437
+ .tf-coverage {
16438
+ display: flex;
16439
+ flex-direction: column;
16440
+ gap: 12px;
16441
+ min-width: 0;
16442
+ }
16443
+ .tf-coverage-sum {
16444
+ display: flex;
16445
+ flex-wrap: wrap;
16446
+ gap: 8px 16px;
16447
+ }
16448
+ .tf-coverage-box {
16449
+ container: tf-coverage / inline-size;
16450
+ }
16451
+ .tf-coverage-table {
16452
+ width: 100%;
16453
+ border-collapse: collapse;
16454
+ }
16455
+ .tf-coverage-table th,
16456
+ .tf-coverage-table td {
16457
+ padding: 10px 8px;
16458
+ border-top: 1px solid var(--line);
16459
+ text-align: left;
16460
+ vertical-align: middle;
16461
+ }
16462
+ .tf-coverage-table th {
16463
+ font-weight: inherit;
16464
+ }
16465
+ .tf-coverage-table th b {
16466
+ display: block;
16467
+ font: 500 14px/20px var(--font-sans);
16468
+ }
16469
+ .tf-coverage-table th small {
16470
+ font: 500 12px/16px var(--font-sans);
16471
+ color: var(--ink-muted);
16472
+ }
16473
+ .tf-coverage-table td:nth-child(2) {
16474
+ white-space: nowrap;
16475
+ }
16476
+ .tf-coverage-note {
16477
+ font: 500 13px/18px var(--font-sans);
16478
+ color: var(--ink-muted);
16479
+ }
16480
+ .tf-coverage-table tr.is-none th b {
16481
+ color: var(--blush-ink);
16482
+ }
16483
+ /* narrow: each risk becomes a block, its status top right, the note underneath */
16484
+ @container tf-coverage (max-width: 440px) {
16485
+ .tf-coverage-table,
16486
+ .tf-coverage-table tbody {
16487
+ display: block;
16488
+ }
16489
+ .tf-coverage-table tr {
16490
+ display: grid;
16491
+ grid-template-columns: minmax(0, 1fr) auto;
16492
+ gap: 4px 12px;
16493
+ padding: 10px 4px;
16494
+ border-top: 1px solid var(--line);
16495
+ }
16496
+ .tf-coverage-table th,
16497
+ .tf-coverage-table td {
16498
+ padding: 0;
16499
+ border-top: 0;
16500
+ }
16501
+ .tf-coverage-table td.tf-coverage-note {
16502
+ grid-column: 1 / -1;
16503
+ }
16504
+ }
16505
+
16506
+ /* ClaimTimeline */
16507
+ .tf-claim {
16508
+ display: flex;
16509
+ flex-direction: column;
16510
+ gap: 16px;
16511
+ min-width: 0;
16512
+ }
16513
+ .tf-claim-head {
16514
+ display: flex;
16515
+ flex-wrap: wrap;
16516
+ align-items: flex-start;
16517
+ justify-content: space-between;
16518
+ gap: 12px;
16519
+ }
16520
+ .tf-claim-head .tf-option-text {
16521
+ padding: 0;
16522
+ }
16523
+ .tf-claim-head b {
16524
+ font: 600 15px/20px var(--font-sans);
16525
+ }
16526
+ .tf-claim-amount {
16527
+ display: flex;
16528
+ flex-direction: column;
16529
+ align-items: flex-end;
16530
+ font: 600 18px/24px var(--font-sans);
16531
+ font-variant-numeric: tabular-nums;
16532
+ }
16533
+ .tf-claim-amount small {
16534
+ font: 500 11px/14px var(--font-sans);
16535
+ color: var(--ink-muted);
16536
+ }
16537
+ .tf-claim-steps {
16538
+ display: flex;
16539
+ flex-direction: column;
16540
+ }
16541
+ .tf-claim-steps li {
16542
+ position: relative;
16543
+ display: flex;
16544
+ gap: 12px;
16545
+ padding-bottom: 16px;
16546
+ }
16547
+ .tf-claim-steps li:last-child {
16548
+ padding-bottom: 0;
16549
+ }
16550
+ .tf-claim-steps li:not(:last-child)::before {
16551
+ content: "";
16552
+ position: absolute;
16553
+ top: 20px;
16554
+ bottom: 0;
16555
+ left: 9px;
16556
+ width: 2px;
16557
+ background: var(--line);
16558
+ }
16559
+ .tf-claim-steps li.is-done:not(:last-child)::before {
16560
+ background: var(--mint-ink);
16561
+ }
16562
+ .tf-claim-dot {
16563
+ position: relative;
16564
+ display: grid;
16565
+ place-items: center;
16566
+ flex: none;
16567
+ width: 20px;
16568
+ height: 20px;
16569
+ box-sizing: border-box;
16570
+ border: 2px solid var(--line-strong);
16571
+ border-radius: var(--radius-full);
16572
+ background: var(--surface);
16573
+ color: var(--primary-foreground);
16574
+ }
16575
+ .tf-claim-steps li.is-done .tf-claim-dot {
16576
+ border-color: var(--mint-ink);
16577
+ background: var(--mint-ink);
16578
+ }
16579
+ .tf-claim-steps li.is-current .tf-claim-dot {
16580
+ border-color: var(--primary);
16581
+ box-shadow: 0 0 0 4px var(--accent);
16582
+ }
16583
+ .tf-claim-steps li.is-failed .tf-claim-dot {
16584
+ border-color: var(--blush-ink);
16585
+ background: var(--blush-ink);
16586
+ }
16587
+ .tf-claim-text {
16588
+ display: flex;
16589
+ flex-direction: column;
16590
+ min-width: 0;
16591
+ }
16592
+ .tf-claim-text b {
16593
+ font: 500 14px/20px var(--font-sans);
16594
+ }
16595
+ .tf-claim-steps li.is-todo .tf-claim-text b {
16596
+ color: var(--ink-muted);
16597
+ font-weight: 500;
16598
+ }
16599
+ .tf-claim-text small {
16600
+ font: 500 12px/16px var(--font-sans);
16601
+ color: var(--ink-muted);
16602
+ }
16603
+
16604
+ /* DocumentList */
16605
+ .tf-docs {
16606
+ display: flex;
16607
+ flex-direction: column;
16608
+ gap: 4px;
16609
+ min-width: 0;
16610
+ }
16611
+ .tf-doc {
16612
+ display: flex;
16613
+ flex-wrap: wrap;
16614
+ align-items: center;
16615
+ gap: 8px 12px;
16616
+ width: 100%;
16617
+ padding: 10px 12px;
16618
+ box-sizing: border-box;
16619
+ border: 0;
16620
+ border-radius: var(--radius-md);
16621
+ background: transparent;
16622
+ color: var(--ink);
16623
+ font: inherit;
16624
+ text-align: left;
16625
+ }
16626
+ button.tf-doc {
16627
+ cursor: pointer;
16628
+ }
16629
+ button.tf-doc:hover {
16630
+ background: var(--accent);
16631
+ }
16632
+ button.tf-doc:focus-visible {
16633
+ outline: 2px solid var(--focus);
16634
+ outline-offset: 2px;
16635
+ }
16636
+ .tf-doc-text {
16637
+ display: flex;
16638
+ flex: 1 1 160px;
16639
+ flex-direction: column;
16640
+ min-width: 0;
16641
+ }
16642
+ .tf-doc-text b {
16643
+ font: 500 14px/20px var(--font-sans);
16644
+ overflow-wrap: break-word;
16645
+ }
16646
+ .tf-doc-text small,
16647
+ .tf-doc-valid {
16648
+ font: 500 12px/16px var(--font-sans);
16649
+ color: var(--ink-muted);
16650
+ }
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
+
15175
17703
  /* 90-pro-look.css */
15176
17704
  /* Pro look ("Clean Dark Pro", reference/pro): monochrome surfaces on a visible 1px hairline grid,
15177
17705
  square corners (2px on controls), Geist and Geist Mono, colour only for state, dense by default.