@twentyfirstmedia/pro 0.6.0 → 0.7.0

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