@twentyfirstmedia/halo 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
@@ -14544,6 +14544,37 @@ a.tf-iconbtn {
14544
14544
  }
14545
14545
  }
14546
14546
 
14547
+ /* Fluid actions: an action row measures itself, so its buttons answer to the box it sits in (a
14548
+ thin card, a side panel, a phone) instead of the window. When the row is narrow it wraps and
14549
+ its buttons share the full width; when it is very narrow each button takes a line. The rows are
14550
+ the kit's own footers and action bars, and plain `.tf-row`s of buttons placed directly in a
14551
+ column box (panel, card, dialog, form …), where they always span the box. */
14552
+ :is(
14553
+ .tf-modal-foot,
14554
+ .tf-card-foot,
14555
+ .tf-approval-foot,
14556
+ .tf-review-actions,
14557
+ .tf-cookie-actions,
14558
+ .tf-push-actions,
14559
+ .tf-insight-actions,
14560
+ .tf-journal-foot,
14561
+ :is(.tf-panel, .tf-card, .tf-modal, .tf-drawer, .tf-popover, .tf-form, .tf-col)
14562
+ > .tf-row:not(:has(> :not(.tf-btn, .tf-iconbtn)))
14563
+ ) {
14564
+ container: tf-actions / inline-size;
14565
+ flex-wrap: wrap;
14566
+ }
14567
+ @container tf-actions (max-width: 400px) {
14568
+ .tf-btn {
14569
+ flex: 1 1 auto;
14570
+ }
14571
+ }
14572
+ @container tf-actions (max-width: 240px) {
14573
+ .tf-btn {
14574
+ flex-basis: 100%;
14575
+ }
14576
+ }
14577
+
14547
14578
  /* 07-polish.css */
