@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/scoped.css CHANGED
@@ -14565,6 +14565,37 @@
14565
14565
  }
14566
14566
  }
14567
14567
 
14568
+ /* Fluid actions: an action row measures itself, so its buttons answer to the box it sits in (a
14569
+ thin card, a side panel, a phone) instead of the window. When the row is narrow it wraps and
14570
+ its buttons share the full width; when it is very narrow each button takes a line. The rows are
14571
+ the kit's own footers and action bars, and plain `.tf-row`s of buttons placed directly in a
14572
+ column box (panel, card, dialog, form …), where they always span the box. */
14573
+ :where([data-kit="halo"]) :is(
14574
+ .tf-modal-foot,
14575
+ .tf-card-foot,
14576
+ .tf-approval-foot,
14577
+ .tf-review-actions,
14578
+ .tf-cookie-actions,
14579
+ .tf-push-actions,
14580
+ .tf-insight-actions,
14581
+ .tf-journal-foot,
14582
+ :is(.tf-panel, .tf-card, .tf-modal, .tf-drawer, .tf-popover, .tf-form, .tf-col)
14583
+ > .tf-row:not(:has(> :not(.tf-btn, .tf-iconbtn)))
14584
+ ) {
14585
+ container: tf-actions / inline-size;
14586
+ flex-wrap: wrap;
14587
+ }
14588
+ @container tf-actions (max-width: 400px) {
14589
+ :where([data-kit="halo"]) .tf-btn {
14590
+ flex: 1 1 auto;
14591
+ }
14592
+ }
14593
+ @container tf-actions (max-width: 240px) {
14594
+ :where([data-kit="halo"]) .tf-btn {
14595
+ flex-basis: 100%;
14596
+ }
14597
+ }
14598
+
14568
14599
  /* 07-polish.css */
