@threadlabs/looma 0.39.0 → 0.39.2

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.
@@ -1115,6 +1115,8 @@ svg,.arc {
1115
1115
  /* A count is an adornment, not another line of label text. Keep the standard control height
1116
1116
  with enough inset for a 24px mark; large content can still grow the button naturally. */
1117
1117
 
1118
+ /* Trim the text line itself: an anonymous flex item retains font-metric space in some fonts. */
1119
+
1118
1120
  /* Short numeric and icon actions share a minimum box; large values remain readable. */
1119
1121
 
1120
1122
  /* Card actions inherit Button's palette and behavior; only their shared layout changes.
@@ -1204,6 +1206,7 @@ svg,.arc {
1204
1206
  }
1205
1207
  :scope:where([data-hn-ui-button]) {
1206
1208
  --_button-square-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
1209
+ box-sizing: border-box !important;
1207
1210
  appearance: none;
1208
1211
  min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
1209
1212
  border-style: solid;
@@ -1244,6 +1247,18 @@ svg,.arc {
1244
1247
  :scope:not([data-appearance="link"]):has(.badge:not(:empty)):where([data-hn-ui-button]) {
1245
1248
  padding-block: var(--ui-space-0-5) !important;
1246
1249
  }
1250
+ .label:where([data-hn-ui-button]) {
1251
+ display: block !important;
1252
+ align-content: center !important;
1253
+ min-inline-size: 0 !important;
1254
+ min-block-size: 1lh !important;
1255
+ }
1256
+ .label:has(svg):where([data-hn-ui-button]) {
1257
+ display: inline-flex !important;
1258
+ align-items: center !important;
1259
+ gap: var(--ui-space-2) !important;
1260
+ text-box-trim: none;
1261
+ }
1247
1262
  .badge:where([data-hn-ui-button]) {
1248
1263
  display: inline-flex !important;
1249
1264
  align-items: center !important;
@@ -1253,7 +1268,7 @@ svg,.arc {
1253
1268
  display: none !important;
1254
1269
  }
1255
1270
  @supports (text-box-trim: trim-both) {
1256
- :scope:where([data-hn-ui-button]) {
1271
+ .label:not(:has(svg)):where([data-hn-ui-button]) {
1257
1272
  text-box-trim: trim-both;
1258
1273
  text-box-edge: cap alphabetic;
1259
1274
  }
@@ -1545,6 +1560,10 @@ html[data-ui-input-modality="touch"]
1545
1560
  color var(--ui-motion-fast) var(--ui-motion-ease),
1546
1561
  text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
1547
1562
  }
1563
+ :scope[data-appearance="link"] .label:where([data-hn-ui-button]) {
1564
+ display: inline !important;
1565
+ text-box-trim: none;
1566
+ }
1548
1567
  :scope[data-appearance="link"]:hover:not(:disabled, [aria-disabled="true"]):where([data-hn-ui-button]) {
1549
1568
  color: var(--ui-button-link-hover-text, var(--ui-text-primary));
1550
1569
  text-decoration-color: currentColor;
@@ -1908,19 +1927,20 @@ html[data-ui-input-modality="touch"]
1908
1927
 
1909
1928
  /* The label, and under it an optional line saying what the choice means. */
1910
1929
 
1911
- /* Centre the tick's box and lift it slightly for the rotated check shape. */
1912
- @keyframes ui-checkbox-check-d551a32f {
1930
+ /* The SVG's painted bounds are centred in its viewBox, including its round stroke.
1931
+ Centre that box directly; rotated border boxes do not centre the visible check. */
1932
+ @keyframes ui-checkbox-check-570a9f0b {
1913
1933
  from {
1914
1934
  opacity: 0;
1915
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(0.55);
1935
+ scale: 0.55;
1916
1936
  }
1917
1937
  65% {
1918
1938
  opacity: 1;
1919
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(1.12);
1939
+ scale: 1.12;
1920
1940
  }
1921
1941
  to {
1922
1942
  opacity: 1;
1923
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(1);
1943
+ scale: 1;
1924
1944
  }
1925
1945
  }
1926
1946
 
@@ -2008,7 +2028,8 @@ input:where([data-hn-ui-checkbox]) {
2008
2028
  }
2009
2029
  input:where([data-hn-ui-checkbox])::after {
2010
2030
  content: "";
2011
- position: absolute;
2031
+ position: absolute !important;
2032
+ transform: none !important;
2012
2033
  opacity: 0;
2013
2034
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
2014
2035
  }
@@ -2019,27 +2040,26 @@ input:checked:where([data-hn-ui-checkbox]),input:indeterminate:where([data-hn-ui
2019
2040
  box-shadow: var(--ui-control-inset);
2020
2041
  }
2021
2042
  input:checked:where([data-hn-ui-checkbox])::after {
2022
- inset: 0;
2023
- margin: auto !important;
2024
- inline-size: calc(var(--_ui-checkbox-size) * 0.28 / 1.125);
2025
- block-size: calc(var(--_ui-checkbox-size) * 0.5 / 1.125);
2026
- /* Longhands, not `border: solid var(...)`: lowering drops a shorthand that omits a
2027
- component, which left the tick with no style and no colour. */
2028
- border-style: solid;
2029
- border-color: var(--ui-text-on-accent);
2030
- border-width: 0 calc(var(--_ui-checkbox-size) * 0.125 / 1.125)
2031
- calc(var(--_ui-checkbox-size) * 0.125 / 1.125) 0;
2043
+ inset: 50% auto auto 50% !important;
2044
+ inline-size: calc(var(--_ui-checkbox-size) * 0.7) !important;
2045
+ block-size: calc(var(--_ui-checkbox-size) * 0.7) !important;
2046
+ background: var(--ui-text-on-accent);
2047
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 11.5 5 5 9-9'/%3E%3C/svg%3E")
2048
+ center / contain no-repeat;
2032
2049
  opacity: 1;
2033
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg);
2034
- animation: ui-checkbox-check-d551a32f var(--ui-motion-base) var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
2050
+ translate: -50% -50% !important;
2051
+ animation: ui-checkbox-check-570a9f0b var(--ui-motion-base) var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
2035
2052
  }
2036
2053
  input:indeterminate:where([data-hn-ui-checkbox])::after {
2037
- inset: 50% calc(var(--_ui-checkbox-size) * 0.23 / 1.125) auto;
2038
- block-size: calc(var(--_ui-checkbox-size) * 0.125 / 1.125);
2054
+ mask: none;
2055
+ animation: none;
2056
+ inset: 50% calc(var(--_ui-checkbox-size) * 0.23 / 1.125) auto !important;
2057
+ inline-size: auto !important;
2058
+ block-size: calc(var(--_ui-checkbox-size) * 0.125 / 1.125) !important;
2039
2059
  border-radius: var(--ui-radius-round);
2040
2060
  background: var(--ui-text-on-accent);
2041
2061
  opacity: 1;
2042
- transform: translateY(-50%);
2062
+ translate: 0 -50% !important;
2043
2063
  }
2044
2064
  @media (prefers-reduced-motion: reduce) {
2045
2065
  input:where([data-hn-ui-checkbox])::after {
@@ -2047,6 +2067,17 @@ input:where([data-hn-ui-checkbox])::after {
2047
2067
  animation: none;
2048
2068
  }
2049
2069
  }
2070
+ @media (forced-colors: active) {
2071
+ input:checked:where([data-hn-ui-checkbox]),input:indeterminate:where([data-hn-ui-checkbox]) {
2072
+ forced-color-adjust: none;
2073
+ background: Highlight;
2074
+ border-color: Highlight;
2075
+ }
2076
+ input:checked:where([data-hn-ui-checkbox])::after,input:indeterminate:where([data-hn-ui-checkbox])::after {
2077
+ forced-color-adjust: none;
2078
+ background: HighlightText;
2079
+ }
2080
+ }
2050
2081
  input:hover:enabled:where([data-hn-ui-checkbox]) {
2051
2082
  border-color: var(--ui-accent-solid);
2052
2083
  }
@@ -8746,6 +8777,122 @@ path:where([data-hn-ui-light-editor]) {
8746
8777
  }
8747
8778
  }
8748
8779
  }
8780
+ @scope ([data-slotted~="ui-light-editor"]:not([data-hn])) to ([data-hn], [data-slotted]) {
8781
+ :where(.ui-light-editor):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-light-editor"]))):where([data-hn-ui-light-editor]) {
8782
+ display: grid !important;
8783
+ gap: var(--ui-space-3) !important;
8784
+ min-inline-size: 0;
8785
+ padding: 0 !important;
8786
+ margin: 0 !important;
8787
+ }
8788
+ .stage:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8789
+ box-sizing: border-box !important;
8790
+ display: block !important;
8791
+ block-size: 13rem;
8792
+ padding: calc(var(--ui-control-min-block-size) / 2) !important;
8793
+ border: var(--ui-border-width) solid var(--ui-control-border);
8794
+ border-radius: var(--ui-field-radius, var(--ui-radius-md));
8795
+ background: var(--ui-neutral-surface, var(--ui-surface));
8796
+ }
8797
+ .plane:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8798
+ position: relative;
8799
+ display: block !important;
8800
+ inline-size: 100%;
8801
+ block-size: 100%;
8802
+ }
8803
+ svg:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8804
+ inline-size: 100%;
8805
+ block-size: 100%;
8806
+ overflow: visible;
8807
+ }
8808
+ path:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8809
+ fill: none;
8810
+ stroke: var(--ui-border);
8811
+ stroke-width: 1;
8812
+ vector-effect: non-scaling-stroke;
8813
+ }
8814
+ .specimen:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8815
+ position: absolute;
8816
+ inset: 0;
8817
+ display: grid !important;
8818
+ place-items: center !important;
8819
+ }
8820
+ .source:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8821
+ position: absolute;
8822
+ left: 50%;
8823
+ top: 0;
8824
+ translate: -50% -50%;
8825
+ display: grid !important;
8826
+ place-items: center !important;
8827
+ inline-size: max(2rem, var(--ui-control-min-block-size));
8828
+ block-size: max(2rem, var(--ui-control-min-block-size));
8829
+ padding: 0 !important;
8830
+ margin: 0 !important;
8831
+ border: 0;
8832
+ border-radius: 50%;
8833
+ background: transparent;
8834
+ cursor: grab;
8835
+ touch-action: none;
8836
+ }
8837
+ .source-glyph:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8838
+ position: relative;
8839
+ z-index: 1;
8840
+ display: inline-flex !important;
8841
+ color: var(--ui-accent);
8842
+ font-size: var(--ui-font-size-lg);
8843
+ }
8844
+ .source:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-light-editor"]))):where(:scope, :scope
8845
+ *):where([data-hn-ui-light-editor])::after {
8846
+ content: "";
8847
+ position: absolute;
8848
+ inline-size: 2rem;
8849
+ block-size: 2rem;
8850
+ border: var(--ui-border-width) solid var(--ui-accent);
8851
+ border-radius: 50%;
8852
+ background: var(--ui-surface-raised);
8853
+ box-shadow:
8854
+ 0 0 0 var(--ui-space-2) color-mix(in srgb, var(--ui-accent) 12%, transparent),
8855
+ var(--ui-shadow-sm);
8856
+ }
8857
+ .source:active:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8858
+ cursor: grabbing;
8859
+ }
8860
+ .source:focus-visible:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8861
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
8862
+ outline-offset: var(--ui-space-1);
8863
+ }
8864
+ .source:disabled:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8865
+ cursor: not-allowed;
8866
+ }
8867
+ .source:disabled:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-light-editor"]))):where(:scope, :scope
8868
+ *):where([data-hn-ui-light-editor])::after {
8869
+ background: var(--ui-disabled-surface);
8870
+ border-color: var(--ui-disabled-border);
8871
+ box-shadow: none;
8872
+ }
8873
+ .coordinates:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8874
+ display: grid !important;
8875
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
8876
+ gap: var(--ui-space-2) !important;
8877
+ }
8878
+ .hint:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8879
+ font-size: var(--ui-font-size-sm);
8880
+ color: var(--ui-text-secondary);
8881
+ }
8882
+ @media (forced-colors: active) {
8883
+ .source-glyph:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8884
+ color: CanvasText;
8885
+ }
8886
+ .source:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-light-editor"]))):where(:scope, :scope
8887
+ *):where([data-hn-ui-light-editor])::after {
8888
+ background: Canvas;
8889
+ border-color: CanvasText;
8890
+ }
8891
+ .source:focus-visible:where(:scope, :scope *):where([data-hn-ui-light-editor]) {
8892
+ outline-color: Highlight;
8893
+ }
8894
+ }
8895
+ }
8749
8896
 