14548
14579
  /* ───────────── Polish ─────────────
14549
14580
  Small consistency fixes found by auditing every preview in both kits and themes. Zero
@@ -14752,10 +14783,17 @@ textarea.tf-input,
14752
14783
  .tf-card,
14753
14784
  .tf-stat,
14754
14785
  .tf-dock,
14755
- .tf-sidebar,
14786
+ .tf-sidebar:not(.shell),
14756
14787
  .tf-map-legend,
14757
14788
  .tf-map-ctl,
14758
- .tf-map-pop
14789
+ .tf-map-pop,
14790
+ .tf-vital,
14791
+ .tf-journal,
14792
+ .tf-goal,
14793
+ .tf-insight,
14794
+ .tf-consent-item,
14795
+ .tf-nw,
14796
+ .tf-policy
14759
14797
  ):not(
14760
14798
  :is(
14761
14799
  .tf-panel,
@@ -14771,6 +14809,13 @@ textarea.tf-input,
14771
14809
  .tf-palette,
14772
14810
  .tf-modal,
14773
14811
  .tf-drawer,
14812
+ .tf-vital,
14813
+ .tf-journal,
14814
+ .tf-goal,
14815
+ .tf-insight,
14816
+ .tf-consent-item,
14817
+ .tf-nw,
14818
+ .tf-policy,
14774
14819
  .tf-glass
14775
14820
  )
14776
14821
  *
@@ -14865,6 +14910,10 @@ textarea.tf-input,
14865
14910
  .tf-modal,
14866
14911
  .tf-drawer,
14867
14912
  .tf-glass,
14913
+ .tf-insight,
14914
+ .tf-policy,
14915
+ .tf-consent-item,
14916
+ .tf-journal,
14868
14917
  .tf-btngroup,
14869
14918
  .tf-map-ctl,
14870
14919
  .tf-topbar
@@ -14890,7 +14939,21 @@ textarea.tf-input,
14890
14939
  }
14891
14940
  [data-surface="glass"]
14892
14941
  :is(.tf-iconbtn-soft, .tf-iconbtn-outline, .tf-btn-secondary, .tf-chip):not(
14893
- :is(.tf-panel, .tf-card, .tf-dock, .tf-popover, .tf-menu, .tf-modal, .tf-drawer, .tf-glass) *
14942
+ :is(
14943
+ .tf-panel,
14944
+ .tf-card,
14945
+ .tf-dock,
14946
+ .tf-popover,
14947
+ .tf-menu,
14948
+ .tf-modal,
14949
+ .tf-drawer,
14950
+ .tf-insight,
14951
+ .tf-policy,
14952
+ .tf-consent-item,
14953
+ .tf-journal,
14954
+ .tf-glass
14955
+ )
14956
+ *
14894
14957
  ):not(.tf-solid):not([aria-pressed="true"]):hover {
14895
14958
  background:
14896
14959
  linear-gradient(var(--glass-hover), var(--glass-hover)) border-box,
@@ -14941,10 +15004,17 @@ textarea.tf-input,
14941
15004
  .tf-card,
14942
15005
  .tf-stat,
14943
15006
  .tf-dock,
14944
- .tf-sidebar,
15007
+ .tf-sidebar:not(.shell),
14945
15008
  .tf-map-legend,
14946
15009
  .tf-map-ctl,
14947
- .tf-map-pop
15010
+ .tf-map-pop,
15011
+ .tf-vital,
15012
+ .tf-journal,
15013
+ .tf-goal,
15014
+ .tf-insight,
15015
+ .tf-consent-item,
15016
+ .tf-nw,
15017
+ .tf-policy
14948
15018
  ) {
14949
15019
  outline: 1px solid CanvasText;
14950
15020
  outline-offset: -1px;
@@ -15336,3 +15406,1373 @@ textarea.tf-input,
15336
15406
  [data-motion="off"] .tf-ambient-field {
15337
15407
  animation: none;
15338
15408
  }
15409
+
15410
+ /* 11-life.css */
15411
+ /* Life: habits, mood, vitals, activity rings, sleep, medication, journal, goals, insights, consent */
15412
+
15413
+ /* HabitTracker */
15414
+ .tf-habits {
15415
+ container: tf-habits / inline-size;
15416
+ display: grid;
15417
+ gap: 4px;
15418
+ min-width: 0;
15419
+ }
15420
+ .tf-habit-days,
15421
+ .tf-habit-marks {
15422
+ display: grid;
15423
+ grid-auto-flow: column;
15424
+ grid-auto-columns: 24px;
15425
+ gap: 6px;
15426
+ }
15427
+ .tf-habit-days {
15428
+ justify-self: end;
15429
+ padding-right: 12px;
15430
+ font: 600 11px/16px var(--font-sans);
15431
+ color: var(--ink-muted);
15432
+ text-align: center;
15433
+ }
15434
+ .tf-habit {
15435
+ display: grid;
15436
+ grid-template-columns: auto minmax(0, 1fr) auto;
15437
+ align-items: center;
15438
+ gap: 12px;
15439
+ padding: 8px 12px;
15440
+ border-radius: var(--radius-md);
15441
+ }
15442
+ .tf-habit:hover {
15443
+ background: var(--surface-sunken);
15444
+ }
15445
+ .tf-habit-text {
15446
+ display: flex;
15447
+ flex-direction: column;
15448
+ min-width: 0;
15449
+ }
15450
+ .tf-habit-text b {
15451
+ overflow: hidden;
15452
+ text-overflow: ellipsis;
15453
+ white-space: nowrap;
15454
+ font: 600 14px/20px var(--font-sans);
15455
+ }
15456
+ .tf-habit-text small {
15457
+ display: flex;
15458
+ flex-wrap: wrap;
15459
+ gap: 4px 10px;
15460
+ font: 500 12px/16px var(--font-sans);
15461
+ color: var(--ink-muted);
15462
+ }
15463
+ .tf-habit-streak {
15464
+ display: inline-flex;
15465
+ align-items: center;
15466
+ gap: 4px;
15467
+ color: var(--butter-ink);
15468
+ }
15469
+ .tf-habit-mark {
15470
+ display: grid;
15471
+ place-items: center;
15472
+ width: 24px;
15473
+ height: 24px;
15474
+ box-sizing: border-box;
15475
+ padding: 0;
15476
+ border: 1.5px solid var(--line-strong);
15477
+ border-radius: 50%;
15478
+ background: transparent;
15479
+ color: var(--primary-foreground);
15480
+ }
15481
+ .tf-habit-mark.done {
15482
+ border-color: var(--mint-ink);
15483
+ background: var(--mint-ink);
15484
+ }
15485
+ /* missed: an empty ring with a small cross; no entry: a faint dashed ring */
15486
+ .tf-habit-mark.missed {
15487
+ color: var(--ink-subtle);
15488
+ }
15489
+ .tf-habit-mark:not(.done):not(.missed) {
15490
+ border-style: dashed;
15491
+ border-color: var(--line);
15492
+ }
15493
+ .tf-habit-mark.today {
15494
+ box-shadow:
15495
+ 0 0 0 2px var(--surface),
15496
+ 0 0 0 4px var(--line-strong);
15497
+ }
15498
+ /* narrow: the marks go under the name, the day labels line up with them */
15499
+ @container tf-habits (max-width: 400px) {
15500
+ .tf-habit {
15501
+ grid-template-columns: auto minmax(0, 1fr);
15502
+ row-gap: 8px;
15503
+ }
15504
+ .tf-habit-marks {
15505
+ grid-column: 1 / -1;
15506
+ }
15507
+ .tf-habit-days {
15508
+ justify-self: start;
15509
+ padding: 0 0 0 12px;
15510
+ }
15511
+ }
15512
+ @container tf-habits (max-width: 240px) {
15513
+ .tf-habit-days,
15514
+ .tf-habit-marks {
15515
+ gap: 2px;
15516
+ }
15517
+ }
15518
+ button.tf-habit-mark {
15519
+ cursor: pointer;
15520
+ }
15521
+ button.tf-habit-mark:focus-visible {
15522
+ outline: 2px solid var(--focus);
15523
+ outline-offset: 4px;
15524
+ }
15525
+
15526
+ /* MoodPicker */
15527
+ .tf-mood {
15528
+ min-width: 0;
15529
+ margin: 0;
15530
+ padding: 0;
15531
+ border: 0;
15532
+ }
15533
+ .tf-mood-q {
15534
+ padding: 0;
15535
+ margin-bottom: 12px;
15536
+ font: 600 14px/20px var(--font-sans);
15537
+ }
15538
+ .tf-mood-scale {
15539
+ container: tf-mood / inline-size;
15540
+ display: grid;
15541
+ grid-template-columns: repeat(5, minmax(0, 1fr));
15542
+ gap: 8px;
15543
+ }
15544
+ .tf-mood-opt {
15545
+ position: relative;
15546
+ display: flex;
15547
+ flex-direction: column;
15548
+ align-items: center;
15549
+ justify-content: center;
15550
+ gap: 4px;
15551
+ min-width: 0;
15552
+ min-height: 72px;
15553
+ padding: 8px 4px;
15554
+ box-sizing: border-box;
15555
+ border-radius: var(--radius-md);
15556
+ color: var(--ink-muted);
15557
+ font: 600 12px/16px var(--font-sans);
15558
+ cursor: pointer;
15559
+ }
15560
+ /* the picked level keeps the tint its tf-t-* class gives it */
15561
+ .tf-mood-opt:not(.on) {
15562
+ background: var(--surface-sunken);
15563
+ }
15564
+ .tf-mood.compact .tf-mood-opt {
15565
+ min-height: 48px;
15566
+ }
15567
+ .tf-mood-opt span {
15568
+ max-width: 100%;
15569
+ overflow: hidden;
15570
+ text-overflow: ellipsis;
15571
+ white-space: nowrap;
15572
+ }
15573
+ /* narrow: tighter cells so every word still fits */
15574
+ @container tf-mood (max-width: 300px) {
15575
+ .tf-mood-opt {
15576
+ padding: 8px 2px;
15577
+ font-size: 11px;
15578
+ }
15579
+ }
15580
+ .tf-mood-opt input {
15581
+ position: absolute;
15582
+ inset: 0;
15583
+ margin: 0;
15584
+ opacity: 0;
15585
+ cursor: pointer;
15586
+ }
15587
+ .tf-mood-opt:hover {
15588
+ color: var(--ink);
15589
+ }
15590
+ .tf-mood-opt.on {
15591
+ box-shadow: inset 0 0 0 2px currentColor;
15592
+ }
15593
+ .tf-mood-opt:has(input:focus-visible) {
15594
+ outline: 2px solid var(--focus);
15595
+ outline-offset: 2px;
15596
+ }
15597
+
15598
+ /* VitalTile */
15599
+ .tf-vital {
15600
+ display: flex;
15601
+ flex-direction: column;
15602
+ gap: 12px;
15603
+ min-width: 0;
15604
+ padding: 16px;
15605
+ border-radius: var(--radius-lg);
15606
+ background: var(--surface);
15607
+ box-shadow: var(--shadow-card);
15608
+ }
15609
+ .tf-vital-head {
15610
+ display: flex;
15611
+ align-items: center;
15612
+ justify-content: space-between;
15613
+ gap: 8px;
15614
+ }
15615
+ .tf-vital-head .tf-badge {
15616
+ flex: none;
15617
+ white-space: nowrap;
15618
+ }
15619
+ .tf-vital-label {
15620
+ display: inline-flex;
15621
+ align-items: center;
15622
+ gap: 6px;
15623
+ min-width: 0;
15624
+ font: 600 13px/18px var(--font-sans);
15625
+ color: var(--ink-muted);
15626
+ }
15627
+ .tf-vital-main {
15628
+ display: flex;
15629
+ align-items: flex-end;
15630
+ justify-content: space-between;
15631
+ gap: 12px;
15632
+ }
15633
+ .tf-vital-value {
15634
+ font: 700 28px/34px var(--font-sans);
15635
+ letter-spacing: -0.02em;
15636
+ font-variant-numeric: tabular-nums;
15637
+ }
15638
+ .tf-vital-value small {
15639
+ margin-left: 4px;
15640
+ font: 600 13px/18px var(--font-sans);
15641
+ letter-spacing: 0;
15642
+ color: var(--ink-muted);
15643
+ }
15644
+ .tf-vital-band {
15645
+ position: relative;
15646
+ height: 8px;
15647
+ border-radius: var(--radius-pill);
15648
+ background: var(--surface-sunken);
15649
+ }
15650
+ .tf-vital-normal {
15651
+ position: absolute;
15652
+ top: 0;
15653
+ bottom: 0;
15654
+ border-radius: var(--radius-pill);
15655
+ background: var(--mint);
15656
+ }
15657
+ .tf-vital-dot {
15658
+ position: absolute;
15659
+ top: 50%;
15660
+ width: 14px;
15661
+ height: 14px;
15662
+ box-sizing: border-box;
15663
+ border: 3px solid var(--surface);
15664
+ border-radius: 50%;
15665
+ background: var(--mint-ink);
15666
+ translate: -50% -50%;
15667
+ }
15668
+ .tf-vital.is-low .tf-vital-dot,
15669
+ .tf-vital.is-high .tf-vital-dot {
15670
+ background: var(--butter-ink);
15671
+ }
15672
+ .tf-vital-foot {
15673
+ display: flex;
15674
+ flex-wrap: wrap;
15675
+ justify-content: space-between;
15676
+ gap: 4px 12px;
15677
+ font: 500 12px/16px var(--font-sans);
15678
+ color: var(--ink-muted);
15679
+ }
15680
+
15681
+ /* ActivityRings */
15682
+ .tf-rings {
15683
+ display: flex;
15684
+ flex-wrap: wrap;
15685
+ align-items: center;
15686
+ gap: 20px;
15687
+ min-width: 0;
15688
+ }
15689
+ .tf-rings svg {
15690
+ flex: none;
15691
+ }
15692
+ .tf-rings-legend {
15693
+ display: flex;
15694
+ flex-direction: column;
15695
+ gap: 8px;
15696
+ min-width: 0;
15697
+ margin: 0;
15698
+ padding: 0;
15699
+ list-style: none;
15700
+ }
15701
+ .tf-rings-legend li {
15702
+ display: grid;
15703
+ grid-template-columns: auto minmax(0, 1fr);
15704
+ align-items: center;
15705
+ column-gap: 8px;
15706
+ }
15707
+ .tf-rings-key {
15708
+ width: 10px;
15709
+ height: 10px;
15710
+ border-radius: 50%;
15711
+ }
15712
+ .tf-rings-name {
15713
+ font: 600 12px/16px var(--font-sans);
15714
+ color: var(--ink-muted);
15715
+ }
15716
+ .tf-rings-legend b {
15717
+ grid-column: 2;
15718
+ font: 700 14px/20px var(--font-sans);
15719
+ font-variant-numeric: tabular-nums;
15720
+ }
15721
+
15722
+ /* SleepChart */
15723
+ .tf-sleep {
15724
+ display: flex;
15725
+ flex-direction: column;
15726
+ gap: 16px;
15727
+ min-width: 0;
15728
+ }
15729
+ .tf-sleep-chart {
15730
+ display: flex;
15731
+ flex-direction: column;
15732
+ gap: 6px;
15733
+ }
15734
+ .tf-sleep-lane {
15735
+ display: grid;
15736
+ grid-template-columns: 52px minmax(0, 1fr);
15737
+ align-items: center;
15738
+ gap: 12px;
15739
+ }
15740
+ .tf-sleep-name {
15741
+ font: 600 12px/16px var(--font-sans);
15742
+ color: var(--ink-muted);
15743
+ }
15744
+ .tf-sleep-track {
15745
+ position: relative;
15746
+ height: 20px;
15747
+ border-radius: var(--radius-sm);
15748
+ background: var(--surface-sunken);
15749
+ }
15750
+ .tf-sleep-seg {
15751
+ position: absolute;
15752
+ top: 2px;
15753
+ bottom: 2px;
15754
+ min-width: 2px;
15755
+ border-radius: var(--radius-sm);
15756
+ }
15757
+ .tf-sleep-axis {
15758
+ display: flex;
15759
+ justify-content: space-between;
15760
+ margin-left: 64px;
15761
+ font: 500 11px/16px var(--font-sans);
15762
+ color: var(--ink-muted);
15763
+ font-variant-numeric: tabular-nums;
15764
+ }
15765
+ .tf-sleep-sum {
15766
+ display: flex;
15767
+ flex-wrap: wrap;
15768
+ align-items: center;
15769
+ justify-content: space-between;
15770
+ gap: 8px 16px;
15771
+ }
15772
+ .tf-sleep-sum b {
15773
+ font: 700 14px/20px var(--font-sans);
15774
+ }
15775
+ .tf-sleep-sum ul {
15776
+ display: flex;
15777
+ flex-wrap: wrap;
15778
+ gap: 4px 14px;
15779
+ margin: 0;
15780
+ padding: 0;
15781
+ list-style: none;
15782
+ }
15783
+ .tf-sleep-sum li {
15784
+ display: inline-flex;
15785
+ align-items: center;
15786
+ gap: 6px;
15787
+ font: 500 12px/16px var(--font-sans);
15788
+ color: var(--ink-muted);
15789
+ }
15790
+ .tf-sleep-sum li span:last-child {
15791
+ color: var(--ink);
15792
+ font-weight: 600;
15793
+ font-variant-numeric: tabular-nums;
15794
+ }
15795
+
15796
+ /* MedicationList */
15797
+ .tf-meds {
15798
+ container: tf-meds / inline-size;
15799
+ display: flex;
15800
+ flex-direction: column;
15801
+ gap: 4px;
15802
+ min-width: 0;
15803
+ margin: 0;
15804
+ padding: 0;
15805
+ list-style: none;
15806
+ }
15807
+ .tf-med {
15808
+ display: grid;
15809
+ grid-template-columns: 48px auto minmax(0, 1fr) auto;
15810
+ align-items: center;
15811
+ gap: 12px;
15812
+ padding: 8px 12px;
15813
+ border-radius: var(--radius-md);
15814
+ }
15815
+ .tf-med.is-due {
15816
+ background: var(--surface-sunken);
15817
+ }
15818
+ .tf-med-time {
15819
+ font: 600 13px/18px var(--font-sans);
15820
+ font-variant-numeric: tabular-nums;
15821
+ color: var(--ink-muted);
15822
+ }
15823
+ .tf-med-text {
15824
+ display: flex;
15825
+ flex-direction: column;
15826
+ min-width: 0;
15827
+ }
15828
+ .tf-med-text b {
15829
+ font: 600 14px/20px var(--font-sans);
15830
+ overflow-wrap: break-word;
15831
+ }
15832
+ .tf-med-text small {
15833
+ font: 500 12px/16px var(--font-sans);
15834
+ color: var(--ink-muted);
15835
+ }
15836
+ .tf-med.is-taken .tf-med-text b {
15837
+ color: var(--ink-muted);
15838
+ }
15839
+ .tf-med-act {
15840
+ display: inline-flex;
15841
+ align-items: center;
15842
+ gap: 8px;
15843
+ }
15844
+ /* narrow: time, name and status; the icon gives way */
15845
+ @container tf-meds (max-width: 400px) {
15846
+ .tf-med {
15847
+ grid-template-columns: 44px minmax(0, 1fr) auto;
15848
+ gap: 8px;
15849
+ padding: 8px;
15850
+ }
15851
+ .tf-med > .tf-tinticon {
15852
+ display: none;
15853
+ }
15854
+ }
15855
+
15856
+ /* JournalEntry */
15857
+ .tf-journal {
15858
+ display: flex;
15859
+ flex-direction: column;
15860
+ gap: 8px;
15861
+ min-width: 0;
15862
+ padding: 20px;
15863
+ border-radius: var(--radius-lg);
15864
+ background: var(--surface);
15865
+ box-shadow: var(--shadow-card);
15866
+ }
15867
+ .tf-journal-head {
15868
+ display: flex;
15869
+ flex-wrap: wrap;
15870
+ align-items: center;
15871
+ justify-content: space-between;
15872
+ gap: 8px;
15873
+ font: 600 12px/16px var(--font-sans);
15874
+ color: var(--ink-muted);
15875
+ }
15876
+ .tf-journal-mood {
15877
+ display: inline-flex;
15878
+ align-items: center;
15879
+ gap: 4px;
15880
+ padding: 2px 8px;
15881
+ border-radius: var(--radius-pill);
15882
+ }
15883
+ .tf-journal-title {
15884
+ margin: 0;
15885
+ font: 700 16px/22px var(--font-sans);
15886
+ }
15887
+ .tf-journal-body {
15888
+ font: 500 14px/22px var(--font-sans);
15889
+ color: var(--ink);
15890
+ overflow-wrap: anywhere;
15891
+ }
15892
+ .tf-journal-body p {
15893
+ margin: 0 0 8px;
15894
+ }
15895
+ .tf-journal-foot {
15896
+ display: flex;
15897
+ flex-wrap: wrap;
15898
+ align-items: center;
15899
+ justify-content: space-between;
15900
+ gap: 8px;
15901
+ padding-top: 4px;
15902
+ }
15903
+ .tf-journal-tags {
15904
+ display: flex;
15905
+ flex-wrap: wrap;
15906
+ gap: 6px;
15907
+ }
15908
+
15909
+ /* GoalCard */
15910
+ .tf-goal {
15911
+ display: flex;
15912
+ flex-direction: column;
15913
+ gap: 12px;
15914
+ min-width: 0;
15915
+ padding: 20px;
15916
+ border-radius: var(--radius-lg);
15917
+ background: var(--surface);
15918
+ box-shadow: var(--shadow-card);
15919
+ }
15920
+ /* narrow: the icon steps aside so the title keeps whole words */
15921
+ @container tf-goal (max-width: 280px) {
15922
+ .tf-goal-head > .tf-tinticon {
15923
+ display: none;
15924
+ }
15925
+ }
15926
+ .tf-goal-head {
15927
+ container: tf-goal / inline-size;
15928
+ display: flex;
15929
+ align-items: center;
15930
+ gap: 12px;
15931
+ }
15932
+ .tf-goal-head .tf-option-text {
15933
+ flex: 1;
15934
+ padding: 0;
15935
+ }
15936
+ .tf-goal-head b {
15937
+ font: 700 14px/20px var(--font-sans);
15938
+ }
15939
+ .tf-goal-pct {
15940
+ font: 700 20px/26px var(--font-sans);
15941
+ font-variant-numeric: tabular-nums;
15942
+ }
15943
+ .tf-goal-bar {
15944
+ height: 10px;
15945
+ overflow: hidden;
15946
+ border-radius: var(--radius-pill);
15947
+ background: var(--surface-sunken);
15948
+ }
15949
+ .tf-goal-bar > span {
15950
+ display: block;
15951
+ height: 100%;
15952
+ border-radius: var(--radius-pill);
15953
+ }
15954
+ .tf-goal-meta,
15955
+ .tf-goal-note {
15956
+ margin: 0;
15957
+ font: 500 12px/16px var(--font-sans);
15958
+ color: var(--ink-muted);
15959
+ }
15960
+ .tf-goal-steps {
15961
+ display: flex;
15962
+ flex-direction: column;
15963
+ gap: 6px;
15964
+ margin: 0;
15965
+ padding: 0;
15966
+ list-style: none;
15967
+ font: 500 13px/18px var(--font-sans);
15968
+ }
15969
+ .tf-goal-steps li {
15970
+ display: flex;
15971
+ align-items: center;
15972
+ gap: 8px;
15973
+ }
15974
+ .tf-goal-steps li.done {
15975
+ color: var(--ink-muted);
15976
+ }
15977
+ .tf-goal-step {
15978
+ display: grid;
15979
+ place-items: center;
15980
+ flex: none;
15981
+ width: 16px;
15982
+ height: 16px;
15983
+ box-sizing: border-box;
15984
+ border: 1.5px solid var(--line-strong);
15985
+ border-radius: 50%;
15986
+ color: var(--primary-foreground);
15987
+ }
15988
+ .tf-goal-steps li.done .tf-goal-step {
15989
+ border-color: var(--primary);
15990
+ background: var(--primary);
15991
+ }
15992
+
15993
+ /* InsightCard */
15994
+ .tf-insight {
15995
+ display: flex;
15996
+ flex-direction: column;
15997
+ gap: 12px;
15998
+ min-width: 0;
15999
+ padding: 16px 16px 16px 20px;
16000
+ border-radius: var(--radius-lg);
16001
+ background: var(--surface);
16002
+ box-shadow:
16003
+ var(--shadow-card),
16004
+ inset 3px 0 0 var(--sky-ink);
16005
+ /* on glass the card takes a faint wash of its tone */
16006
+ --tint: var(--sky);
16007
+ }
16008
+ .tf-insight.is-success {
16009
+ --tint: var(--mint);
16010
+ box-shadow:
16011
+ var(--shadow-card),
16012
+ inset 3px 0 0 var(--mint-ink);
16013
+ }
16014
+ .tf-insight.is-warning {
16015
+ --tint: var(--butter);
16016
+ box-shadow:
16017
+ var(--shadow-card),
16018
+ inset 3px 0 0 var(--butter-ink);
16019
+ }
16020
+ .tf-insight.is-highlight {
16021
+ --tint: var(--lilac);
16022
+ box-shadow:
16023
+ var(--shadow-card),
16024
+ inset 3px 0 0 var(--lilac-ink);
16025
+ }
16026
+ .tf-insight-head {
16027
+ display: flex;
16028
+ align-items: flex-start;
16029
+ gap: 12px;
16030
+ }
16031
+ .tf-insight-titles {
16032
+ display: flex;
16033
+ flex: 1;
16034
+ flex-direction: column;
16035
+ min-width: 0;
16036
+ }
16037
+ .tf-insight-titles small {
16038
+ font: 600 12px/16px var(--font-sans);
16039
+ color: var(--ink-muted);
16040
+ }
16041
+ .tf-insight-titles b {
16042
+ font: 700 15px/22px var(--font-sans);
16043
+ overflow-wrap: anywhere;
16044
+ }
16045
+ .tf-insight-body {
16046
+ font: 500 14px/20px var(--font-sans);
16047
+ color: var(--ink);
16048
+ }
16049
+ .tf-insight-why button {
16050
+ display: inline-flex;
16051
+ align-items: center;
16052
+ gap: 6px;
16053
+ min-height: 24px;
16054
+ padding: 0;
16055
+ border: 0;
16056
+ background: none;
16057
+ color: var(--ink-muted);
16058
+ font: 600 12px/16px var(--font-sans);
16059
+ cursor: pointer;
16060
+ }
16061
+ .tf-insight-why button:hover {
16062
+ color: var(--ink);
16063
+ }
16064
+ .tf-insight-why button:focus-visible {
16065
+ outline: 2px solid var(--focus);
16066
+ outline-offset: 2px;
16067
+ border-radius: var(--radius-sm);
16068
+ }
16069
+ .tf-insight-why button[aria-expanded="true"] .tf-insight-chev {
16070
+ rotate: 180deg;
16071
+ }
16072
+ .tf-insight-whytext {
16073
+ margin-top: 8px;
16074
+ padding: 12px;
16075
+ border-radius: var(--radius-md);
16076
+ background: var(--surface-sunken);
16077
+ font: 500 13px/18px var(--font-sans);
16078
+ color: var(--ink-muted);
16079
+ }
16080
+ .tf-insight-actions {
16081
+ display: flex;
16082
+ flex-wrap: wrap;
16083
+ justify-content: flex-end;
16084
+ gap: 8px;
16085
+ }
16086
+
16087
+ /* ConsentList */
16088
+ .tf-consent {
16089
+ display: flex;
16090
+ flex-direction: column;
16091
+ gap: 12px;
16092
+ min-width: 0;
16093
+ }
16094
+ .tf-consent-item {
16095
+ display: flex;
16096
+ flex-direction: column;
16097
+ gap: 12px;
16098
+ padding: 16px;
16099
+ border-radius: var(--radius-lg);
16100
+ background: var(--surface);
16101
+ box-shadow: var(--shadow-card);
16102
+ }
16103
+ .tf-consent-head {
16104
+ display: flex;
16105
+ flex-wrap: wrap;
16106
+ align-items: center;
16107
+ gap: 12px;
16108
+ }
16109
+ .tf-consent-head .tf-option-text {
16110
+ flex: 1;
16111
+ min-width: 140px;
16112
+ padding: 0;
16113
+ }
16114
+ .tf-consent-purpose {
16115
+ margin: 0;
16116
+ font: 500 13px/18px var(--font-sans);
16117
+ color: var(--ink-muted);
16118
+ }
16119
+ .tf-consent-scopes {
16120
+ display: flex;
16121
+ flex-direction: column;
16122
+ margin: 0;
16123
+ padding: 0;
16124
+ list-style: none;
16125
+ }
16126
+ .tf-consent-scopes li {
16127
+ display: flex;
16128
+ align-items: center;
16129
+ justify-content: space-between;
16130
+ gap: 12px;
16131
+ padding: 10px 0;
16132
+ border-top: 1px solid var(--line);
16133
+ }
16134
+ .tf-consent-scopes .tf-option-text {
16135
+ min-width: 0;
16136
+ padding: 0;
16137
+ }
16138
+ .tf-consent-req {
16139
+ flex: none;
16140
+ font: 600 12px/16px var(--font-sans);
16141
+ color: var(--ink-muted);
16142
+ }
16143
+
16144
+ /* 12-household.css */
16145
+ /* Life: budgets, subscriptions, net worth, deadlines, policies, coverage, claims, documents */
16146
+
16147
+ /* BudgetList */
16148
+ .tf-budgets,
16149
+ .tf-subs ul,
16150
+ .tf-deadlines,
16151
+ .tf-docs,
16152
+ .tf-claim-steps,
16153
+ .tf-nw-side ul {
16154
+ margin: 0;
16155
+ padding: 0;
16156
+ list-style: none;
16157
+ }
16158
+ .tf-budgets {
16159
+ display: flex;
16160
+ flex-direction: column;
16161
+ gap: 4px;
16162
+ min-width: 0;
16163
+ }
16164
+ .tf-budget {
16165
+ container: tf-budget / inline-size;
16166
+ display: flex;
16167
+ align-items: center;
16168
+ gap: 12px;
16169
+ width: 100%;
16170
+ padding: 10px 12px;
16171
+ box-sizing: border-box;
16172
+ border: 0;
16173
+ border-radius: var(--radius-md);
16174
+ background: transparent;
16175
+ color: var(--ink);
16176
+ font: inherit;
16177
+ text-align: left;
16178
+ }
16179
+ button.tf-budget {
16180
+ cursor: pointer;
16181
+ }
16182
+ button.tf-budget:hover {
16183
+ background: var(--accent);
16184
+ }
16185
+ button.tf-budget:focus-visible {
16186
+ outline: 2px solid var(--focus);
16187
+ outline-offset: 2px;
16188
+ }
16189
+ .tf-budget-main {
16190
+ display: flex;
16191
+ flex: 1;
16192
+ flex-direction: column;
16193
+ gap: 6px;
16194
+ min-width: 0;
16195
+ }
16196
+ .tf-budget-top {
16197
+ display: flex;
16198
+ flex-wrap: wrap;
16199
+ align-items: baseline;
16200
+ justify-content: space-between;
16201
+ gap: 0 12px;
16202
+ }
16203
+ /* narrow: the icon steps aside so the category keeps its name */
16204
+ @container tf-budget (max-width: 300px) {
16205
+ .tf-budget > .tf-tinticon {
16206
+ display: none;
16207
+ }
16208
+ }
16209
+ .tf-budget-top b {
16210
+ min-width: 0;
16211
+ overflow: hidden;
16212
+ text-overflow: ellipsis;
16213
+ white-space: nowrap;
16214
+ font: 600 14px/20px var(--font-sans);
16215
+ }
16216
+ .tf-budget-nums {
16217
+ flex: none;
16218
+ font: 700 13px/18px var(--font-sans);
16219
+ font-variant-numeric: tabular-nums;
16220
+ }
16221
+ .tf-budget-nums small {
16222
+ font-weight: 500;
16223
+ color: var(--ink-muted);
16224
+ }
16225
+ .tf-budget-bar {
16226
+ display: block;
16227
+ height: 8px;
16228
+ overflow: hidden;
16229
+ border-radius: var(--radius-pill);
16230
+ background: var(--surface-sunken);
16231
+ }
16232
+ .tf-budget-bar > span {
16233
+ display: block;
16234
+ height: 100%;
16235
+ border-radius: var(--radius-pill);
16236
+ }
16237
+ .tf-budget-left {
16238
+ font: 500 12px/16px var(--font-sans);
16239
+ color: var(--ink-muted);
16240
+ }
16241
+ .tf-budget-left.over {
16242
+ color: var(--blush-ink);
16243
+ font-weight: 600;
16244
+ }
16245
+
16246
+ /* SubscriptionList */
16247
+ .tf-subs {
16248
+ display: flex;
16249
+ flex-direction: column;
16250
+ gap: 8px;
16251
+ min-width: 0;
16252
+ }
16253
+ .tf-subs ul {
16254
+ container: tf-subs / inline-size;
16255
+ display: flex;
16256
+ flex-direction: column;
16257
+ }
16258
+ .tf-sub {
16259
+ display: flex;
16260
+ align-items: center;
16261
+ gap: 12px;
16262
+ padding: 10px 4px;
16263
+ border-bottom: 1px solid var(--line);
16264
+ }
16265
+ .tf-sub:last-child {
16266
+ border-bottom: 0;
16267
+ }
16268
+ .tf-sub-text {
16269
+ display: flex;
16270
+ flex: 1;
16271
+ flex-direction: column;
16272
+ min-width: 0;
16273
+ }
16274
+ .tf-sub-text b {
16275
+ overflow: hidden;
16276
+ text-overflow: ellipsis;
16277
+ white-space: nowrap;
16278
+ font: 600 14px/20px var(--font-sans);
16279
+ }
16280
+ .tf-sub-text small {
16281
+ font: 500 12px/16px var(--font-sans);
16282
+ color: var(--ink-muted);
16283
+ }
16284
+ .tf-sub-amount {
16285
+ flex: none;
16286
+ font: 700 14px/20px var(--font-sans);
16287
+ font-variant-numeric: tabular-nums;
16288
+ text-align: right;
16289
+ }
16290
+ .tf-sub-amount small {
16291
+ margin-left: 2px;
16292
+ font-weight: 500;
16293
+ color: var(--ink-muted);
16294
+ }
16295
+ /* narrow: amount and trial badge go under the name, the menu stays at the end */
16296
+ @container tf-subs (max-width: 380px) {
16297
+ .tf-sub {
16298
+ display: grid;
16299
+ grid-template-columns: auto minmax(0, 1fr) auto;
16300
+ gap: 4px 12px;
16301
+ align-items: center;
16302
+ }
16303
+ .tf-sub > :first-child {
16304
+ grid-row: 1 / span 2;
16305
+ align-self: start;
16306
+ }
16307
+ .tf-sub > .tf-sub-text,
16308
+ .tf-sub > .tf-badge,
16309
+ .tf-sub > .tf-sub-amount {
16310
+ grid-column: 2;
16311
+ justify-self: start;
16312
+ text-align: left;
16313
+ }
16314
+ .tf-sub > :last-child:not(.tf-sub-amount) {
16315
+ grid-column: 3;
16316
+ grid-row: 1;
16317
+ }
16318
+ }
16319
+ .tf-sub.is-cancelled .tf-sub-text b,
16320
+ .tf-sub.is-cancelled .tf-sub-amount {
16321
+ color: var(--ink-muted);
16322
+ text-decoration: line-through;
16323
+ }
16324
+ .tf-subs-total {
16325
+ display: flex;
16326
+ flex-wrap: wrap;
16327
+ align-items: baseline;
16328
+ justify-content: space-between;
16329
+ gap: 4px 12px;
16330
+ padding: 12px;
16331
+ border-radius: var(--radius-md);
16332
+ background: var(--surface-sunken);
16333
+ font: 500 13px/18px var(--font-sans);
16334
+ color: var(--ink-muted);
16335
+ }
16336
+ .tf-subs-total b {
16337
+ color: var(--ink);
16338
+ font: 700 15px/20px var(--font-sans);
16339
+ }
16340
+
16341
+ /* NetWorthCard */
16342
+ .tf-nw {
16343
+ display: flex;
16344
+ flex-direction: column;
16345
+ gap: 16px;
16346
+ min-width: 0;
16347
+ padding: 20px;
16348
+ border-radius: var(--radius-lg);
16349
+ background: var(--surface);
16350
+ box-shadow: var(--shadow-card);
16351
+ }
16352
+ .tf-nw-head {
16353
+ display: flex;
16354
+ flex-wrap: wrap;
16355
+ align-items: flex-end;
16356
+ justify-content: space-between;
16357
+ gap: 12px;
16358
+ }
16359
+ .tf-nw-head > :first-child {
16360
+ flex: 1 1 200px;
16361
+ }
16362
+ .tf-nw-head > :last-child:not(:first-child) {
16363
+ flex: none;
16364
+ max-width: 45%;
16365
+ }
16366
+ .tf-nw-title {
16367
+ font: 600 13px/18px var(--font-sans);
16368
+ color: var(--ink-muted);
16369
+ }
16370
+ .tf-nw-total {
16371
+ font: 700 32px/38px var(--font-sans);
16372
+ letter-spacing: -0.02em;
16373
+ font-variant-numeric: tabular-nums;
16374
+ }
16375
+ .tf-nw-change {
16376
+ display: inline-flex;
16377
+ align-items: center;
16378
+ gap: 4px;
16379
+ font: 600 12px/16px var(--font-sans);
16380
+ color: var(--mint-ink);
16381
+ }
16382
+ .tf-nw-change.down {
16383
+ color: var(--blush-ink);
16384
+ }
16385
+ .tf-nw-change.down .tf-ico {
16386
+ rotate: 180deg;
16387
+ }
16388
+ .tf-nw-change span {
16389
+ font-weight: 500;
16390
+ color: var(--ink-muted);
16391
+ }
16392
+ .tf-nw-sides {
16393
+ display: grid;
16394
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
16395
+ gap: 16px;
16396
+ }
16397
+ .tf-nw-side {
16398
+ display: flex;
16399
+ flex-direction: column;
16400
+ gap: 8px;
16401
+ min-width: 0;
16402
+ }
16403
+ .tf-nw-sidehead {
16404
+ display: flex;
16405
+ justify-content: space-between;
16406
+ gap: 8px;
16407
+ padding-bottom: 8px;
16408
+ border-bottom: 1px solid var(--line);
16409
+ font: 600 12px/16px var(--font-sans);
16410
+ color: var(--ink-muted);
16411
+ }
16412
+ .tf-nw-sidehead b {
16413
+ color: var(--ink);
16414
+ font-variant-numeric: tabular-nums;
16415
+ }
16416
+ .tf-nw-side li {
16417
+ display: flex;
16418
+ justify-content: space-between;
16419
+ gap: 8px;
16420
+ padding: 4px 0;
16421
+ font: 500 13px/18px var(--font-sans);
16422
+ }
16423
+ .tf-nw-side li span:first-child {
16424
+ display: inline-flex;
16425
+ align-items: center;
16426
+ gap: 6px;
16427
+ min-width: 0;
16428
+ color: var(--ink-muted);
16429
+ }
16430
+ .tf-nw-side li span:last-child {
16431
+ font-variant-numeric: tabular-nums;
16432
+ }
16433
+
16434
+ /* DeadlineList */
16435
+ .tf-deadlines {
16436
+ display: flex;
16437
+ flex-direction: column;
16438
+ gap: 4px;
16439
+ min-width: 0;
16440
+ }
16441
+ .tf-deadline {
16442
+ display: flex;
16443
+ flex-wrap: wrap;
16444
+ align-items: center;
16445
+ gap: 8px 12px;
16446
+ padding: 8px 12px;
16447
+ border-radius: var(--radius-md);
16448
+ }
16449
+ .tf-deadline.is-overdue {
16450
+ background: var(--blush);
16451
+ }
16452
+ .tf-deadline.is-soon {
16453
+ background: var(--surface-sunken);
16454
+ }
16455
+ .tf-deadline-date {
16456
+ display: flex;
16457
+ flex: none;
16458
+ flex-direction: column;
16459
+ align-items: center;
16460
+ width: 40px;
16461
+ padding: 4px 0;
16462
+ border-radius: var(--radius-sm);
16463
+ background: var(--surface);
16464
+ box-shadow: inset 0 0 0 1px var(--line);
16465
+ }
16466
+ .tf-deadline-date b {
16467
+ font: 700 16px/20px var(--font-sans);
16468
+ font-variant-numeric: tabular-nums;
16469
+ }
16470
+ .tf-deadline-date small {
16471
+ font: 600 10px/12px var(--font-sans);
16472
+ text-transform: uppercase;
16473
+ color: var(--ink-muted);
16474
+ }
16475
+ .tf-deadline-text {
16476
+ display: flex;
16477
+ flex: 1 1 160px;
16478
+ flex-direction: column;
16479
+ min-width: 0;
16480
+ }
16481
+ .tf-deadline-text b {
16482
+ font: 600 14px/20px var(--font-sans);
16483
+ overflow-wrap: break-word;
16484
+ }
16485
+ .tf-deadline-text small {
16486
+ font: 500 12px/16px var(--font-sans);
16487
+ color: var(--ink-muted);
16488
+ }
16489
+ .tf-deadline-amount {
16490
+ font: 700 13px/18px var(--font-sans);
16491
+ font-variant-numeric: tabular-nums;
16492
+ }
16493
+ .tf-deadline.is-done .tf-deadline-text b {
16494
+ color: var(--ink-muted);
16495
+ text-decoration: line-through;
16496
+ }
16497
+ .tf-deadline-done {
16498
+ color: var(--mint-ink);
16499
+ }
16500
+
16501
+ /* PolicyCard */
16502
+ .tf-policy {
16503
+ display: flex;
16504
+ flex-direction: column;
16505
+ gap: 16px;
16506
+ min-width: 0;
16507
+ padding: 20px;
16508
+ border-radius: var(--radius-lg);
16509
+ background: var(--surface);
16510
+ box-shadow: var(--shadow-card);
16511
+ }
16512
+ .tf-policy-head {
16513
+ display: flex;
16514
+ flex-wrap: wrap;
16515
+ align-items: center;
16516
+ gap: 12px;
16517
+ }
16518
+ .tf-policy-head .tf-option-text {
16519
+ flex: 1;
16520
+ min-width: 120px;
16521
+ padding: 0;
16522
+ }
16523
+ .tf-policy-head b {
16524
+ font: 700 15px/20px var(--font-sans);
16525
+ }
16526
+ .tf-policy-facts {
16527
+ display: grid;
16528
+ grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
16529
+ gap: 12px;
16530
+ margin: 0;
16531
+ }
16532
+ .tf-policy-facts div {
16533
+ min-width: 0;
16534
+ }
16535
+ .tf-policy-facts dt {
16536
+ font: 600 11px/14px var(--font-sans);
16537
+ letter-spacing: 0.04em;
16538
+ text-transform: uppercase;
16539
+ color: var(--ink-muted);
16540
+ }
16541
+ .tf-policy-facts dd {
16542
+ margin: 2px 0 0;
16543
+ font: 700 15px/20px var(--font-sans);
16544
+ font-variant-numeric: tabular-nums;
16545
+ overflow-wrap: break-word;
16546
+ }
16547
+ .tf-policy-foot {
16548
+ display: flex;
16549
+ flex-wrap: wrap;
16550
+ align-items: center;
16551
+ justify-content: space-between;
16552
+ gap: 8px;
16553
+ padding-top: 12px;
16554
+ border-top: 1px solid var(--line);
16555
+ font: 500 12px/16px var(--font-sans);
16556
+ color: var(--ink-muted);
16557
+ }
16558
+ .tf-policy-actions {
16559
+ display: inline-flex;
16560
+ flex-wrap: wrap;
16561
+ gap: 8px;
16562
+ }
16563
+
16564
+ /* CoverageMatrix */
16565
+ .tf-coverage {
16566
+ display: flex;
16567
+ flex-direction: column;
16568
+ gap: 12px;
16569
+ min-width: 0;
16570
+ }
16571
+ .tf-coverage-sum {
16572
+ display: flex;
16573
+ flex-wrap: wrap;
16574
+ gap: 8px 16px;
16575
+ }
16576
+ .tf-coverage-box {
16577
+ container: tf-coverage / inline-size;
16578
+ }
16579
+ .tf-coverage-table {
16580
+ width: 100%;
16581
+ border-collapse: collapse;
16582
+ }
16583
+ .tf-coverage-table th,
16584
+ .tf-coverage-table td {
16585
+ padding: 10px 8px;
16586
+ border-top: 1px solid var(--line);
16587
+ text-align: left;
16588
+ vertical-align: middle;
16589
+ }
16590
+ .tf-coverage-table th {
16591
+ font-weight: inherit;
16592
+ }
16593
+ .tf-coverage-table th b {
16594
+ display: block;
16595
+ font: 600 14px/20px var(--font-sans);
16596
+ }
16597
+ .tf-coverage-table th small {
16598
+ font: 500 12px/16px var(--font-sans);
16599
+ color: var(--ink-muted);
16600
+ }
16601
+ .tf-coverage-table td:nth-child(2) {
16602
+ white-space: nowrap;
16603
+ }
16604
+ .tf-coverage-note {
16605
+ font: 500 13px/18px var(--font-sans);
16606
+ color: var(--ink-muted);
16607
+ }
16608
+ .tf-coverage-table tr.is-none th b {
16609
+ color: var(--blush-ink);
16610
+ }
16611
+ /* narrow: each risk becomes a block, its status top right, the note underneath */
16612
+ @container tf-coverage (max-width: 440px) {
16613
+ .tf-coverage-table,
16614
+ .tf-coverage-table tbody {
16615
+ display: block;
16616
+ }
16617
+ .tf-coverage-table tr {
16618
+ display: grid;
16619
+ grid-template-columns: minmax(0, 1fr) auto;
16620
+ gap: 4px 12px;
16621
+ padding: 10px 4px;
16622
+ border-top: 1px solid var(--line);
16623
+ }
16624
+ .tf-coverage-table th,
16625
+ .tf-coverage-table td {
16626
+ padding: 0;
16627
+ border-top: 0;
16628
+ }
16629
+ .tf-coverage-table td.tf-coverage-note {
16630
+ grid-column: 1 / -1;
16631
+ }
16632
+ }
16633
+
16634
+ /* ClaimTimeline */
16635
+ .tf-claim {
16636
+ display: flex;
16637
+ flex-direction: column;
16638
+ gap: 16px;
16639
+ min-width: 0;
16640
+ }
16641
+ .tf-claim-head {
16642
+ display: flex;
16643
+ flex-wrap: wrap;
16644
+ align-items: flex-start;
16645
+ justify-content: space-between;
16646
+ gap: 12px;
16647
+ }
16648
+ .tf-claim-head .tf-option-text {
16649
+ padding: 0;
16650
+ }
16651
+ .tf-claim-head b {
16652
+ font: 700 15px/20px var(--font-sans);
16653
+ }
16654
+ .tf-claim-amount {
16655
+ display: flex;
16656
+ flex-direction: column;
16657
+ align-items: flex-end;
16658
+ font: 700 18px/24px var(--font-sans);
16659
+ font-variant-numeric: tabular-nums;
16660
+ }
16661
+ .tf-claim-amount small {
16662
+ font: 600 11px/14px var(--font-sans);
16663
+ color: var(--ink-muted);
16664
+ }
16665
+ .tf-claim-steps {
16666
+ display: flex;
16667
+ flex-direction: column;
16668
+ }
16669
+ .tf-claim-steps li {
16670
+ position: relative;
16671
+ display: flex;
16672
+ gap: 12px;
16673
+ padding-bottom: 16px;
16674
+ }
16675
+ .tf-claim-steps li:last-child {
16676
+ padding-bottom: 0;
16677
+ }
16678
+ .tf-claim-steps li:not(:last-child)::before {
16679
+ content: "";
16680
+ position: absolute;
16681
+ top: 20px;
16682
+ bottom: 0;
16683
+ left: 9px;
16684
+ width: 2px;
16685
+ background: var(--line);
16686
+ }
16687
+ .tf-claim-steps li.is-done:not(:last-child)::before {
16688
+ background: var(--mint-ink);
16689
+ }
16690
+ .tf-claim-dot {
16691
+ position: relative;
16692
+ display: grid;
16693
+ place-items: center;
16694
+ flex: none;
16695
+ width: 20px;
16696
+ height: 20px;
16697
+ box-sizing: border-box;
16698
+ border: 2px solid var(--line-strong);
16699
+ border-radius: 50%;
16700
+ background: var(--surface);
16701
+ color: var(--primary-foreground);
16702
+ }
16703
+ .tf-claim-steps li.is-done .tf-claim-dot {
16704
+ border-color: var(--mint-ink);
16705
+ background: var(--mint-ink);
16706
+ }
16707
+ .tf-claim-steps li.is-current .tf-claim-dot {
16708
+ border-color: var(--primary);
16709
+ box-shadow: 0 0 0 4px var(--accent);
16710
+ }
16711
+ .tf-claim-steps li.is-failed .tf-claim-dot {
16712
+ border-color: var(--blush-ink);
16713
+ background: var(--blush-ink);
16714
+ }
16715
+ .tf-claim-text {
16716
+ display: flex;
16717
+ flex-direction: column;
16718
+ min-width: 0;
16719
+ }
16720
+ .tf-claim-text b {
16721
+ font: 600 14px/20px var(--font-sans);
16722
+ }
16723
+ .tf-claim-steps li.is-todo .tf-claim-text b {
16724
+ color: var(--ink-muted);
16725
+ font-weight: 500;
16726
+ }
16727
+ .tf-claim-text small {
16728
+ font: 500 12px/16px var(--font-sans);
16729
+ color: var(--ink-muted);
16730
+ }
16731
+
16732
+ /* DocumentList */
16733
+ .tf-docs {
16734
+ display: flex;
16735
+ flex-direction: column;
16736
+ gap: 4px;
16737
+ min-width: 0;
16738
+ }
16739
+ .tf-doc {
16740
+ display: flex;
16741
+ flex-wrap: wrap;
16742
+ align-items: center;
16743
+ gap: 8px 12px;
16744
+ width: 100%;
16745
+ padding: 10px 12px;
16746
+ box-sizing: border-box;
16747
+ border: 0;
16748
+ border-radius: var(--radius-md);
16749
+ background: transparent;
16750
+ color: var(--ink);
16751
+ font: inherit;
16752
+ text-align: left;
16753
+ }
16754
+ button.tf-doc {
16755
+ cursor: pointer;
16756
+ }
16757
+ button.tf-doc:hover {
16758
+ background: var(--accent);
16759
+ }
16760
+ button.tf-doc:focus-visible {
16761
+ outline: 2px solid var(--focus);
16762
+ outline-offset: 2px;
16763
+ }
16764
+ .tf-doc-text {
16765
+ display: flex;
16766
+ flex: 1 1 160px;
16767
+ flex-direction: column;
16768
+ min-width: 0;
16769
+ }
16770
+ .tf-doc-text b {
16771
+ font: 600 14px/20px var(--font-sans);
16772
+ overflow-wrap: break-word;
16773
+ }
16774
+ .tf-doc-text small,
16775
+ .tf-doc-valid {
16776
+ font: 500 12px/16px var(--font-sans);
16777
+ color: var(--ink-muted);
16778
+ }