14569
14600
  /* ───────────── Polish ─────────────
14570
14601
  Small consistency fixes found by auditing every preview in both kits and themes. Zero
@@ -14772,10 +14803,17 @@
14772
14803
  .tf-card,
14773
14804
  .tf-stat,
14774
14805
  .tf-dock,
14775
- .tf-sidebar,
14806
+ .tf-sidebar:not(.shell),
14776
14807
  .tf-map-legend,
14777
14808
  .tf-map-ctl,
14778
- .tf-map-pop
14809
+ .tf-map-pop,
14810
+ .tf-vital,
14811
+ .tf-journal,
14812
+ .tf-goal,
14813
+ .tf-insight,
14814
+ .tf-consent-item,
14815
+ .tf-nw,
14816
+ .tf-policy
14779
14817
  ):not(
14780
14818
  :is(
14781
14819
  .tf-panel,
@@ -14791,6 +14829,13 @@
14791
14829
  .tf-palette,
14792
14830
  .tf-modal,
14793
14831
  .tf-drawer,
14832
+ .tf-vital,
14833
+ .tf-journal,
14834
+ .tf-goal,
14835
+ .tf-insight,
14836
+ .tf-consent-item,
14837
+ .tf-nw,
14838
+ .tf-policy,
14794
14839
  .tf-glass
14795
14840
  )
14796
14841
  *
@@ -14801,10 +14846,17 @@
14801
14846
  .tf-card,
14802
14847
  .tf-stat,
14803
14848
  .tf-dock,
14804
- .tf-sidebar,
14849
+ .tf-sidebar:not(.shell),
14805
14850
  .tf-map-legend,
14806
14851
  .tf-map-ctl,
14807
- .tf-map-pop
14852
+ .tf-map-pop,
14853
+ .tf-vital,
14854
+ .tf-journal,
14855
+ .tf-goal,
14856
+ .tf-insight,
14857
+ .tf-consent-item,
14858
+ .tf-nw,
14859
+ .tf-policy
14808
14860
  ):not(
14809
14861
  :is(
14810
14862
  .tf-panel,
@@ -14820,6 +14872,13 @@
14820
14872
  .tf-palette,
14821
14873
  .tf-modal,
14822
14874
  .tf-drawer,
14875
+ .tf-vital,
14876
+ .tf-journal,
14877
+ .tf-goal,
14878
+ .tf-insight,
14879
+ .tf-consent-item,
14880
+ .tf-nw,
14881
+ .tf-policy,
14823
14882
  .tf-glass
14824
14883
  )
14825
14884
  *
@@ -14936,6 +14995,10 @@
14936
14995
  .tf-modal,
14937
14996
  .tf-drawer,
14938
14997
  .tf-glass,
14998
+ .tf-insight,
14999
+ .tf-policy,
15000
+ .tf-consent-item,
15001
+ .tf-journal,
14939
15002
  .tf-btngroup,
14940
15003
  .tf-map-ctl,
14941
15004
  .tf-topbar
@@ -14965,6 +15028,10 @@
14965
15028
  .tf-modal,
14966
15029
  .tf-drawer,
14967
15030
  .tf-glass,
15031
+ .tf-insight,
15032
+ .tf-policy,
15033
+ .tf-consent-item,
15034
+ .tf-journal,
14968
15035
  .tf-btngroup,
14969
15036
  .tf-map-ctl,
14970
15037
  .tf-topbar
@@ -14990,10 +15057,38 @@
14990
15057
  }
14991
15058
  :where([data-kit="halo"])[data-surface="glass"]
14992
15059
  :is(.tf-iconbtn-soft, .tf-iconbtn-outline, .tf-btn-secondary, .tf-chip):not(
14993
- :is(.tf-panel, .tf-card, .tf-dock, .tf-popover, .tf-menu, .tf-modal, .tf-drawer, .tf-glass) *
15060
+ :is(
15061
+ .tf-panel,
15062
+ .tf-card,
15063
+ .tf-dock,
15064
+ .tf-popover,
15065
+ .tf-menu,
15066
+ .tf-modal,
15067
+ .tf-drawer,
15068
+ .tf-insight,
15069
+ .tf-policy,
15070
+ .tf-consent-item,
15071
+ .tf-journal,
15072
+ .tf-glass
15073
+ )
15074
+ *
14994
15075
  ):not(.tf-solid):not([aria-pressed="true"]):hover, :where([data-kit="halo"]) [data-surface="glass"]
14995
15076
  :is(.tf-iconbtn-soft, .tf-iconbtn-outline, .tf-btn-secondary, .tf-chip):not(
14996
- :is(.tf-panel, .tf-card, .tf-dock, .tf-popover, .tf-menu, .tf-modal, .tf-drawer, .tf-glass) *
15077
+ :is(
15078
+ .tf-panel,
15079
+ .tf-card,
15080
+ .tf-dock,
15081
+ .tf-popover,
15082
+ .tf-menu,
15083
+ .tf-modal,
15084
+ .tf-drawer,
15085
+ .tf-insight,
15086
+ .tf-policy,
15087
+ .tf-consent-item,
15088
+ .tf-journal,
15089
+ .tf-glass
15090
+ )
15091
+ *
14997
15092
  ):not(.tf-solid):not([aria-pressed="true"]):hover {
14998
15093
  background:
14999
15094
  linear-gradient(var(--glass-hover), var(--glass-hover)) border-box,
@@ -15045,10 +15140,17 @@
15045
15140
  .tf-card,
15046
15141
  .tf-stat,
15047
15142
  .tf-dock,
15048
- .tf-sidebar,
15143
+ .tf-sidebar:not(.shell),
15049
15144
  .tf-map-legend,
15050
15145
  .tf-map-ctl,
15051
- .tf-map-pop
15146
+ .tf-map-pop,
15147
+ .tf-vital,
15148
+ .tf-journal,
15149
+ .tf-goal,
15150
+ .tf-insight,
15151
+ .tf-consent-item,
15152
+ .tf-nw,
15153
+ .tf-policy
15052
15154
  ),
15053
15155
  :where([data-kit="halo"]) [data-surface="glass"]
15054
15156
  :is(
@@ -15056,10 +15158,17 @@
15056
15158
  .tf-card,
15057
15159
  .tf-stat,
15058
15160
  .tf-dock,
15059
- .tf-sidebar,
15161
+ .tf-sidebar:not(.shell),
15060
15162
  .tf-map-legend,
15061
15163
  .tf-map-ctl,
15062
- .tf-map-pop
15164
+ .tf-map-pop,
15165
+ .tf-vital,
15166
+ .tf-journal,
15167
+ .tf-goal,
15168
+ .tf-insight,
15169
+ .tf-consent-item,
15170
+ .tf-nw,
15171
+ .tf-policy
15063
15172
  ) {
15064
15173
  outline: 1px solid CanvasText;
15065
15174
  outline-offset: -1px;
@@ -15451,3 +15560,1373 @@
15451
15560
  :where([data-kit="halo"])[data-motion="off"] .tf-ambient-field, :where([data-kit="halo"]) [data-motion="off"] .tf-ambient-field {
15452
15561
  animation: none;
15453
15562
  }
15563
+
15564
+ /* 11-life.css */
15565
+ /* Life: habits, mood, vitals, activity rings, sleep, medication, journal, goals, insights, consent */
15566
+
15567
+ /* HabitTracker */
15568
+ :where([data-kit="halo"]) .tf-habits {
15569
+ container: tf-habits / inline-size;
15570
+ display: grid;
15571
+ gap: 4px;
15572
+ min-width: 0;
15573
+ }
15574
+ :where([data-kit="halo"]) .tf-habit-days,
15575
+ :where([data-kit="halo"]) .tf-habit-marks {
15576
+ display: grid;
15577
+ grid-auto-flow: column;
15578
+ grid-auto-columns: 24px;
15579
+ gap: 6px;
15580
+ }
15581
+ :where([data-kit="halo"]) .tf-habit-days {
15582
+ justify-self: end;
15583
+ padding-right: 12px;
15584
+ font: 600 11px/16px var(--font-sans);
15585
+ color: var(--ink-muted);
15586
+ text-align: center;
15587
+ }
15588
+ :where([data-kit="halo"]) .tf-habit {
15589
+ display: grid;
15590
+ grid-template-columns: auto minmax(0, 1fr) auto;
15591
+ align-items: center;
15592
+ gap: 12px;
15593
+ padding: 8px 12px;
15594
+ border-radius: var(--radius-md);
15595
+ }
15596
+ :where([data-kit="halo"]) .tf-habit:hover {
15597
+ background: var(--surface-sunken);
15598
+ }
15599
+ :where([data-kit="halo"]) .tf-habit-text {
15600
+ display: flex;
15601
+ flex-direction: column;
15602
+ min-width: 0;
15603
+ }
15604
+ :where([data-kit="halo"]) .tf-habit-text b {
15605
+ overflow: hidden;
15606
+ text-overflow: ellipsis;
15607
+ white-space: nowrap;
15608
+ font: 600 14px/20px var(--font-sans);
15609
+ }
15610
+ :where([data-kit="halo"]) .tf-habit-text small {
15611
+ display: flex;
15612
+ flex-wrap: wrap;
15613
+ gap: 4px 10px;
15614
+ font: 500 12px/16px var(--font-sans);
15615
+ color: var(--ink-muted);
15616
+ }
15617
+ :where([data-kit="halo"]) .tf-habit-streak {
15618
+ display: inline-flex;
15619
+ align-items: center;
15620
+ gap: 4px;
15621
+ color: var(--butter-ink);
15622
+ }
15623
+ :where([data-kit="halo"]) .tf-habit-mark {
15624
+ display: grid;
15625
+ place-items: center;
15626
+ width: 24px;
15627
+ height: 24px;
15628
+ box-sizing: border-box;
15629
+ padding: 0;
15630
+ border: 1.5px solid var(--line-strong);
15631
+ border-radius: 50%;
15632
+ background: transparent;
15633
+ color: var(--primary-foreground);
15634
+ }
15635
+ :where([data-kit="halo"]) .tf-habit-mark.done {
15636
+ border-color: var(--mint-ink);
15637
+ background: var(--mint-ink);
15638
+ }
15639
+ /* missed: an empty ring with a small cross; no entry: a faint dashed ring */
15640
+ :where([data-kit="halo"]) .tf-habit-mark.missed {
15641
+ color: var(--ink-subtle);
15642
+ }
15643
+ :where([data-kit="halo"]) .tf-habit-mark:not(.done):not(.missed) {
15644
+ border-style: dashed;
15645
+ border-color: var(--line);
15646
+ }
15647
+ :where([data-kit="halo"]) .tf-habit-mark.today {
15648
+ box-shadow:
15649
+ 0 0 0 2px var(--surface),
15650
+ 0 0 0 4px var(--line-strong);
15651
+ }
15652
+ /* narrow: the marks go under the name, the day labels line up with them */
15653
+ @container tf-habits (max-width: 400px) {
15654
+ :where([data-kit="halo"]) .tf-habit {
15655
+ grid-template-columns: auto minmax(0, 1fr);
15656
+ row-gap: 8px;
15657
+ }
15658
+ :where([data-kit="halo"]) .tf-habit-marks {
15659
+ grid-column: 1 / -1;
15660
+ }
15661
+ :where([data-kit="halo"]) .tf-habit-days {
15662
+ justify-self: start;
15663
+ padding: 0 0 0 12px;
15664
+ }
15665
+ }
15666
+ @container tf-habits (max-width: 240px) {
15667
+ :where([data-kit="halo"]) .tf-habit-days,
15668
+ :where([data-kit="halo"]) .tf-habit-marks {
15669
+ gap: 2px;
15670
+ }
15671
+ }
15672
+ :where([data-kit="halo"]) button.tf-habit-mark {
15673
+ cursor: pointer;
15674
+ }
15675
+ :where([data-kit="halo"]) button.tf-habit-mark:focus-visible {
15676
+ outline: 2px solid var(--focus);
15677
+ outline-offset: 4px;
15678
+ }
15679
+
15680
+ /* MoodPicker */
15681
+ :where([data-kit="halo"]) .tf-mood {
15682
+ min-width: 0;
15683
+ margin: 0;
15684
+ padding: 0;
15685
+ border: 0;
15686
+ }
15687
+ :where([data-kit="halo"]) .tf-mood-q {
15688
+ padding: 0;
15689
+ margin-bottom: 12px;
15690
+ font: 600 14px/20px var(--font-sans);
15691
+ }
15692
+ :where([data-kit="halo"]) .tf-mood-scale {
15693
+ container: tf-mood / inline-size;
15694
+ display: grid;
15695
+ grid-template-columns: repeat(5, minmax(0, 1fr));
15696
+ gap: 8px;
15697
+ }
15698
+ :where([data-kit="halo"]) .tf-mood-opt {
15699
+ position: relative;
15700
+ display: flex;
15701
+ flex-direction: column;
15702
+ align-items: center;
15703
+ justify-content: center;
15704
+ gap: 4px;
15705
+ min-width: 0;
15706
+ min-height: 72px;
15707
+ padding: 8px 4px;
15708
+ box-sizing: border-box;
15709
+ border-radius: var(--radius-md);
15710
+ color: var(--ink-muted);
15711
+ font: 600 12px/16px var(--font-sans);
15712
+ cursor: pointer;
15713
+ }
15714
+ /* the picked level keeps the tint its tf-t-* class gives it */
15715
+ :where([data-kit="halo"]) .tf-mood-opt:not(.on) {
15716
+ background: var(--surface-sunken);
15717
+ }
15718
+ :where([data-kit="halo"]) .tf-mood.compact .tf-mood-opt {
15719
+ min-height: 48px;
15720
+ }
15721
+ :where([data-kit="halo"]) .tf-mood-opt span {
15722
+ max-width: 100%;
15723
+ overflow: hidden;
15724
+ text-overflow: ellipsis;
15725
+ white-space: nowrap;
15726
+ }
15727
+ /* narrow: tighter cells so every word still fits */
15728
+ @container tf-mood (max-width: 300px) {
15729
+ :where([data-kit="halo"]) .tf-mood-opt {
15730
+ padding: 8px 2px;
15731
+ font-size: 11px;
15732
+ }
15733
+ }
15734
+ :where([data-kit="halo"]) .tf-mood-opt input {
15735
+ position: absolute;
15736
+ inset: 0;
15737
+ margin: 0;
15738
+ opacity: 0;
15739
+ cursor: pointer;
15740
+ }
15741
+ :where([data-kit="halo"]) .tf-mood-opt:hover {
15742
+ color: var(--ink);
15743
+ }
15744
+ :where([data-kit="halo"]) .tf-mood-opt.on {
15745
+ box-shadow: inset 0 0 0 2px currentColor;
15746
+ }
15747
+ :where([data-kit="halo"]) .tf-mood-opt:has(input:focus-visible) {
15748
+ outline: 2px solid var(--focus);
15749
+ outline-offset: 2px;
15750
+ }
15751
+
15752
+ /* VitalTile */
15753
+ :where([data-kit="halo"]) .tf-vital {
15754
+ display: flex;
15755
+ flex-direction: column;
15756
+ gap: 12px;
15757
+ min-width: 0;
15758
+ padding: 16px;
15759
+ border-radius: var(--radius-lg);
15760
+ background: var(--surface);
15761
+ box-shadow: var(--shadow-card);
15762
+ }
15763
+ :where([data-kit="halo"]) .tf-vital-head {
15764
+ display: flex;
15765
+ align-items: center;
15766
+ justify-content: space-between;
15767
+ gap: 8px;
15768
+ }
15769
+ :where([data-kit="halo"]) .tf-vital-head .tf-badge {
15770
+ flex: none;
15771
+ white-space: nowrap;
15772
+ }
15773
+ :where([data-kit="halo"]) .tf-vital-label {
15774
+ display: inline-flex;
15775
+ align-items: center;
15776
+ gap: 6px;
15777
+ min-width: 0;
15778
+ font: 600 13px/18px var(--font-sans);
15779
+ color: var(--ink-muted);
15780
+ }
15781
+ :where([data-kit="halo"]) .tf-vital-main {
15782
+ display: flex;
15783
+ align-items: flex-end;
15784
+ justify-content: space-between;
15785
+ gap: 12px;
15786
+ }
15787
+ :where([data-kit="halo"]) .tf-vital-value {
15788
+ font: 700 28px/34px var(--font-sans);
15789
+ letter-spacing: -0.02em;
15790
+ font-variant-numeric: tabular-nums;
15791
+ }
15792
+ :where([data-kit="halo"]) .tf-vital-value small {
15793
+ margin-left: 4px;
15794
+ font: 600 13px/18px var(--font-sans);
15795
+ letter-spacing: 0;
15796
+ color: var(--ink-muted);
15797
+ }
15798
+ :where([data-kit="halo"]) .tf-vital-band {
15799
+ position: relative;
15800
+ height: 8px;
15801
+ border-radius: var(--radius-pill);
15802
+ background: var(--surface-sunken);
15803
+ }
15804
+ :where([data-kit="halo"]) .tf-vital-normal {
15805
+ position: absolute;
15806
+ top: 0;
15807
+ bottom: 0;
15808
+ border-radius: var(--radius-pill);
15809
+ background: var(--mint);
15810
+ }
15811
+ :where([data-kit="halo"]) .tf-vital-dot {
15812
+ position: absolute;
15813
+ top: 50%;
15814
+ width: 14px;
15815
+ height: 14px;
15816
+ box-sizing: border-box;
15817
+ border: 3px solid var(--surface);
15818
+ border-radius: 50%;
15819
+ background: var(--mint-ink);
15820
+ translate: -50% -50%;
15821
+ }
15822
+ :where([data-kit="halo"]) .tf-vital.is-low .tf-vital-dot,
15823
+ :where([data-kit="halo"]) .tf-vital.is-high .tf-vital-dot {
15824
+ background: var(--butter-ink);
15825
+ }
15826
+ :where([data-kit="halo"]) .tf-vital-foot {
15827
+ display: flex;
15828
+ flex-wrap: wrap;
15829
+ justify-content: space-between;
15830
+ gap: 4px 12px;
15831
+ font: 500 12px/16px var(--font-sans);
15832
+ color: var(--ink-muted);
15833
+ }
15834
+
15835
+ /* ActivityRings */
15836
+ :where([data-kit="halo"]) .tf-rings {
15837
+ display: flex;
15838
+ flex-wrap: wrap;
15839
+ align-items: center;
15840
+ gap: 20px;
15841
+ min-width: 0;
15842
+ }
15843
+ :where([data-kit="halo"]) .tf-rings svg {
15844
+ flex: none;
15845
+ }
15846
+ :where([data-kit="halo"]) .tf-rings-legend {
15847
+ display: flex;
15848
+ flex-direction: column;
15849
+ gap: 8px;
15850
+ min-width: 0;
15851
+ margin: 0;
15852
+ padding: 0;
15853
+ list-style: none;
15854
+ }
15855
+ :where([data-kit="halo"]) .tf-rings-legend li {
15856
+ display: grid;
15857
+ grid-template-columns: auto minmax(0, 1fr);
15858
+ align-items: center;
15859
+ column-gap: 8px;
15860
+ }
15861
+ :where([data-kit="halo"]) .tf-rings-key {
15862
+ width: 10px;
15863
+ height: 10px;
15864
+ border-radius: 50%;
15865
+ }
15866
+ :where([data-kit="halo"]) .tf-rings-name {
15867
+ font: 600 12px/16px var(--font-sans);
15868
+ color: var(--ink-muted);
15869
+ }
15870
+ :where([data-kit="halo"]) .tf-rings-legend b {
15871
+ grid-column: 2;
15872
+ font: 700 14px/20px var(--font-sans);
15873
+ font-variant-numeric: tabular-nums;
15874
+ }
15875
+
15876
+ /* SleepChart */
15877
+ :where([data-kit="halo"]) .tf-sleep {
15878
+ display: flex;
15879
+ flex-direction: column;
15880
+ gap: 16px;
15881
+ min-width: 0;
15882
+ }
15883
+ :where([data-kit="halo"]) .tf-sleep-chart {
15884
+ display: flex;
15885
+ flex-direction: column;
15886
+ gap: 6px;
15887
+ }
15888
+ :where([data-kit="halo"]) .tf-sleep-lane {
15889
+ display: grid;
15890
+ grid-template-columns: 52px minmax(0, 1fr);
15891
+ align-items: center;
15892
+ gap: 12px;
15893
+ }
15894
+ :where([data-kit="halo"]) .tf-sleep-name {
15895
+ font: 600 12px/16px var(--font-sans);
15896
+ color: var(--ink-muted);
15897
+ }
15898
+ :where([data-kit="halo"]) .tf-sleep-track {
15899
+ position: relative;
15900
+ height: 20px;
15901
+ border-radius: var(--radius-sm);
15902
+ background: var(--surface-sunken);
15903
+ }
15904
+ :where([data-kit="halo"]) .tf-sleep-seg {
15905
+ position: absolute;
15906
+ top: 2px;
15907
+ bottom: 2px;
15908
+ min-width: 2px;
15909
+ border-radius: var(--radius-sm);
15910
+ }
15911
+ :where([data-kit="halo"]) .tf-sleep-axis {
15912
+ display: flex;
15913
+ justify-content: space-between;
15914
+ margin-left: 64px;
15915
+ font: 500 11px/16px var(--font-sans);
15916
+ color: var(--ink-muted);
15917
+ font-variant-numeric: tabular-nums;
15918
+ }
15919
+ :where([data-kit="halo"]) .tf-sleep-sum {
15920
+ display: flex;
15921
+ flex-wrap: wrap;
15922
+ align-items: center;
15923
+ justify-content: space-between;
15924
+ gap: 8px 16px;
15925
+ }
15926
+ :where([data-kit="halo"]) .tf-sleep-sum b {
15927
+ font: 700 14px/20px var(--font-sans);
15928
+ }
15929
+ :where([data-kit="halo"]) .tf-sleep-sum ul {
15930
+ display: flex;
15931
+ flex-wrap: wrap;
15932
+ gap: 4px 14px;
15933
+ margin: 0;
15934
+ padding: 0;
15935
+ list-style: none;
15936
+ }
15937
+ :where([data-kit="halo"]) .tf-sleep-sum li {
15938
+ display: inline-flex;
15939
+ align-items: center;
15940
+ gap: 6px;
15941
+ font: 500 12px/16px var(--font-sans);
15942
+ color: var(--ink-muted);
15943
+ }
15944
+ :where([data-kit="halo"]) .tf-sleep-sum li span:last-child {
15945
+ color: var(--ink);
15946
+ font-weight: 600;
15947
+ font-variant-numeric: tabular-nums;
15948
+ }
15949
+
15950
+ /* MedicationList */
15951
+ :where([data-kit="halo"]) .tf-meds {
15952
+ container: tf-meds / inline-size;
15953
+ display: flex;
15954
+ flex-direction: column;
15955
+ gap: 4px;
15956
+ min-width: 0;
15957
+ margin: 0;
15958
+ padding: 0;
15959
+ list-style: none;
15960
+ }
15961
+ :where([data-kit="halo"]) .tf-med {
15962
+ display: grid;
15963
+ grid-template-columns: 48px auto minmax(0, 1fr) auto;
15964
+ align-items: center;
15965
+ gap: 12px;
15966
+ padding: 8px 12px;
15967
+ border-radius: var(--radius-md);
15968
+ }
15969
+ :where([data-kit="halo"]) .tf-med.is-due {
15970
+ background: var(--surface-sunken);
15971
+ }
15972
+ :where([data-kit="halo"]) .tf-med-time {
15973
+ font: 600 13px/18px var(--font-sans);
15974
+ font-variant-numeric: tabular-nums;
15975
+ color: var(--ink-muted);
15976
+ }
15977
+ :where([data-kit="halo"]) .tf-med-text {
15978
+ display: flex;
15979
+ flex-direction: column;
15980
+ min-width: 0;
15981
+ }
15982
+ :where([data-kit="halo"]) .tf-med-text b {
15983
+ font: 600 14px/20px var(--font-sans);
15984
+ overflow-wrap: break-word;
15985
+ }
15986
+ :where([data-kit="halo"]) .tf-med-text small {
15987
+ font: 500 12px/16px var(--font-sans);
15988
+ color: var(--ink-muted);
15989
+ }
15990
+ :where([data-kit="halo"]) .tf-med.is-taken .tf-med-text b {
15991
+ color: var(--ink-muted);
15992
+ }
15993
+ :where([data-kit="halo"]) .tf-med-act {
15994
+ display: inline-flex;
15995
+ align-items: center;
15996
+ gap: 8px;
15997
+ }
15998
+ /* narrow: time, name and status; the icon gives way */
15999
+ @container tf-meds (max-width: 400px) {
16000
+ :where([data-kit="halo"]) .tf-med {
16001
+ grid-template-columns: 44px minmax(0, 1fr) auto;
16002
+ gap: 8px;
16003
+ padding: 8px;
16004
+ }
16005
+ :where([data-kit="halo"]) .tf-med > .tf-tinticon {
16006
+ display: none;
16007
+ }
16008
+ }
16009
+
16010
+ /* JournalEntry */
16011
+ :where([data-kit="halo"]) .tf-journal {
16012
+ display: flex;
16013
+ flex-direction: column;
16014
+ gap: 8px;
16015
+ min-width: 0;
16016
+ padding: 20px;
16017
+ border-radius: var(--radius-lg);
16018
+ background: var(--surface);
16019
+ box-shadow: var(--shadow-card);
16020
+ }
16021
+ :where([data-kit="halo"]) .tf-journal-head {
16022
+ display: flex;
16023
+ flex-wrap: wrap;
16024
+ align-items: center;
16025
+ justify-content: space-between;
16026
+ gap: 8px;
16027
+ font: 600 12px/16px var(--font-sans);
16028
+ color: var(--ink-muted);
16029
+ }
16030
+ :where([data-kit="halo"]) .tf-journal-mood {
16031
+ display: inline-flex;
16032
+ align-items: center;
16033
+ gap: 4px;
16034
+ padding: 2px 8px;
16035
+ border-radius: var(--radius-pill);
16036
+ }
16037
+ :where([data-kit="halo"]) .tf-journal-title {
16038
+ margin: 0;
16039
+ font: 700 16px/22px var(--font-sans);
16040
+ }
16041
+ :where([data-kit="halo"]) .tf-journal-body {
16042
+ font: 500 14px/22px var(--font-sans);
16043
+ color: var(--ink);
16044
+ overflow-wrap: anywhere;
16045
+ }
16046
+ :where([data-kit="halo"]) .tf-journal-body p {
16047
+ margin: 0 0 8px;
16048
+ }
16049
+ :where([data-kit="halo"]) .tf-journal-foot {
16050
+ display: flex;
16051
+ flex-wrap: wrap;
16052
+ align-items: center;
16053
+ justify-content: space-between;
16054
+ gap: 8px;
16055
+ padding-top: 4px;
16056
+ }
16057
+ :where([data-kit="halo"]) .tf-journal-tags {
16058
+ display: flex;
16059
+ flex-wrap: wrap;
16060
+ gap: 6px;
16061
+ }
16062
+
16063
+ /* GoalCard */
16064
+ :where([data-kit="halo"]) .tf-goal {
16065
+ display: flex;
16066
+ flex-direction: column;
16067
+ gap: 12px;
16068
+ min-width: 0;
16069
+ padding: 20px;
16070
+ border-radius: var(--radius-lg);
16071
+ background: var(--surface);
16072
+ box-shadow: var(--shadow-card);
16073
+ }
16074
+ /* narrow: the icon steps aside so the title keeps whole words */
16075
+ @container tf-goal (max-width: 280px) {
16076
+ :where([data-kit="halo"]) .tf-goal-head > .tf-tinticon {
16077
+ display: none;
16078
+ }
16079
+ }
16080
+ :where([data-kit="halo"]) .tf-goal-head {
16081
+ container: tf-goal / inline-size;
16082
+ display: flex;
16083
+ align-items: center;
16084
+ gap: 12px;
16085
+ }
16086
+ :where([data-kit="halo"]) .tf-goal-head .tf-option-text {
16087
+ flex: 1;
16088
+ padding: 0;
16089
+ }
16090
+ :where([data-kit="halo"]) .tf-goal-head b {
16091
+ font: 700 14px/20px var(--font-sans);
16092
+ }
16093
+ :where([data-kit="halo"]) .tf-goal-pct {
16094
+ font: 700 20px/26px var(--font-sans);
16095
+ font-variant-numeric: tabular-nums;
16096
+ }
16097
+ :where([data-kit="halo"]) .tf-goal-bar {
16098
+ height: 10px;
16099
+ overflow: hidden;
16100
+ border-radius: var(--radius-pill);
16101
+ background: var(--surface-sunken);
16102
+ }
16103
+ :where([data-kit="halo"]) .tf-goal-bar > span {
16104
+ display: block;
16105
+ height: 100%;
16106
+ border-radius: var(--radius-pill);
16107
+ }
16108
+ :where([data-kit="halo"]) .tf-goal-meta,
16109
+ :where([data-kit="halo"]) .tf-goal-note {
16110
+ margin: 0;
16111
+ font: 500 12px/16px var(--font-sans);
16112
+ color: var(--ink-muted);
16113
+ }
16114
+ :where([data-kit="halo"]) .tf-goal-steps {
16115
+ display: flex;
16116
+ flex-direction: column;
16117
+ gap: 6px;
16118
+ margin: 0;
16119
+ padding: 0;
16120
+ list-style: none;
16121
+ font: 500 13px/18px var(--font-sans);
16122
+ }
16123
+ :where([data-kit="halo"]) .tf-goal-steps li {
16124
+ display: flex;
16125
+ align-items: center;
16126
+ gap: 8px;
16127
+ }
16128
+ :where([data-kit="halo"]) .tf-goal-steps li.done {
16129
+ color: var(--ink-muted);
16130
+ }
16131
+ :where([data-kit="halo"]) .tf-goal-step {
16132
+ display: grid;
16133
+ place-items: center;
16134
+ flex: none;
16135
+ width: 16px;
16136
+ height: 16px;
16137
+ box-sizing: border-box;
16138
+ border: 1.5px solid var(--line-strong);
16139
+ border-radius: 50%;
16140
+ color: var(--primary-foreground);
16141
+ }
16142
+ :where([data-kit="halo"]) .tf-goal-steps li.done .tf-goal-step {
16143
+ border-color: var(--primary);
16144
+ background: var(--primary);
16145
+ }
16146
+
16147
+ /* InsightCard */
16148
+ :where([data-kit="halo"]) .tf-insight {
16149
+ display: flex;
16150
+ flex-direction: column;
16151
+ gap: 12px;
16152
+ min-width: 0;
16153
+ padding: 16px 16px 16px 20px;
16154
+ border-radius: var(--radius-lg);
16155
+ background: var(--surface);
16156
+ box-shadow:
16157
+ var(--shadow-card),
16158
+ inset 3px 0 0 var(--sky-ink);
16159
+ /* on glass the card takes a faint wash of its tone */
16160
+ --tint: var(--sky);
16161
+ }
16162
+ :where([data-kit="halo"]) .tf-insight.is-success {
16163
+ --tint: var(--mint);
16164
+ box-shadow:
16165
+ var(--shadow-card),
16166
+ inset 3px 0 0 var(--mint-ink);
16167
+ }
16168
+ :where([data-kit="halo"]) .tf-insight.is-warning {
16169
+ --tint: var(--butter);
16170
+ box-shadow:
16171
+ var(--shadow-card),
16172
+ inset 3px 0 0 var(--butter-ink);
16173
+ }
16174
+ :where([data-kit="halo"]) .tf-insight.is-highlight {
16175
+ --tint: var(--lilac);
16176
+ box-shadow:
16177
+ var(--shadow-card),
16178
+ inset 3px 0 0 var(--lilac-ink);
16179
+ }
16180
+ :where([data-kit="halo"]) .tf-insight-head {
16181
+ display: flex;
16182
+ align-items: flex-start;
16183
+ gap: 12px;
16184
+ }
16185
+ :where([data-kit="halo"]) .tf-insight-titles {
16186
+ display: flex;
16187
+ flex: 1;
16188
+ flex-direction: column;
16189
+ min-width: 0;
16190
+ }
16191
+ :where([data-kit="halo"]) .tf-insight-titles small {
16192
+ font: 600 12px/16px var(--font-sans);
16193
+ color: var(--ink-muted);
16194
+ }
16195
+ :where([data-kit="halo"]) .tf-insight-titles b {
16196
+ font: 700 15px/22px var(--font-sans);
16197
+ overflow-wrap: anywhere;
16198
+ }
16199
+ :where([data-kit="halo"]) .tf-insight-body {
16200
+ font: 500 14px/20px var(--font-sans);
16201
+ color: var(--ink);
16202
+ }
16203
+ :where([data-kit="halo"]) .tf-insight-why button {
16204
+ display: inline-flex;
16205
+ align-items: center;
16206
+ gap: 6px;
16207
+ min-height: 24px;
16208
+ padding: 0;
16209
+ border: 0;
16210
+ background: none;
16211
+ color: var(--ink-muted);
16212
+ font: 600 12px/16px var(--font-sans);
16213
+ cursor: pointer;
16214
+ }
16215
+ :where([data-kit="halo"]) .tf-insight-why button:hover {
16216
+ color: var(--ink);
16217
+ }
16218
+ :where([data-kit="halo"]) .tf-insight-why button:focus-visible {
16219
+ outline: 2px solid var(--focus);
16220
+ outline-offset: 2px;
16221
+ border-radius: var(--radius-sm);
16222
+ }
16223
+ :where([data-kit="halo"]) .tf-insight-why button[aria-expanded="true"] .tf-insight-chev {
16224
+ rotate: 180deg;
16225
+ }
16226
+ :where([data-kit="halo"]) .tf-insight-whytext {
16227
+ margin-top: 8px;
16228
+ padding: 12px;
16229
+ border-radius: var(--radius-md);
16230
+ background: var(--surface-sunken);
16231
+ font: 500 13px/18px var(--font-sans);
16232
+ color: var(--ink-muted);
16233
+ }
16234
+ :where([data-kit="halo"]) .tf-insight-actions {
16235
+ display: flex;
16236
+ flex-wrap: wrap;
16237
+ justify-content: flex-end;
16238
+ gap: 8px;
16239
+ }
16240
+
16241
+ /* ConsentList */
16242
+ :where([data-kit="halo"]) .tf-consent {
16243
+ display: flex;
16244
+ flex-direction: column;
16245
+ gap: 12px;
16246
+ min-width: 0;
16247
+ }
16248
+ :where([data-kit="halo"]) .tf-consent-item {
16249
+ display: flex;
16250
+ flex-direction: column;
16251
+ gap: 12px;
16252
+ padding: 16px;
16253
+ border-radius: var(--radius-lg);
16254
+ background: var(--surface);
16255
+ box-shadow: var(--shadow-card);
16256
+ }
16257
+ :where([data-kit="halo"]) .tf-consent-head {
16258
+ display: flex;
16259
+ flex-wrap: wrap;
16260
+ align-items: center;
16261
+ gap: 12px;
16262
+ }
16263
+ :where([data-kit="halo"]) .tf-consent-head .tf-option-text {
16264
+ flex: 1;
16265
+ min-width: 140px;
16266
+ padding: 0;
16267
+ }
16268
+ :where([data-kit="halo"]) .tf-consent-purpose {
16269
+ margin: 0;
16270
+ font: 500 13px/18px var(--font-sans);
16271
+ color: var(--ink-muted);
16272
+ }
16273
+ :where([data-kit="halo"]) .tf-consent-scopes {
16274
+ display: flex;
16275
+ flex-direction: column;
16276
+ margin: 0;
16277
+ padding: 0;
16278
+ list-style: none;
16279
+ }
16280
+ :where([data-kit="halo"]) .tf-consent-scopes li {
16281
+ display: flex;
16282
+ align-items: center;
16283
+ justify-content: space-between;
16284
+ gap: 12px;
16285
+ padding: 10px 0;
16286
+ border-top: 1px solid var(--line);
16287
+ }
16288
+ :where([data-kit="halo"]) .tf-consent-scopes .tf-option-text {
16289
+ min-width: 0;
16290
+ padding: 0;
16291
+ }
16292
+ :where([data-kit="halo"]) .tf-consent-req {
16293
+ flex: none;
16294
+ font: 600 12px/16px var(--font-sans);
16295
+ color: var(--ink-muted);
16296
+ }
16297
+
16298
+ /* 12-household.css */
16299
+ /* Life: budgets, subscriptions, net worth, deadlines, policies, coverage, claims, documents */
16300
+
16301
+ /* BudgetList */
16302
+ :where([data-kit="halo"]) .tf-budgets,
16303
+ :where([data-kit="halo"]) .tf-subs ul,
16304
+ :where([data-kit="halo"]) .tf-deadlines,
16305
+ :where([data-kit="halo"]) .tf-docs,
16306
+ :where([data-kit="halo"]) .tf-claim-steps,
16307
+ :where([data-kit="halo"]) .tf-nw-side ul {
16308
+ margin: 0;
16309
+ padding: 0;
16310
+ list-style: none;
16311
+ }
16312
+ :where([data-kit="halo"]) .tf-budgets {
16313
+ display: flex;
16314
+ flex-direction: column;
16315
+ gap: 4px;
16316
+ min-width: 0;
16317
+ }
16318
+ :where([data-kit="halo"]) .tf-budget {
16319
+ container: tf-budget / inline-size;
16320
+ display: flex;
16321
+ align-items: center;
16322
+ gap: 12px;
16323
+ width: 100%;
16324
+ padding: 10px 12px;
16325
+ box-sizing: border-box;
16326
+ border: 0;
16327
+ border-radius: var(--radius-md);
16328
+ background: transparent;
16329
+ color: var(--ink);
16330
+ font: inherit;
16331
+ text-align: left;
16332
+ }
16333
+ :where([data-kit="halo"]) button.tf-budget {
16334
+ cursor: pointer;
16335
+ }
16336
+ :where([data-kit="halo"]) button.tf-budget:hover {
16337
+ background: var(--accent);
16338
+ }
16339
+ :where([data-kit="halo"]) button.tf-budget:focus-visible {
16340
+ outline: 2px solid var(--focus);
16341
+ outline-offset: 2px;
16342
+ }
16343
+ :where([data-kit="halo"]) .tf-budget-main {
16344
+ display: flex;
16345
+ flex: 1;
16346
+ flex-direction: column;
16347
+ gap: 6px;
16348
+ min-width: 0;
16349
+ }
16350
+ :where([data-kit="halo"]) .tf-budget-top {
16351
+ display: flex;
16352
+ flex-wrap: wrap;
16353
+ align-items: baseline;
16354
+ justify-content: space-between;
16355
+ gap: 0 12px;
16356
+ }
16357
+ /* narrow: the icon steps aside so the category keeps its name */
16358
+ @container tf-budget (max-width: 300px) {
16359
+ :where([data-kit="halo"]) .tf-budget > .tf-tinticon {
16360
+ display: none;
16361
+ }
16362
+ }
16363
+ :where([data-kit="halo"]) .tf-budget-top b {
16364
+ min-width: 0;
16365
+ overflow: hidden;
16366
+ text-overflow: ellipsis;
16367
+ white-space: nowrap;
16368
+ font: 600 14px/20px var(--font-sans);
16369
+ }
16370
+ :where([data-kit="halo"]) .tf-budget-nums {
16371
+ flex: none;
16372
+ font: 700 13px/18px var(--font-sans);
16373
+ font-variant-numeric: tabular-nums;
16374
+ }
16375
+ :where([data-kit="halo"]) .tf-budget-nums small {
16376
+ font-weight: 500;
16377
+ color: var(--ink-muted);
16378
+ }
16379
+ :where([data-kit="halo"]) .tf-budget-bar {
16380
+ display: block;
16381
+ height: 8px;
16382
+ overflow: hidden;
16383
+ border-radius: var(--radius-pill);
16384
+ background: var(--surface-sunken);
16385
+ }
16386
+ :where([data-kit="halo"]) .tf-budget-bar > span {
16387
+ display: block;
16388
+ height: 100%;
16389
+ border-radius: var(--radius-pill);
16390
+ }
16391
+ :where([data-kit="halo"]) .tf-budget-left {
16392
+ font: 500 12px/16px var(--font-sans);
16393
+ color: var(--ink-muted);
16394
+ }
16395
+ :where([data-kit="halo"]) .tf-budget-left.over {
16396
+ color: var(--blush-ink);
16397
+ font-weight: 600;
16398
+ }
16399
+
16400
+ /* SubscriptionList */
16401
+ :where([data-kit="halo"]) .tf-subs {
16402
+ display: flex;
16403
+ flex-direction: column;
16404
+ gap: 8px;
16405
+ min-width: 0;
16406
+ }
16407
+ :where([data-kit="halo"]) .tf-subs ul {
16408
+ container: tf-subs / inline-size;
16409
+ display: flex;
16410
+ flex-direction: column;
16411
+ }
16412
+ :where([data-kit="halo"]) .tf-sub {
16413
+ display: flex;
16414
+ align-items: center;
16415
+ gap: 12px;
16416
+ padding: 10px 4px;
16417
+ border-bottom: 1px solid var(--line);
16418
+ }
16419
+ :where([data-kit="halo"]) .tf-sub:last-child {
16420
+ border-bottom: 0;
16421
+ }
16422
+ :where([data-kit="halo"]) .tf-sub-text {
16423
+ display: flex;
16424
+ flex: 1;
16425
+ flex-direction: column;
16426
+ min-width: 0;
16427
+ }
16428
+ :where([data-kit="halo"]) .tf-sub-text b {
16429
+ overflow: hidden;
16430
+ text-overflow: ellipsis;
16431
+ white-space: nowrap;
16432
+ font: 600 14px/20px var(--font-sans);
16433
+ }
16434
+ :where([data-kit="halo"]) .tf-sub-text small {
16435
+ font: 500 12px/16px var(--font-sans);
16436
+ color: var(--ink-muted);
16437
+ }
16438
+ :where([data-kit="halo"]) .tf-sub-amount {
16439
+ flex: none;
16440
+ font: 700 14px/20px var(--font-sans);
16441
+ font-variant-numeric: tabular-nums;
16442
+ text-align: right;
16443
+ }
16444
+ :where([data-kit="halo"]) .tf-sub-amount small {
16445
+ margin-left: 2px;
16446
+ font-weight: 500;
16447
+ color: var(--ink-muted);
16448
+ }
16449
+ /* narrow: amount and trial badge go under the name, the menu stays at the end */
16450
+ @container tf-subs (max-width: 380px) {
16451
+ :where([data-kit="halo"]) .tf-sub {
16452
+ display: grid;
16453
+ grid-template-columns: auto minmax(0, 1fr) auto;
16454
+ gap: 4px 12px;
16455
+ align-items: center;
16456
+ }
16457
+ :where([data-kit="halo"]) .tf-sub > :first-child {
16458
+ grid-row: 1 / span 2;
16459
+ align-self: start;
16460
+ }
16461
+ :where([data-kit="halo"]) .tf-sub > .tf-sub-text,
16462
+ :where([data-kit="halo"]) .tf-sub > .tf-badge,
16463
+ :where([data-kit="halo"]) .tf-sub > .tf-sub-amount {
16464
+ grid-column: 2;
16465
+ justify-self: start;
16466
+ text-align: left;
16467
+ }
16468
+ :where([data-kit="halo"]) .tf-sub > :last-child:not(.tf-sub-amount) {
16469
+ grid-column: 3;
16470
+ grid-row: 1;
16471
+ }
16472
+ }
16473
+ :where([data-kit="halo"]) .tf-sub.is-cancelled .tf-sub-text b,
16474
+ :where([data-kit="halo"]) .tf-sub.is-cancelled .tf-sub-amount {
16475
+ color: var(--ink-muted);
16476
+ text-decoration: line-through;
16477
+ }
16478
+ :where([data-kit="halo"]) .tf-subs-total {
16479
+ display: flex;
16480
+ flex-wrap: wrap;
16481
+ align-items: baseline;
16482
+ justify-content: space-between;
16483
+ gap: 4px 12px;
16484
+ padding: 12px;
16485
+ border-radius: var(--radius-md);
16486
+ background: var(--surface-sunken);
16487
+ font: 500 13px/18px var(--font-sans);
16488
+ color: var(--ink-muted);
16489
+ }
16490
+ :where([data-kit="halo"]) .tf-subs-total b {
16491
+ color: var(--ink);
16492
+ font: 700 15px/20px var(--font-sans);
16493
+ }
16494
+
16495
+ /* NetWorthCard */
16496
+ :where([data-kit="halo"]) .tf-nw {
16497
+ display: flex;
16498
+ flex-direction: column;
16499
+ gap: 16px;
16500
+ min-width: 0;
16501
+ padding: 20px;
16502
+ border-radius: var(--radius-lg);
16503
+ background: var(--surface);
16504
+ box-shadow: var(--shadow-card);
16505
+ }
16506
+ :where([data-kit="halo"]) .tf-nw-head {
16507
+ display: flex;
16508
+ flex-wrap: wrap;
16509
+ align-items: flex-end;
16510
+ justify-content: space-between;
16511
+ gap: 12px;
16512
+ }
16513
+ :where([data-kit="halo"]) .tf-nw-head > :first-child {
16514
+ flex: 1 1 200px;
16515
+ }
16516
+ :where([data-kit="halo"]) .tf-nw-head > :last-child:not(:first-child) {
16517
+ flex: none;
16518
+ max-width: 45%;
16519
+ }
16520
+ :where([data-kit="halo"]) .tf-nw-title {
16521
+ font: 600 13px/18px var(--font-sans);
16522
+ color: var(--ink-muted);
16523
+ }
16524
+ :where([data-kit="halo"]) .tf-nw-total {
16525
+ font: 700 32px/38px var(--font-sans);
16526
+ letter-spacing: -0.02em;
16527
+ font-variant-numeric: tabular-nums;
16528
+ }
16529
+ :where([data-kit="halo"]) .tf-nw-change {
16530
+ display: inline-flex;
16531
+ align-items: center;
16532
+ gap: 4px;
16533
+ font: 600 12px/16px var(--font-sans);
16534
+ color: var(--mint-ink);
16535
+ }
16536
+ :where([data-kit="halo"]) .tf-nw-change.down {
16537
+ color: var(--blush-ink);
16538
+ }
16539
+ :where([data-kit="halo"]) .tf-nw-change.down .tf-ico {
16540
+ rotate: 180deg;
16541
+ }
16542
+ :where([data-kit="halo"]) .tf-nw-change span {
16543
+ font-weight: 500;
16544
+ color: var(--ink-muted);
16545
+ }
16546
+ :where([data-kit="halo"]) .tf-nw-sides {
16547
+ display: grid;
16548
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
16549
+ gap: 16px;
16550
+ }
16551
+ :where([data-kit="halo"]) .tf-nw-side {
16552
+ display: flex;
16553
+ flex-direction: column;
16554
+ gap: 8px;
16555
+ min-width: 0;
16556
+ }
16557
+ :where([data-kit="halo"]) .tf-nw-sidehead {
16558
+ display: flex;
16559
+ justify-content: space-between;
16560
+ gap: 8px;
16561
+ padding-bottom: 8px;
16562
+ border-bottom: 1px solid var(--line);
16563
+ font: 600 12px/16px var(--font-sans);
16564
+ color: var(--ink-muted);
16565
+ }
16566
+ :where([data-kit="halo"]) .tf-nw-sidehead b {
16567
+ color: var(--ink);
16568
+ font-variant-numeric: tabular-nums;
16569
+ }
16570
+ :where([data-kit="halo"]) .tf-nw-side li {
16571
+ display: flex;
16572
+ justify-content: space-between;
16573
+ gap: 8px;
16574
+ padding: 4px 0;
16575
+ font: 500 13px/18px var(--font-sans);
16576
+ }
16577
+ :where([data-kit="halo"]) .tf-nw-side li span:first-child {
16578
+ display: inline-flex;
16579
+ align-items: center;
16580
+ gap: 6px;
16581
+ min-width: 0;
16582
+ color: var(--ink-muted);
16583
+ }
16584
+ :where([data-kit="halo"]) .tf-nw-side li span:last-child {
16585
+ font-variant-numeric: tabular-nums;
16586
+ }
16587
+
16588
+ /* DeadlineList */
16589
+ :where([data-kit="halo"]) .tf-deadlines {
16590
+ display: flex;
16591
+ flex-direction: column;
16592
+ gap: 4px;
16593
+ min-width: 0;
16594
+ }
16595
+ :where([data-kit="halo"]) .tf-deadline {
16596
+ display: flex;
16597
+ flex-wrap: wrap;
16598
+ align-items: center;
16599
+ gap: 8px 12px;
16600
+ padding: 8px 12px;
16601
+ border-radius: var(--radius-md);
16602
+ }
16603
+ :where([data-kit="halo"]) .tf-deadline.is-overdue {
16604
+ background: var(--blush);
16605
+ }
16606
+ :where([data-kit="halo"]) .tf-deadline.is-soon {
16607
+ background: var(--surface-sunken);
16608
+ }
16609
+ :where([data-kit="halo"]) .tf-deadline-date {
16610
+ display: flex;
16611
+ flex: none;
16612
+ flex-direction: column;
16613
+ align-items: center;
16614
+ width: 40px;
16615
+ padding: 4px 0;
16616
+ border-radius: var(--radius-sm);
16617
+ background: var(--surface);
16618
+ box-shadow: inset 0 0 0 1px var(--line);
16619
+ }
16620
+ :where([data-kit="halo"]) .tf-deadline-date b {
16621
+ font: 700 16px/20px var(--font-sans);
16622
+ font-variant-numeric: tabular-nums;
16623
+ }
16624
+ :where([data-kit="halo"]) .tf-deadline-date small {
16625
+ font: 600 10px/12px var(--font-sans);
16626
+ text-transform: uppercase;
16627
+ color: var(--ink-muted);
16628
+ }
16629
+ :where([data-kit="halo"]) .tf-deadline-text {
16630
+ display: flex;
16631
+ flex: 1 1 160px;
16632
+ flex-direction: column;
16633
+ min-width: 0;
16634
+ }
16635
+ :where([data-kit="halo"]) .tf-deadline-text b {
16636
+ font: 600 14px/20px var(--font-sans);
16637
+ overflow-wrap: break-word;
16638
+ }
16639
+ :where([data-kit="halo"]) .tf-deadline-text small {
16640
+ font: 500 12px/16px var(--font-sans);
16641
+ color: var(--ink-muted);
16642
+ }
16643
+ :where([data-kit="halo"]) .tf-deadline-amount {
16644
+ font: 700 13px/18px var(--font-sans);
16645
+ font-variant-numeric: tabular-nums;
16646
+ }
16647
+ :where([data-kit="halo"]) .tf-deadline.is-done .tf-deadline-text b {
16648
+ color: var(--ink-muted);
16649
+ text-decoration: line-through;
16650
+ }
16651
+ :where([data-kit="halo"]) .tf-deadline-done {
16652
+ color: var(--mint-ink);
16653
+ }
16654
+
16655
+ /* PolicyCard */
16656
+ :where([data-kit="halo"]) .tf-policy {
16657
+ display: flex;
16658
+ flex-direction: column;
16659
+ gap: 16px;
16660
+ min-width: 0;
16661
+ padding: 20px;
16662
+ border-radius: var(--radius-lg);
16663
+ background: var(--surface);
16664
+ box-shadow: var(--shadow-card);
16665
+ }
16666
+ :where([data-kit="halo"]) .tf-policy-head {
16667
+ display: flex;
16668
+ flex-wrap: wrap;
16669
+ align-items: center;
16670
+ gap: 12px;
16671
+ }
16672
+ :where([data-kit="halo"]) .tf-policy-head .tf-option-text {
16673
+ flex: 1;
16674
+ min-width: 120px;
16675
+ padding: 0;
16676
+ }
16677
+ :where([data-kit="halo"]) .tf-policy-head b {
16678
+ font: 700 15px/20px var(--font-sans);
16679
+ }
16680
+ :where([data-kit="halo"]) .tf-policy-facts {
16681
+ display: grid;
16682
+ grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
16683
+ gap: 12px;
16684
+ margin: 0;
16685
+ }
16686
+ :where([data-kit="halo"]) .tf-policy-facts div {
16687
+ min-width: 0;
16688
+ }
16689
+ :where([data-kit="halo"]) .tf-policy-facts dt {
16690
+ font: 600 11px/14px var(--font-sans);
16691
+ letter-spacing: 0.04em;
16692
+ text-transform: uppercase;
16693
+ color: var(--ink-muted);
16694
+ }
16695
+ :where([data-kit="halo"]) .tf-policy-facts dd {
16696
+ margin: 2px 0 0;
16697
+ font: 700 15px/20px var(--font-sans);
16698
+ font-variant-numeric: tabular-nums;
16699
+ overflow-wrap: break-word;
16700
+ }
16701
+ :where([data-kit="halo"]) .tf-policy-foot {
16702
+ display: flex;
16703
+ flex-wrap: wrap;
16704
+ align-items: center;
16705
+ justify-content: space-between;
16706
+ gap: 8px;
16707
+ padding-top: 12px;
16708
+ border-top: 1px solid var(--line);
16709
+ font: 500 12px/16px var(--font-sans);
16710
+ color: var(--ink-muted);
16711
+ }
16712
+ :where([data-kit="halo"]) .tf-policy-actions {
16713
+ display: inline-flex;
16714
+ flex-wrap: wrap;
16715
+ gap: 8px;
16716
+ }
16717
+
16718
+ /* CoverageMatrix */
16719
+ :where([data-kit="halo"]) .tf-coverage {
16720
+ display: flex;
16721
+ flex-direction: column;
16722
+ gap: 12px;
16723
+ min-width: 0;
16724
+ }
16725
+ :where([data-kit="halo"]) .tf-coverage-sum {
16726
+ display: flex;
16727
+ flex-wrap: wrap;
16728
+ gap: 8px 16px;
16729
+ }
16730
+ :where([data-kit="halo"]) .tf-coverage-box {
16731
+ container: tf-coverage / inline-size;
16732
+ }
16733
+ :where([data-kit="halo"]) .tf-coverage-table {
16734
+ width: 100%;
16735
+ border-collapse: collapse;
16736
+ }
16737
+ :where([data-kit="halo"]) .tf-coverage-table th,
16738
+ :where([data-kit="halo"]) .tf-coverage-table td {
16739
+ padding: 10px 8px;
16740
+ border-top: 1px solid var(--line);
16741
+ text-align: left;
16742
+ vertical-align: middle;
16743
+ }
16744
+ :where([data-kit="halo"]) .tf-coverage-table th {
16745
+ font-weight: inherit;
16746
+ }
16747
+ :where([data-kit="halo"]) .tf-coverage-table th b {
16748
+ display: block;
16749
+ font: 600 14px/20px var(--font-sans);
16750
+ }
16751
+ :where([data-kit="halo"]) .tf-coverage-table th small {
16752
+ font: 500 12px/16px var(--font-sans);
16753
+ color: var(--ink-muted);
16754
+ }
16755
+ :where([data-kit="halo"]) .tf-coverage-table td:nth-child(2) {
16756
+ white-space: nowrap;
16757
+ }
16758
+ :where([data-kit="halo"]) .tf-coverage-note {
16759
+ font: 500 13px/18px var(--font-sans);
16760
+ color: var(--ink-muted);
16761
+ }
16762
+ :where([data-kit="halo"]) .tf-coverage-table tr.is-none th b {
16763
+ color: var(--blush-ink);
16764
+ }
16765
+ /* narrow: each risk becomes a block, its status top right, the note underneath */
16766
+ @container tf-coverage (max-width: 440px) {
16767
+ :where([data-kit="halo"]) .tf-coverage-table,
16768
+ :where([data-kit="halo"]) .tf-coverage-table tbody {
16769
+ display: block;
16770
+ }
16771
+ :where([data-kit="halo"]) .tf-coverage-table tr {
16772
+ display: grid;
16773
+ grid-template-columns: minmax(0, 1fr) auto;
16774
+ gap: 4px 12px;
16775
+ padding: 10px 4px;
16776
+ border-top: 1px solid var(--line);
16777
+ }
16778
+ :where([data-kit="halo"]) .tf-coverage-table th,
16779
+ :where([data-kit="halo"]) .tf-coverage-table td {
16780
+ padding: 0;
16781
+ border-top: 0;
16782
+ }
16783
+ :where([data-kit="halo"]) .tf-coverage-table td.tf-coverage-note {
16784
+ grid-column: 1 / -1;
16785
+ }
16786
+ }
16787
+
16788
+ /* ClaimTimeline */
16789
+ :where([data-kit="halo"]) .tf-claim {
16790
+ display: flex;
16791
+ flex-direction: column;
16792
+ gap: 16px;
16793
+ min-width: 0;
16794
+ }
16795
+ :where([data-kit="halo"]) .tf-claim-head {
16796
+ display: flex;
16797
+ flex-wrap: wrap;
16798
+ align-items: flex-start;
16799
+ justify-content: space-between;
16800
+ gap: 12px;
16801
+ }
16802
+ :where([data-kit="halo"]) .tf-claim-head .tf-option-text {
16803
+ padding: 0;
16804
+ }
16805
+ :where([data-kit="halo"]) .tf-claim-head b {
16806
+ font: 700 15px/20px var(--font-sans);
16807
+ }
16808
+ :where([data-kit="halo"]) .tf-claim-amount {
16809
+ display: flex;
16810
+ flex-direction: column;
16811
+ align-items: flex-end;
16812
+ font: 700 18px/24px var(--font-sans);
16813
+ font-variant-numeric: tabular-nums;
16814
+ }
16815
+ :where([data-kit="halo"]) .tf-claim-amount small {
16816
+ font: 600 11px/14px var(--font-sans);
16817
+ color: var(--ink-muted);
16818
+ }
16819
+ :where([data-kit="halo"]) .tf-claim-steps {
16820
+ display: flex;
16821
+ flex-direction: column;
16822
+ }
16823
+ :where([data-kit="halo"]) .tf-claim-steps li {
16824
+ position: relative;
16825
+ display: flex;
16826
+ gap: 12px;
16827
+ padding-bottom: 16px;
16828
+ }
16829
+ :where([data-kit="halo"]) .tf-claim-steps li:last-child {
16830
+ padding-bottom: 0;
16831
+ }
16832
+ :where([data-kit="halo"]) .tf-claim-steps li:not(:last-child)::before {
16833
+ content: "";
16834
+ position: absolute;
16835
+ top: 20px;
16836
+ bottom: 0;
16837
+ left: 9px;
16838
+ width: 2px;
16839
+ background: var(--line);
16840
+ }
16841
+ :where([data-kit="halo"]) .tf-claim-steps li.is-done:not(:last-child)::before {
16842
+ background: var(--mint-ink);
16843
+ }
16844
+ :where([data-kit="halo"]) .tf-claim-dot {
16845
+ position: relative;
16846
+ display: grid;
16847
+ place-items: center;
16848
+ flex: none;
16849
+ width: 20px;
16850
+ height: 20px;
16851
+ box-sizing: border-box;
16852
+ border: 2px solid var(--line-strong);
16853
+ border-radius: 50%;
16854
+ background: var(--surface);
16855
+ color: var(--primary-foreground);
16856
+ }
16857
+ :where([data-kit="halo"]) .tf-claim-steps li.is-done .tf-claim-dot {
16858
+ border-color: var(--mint-ink);
16859
+ background: var(--mint-ink);
16860
+ }
16861
+ :where([data-kit="halo"]) .tf-claim-steps li.is-current .tf-claim-dot {
16862
+ border-color: var(--primary);
16863
+ box-shadow: 0 0 0 4px var(--accent);
16864
+ }
16865
+ :where([data-kit="halo"]) .tf-claim-steps li.is-failed .tf-claim-dot {
16866
+ border-color: var(--blush-ink);
16867
+ background: var(--blush-ink);
16868
+ }
16869
+ :where([data-kit="halo"]) .tf-claim-text {
16870
+ display: flex;
16871
+ flex-direction: column;
16872
+ min-width: 0;
16873
+ }
16874
+ :where([data-kit="halo"]) .tf-claim-text b {
16875
+ font: 600 14px/20px var(--font-sans);
16876
+ }
16877
+ :where([data-kit="halo"]) .tf-claim-steps li.is-todo .tf-claim-text b {
16878
+ color: var(--ink-muted);
16879
+ font-weight: 500;
16880
+ }
16881
+ :where([data-kit="halo"]) .tf-claim-text small {
16882
+ font: 500 12px/16px var(--font-sans);
16883
+ color: var(--ink-muted);
16884
+ }
16885
+
16886
+ /* DocumentList */
16887
+ :where([data-kit="halo"]) .tf-docs {
16888
+ display: flex;
16889
+ flex-direction: column;
16890
+ gap: 4px;
16891
+ min-width: 0;
16892
+ }
16893
+ :where([data-kit="halo"]) .tf-doc {
16894
+ display: flex;
16895
+ flex-wrap: wrap;
16896
+ align-items: center;
16897
+ gap: 8px 12px;
16898
+ width: 100%;
16899
+ padding: 10px 12px;
16900
+ box-sizing: border-box;
16901
+ border: 0;
16902
+ border-radius: var(--radius-md);
16903
+ background: transparent;
16904
+ color: var(--ink);
16905
+ font: inherit;
16906
+ text-align: left;
16907
+ }
16908
+ :where([data-kit="halo"]) button.tf-doc {
16909
+ cursor: pointer;
16910
+ }
16911
+ :where([data-kit="halo"]) button.tf-doc:hover {
16912
+ background: var(--accent);
16913
+ }
16914
+ :where([data-kit="halo"]) button.tf-doc:focus-visible {
16915
+ outline: 2px solid var(--focus);
16916
+ outline-offset: 2px;
16917
+ }
16918
+ :where([data-kit="halo"]) .tf-doc-text {
16919
+ display: flex;
16920
+ flex: 1 1 160px;
16921
+ flex-direction: column;
16922
+ min-width: 0;
16923
+ }
16924
+ :where([data-kit="halo"]) .tf-doc-text b {
16925
+ font: 600 14px/20px var(--font-sans);
16926
+ overflow-wrap: break-word;
16927
+ }
16928
+ :where([data-kit="halo"]) .tf-doc-text small,
16929
+ :where([data-kit="halo"]) .tf-doc-valid {
16930
+ font: 500 12px/16px var(--font-sans);
16931
+ color: var(--ink-muted);
16932
+ }