8750
8897
  /* This component's hooks style the element they are set on, and never a nested one. */
8751
8898
  @property --ui-list-gap {
@@ -10486,13 +10633,26 @@ dialog:where([data-hn-ui-search-shell]) {
10486
10633
  syntax: "*";
10487
10634
  inherits: false;
10488
10635
  }
10489
- @keyframes ui-skeleton-pulse-ee40410c {
10490
- 50% {
10491
- opacity: 0.45;
10636
+ @property --_ui-skeleton-viewport-x {
10637
+ syntax: "<length>";
10638
+ inherits: false;
10639
+ initial-value: 0px;
10640
+ }
10641
+ @property --_ui-skeleton-viewport-scale {
10642
+ syntax: "<number>";
10643
+ inherits: false;
10644
+ initial-value: 1;
10645
+ }
10646
+ @keyframes ui-skeleton-shimmer-908ae327 {
10647
+ to {
10648
+ background-position: calc(100vw / var(--_ui-skeleton-paint-scale) - var(--_ui-skeleton-paint-x))
10649
+ 0;
10492
10650
  }
10493
10651
  }
10494
10652
  @scope (.ui-skeleton) to ([data-hn]) {
10495
10653
  :scope {
10654
+ --_ui-skeleton-paint-x: var(--_ui-skeleton-viewport-x);
10655
+ --_ui-skeleton-paint-scale: var(--_ui-skeleton-viewport-scale);
10496
10656
  display: block !important;
10497
10657
  position: relative;
10498
10658
  box-sizing: border-box !important;
@@ -10529,18 +10689,31 @@ dialog:where([data-hn-ui-search-shell]) {
10529
10689
  border-radius: var(--ui-radius-md);
10530
10690
  }
10531
10691
  :scope[data-ui-skeleton-state~="animated"]::before {
10532
- animation: ui-skeleton-pulse-ee40410c 1.6s ease-in-out infinite;
10692
+ background-image: linear-gradient(
10693
+ 90deg,
10694
+ transparent,
10695
+ light-dark(rgb(255 255 255 / 0.6), rgb(255 255 255 / 0.14)) 50%,
10696
+ transparent
10697
+ );
10698
+ background-size: calc(100vw / var(--_ui-skeleton-paint-scale)) 100%;
10699
+ background-position: calc(0vw - var(--_ui-skeleton-paint-x)) 0;
10700
+ background-repeat: repeat-x;
10701
+ animation: ui-skeleton-shimmer-908ae327 3s linear infinite;
10533
10702
  }
10534
10703
  @media (prefers-reduced-motion: reduce) {
10535
10704
  :scope[data-ui-skeleton-state~="animated"]::before {
10536
10705
  animation: none;
10706
+ background-image: none;
10537
10707
  }
10538
10708
  }
10539
10709
  @media (forced-colors: active) {
10540
10710
  :scope::before {
10541
10711
  background: CanvasText;
10542
10712
  opacity: 0.2;
10713
+ }
10714
+ :scope[data-ui-skeleton-state~="animated"]::before {
10543
10715
  animation: none;
10716
+ background-image: none;
10544
10717
  }
10545
10718
  }
10546
10719
  :scope[hidden] {
@@ -13688,6 +13861,7 @@ html[data-ui-input-modality="touch"]
13688
13861
 
13689
13862
  :scope:where([data-component~="ui-button"]) {
13690
13863
  --_button-square-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
13864
+ box-sizing: border-box !important;
13691
13865
  appearance: none;
13692
13866
  min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
13693
13867
  border-style: solid;
@@ -13734,6 +13908,21 @@ html[data-ui-input-modality="touch"]
13734
13908
  padding-block: var(--ui-space-0-5) !important;
13735
13909
  }
13736
13910
 
13911
+ /* Trim the text line itself: an anonymous flex item retains font-metric space in some fonts. */
13912
+ .label {
13913
+ display: block !important;
13914
+ align-content: center !important;
13915
+ min-inline-size: 0 !important;
13916
+ min-block-size: 1lh !important;
13917
+ }
13918
+
13919
+ .label:has(svg) {
13920
+ display: inline-flex !important;
13921
+ align-items: center !important;
13922
+ gap: var(--ui-space-2) !important;
13923
+ text-box-trim: none;
13924
+ }
13925
+
13737
13926
  .badge {
13738
13927
  display: inline-flex !important;
13739
13928
  align-items: center !important;
@@ -13745,7 +13934,7 @@ html[data-ui-input-modality="touch"]
13745
13934
  }
13746
13935
 
13747
13936
  @supports (text-box-trim: trim-both) {
13748
- :scope:where([data-component~="ui-button"]) {
13937
+ .label:not(:has(svg)) {
13749
13938
  text-box-trim: trim-both;
13750
13939
  text-box-edge: cap alphabetic;
13751
13940
  }
@@ -14073,6 +14262,11 @@ html[data-ui-input-modality="touch"]
14073
14262
  transition: color var(--ui-motion-fast) var(--ui-motion-ease), text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
14074
14263
  }
14075
14264
 
14265
+ :scope:where([data-component~="ui-button"])[data-appearance="link"] .label {
14266
+ display: inline !important;
14267
+ text-box-trim: none;
14268
+ }
14269
+
14076
14270
  :scope:where([data-component~="ui-button"])[data-appearance="link"]:hover:not(:disabled, [aria-disabled="true"]) {
14077
14271
  color: var(--ui-button-link-hover-text, var(--ui-text-primary));
14078
14272
  text-decoration-color: currentColor;
@@ -14110,6 +14304,8 @@ html[data-ui-input-modality="touch"]
14110
14304
  /* A count is an adornment, not another line of label text. Keep the standard control height
14111
14305
  with enough inset for a 24px mark; large content can still grow the button naturally. */
14112
14306
 
14307
+ /* Trim the text line itself: an anonymous flex item retains font-metric space in some fonts. */
14308
+
14113
14309
  @supports (text-box-trim: trim-both) {
14114
14310
  }
14115
14311
 
@@ -16448,7 +16644,8 @@ html[data-ui-input-modality="touch"]
16448
16644
 
16449
16645
  input:where(:not([data-component], [data-slotted]))::after {
16450
16646
  content: "";
16451
- position: absolute;
16647
+ position: absolute !important;
16648
+ transform: none !important;
16452
16649
  opacity: 0;
16453
16650
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
16454
16651
  }
@@ -16461,43 +16658,44 @@ html[data-ui-input-modality="touch"]
16461
16658
  box-shadow: var(--ui-control-inset);
16462
16659
  }
16463
16660
 
16464
- /* Centre the tick's box and lift it slightly for the rotated check shape. */
16661
+ /* The SVG's painted bounds are centred in its viewBox, including its round stroke.
16662
+ Centre that box directly; rotated border boxes do not centre the visible check. */
16465
16663
  input:checked:where(:not([data-component], [data-slotted]))::after {
16466
- inset: 0;
16467
- margin: auto !important;
16468
- inline-size: calc(var(--_ui-checkbox-size) * 0.28 / 1.125);
16469
- block-size: calc(var(--_ui-checkbox-size) * 0.5 / 1.125);
16470
- /* Longhands, not `border: solid var(...)`: lowering drops a shorthand that omits a
16471
- component, which left the tick with no style and no colour. */
16472
- border-style: solid;
16473
- border-color: var(--ui-text-on-accent);
16474
- border-width: 0 calc(var(--_ui-checkbox-size) * 0.125 / 1.125) calc(var(--_ui-checkbox-size) * 0.125 / 1.125) 0;
16664
+ inset: 50% auto auto 50% !important;
16665
+ inline-size: calc(var(--_ui-checkbox-size) * 0.7) !important;
16666
+ block-size: calc(var(--_ui-checkbox-size) * 0.7) !important;
16667
+ background: var(--ui-text-on-accent);
16668
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 11.5 5 5 9-9'/%3E%3C/svg%3E")
16669
+ center / contain no-repeat;
16475
16670
  opacity: 1;
16476
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg);
16671
+ translate: -50% -50% !important;
16477
16672
  animation: ui-checkbox-check var(--ui-motion-base) var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
16478
16673
  }
16479
16674
 
16480
16675
  input:indeterminate:where(:not([data-component], [data-slotted]))::after {
16481
- inset: 50% calc(var(--_ui-checkbox-size) * 0.23 / 1.125) auto;
16482
- block-size: calc(var(--_ui-checkbox-size) * 0.125 / 1.125);
16676
+ mask: none;
16677
+ animation: none;
16678
+ inset: 50% calc(var(--_ui-checkbox-size) * 0.23 / 1.125) auto !important;
16679
+ inline-size: auto !important;
16680
+ block-size: calc(var(--_ui-checkbox-size) * 0.125 / 1.125) !important;
16483
16681
  border-radius: var(--ui-radius-round);
16484
16682
  background: var(--ui-text-on-accent);
16485
16683
  opacity: 1;
16486
- transform: translateY(-50%);
16684
+ translate: 0 -50% !important;
16487
16685
  }
16488
16686
 
16489
16687
  @keyframes ui-checkbox-check {
16490
16688
  from {
16491
16689
  opacity: 0;
16492
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(0.55);
16690
+ scale: 0.55;
16493
16691
  }
16494
16692
  65% {
16495
16693
  opacity: 1;
16496
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(1.12);
16694
+ scale: 1.12;
16497
16695
  }
16498
16696
  to {
16499
16697
  opacity: 1;
16500
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(1);
16698
+ scale: 1;
16501
16699
  }
16502
16700
  }
16503
16701
 
@@ -16508,6 +16706,20 @@ html[data-ui-input-modality="touch"]
16508
16706
  }
16509
16707
  }
16510
16708
 
16709
+ @media (forced-colors: active) {
16710
+ input:checked,
16711
+ input:indeterminate {
16712
+ forced-color-adjust: none;
16713
+ background: Highlight;
16714
+ border-color: Highlight;
16715
+ }
16716
+ input:checked:where(:not([data-component], [data-slotted]))::after,
16717
+ input:indeterminate:where(:not([data-component], [data-slotted]))::after {
16718
+ forced-color-adjust: none;
16719
+ background: HighlightText;
16720
+ }
16721
+ }
16722
+
16511
16723
  input:hover:enabled {
16512
16724
  border-color: var(--ui-accent-solid);
16513
16725
  }
@@ -16565,11 +16777,15 @@ html[data-ui-input-modality="touch"]
16565
16777
 
16566
16778
  /* The label, and under it an optional line saying what the choice means. */
16567
16779
 
16568
- /* Centre the tick's box and lift it slightly for the rotated check shape. */
16780
+ /* The SVG's painted bounds are centred in its viewBox, including its round stroke.
16781
+ Centre that box directly; rotated border boxes do not centre the visible check. */
16569
16782
 
16570
16783
  @media (prefers-reduced-motion: reduce) {
16571
16784
  }
16572
16785
 
16786
+ @media (forced-colors: active) {
16787
+ }
16788
+
16573
16789
  /* A sized choice keeps its box and aligns instead: the label takes that size's field type size,
16574
16790
  and the first line centres in that control height, so the label shares a row's baseline.
16575
16791
  Multi-line labels and descriptions still grow downward from that first line. */
@@ -3418,7 +3418,11 @@ var T12$1 = [
3418
3418
  "\n ",
3419
3419
  1,
3420
3420
  "\n ",
3421
- 4,
3421
+ [
3422
+ "span",
3423
+ ["class", "label"],
3424
+ 4
3425
+ ],
3422
3426
  "\n ",
3423
3427
  [
3424
3428
  "span",
@@ -3440,7 +3444,11 @@ var T16$1 = [
3440
3444
  "\n ",
3441
3445
  1,
3442
3446
  "\n ",
3443
- 4,
3447
+ [
3448
+ "span",
3449
+ ["class", "label"],
3450
+ 4
3451
+ ],
3444
3452
  "\n ",
3445
3453
  [
3446
3454
  "span",
@@ -4325,7 +4333,8 @@ function createUiButton(options = {}, html) {
4325
4333
  n.append((P12$1 ??= buildTemplate(T12$1)).cloneNode(true));
4326
4334
  const t0 = n.firstChild.nextSibling;
4327
4335
  const t1 = t0.nextSibling.nextSibling.nextSibling;
4328
- const t2 = t1.nextSibling.nextSibling.nextSibling.firstChild;
4336
+ const t2 = t1.firstChild;
4337
+ const t3 = t1.nextSibling.nextSibling.firstChild;
4329
4338
  const r = {
4330
4339
  n,
4331
4340
  v0: void 0,
@@ -4340,12 +4349,12 @@ function createUiButton(options = {}, html) {
4340
4349
  a1: t0,
4341
4350
  e0: t0.nextSibling,
4342
4351
  b0: void 0,
4343
- a2: t1,
4344
- e1: t1.nextSibling,
4352
+ a2: t2,
4353
+ e1: t2.nextSibling,
4345
4354
  b1: void 0,
4346
4355
  f1: void 0,
4347
- a3: t2,
4348
- e2: t2.nextSibling,
4356
+ a3: t3,
4357
+ e2: t3.nextSibling,
4349
4358
  b2: void 0,
4350
4359
  f2: void 0
4351
4360
  };
@@ -4439,18 +4448,6 @@ function createUiButton(options = {}, html) {
4439
4448
  r.e0.before(r.b0.n);
4440
4449
  }
4441
4450
  } else if (r.b0 !== void 0) r.b0;
4442
- if (r.f2 === void 0) {
4443
- r.f2 = 1;
4444
- const at = fillSlot(r.a3, r.e2, "badge", J, false, void 0, d);
4445
- if (Array.isArray(at)) (r.z ??= []).push(() => {
4446
- at[0].l.delete(at[1]);
4447
- dispose(at[1]);
4448
- });
4449
- else if (at !== void 0) {
4450
- r.b2 = m15(d);
4451
- at.before(r.b2.n);
4452
- }
4453
- } else if (r.b2 !== void 0) r.b2;
4454
4451
  if (r.f1 === void 0) {
4455
4452
  r.f1 = 1;
4456
4453
  const at = fillSlot(r.a2, r.e1, "", J, false, void 0, d);
@@ -4463,12 +4460,25 @@ function createUiButton(options = {}, html) {
4463
4460
  at.before(r.b1.n);
4464
4461
  }
4465
4462
  } else if (r.b1 !== void 0) r.b1;
4463
+ if (r.f2 === void 0) {
4464
+ r.f2 = 1;
4465
+ const at = fillSlot(r.a3, r.e2, "badge", J, false, void 0, d);
4466
+ if (Array.isArray(at)) (r.z ??= []).push(() => {
4467
+ at[0].l.delete(at[1]);
4468
+ dispose(at[1]);
4469
+ });
4470
+ else if (at !== void 0) {
4471
+ r.b2 = m15(d);
4472
+ at.before(r.b2.n);
4473
+ }
4474
+ } else if (r.b2 !== void 0) r.b2;
4466
4475
  };
4467
4476
  const m16 = (n, d) => {
4468
4477
  n.append((P16$1 ??= buildTemplate(T16$1)).cloneNode(true));
4469
4478
  const t0 = n.firstChild.nextSibling;
4470
4479
  const t1 = t0.nextSibling.nextSibling.nextSibling;
4471
- const t2 = t1.nextSibling.nextSibling.nextSibling.firstChild;
4480
+ const t2 = t1.firstChild;
4481
+ const t3 = t1.nextSibling.nextSibling.firstChild;
4472
4482
  const r = {
4473
4483
  n,
4474
4484
  v0: void 0,
@@ -4481,12 +4491,12 @@ function createUiButton(options = {}, html) {
4481
4491
  a1: t0,
4482
4492
  e0: t0.nextSibling,
4483
4493
  b0: void 0,
4484
- a2: t1,
4485
- e1: t1.nextSibling,
4494
+ a2: t2,
4495
+ e1: t2.nextSibling,
4486
4496
  b1: void 0,
4487
4497
  f1: void 0,
4488
- a3: t2,
4489
- e2: t2.nextSibling,
4498
+ a3: t3,
4499
+ e2: t3.nextSibling,
4490
4500
  b2: void 0,
4491
4501
  f2: void 0
4492
4502
  };
@@ -4560,18 +4570,6 @@ function createUiButton(options = {}, html) {
4560
4570
  r.e0.before(r.b0.n);
4561
4571
  }
4562
4572
  } else if (r.b0 !== void 0) r.b0;
4563
- if (r.f2 === void 0) {
4564
- r.f2 = 1;
4565
- const at = fillSlot(r.a3, r.e2, "badge", J, false, void 0, d);
4566
- if (Array.isArray(at)) (r.z ??= []).push(() => {
4567
- at[0].l.delete(at[1]);
4568
- dispose(at[1]);
4569
- });
4570
- else if (at !== void 0) {
4571
- r.b2 = m19(d);
4572
- at.before(r.b2.n);
4573
- }
4574
- } else if (r.b2 !== void 0) r.b2;
4575
4573
  if (r.f1 === void 0) {
4576
4574
  r.f1 = 1;
4577
4575
  const at = fillSlot(r.a2, r.e1, "", J, false, void 0, d);
@@ -4584,6 +4582,18 @@ function createUiButton(options = {}, html) {
4584
4582
  at.before(r.b1.n);
4585
4583
  }
4586
4584
  } else if (r.b1 !== void 0) r.b1;
4585
+ if (r.f2 === void 0) {
4586
+ r.f2 = 1;
4587
+ const at = fillSlot(r.a3, r.e2, "badge", J, false, void 0, d);
4588
+ if (Array.isArray(at)) (r.z ??= []).push(() => {
4589
+ at[0].l.delete(at[1]);
4590
+ dispose(at[1]);
4591
+ });
4592
+ else if (at !== void 0) {
4593
+ r.b2 = m19(d);
4594
+ at.before(r.b2.n);
4595
+ }
4596
+ } else if (r.b2 !== void 0) r.b2;
4587
4597
  };
4588
4598
  const M = [
4589
4599
  m0,