@crewlethq/ui 0.68.0 → 0.70.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.
Files changed (174) hide show
  1. package/README.md +24 -2
  2. package/dist/AgentHandoffPanel/index.js +5 -5
  3. package/dist/AppShell/index.js +4 -4
  4. package/dist/ArrangeList/index.js +4 -4
  5. package/dist/ArtifactBar/index.js +7 -7
  6. package/dist/ArtifactCard/index.js +4 -4
  7. package/dist/ArtifactPanel/index.js +1 -1
  8. package/dist/AvatarPicker/index.js +7 -7
  9. package/dist/BriefCard/BriefCard.d.ts +80 -0
  10. package/dist/BriefCard/index.d.ts +3 -0
  11. package/dist/BriefCard/index.js +13 -0
  12. package/dist/BriefCard-L66R5U32.css +127 -0
  13. package/dist/Button/Button.d.ts +10 -0
  14. package/dist/Button/index.js +1 -1
  15. package/dist/{Button-VRRYSXFN.css → Button-GDEBGBX6.css} +30 -3
  16. package/dist/Canvas/index.js +3 -3
  17. package/dist/CanvasBoard/index.js +5 -5
  18. package/dist/CanvasToolbar/index.js +4 -4
  19. package/dist/ChatThread/index.js +2 -2
  20. package/dist/Checkbox/index.js +3 -3
  21. package/dist/CodeBlock/index.js +3 -3
  22. package/dist/ColorField/index.js +3 -3
  23. package/dist/ColorSwatch/index.js +3 -3
  24. package/dist/Combobox/index.js +3 -3
  25. package/dist/CommandPalette/index.js +5 -5
  26. package/dist/CommentThread/index.js +6 -6
  27. package/dist/Composer/index.js +3 -3
  28. package/dist/ConfirmField/index.js +3 -3
  29. package/dist/ConflictNote/index.js +2 -2
  30. package/dist/ContrastHelp/index.js +1 -1
  31. package/dist/Copyable/index.js +2 -2
  32. package/dist/DataGrid/DataGrid.d.ts +50 -4
  33. package/dist/DataGrid/index.d.ts +2 -2
  34. package/dist/DataGrid/index.js +5 -5
  35. package/dist/{DataGrid-NHIN2I42.css → DataGrid-Q26F2V5Q.css} +145 -24
  36. package/dist/DataTable/index.js +7 -7
  37. package/dist/DataView/index.js +10 -9
  38. package/dist/{DataView-RH5UDA5F.css → DataView-L7HLNW7C.css} +1 -112
  39. package/dist/DateTimePicker/index.js +3 -3
  40. package/dist/DeepWorkCard/index.js +3 -3
  41. package/dist/DocTabsEditor/index.js +5 -5
  42. package/dist/DownloadButton/index.js +2 -2
  43. package/dist/{Editor-2MZDDSJF.js → Editor-NNQEALNT.js} +4 -4
  44. package/dist/ErrorBoundary/index.js +2 -2
  45. package/dist/FileDrop/index.js +2 -2
  46. package/dist/FilterPill/FilterPill.d.ts +63 -0
  47. package/dist/FilterPill/index.d.ts +3 -0
  48. package/dist/FilterPill/index.js +4 -0
  49. package/dist/FilterPill-4GMNFZND.css +134 -0
  50. package/dist/FollowBanner/index.js +2 -2
  51. package/dist/HuePicker/index.js +6 -6
  52. package/dist/InlineEditor/index.js +2 -2
  53. package/dist/Input/index.js +2 -2
  54. package/dist/LinkInterstitial/index.js +4 -4
  55. package/dist/ListInput/index.js +4 -4
  56. package/dist/LogoSlot/index.js +3 -3
  57. package/dist/MarkdownEditor/index.js +6 -6
  58. package/dist/Menu/Menu.d.ts +10 -1
  59. package/dist/Menu/index.js +3 -3
  60. package/dist/{Menu-OLUGHX56.css → Menu-I4SNXHOT.css} +12 -0
  61. package/dist/MergeConflicts/index.js +6 -6
  62. package/dist/Modal/index.js +3 -3
  63. package/dist/OpenInAppCard/index.js +3 -3
  64. package/dist/OrgTable/index.js +1 -1
  65. package/dist/PeekRail/index.js +2 -2
  66. package/dist/PeopleRail/index.js +2 -2
  67. package/dist/PresenterView/index.js +3 -3
  68. package/dist/PrincipalPicker/index.js +4 -4
  69. package/dist/ProposalCard/index.js +7 -7
  70. package/dist/ReceiptStrip/index.js +2 -2
  71. package/dist/ResultTableCard/index.js +4 -4
  72. package/dist/RichEditor/index.js +2 -2
  73. package/dist/SandboxedFrame/index.js +2 -2
  74. package/dist/SegmentedControl/index.js +5 -5
  75. package/dist/SelectionBar/index.js +2 -2
  76. package/dist/SetupWizard/index.js +2 -2
  77. package/dist/ShareDialog/index.js +5 -5
  78. package/dist/SheetColumnEditor/index.js +9 -9
  79. package/dist/SheetGrid/index.js +4 -4
  80. package/dist/SidePanel/index.js +1 -1
  81. package/dist/SlideCompare/index.js +2 -2
  82. package/dist/SlideFilmstrip/index.js +4 -4
  83. package/dist/Switcher/index.js +5 -5
  84. package/dist/TableCells/index.js +1 -1
  85. package/dist/{TableCells-F6MUV572.css → TableCells-TKSNLRK3.css} +1 -0
  86. package/dist/Tabs/index.js +4 -4
  87. package/dist/TagsInput/index.js +2 -2
  88. package/dist/ThemeSwitcher/index.js +6 -6
  89. package/dist/TimeRangePicker/index.js +8 -8
  90. package/dist/TimeWindowPicker/index.js +4 -4
  91. package/dist/TreeCanvas/index.js +4 -4
  92. package/dist/TreeGrid/index.js +1 -1
  93. package/dist/ValueField/index.js +4 -4
  94. package/dist/VersionCompare/index.js +6 -6
  95. package/dist/VersionTimeline/index.js +2 -2
  96. package/dist/{chunk-XI56IJGI.js → chunk-3EETQFAM.js} +1 -1
  97. package/dist/{chunk-5FFZED4X.js → chunk-3EY5SEGH.js} +4 -4
  98. package/dist/{chunk-2QMUOUXN.js → chunk-3LP3VPLT.js} +2 -2
  99. package/dist/{chunk-DGG2A6XG.js → chunk-3WN5HUAK.js} +2 -2
  100. package/dist/{chunk-QBWNGNF7.js → chunk-4DL2BQJE.js} +1 -1
  101. package/dist/{chunk-XNYMMLCY.js → chunk-4MVLED6E.js} +4 -4
  102. package/dist/{chunk-OXEWUAND.js → chunk-5OFRDX66.js} +1 -1
  103. package/dist/{chunk-QRKDP7RQ.js → chunk-6C6YK75K.js} +2 -2
  104. package/dist/{chunk-2A6DL3K5.js → chunk-6FBPFG3C.js} +1 -1
  105. package/dist/{chunk-WWXIGN4O.js → chunk-73SAOOR5.js} +3 -3
  106. package/dist/{chunk-CMTLQOJY.js → chunk-7LSSYHOT.js} +1 -1
  107. package/dist/{chunk-COAK5MIF.js → chunk-ADSOY7UM.js} +3 -3
  108. package/dist/{chunk-GNDKUSCG.js → chunk-AGLONIVV.js} +1 -1
  109. package/dist/{chunk-YDXX5UB7.js → chunk-AQIFKLXY.js} +1 -1
  110. package/dist/{chunk-SUJO3AHN.js → chunk-B3PK2LND.js} +1 -1
  111. package/dist/{chunk-IU5J6BY5.js → chunk-BWAUL5MB.js} +2 -2
  112. package/dist/{chunk-ZFFQMRPJ.js → chunk-BWFJB5JD.js} +4 -4
  113. package/dist/{chunk-I24FI46B.js → chunk-C667GCU7.js} +1 -1
  114. package/dist/{chunk-CWYU7DNT.js → chunk-CDNZTCP2.js} +1 -1
  115. package/dist/{chunk-MVQSTBLQ.js → chunk-DB7UVFOY.js} +1 -1
  116. package/dist/{chunk-OJGI4XJH.js → chunk-DGSK4LLS.js} +1 -1
  117. package/dist/{chunk-7QTPJDRF.js → chunk-DGXZ635L.js} +7 -4
  118. package/dist/{chunk-2SU735S3.js → chunk-DV5L2GRY.js} +1 -1
  119. package/dist/{chunk-NSCYGUDG.js → chunk-EHFQMY3B.js} +1 -1
  120. package/dist/{chunk-FPTJMNI3.js → chunk-EN4UJQ63.js} +2 -2
  121. package/dist/{chunk-O3WH7OJE.js → chunk-EOXI3CRG.js} +1 -1
  122. package/dist/{chunk-LUSRKTX6.js → chunk-ERFXYGRF.js} +2 -2
  123. package/dist/{chunk-MCMPQBEV.js → chunk-FQI62PIZ.js} +2 -2
  124. package/dist/{chunk-CLJHQHPS.js → chunk-FURJVZCT.js} +73 -27
  125. package/dist/{chunk-5K7GGQNX.js → chunk-G4QZWVAB.js} +2 -2
  126. package/dist/{chunk-KZ3UXNN7.js → chunk-H32JW6CZ.js} +2 -2
  127. package/dist/{chunk-7DD2GR7I.js → chunk-HPI5J6AR.js} +2 -2
  128. package/dist/{chunk-ZEPUKRO7.js → chunk-IJ7KLXUZ.js} +1 -1
  129. package/dist/{chunk-MVQLCSAC.js → chunk-IPUEVTRJ.js} +1 -1
  130. package/dist/{chunk-4VPDY7AD.js → chunk-J5WWMC35.js} +45 -46
  131. package/dist/{chunk-KQGOVBGF.js → chunk-JD7P2GJP.js} +1 -1
  132. package/dist/{chunk-VMEUY672.js → chunk-JQEXAH7G.js} +1 -1
  133. package/dist/{chunk-K4IVKHKU.js → chunk-JT7WRPZ6.js} +1 -1
  134. package/dist/{chunk-CFXDWGQI.js → chunk-JVII5264.js} +1 -1
  135. package/dist/chunk-K4LZXSKZ.js +62 -0
  136. package/dist/{chunk-JII74OTJ.js → chunk-KAA3GFTP.js} +5 -5
  137. package/dist/{chunk-WYXUDDTY.js → chunk-KL6A7JGH.js} +1 -1
  138. package/dist/{chunk-2JHGPXYG.js → chunk-KQWJWTED.js} +1 -1
  139. package/dist/{chunk-WU5JDEEY.js → chunk-L4HHWG4V.js} +1 -1
  140. package/dist/{chunk-RCHJBKD3.js → chunk-LQWORB5B.js} +2 -2
  141. package/dist/{chunk-2DSHMV6B.js → chunk-MFQPGMJT.js} +1 -1
  142. package/dist/{chunk-XDVQ72BE.js → chunk-NXNLAZPK.js} +2 -2
  143. package/dist/{chunk-WPMZKZUH.js → chunk-O3HCFM3D.js} +1 -1
  144. package/dist/{chunk-NBOFBSVD.js → chunk-OBPINJNO.js} +2 -2
  145. package/dist/{chunk-2566PSQ3.js → chunk-OQG4P5KU.js} +18 -4
  146. package/dist/{chunk-UWOYDHVW.js → chunk-P64MIA7C.js} +1 -1
  147. package/dist/{chunk-EAR2F5OA.js → chunk-PBCNINMB.js} +1 -1
  148. package/dist/{chunk-KHHDCNYM.js → chunk-PRN5IP2R.js} +1 -1
  149. package/dist/{chunk-DMK2A4IK.js → chunk-QSWQJX27.js} +1 -1
  150. package/dist/{chunk-D2ZXIQ23.js → chunk-R5OATXWU.js} +1 -1
  151. package/dist/{chunk-OFABBAUR.js → chunk-SMZPUHBL.js} +1 -1
  152. package/dist/{chunk-7QTJO3PV.js → chunk-SO5SXSTP.js} +1 -1
  153. package/dist/{chunk-IYG4ETAQ.js → chunk-T5GBTXNC.js} +1 -1
  154. package/dist/{chunk-DMY4XEDS.js → chunk-TKBFRGUV.js} +4 -4
  155. package/dist/{chunk-DFU6JGJV.js → chunk-TPCBPGSB.js} +1 -1
  156. package/dist/{chunk-GAUBP247.js → chunk-TWJERLT3.js} +1 -1
  157. package/dist/{chunk-MJTBINIY.js → chunk-TYIHFDMP.js} +1 -1
  158. package/dist/{chunk-PHBMSXVE.js → chunk-UY3FWQWG.js} +2 -2
  159. package/dist/chunk-VBA5FSWV.js +87 -0
  160. package/dist/{chunk-SZEKOW2X.js → chunk-VWMB3CJN.js} +1 -1
  161. package/dist/{chunk-UKYVLQAE.js → chunk-W5AXJWOW.js} +2 -2
  162. package/dist/{chunk-HHZ5ZXYO.js → chunk-YGWIWDXE.js} +3 -3
  163. package/dist/{chunk-2T32N2WD.js → chunk-YUHKRRWO.js} +2 -2
  164. package/dist/{chunk-IQQSMK4E.js → chunk-ZUBFVK6B.js} +1 -1
  165. package/dist/{chunk-M25IV5MH.js → chunk-ZWCK4N4L.js} +1 -1
  166. package/dist/generated/index.d.ts +2 -0
  167. package/dist/generated/index.js +104 -102
  168. package/dist/index.js +104 -102
  169. package/dist/styles.css +463 -146
  170. package/package.json +3 -3
  171. package/dist/{chunk-TXQNWGUD.js → chunk-ABZC3NLM.js} +0 -0
  172. package/dist/{chunk-DCQ2VTBB.js → chunk-ETSF7SU6.js} +1 -1
  173. package/dist/{chunk-BAHLBMCH.js → chunk-HEIOLITO.js} +1 -1
  174. package/dist/{chunk-R2YHKVWN.js → chunk-SBHAKX2T.js} +1 -1
package/dist/styles.css CHANGED
@@ -5757,7 +5757,137 @@ a.crewlet-breadcrumb__crumb:focus-visible {
5757
5757
  }
5758
5758
 
5759
5759
 
5760
- /* Button-VRRYSXFN.css */
5760
+ /* BriefCard-L66R5U32.css */
5761
+ /*
5762
+ * A brief inside the product's status card: one sentence, the rows that wait
5763
+ * on the reader, one recommendation and the questions to ask next, each block
5764
+ * under a quiet label so a reader scans straight to the part they need.
5765
+ */
5766
+ .crewlet-brief-card__where {
5767
+ display: inline-flex;
5768
+ flex-wrap: wrap;
5769
+ gap: var(--spacing-1);
5770
+ }
5771
+
5772
+ .crewlet-brief-card__asof {
5773
+ white-space: nowrap;
5774
+ }
5775
+
5776
+ .crewlet-brief-card__body {
5777
+ display: flex;
5778
+ flex-direction: column;
5779
+ gap: var(--spacing-4);
5780
+ min-width: 0;
5781
+ }
5782
+
5783
+ .crewlet-brief-card__summary {
5784
+ margin: 0;
5785
+ font-size: var(--font-size-md);
5786
+ font-weight: var(--font-weight-medium);
5787
+ line-height: var(--font-line-height-snug);
5788
+ text-wrap: pretty;
5789
+ }
5790
+
5791
+ .crewlet-brief-card__block {
5792
+ display: flex;
5793
+ flex-direction: column;
5794
+ gap: var(--spacing-2);
5795
+ min-width: 0;
5796
+ }
5797
+
5798
+ .crewlet-brief-card__label {
5799
+ margin: 0;
5800
+ font-size: var(--font-size-2xs);
5801
+ font-weight: var(--font-weight-medium);
5802
+ letter-spacing: var(--font-letter-spacing-wide);
5803
+ text-transform: uppercase;
5804
+ line-height: var(--font-line-height-snug);
5805
+ color: var(--color-text-tertiary);
5806
+ }
5807
+
5808
+ .crewlet-brief-card__needs {
5809
+ display: flex;
5810
+ flex-direction: column;
5811
+ margin: 0;
5812
+ padding: 0;
5813
+ list-style: none;
5814
+ }
5815
+
5816
+ /*
5817
+ * A ROW IS THE LIST ROW'S GRAMMAR: the dot on the first line, the words and
5818
+ * their one fact, and the action centred at the end, so a column of rows reads
5819
+ * down the dots and across to the presses.
5820
+ */
5821
+ .crewlet-brief-card__need {
5822
+ display: grid;
5823
+ grid-template-columns: auto minmax(0, 1fr) auto;
5824
+ align-items: start;
5825
+ gap: var(--spacing-3);
5826
+ padding-block: var(--spacing-2);
5827
+ }
5828
+
5829
+ .crewlet-brief-card__need + .crewlet-brief-card__need {
5830
+ border-top: 1px solid var(--color-border-default);
5831
+ }
5832
+
5833
+ .crewlet-brief-card__need > .crewlet-button {
5834
+ align-self: center;
5835
+ }
5836
+
5837
+ .crewlet-brief-card__dot {
5838
+ display: inline-flex;
5839
+ align-items: center;
5840
+ height: 1lh;
5841
+ font-size: var(--font-size-compact);
5842
+ }
5843
+
5844
+ .crewlet-brief-card__words {
5845
+ display: flex;
5846
+ flex-direction: column;
5847
+ gap: var(--spacing-0);
5848
+ min-width: 0;
5849
+ overflow-wrap: anywhere;
5850
+ font-size: var(--font-size-compact);
5851
+ }
5852
+
5853
+ .crewlet-brief-card__detail {
5854
+ font-size: var(--font-size-xs);
5855
+ color: var(--color-text-tertiary);
5856
+ }
5857
+
5858
+ .crewlet-brief-card__clear {
5859
+ display: inline-flex;
5860
+ align-items: center;
5861
+ gap: var(--spacing-2);
5862
+ margin: 0;
5863
+ font-size: var(--font-size-compact);
5864
+ color: var(--color-feedback-success-ink);
5865
+ }
5866
+
5867
+ /* The recommendation: one step, on the accent's softest ground. */
5868
+ .crewlet-brief-card__next {
5869
+ display: grid;
5870
+ grid-template-columns: auto minmax(0, 1fr) auto;
5871
+ align-items: center;
5872
+ gap: var(--spacing-3);
5873
+ padding: var(--spacing-2) var(--spacing-3);
5874
+ border-radius: var(--radius-md);
5875
+ background: var(--color-brand-accent-soft);
5876
+ overflow-wrap: anywhere;
5877
+ font-size: var(--font-size-compact);
5878
+ }
5879
+
5880
+ .crewlet-brief-card__arrow {
5881
+ color: var(--color-brand-accent-ink);
5882
+ }
5883
+
5884
+ /* The questions to ask next sit on the card's text edge: each row's own inset is pulled out. */
5885
+ .crewlet-brief-card__follow-ups {
5886
+ margin-inline: calc(-1 * var(--spacing-3));
5887
+ }
5888
+
5889
+
5890
+ /* Button-GDEBGBX6.css */
5761
5891
  /*
5762
5892
  * The button, and the link drawn as one.
5763
5893
  *
@@ -5870,23 +6000,50 @@ a.crewlet-breadcrumb__crumb:focus-visible {
5870
6000
  per size. min-height rather than height, so a label that wraps is read
5871
6001
  rather than clipped. */
5872
6002
  .crewlet-btn--small {
6003
+ --crewlet-btn-inset: var(--spacing-2);
6004
+
5873
6005
  min-height: var(--size-control-sm);
5874
- padding: 0 var(--spacing-2);
6006
+ padding: 0 var(--crewlet-btn-inset);
5875
6007
  font-size: var(--font-size-xs);
5876
6008
  }
5877
6009
 
5878
6010
  .crewlet-btn--medium {
6011
+ --crewlet-btn-inset: var(--spacing-3);
6012
+
5879
6013
  min-height: var(--size-control-md);
5880
- padding: 0 var(--spacing-3);
6014
+ padding: 0 var(--crewlet-btn-inset);
5881
6015
  font-size: var(--font-size-compact);
5882
6016
  }
5883
6017
 
5884
6018
  .crewlet-btn--large {
6019
+ --crewlet-btn-inset: var(--spacing-4);
6020
+
5885
6021
  min-height: var(--size-control-lg);
5886
- padding: 0 var(--spacing-4);
6022
+ padding: 0 var(--crewlet-btn-inset);
5887
6023
  font-size: var(--font-size-sm);
5888
6024
  }
5889
6025
 
6026
+ /*
6027
+ * FLUSH: the words start on the line. The padding and the 1px edge are taken
6028
+ * back at the start, so a ghost button drawn as a value starts on the line
6029
+ * the plain values in its column start on, and only the hover ground and the
6030
+ * ring reach past it, into the gutter before it. The START ONLY: taken back at
6031
+ * the end too, the box overran its cell's content edge, which a column that
6032
+ * measures what it cuts short reads as a value that does not fit. The ring is
6033
+ * drawn inside, so a container that clips (a table, a card) never cuts it.
6034
+ *
6035
+ * A CONTAINER WITH NO GUTTER TO GIVE sets `--crewlet-btn-flush-outdent` to 0:
6036
+ * a table's first column and its card rows (DataGrid.css), where the outdent
6037
+ * would pull the control toward the frame.
6038
+ */
6039
+ .crewlet-btn--flush {
6040
+ margin-inline-start: var(--crewlet-btn-flush-outdent, calc(-1 * (var(--crewlet-btn-inset) + 1px)));
6041
+ }
6042
+
6043
+ .crewlet-btn--flush:focus-visible {
6044
+ outline-offset: var(--size-focus-ring-inset-offset);
6045
+ }
6046
+
5890
6047
  .crewlet-btn--square {
5891
6048
  border-radius: var(--radius-md);
5892
6049
  }
@@ -12214,7 +12371,7 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
12214
12371
  }
12215
12372
 
12216
12373
 
12217
- /* DataGrid-NHIN2I42.css */
12374
+ /* DataGrid-Q26F2V5Q.css */
12218
12375
  /*
12219
12376
  * DataGrid: a list as columns, one track list on the grid.
12220
12377
  *
@@ -12337,6 +12494,18 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
12337
12494
  --crewlet-data-grid-cell-start: var(--spacing-3);
12338
12495
  }
12339
12496
 
12497
+ /*
12498
+ * AND AN ICON COLUMN, whose track (`DATA_GRID_ICON_TRACK`) is the target size
12499
+ * and the cells' own step either side. At the grid's edge (a card's 16px) the
12500
+ * edge inset left 20px for a 24px mark; the column keeps the cells' step on
12501
+ * both sides wherever it stands, as the selection column does.
12502
+ */
12503
+ .crewlet-data-grid__th.crewlet-data-grid__th--icon,
12504
+ .crewlet-data-grid__cell.crewlet-data-grid__cell--icon {
12505
+ --crewlet-data-grid-cell-start: var(--spacing-3);
12506
+ --crewlet-data-grid-cell-end: var(--spacing-3);
12507
+ }
12508
+
12340
12509
  /*
12341
12510
  * THE LIST TABLE'S HEAD: the micro-label register every table takes, 11/500
12342
12511
  * uppercase. A sortable head is a button with its chrome reset; the reset
@@ -12344,6 +12513,7 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
12344
12513
  */
12345
12514
  .crewlet-data-grid__th {
12346
12515
  display: flex;
12516
+ align-self: stretch;
12347
12517
  align-items: center;
12348
12518
  gap: var(--spacing-1);
12349
12519
  padding-block: var(--spacing-2);
@@ -12390,22 +12560,91 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
12390
12560
  margin-inline: calc(-1 * var(--crewlet-data-grid-cell-start)) calc(-1 * var(--crewlet-data-grid-cell-end));
12391
12561
  padding-block: var(--spacing-2);
12392
12562
  padding-inline: var(--crewlet-data-grid-cell-start) var(--crewlet-data-grid-cell-end);
12563
+ /* THE HEAD'S WHOLE HEIGHT, so a press anywhere in the cell sorts. */
12564
+ align-self: stretch;
12393
12565
  cursor: pointer;
12394
12566
  }
12395
12567
 
12568
+ /*
12569
+ * ONE EDGE PER COLUMN, shared by its head and its values. `align` gives the
12570
+ * head and every cell the same modifier, and both take the same inline inset
12571
+ * (`--crewlet-data-grid-cell-start` and `-end`), so the word in the head and
12572
+ * the values under it start (or end, or centre) on one line. A head that
12573
+ * sorts is a button filling its head, and takes the same edge.
12574
+ */
12396
12575
  .crewlet-data-grid__th--right .crewlet-data-grid__sort {
12397
12576
  justify-content: flex-end;
12398
12577
  }
12399
12578
 
12579
+ .crewlet-data-grid__th--center .crewlet-data-grid__sort {
12580
+ justify-content: center;
12581
+ }
12582
+
12400
12583
  .crewlet-data-grid__th:not(.crewlet-data-grid__th--plain):hover,
12401
12584
  .crewlet-data-grid__th--sorted {
12402
12585
  color: var(--color-text-primary);
12403
12586
  }
12404
12587
 
12588
+ /*
12589
+ * A SORTABLE HEAD SAYS SO UNDER THE POINTER: the row's own hover overlay over
12590
+ * the whole cell, the way a row says it opens, so the target is the head and
12591
+ * not the word in it.
12592
+ */
12593
+ .crewlet-data-grid__th:not(.crewlet-data-grid__th--plain):hover {
12594
+ background: var(--color-surface-hover);
12595
+ }
12596
+
12597
+ /*
12598
+ * THE SORT ARROW. Its box is always laid out, so a head never changes width
12599
+ * when the arrow appears and the fit measured at rest still holds under the
12600
+ * pointer. The two-way arrow of a head that is not the sort shows only on
12601
+ * hover and focus, in the head's own ink; the sorted head's arrow is always
12602
+ * shown, at full ink, and names the direction.
12603
+ */
12604
+ .crewlet-data-grid__sort-mark {
12605
+ display: inline-flex;
12606
+ flex: none;
12607
+ inline-size: var(--spacing-3);
12608
+ color: inherit;
12609
+ transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
12610
+ }
12611
+
12612
+ .crewlet-data-grid__th:not(.crewlet-data-grid__th--sorted) .crewlet-data-grid__sort-mark {
12613
+ opacity: 0;
12614
+ }
12615
+
12616
+ /* BEFORE THE WORD IN A RIGHT-ALIGNED COLUMN, so the word stays on the column's
12617
+ right edge over its figures, arrow or not. */
12618
+ .crewlet-data-grid__th--right .crewlet-data-grid__sort-mark {
12619
+ order: -1;
12620
+ }
12621
+
12622
+ /*
12623
+ * AND MIRRORED IN A CENTRED COLUMN: a box the arrow's size before the word, a
12624
+ * gap away, so the word stands on the column's middle over its values rather
12625
+ * than half an arrow off it. ONLY BEFORE A WORD: a head with none (a sortable
12626
+ * mark column) draws its arrow alone, already on the middle, and the reserve
12627
+ * would push it off.
12628
+ */
12629
+ .crewlet-data-grid__th--center .crewlet-data-grid__sort:has(> .crewlet-data-grid__truncate)::before {
12630
+ content: '';
12631
+ flex: none;
12632
+ inline-size: var(--spacing-3);
12633
+ }
12634
+
12635
+ .crewlet-data-grid__th:hover .crewlet-data-grid__sort-mark,
12636
+ .crewlet-data-grid__sort:focus-visible .crewlet-data-grid__sort-mark {
12637
+ opacity: 1;
12638
+ }
12639
+
12405
12640
  .crewlet-data-grid__th--right {
12406
12641
  justify-content: flex-end;
12407
12642
  }
12408
12643
 
12644
+ .crewlet-data-grid__th--center {
12645
+ justify-content: center;
12646
+ }
12647
+
12409
12648
  .crewlet-data-grid__sort:focus-visible,
12410
12649
  .crewlet-data-grid__cols-reset:focus-visible {
12411
12650
  outline: 2px solid var(--color-focus);
@@ -12512,23 +12751,30 @@ button.crewlet-data-grid__row-link {
12512
12751
  * A GHOST CONTROL STARTS ON THE COLUMN'S TEXT EDGE. A small ghost button that
12513
12752
  * opens a cell ("Open ENG-12", a choice made in place through a menu) drew its
12514
12753
  * word one padding and one edge (9px) inside the line its column starts on.
12515
- * Its padding and edge are taken back, as a card's foot does (StatusCard.css):
12516
- * the word sits on the line and only the hover's ground reaches past it, into
12517
- * the step between two columns. A column of figures ends its controls on the
12518
- * far edge, so it is left alone.
12519
- *
12520
- * NEVER AT THE GRID'S OWN EDGE: its first column, and every line of a phone's
12521
- * card (below). A grid standing alone has only its 12px edge there, and with
12522
- * the 9px taken back, the 4px the control's focus ring stands off it ran past
12523
- * the grid's clip: the ring lost a pixel and the hover ground stood 3px from
12524
- * the frame.
12525
- */
12526
- .crewlet-data-grid__cell:not(:first-child, .crewlet-data-grid__cell--right)
12527
- > .crewlet-btn--ghost.crewlet-btn--small:first-child,
12528
- .crewlet-data-grid__cell:not(:first-child, .crewlet-data-grid__cell--right)
12529
- > .crewlet-menu-anchor:first-child
12530
- > .crewlet-btn--ghost.crewlet-btn--small {
12531
- margin-inline-start: var(--crewlet-data-grid-control-outdent, calc(-1 * (var(--spacing-2) + 1px)));
12754
+ * ONE MECHANISM, Button's `flush`: a flush control anywhere in a cell takes
12755
+ * its padding and edge back, and a ghost control written straight into a cell
12756
+ * (or as a menu's trigger there) is drawn flush without being asked, by the
12757
+ * same declaration. The word sits on the line and only the hover's ground
12758
+ * reaches past it, into the step between two columns.
12759
+ *
12760
+ * THE EXEMPTIONS ARE ONE VARIABLE, `--crewlet-btn-flush-outdent: 0`, which
12761
+ * the flush declaration reads:
12762
+ *
12763
+ * - THE GRID'S OWN EDGE, its first column and every line of a phone's card
12764
+ * (below). A grid standing alone has only its 12px edge there, and with the
12765
+ * 9px taken back the control's focus ring ran past the grid's clip and the
12766
+ * hover ground stood 3px from the frame.
12767
+ * - A RIGHT OR A CENTRED COLUMN, which lines its values up by their end or
12768
+ * their middle, where a control taken back at its start would stand off
12769
+ * both.
12770
+ */
12771
+ .crewlet-data-grid__cell > .crewlet-btn--ghost.crewlet-btn--small:first-child,
12772
+ .crewlet-data-grid__cell > .crewlet-menu-anchor:first-child > .crewlet-btn--ghost.crewlet-btn--small {
12773
+ margin-inline-start: var(--crewlet-btn-flush-outdent, calc(-1 * (var(--crewlet-btn-inset) + 1px)));
12774
+ }
12775
+
12776
+ .crewlet-data-grid__cell:is(:first-child, .crewlet-data-grid__cell--right, .crewlet-data-grid__cell--center) {
12777
+ --crewlet-btn-flush-outdent: 0px;
12532
12778
  }
12533
12779
 
12534
12780
  /*
@@ -12542,10 +12788,18 @@ button.crewlet-data-grid__row-link {
12542
12788
  overflow: clip;
12543
12789
  }
12544
12790
 
12791
+ /* A RIGHT-ALIGNED COLUMN holds figures, times and dates: tabular digits, so
12792
+ "53s ago" and "12h ago" end on one edge and their digits stand in columns. */
12545
12793
  .crewlet-data-grid__cell--right {
12546
12794
  justify-content: flex-end;
12795
+ font-variant-numeric: tabular-nums;
12796
+ }
12797
+
12798
+ .crewlet-data-grid__cell--center {
12799
+ justify-content: center;
12547
12800
  }
12548
12801
 
12802
+
12549
12803
  .crewlet-data-grid__truncate {
12550
12804
  min-width: 0;
12551
12805
  overflow: hidden;
@@ -12618,14 +12872,25 @@ button.crewlet-data-grid__row-link {
12618
12872
  color: var(--color-text-primary);
12619
12873
  }
12620
12874
 
12875
+ /*
12876
+ * THE FOOT IS A CAPTION, NOT A ROW. At the row's height and on the head's
12877
+ * raised ground it read as one more row, so a grid's head, rows and foot
12878
+ * blurred into one stack. It takes the micro step of type, the tertiary ink,
12879
+ * half the row's inset and the grid's own ground under the rows' hairline:
12880
+ * quieter than either neighbour, and plainly the end of the list.
12881
+ */
12621
12882
  .crewlet-data-grid__foot {
12622
12883
  display: flex;
12623
12884
  align-items: center;
12624
- gap: var(--spacing-2);
12625
- padding: var(--spacing-2) var(--crewlet-data-grid-edge);
12626
- border-top: 1px solid var(--color-border-hover);
12627
- background: var(--color-surface-elevated);
12628
- font-size: var(--font-size-xs);
12885
+ flex-wrap: wrap;
12886
+ gap: var(--spacing-1) var(--spacing-3);
12887
+ min-height: var(--size-control-sm);
12888
+ padding: var(--spacing-1) var(--crewlet-data-grid-edge);
12889
+ border-top: 1px solid var(--color-border-default);
12890
+ background: transparent;
12891
+ color: var(--color-text-tertiary);
12892
+ font-size: var(--font-size-2xs);
12893
+ line-height: var(--font-line-height-tight);
12629
12894
  }
12630
12895
 
12631
12896
  .crewlet-data-grid__foot-spacer {
@@ -12633,7 +12898,7 @@ button.crewlet-data-grid__row-link {
12633
12898
  }
12634
12899
 
12635
12900
  .crewlet-data-grid__note {
12636
- font-size: var(--font-size-xs);
12901
+ font-size: inherit;
12637
12902
  color: var(--color-text-tertiary);
12638
12903
  }
12639
12904
 
@@ -12677,9 +12942,21 @@ button.crewlet-data-grid__row-link {
12677
12942
  cursor: pointer;
12678
12943
  }
12679
12944
 
12945
+ /*
12946
+ * WHERE NOTHING HOVERS (a touch screen), a sortable head shows its arrow at
12947
+ * rest: there is no pointer to bring it out, and a head that only says it
12948
+ * sorts under a pointer says nothing there.
12949
+ */
12950
+ @media (hover: none) {
12951
+ .crewlet-data-grid__th:not(.crewlet-data-grid__th--plain) .crewlet-data-grid__sort-mark {
12952
+ opacity: 1;
12953
+ }
12954
+ }
12955
+
12680
12956
  @media (prefers-reduced-motion: reduce) {
12681
12957
  .crewlet-data-grid__th,
12682
- .crewlet-data-grid__row {
12958
+ .crewlet-data-grid__row,
12959
+ .crewlet-data-grid__sort-mark {
12683
12960
  transition: none;
12684
12961
  }
12685
12962
  }
@@ -12703,7 +12980,7 @@ button.crewlet-data-grid__row-link {
12703
12980
  /* No ghost control is pulled out here (see above): every line of a card
12704
12981
  starts at the grid's edge, and a compact row's marks run on one line,
12705
12982
  where the hover ground swallowed the gap before it. */
12706
- --crewlet-data-grid-control-outdent: 0px;
12983
+ --crewlet-btn-flush-outdent: 0px;
12707
12984
 
12708
12985
  display: block;
12709
12986
  }
@@ -12749,7 +13026,8 @@ button.crewlet-data-grid__row-link {
12749
13026
 
12750
13027
  /* `shrink` and `right` are column shapes, and there are no columns here. */
12751
13028
  :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--shrink,
12752
- :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--right {
13029
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--right,
13030
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--center {
12753
13031
  white-space: normal;
12754
13032
  justify-content: flex-start;
12755
13033
  }
@@ -15089,7 +15367,7 @@ body.crewlet-data-table-resizing {
15089
15367
  }
15090
15368
 
15091
15369
 
15092
- /* DataView-RH5UDA5F.css */
15370
+ /* DataView-L7HLNW7C.css */
15093
15371
  /*
15094
15372
  * The list screen: header, toolbar, filter chips, table.
15095
15373
  *
@@ -15312,118 +15590,7 @@ body.crewlet-data-table-resizing {
15312
15590
 
15313
15591
  /* ── One chip ─────────────────────────────────────────────────────────── */
15314
15592
 
15315
- /*
15316
- * TWO CONTROLS IN ONE PILL: pressing the chip opens its editor, pressing the
15317
- * cross takes the filter off. They are drawn as one object with a divider
15318
- * because they are one filter, and they are two BUTTONS because they do two
15319
- * different things, which is also why the cross carries its own name rather
15320
- * than relying on the chip's.
15321
- */
15322
- .crewlet-filter-axis-chip {
15323
- display: inline-flex;
15324
- align-items: stretch;
15325
- height: var(--size-control-sm);
15326
- background: var(--color-brand-accent-soft);
15327
- border: 1px solid var(--color-brand-accent-soft-strong);
15328
- border-radius: var(--radius-pill);
15329
- overflow: hidden;
15330
- max-width: 100%;
15331
- transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
15332
- }
15333
-
15334
- /*
15335
- * THE EDGE, NOT THE FILL. `--color-surface-hover` is the overlay a row at rest
15336
- * carries, and the token says a surface shows it OR a selected tint, never
15337
- * both: put on a chip it REPLACED the accent fill, so the one control on screen
15338
- * that means "this filter is on" went pale under the pointer and read as the
15339
- * filter being switched off.
15340
- *
15341
- * The fill stays where it is and the boundary takes the accent itself.
15342
- * Deepening the fill to the next accent step instead measures 4.48:1 under the
15343
- * chip's own ink on the light ground, and 4.18:1 on a card, which is why that
15344
- * step is a BORDER value in the palette and is used as one here.
15345
- */
15346
- .crewlet-filter-axis-chip:hover {
15347
- border-color: var(--color-brand-accent);
15348
- }
15349
-
15350
- .crewlet-filter-axis-chip__trigger {
15351
- display: inline-flex;
15352
- align-items: center;
15353
- gap: var(--spacing-1);
15354
- min-width: 0;
15355
- padding: 0 var(--spacing-2) 0 var(--spacing-3);
15356
- background: transparent;
15357
- border: none;
15358
- cursor: pointer;
15359
- color: var(--color-brand-accent-ink);
15360
- font-family: var(--font-family-sans);
15361
- font-size: var(--font-size-xs);
15362
- line-height: 1;
15363
- }
15364
-
15365
- .crewlet-filter-axis-chip__trigger:focus-visible {
15366
- outline: 2px solid var(--color-focus);
15367
- outline-offset: var(--size-focus-ring-inset-offset);
15368
- }
15369
-
15370
- /*
15371
- * THE AXIS NAME IS NOT DIMMED. It read at 0.85 opacity, which takes the chip's
15372
- * own ink off the step the pairing was measured at, and the name of the axis
15373
- * is exactly what a reader checks before the value: "status" and "stage" narrow
15374
- * a list to very different things. The value's own weight is what separates
15375
- * the halves, which is a difference a reader can see at any contrast.
15376
- */
15377
- .crewlet-filter-axis-chip__label {
15378
- white-space: nowrap;
15379
- }
15380
-
15381
- .crewlet-filter-axis-chip__value {
15382
- font-weight: var(--font-weight-semibold);
15383
- overflow: hidden;
15384
- text-overflow: ellipsis;
15385
- white-space: nowrap;
15386
- }
15387
-
15388
- /*
15389
- * The chevron carries the chip's own ink rather than a fainter version of it,
15390
- * for the reason every mark beside its words does: a grey glyph next to
15391
- * coloured text reads as two things. At 0.7 it measured 3.00:1 on a card in
15392
- * light, which is the 3:1 floor for a glyph to the second decimal place.
15393
- */
15394
- .crewlet-filter-axis-chip__chevron {
15395
- flex: none;
15396
- }
15397
-
15398
- /*
15399
- * The remove control keeps the chip's own ink rather than taking the critical
15400
- * hue on hover: removing a filter destroys nothing, and a row of chips that
15401
- * turns red under the pointer reads as a row of dangerous things.
15402
- */
15403
- .crewlet-filter-axis-chip__remove {
15404
- /* AS TALL AS THE PILL'S INSIDE, as the trigger beside it is. At the small
15405
- control's own height it stood 2px past the pill's inner edge, cut off at
15406
- the bottom, and its cross sat 1px under the chip's middle. */
15407
- height: auto;
15408
- border-radius: 0;
15409
- border-left: 1px solid var(--color-brand-accent-soft-strong);
15410
- color: var(--color-brand-accent-ink);
15411
- }
15412
-
15413
- /*
15414
- * Its ring is drawn INSIDE it, like the trigger's beside it. The pill clips to
15415
- * its own radius, so the outset ring an icon button carries everywhere else is
15416
- * cut off on every edge the control touches, which here is all of them.
15417
- */
15418
- .crewlet-filter-axis-chip__remove:focus-visible {
15419
- outline-offset: var(--size-focus-ring-inset-offset);
15420
- }
15421
-
15422
- @media (prefers-reduced-motion: reduce) {
15423
- .crewlet-filter-axis-chip {
15424
- transition: none;
15425
- }
15426
- }
15593
+ /* A chip is a [FilterPill] (FilterPill.css) whose words open its editor. */
15427
15594
 
15428
15595
  /* ── A chip's editor ──────────────────────────────────────────────────── */
15429
15596
 
@@ -18370,6 +18537,143 @@ svg.crewlet-datetime__chevron {
18370
18537
  }
18371
18538
 
18372
18539
 
18540
+ /* FilterPill-4GMNFZND.css */
18541
+ /*
18542
+ * The filter pill: one filter in force, as a sentence on the accent ground.
18543
+ *
18544
+ * TWO CONTROLS IN ONE PILL where the words open an editor: pressing the words
18545
+ * opens it, pressing the cross takes the filter off. They are drawn as one
18546
+ * object with a divider because they are one filter, and they are two BUTTONS
18547
+ * because they do two different things, which is also why the cross carries
18548
+ * its own name rather than relying on the words'.
18549
+ */
18550
+ .crewlet-filter-pill {
18551
+ display: inline-flex;
18552
+ align-items: stretch;
18553
+ height: var(--size-control-sm);
18554
+ max-width: 100%;
18555
+ min-width: 0;
18556
+ background: var(--color-brand-accent-soft);
18557
+ border: 1px solid var(--color-brand-accent-soft-strong);
18558
+ border-radius: var(--radius-pill);
18559
+ overflow: hidden;
18560
+ box-sizing: border-box;
18561
+ transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
18562
+ }
18563
+
18564
+ /*
18565
+ * THE EDGE, NOT THE FILL, under the pointer. The surface hover overlay put on
18566
+ * the pill REPLACED the accent fill, so the one control on screen that means
18567
+ * "this filter is on" went pale and read as the filter being switched off.
18568
+ * The fill stays and the boundary takes the accent itself: the next fill step
18569
+ * measures under 4.5:1 beneath the pill's own ink, which is why that step is a
18570
+ * border value in the palette and is used as one here.
18571
+ */
18572
+ .crewlet-filter-pill:hover {
18573
+ border-color: var(--color-brand-accent);
18574
+ }
18575
+
18576
+ /*
18577
+ * THE WORDS: one line, the parts a step apart. The gap draws the space; the
18578
+ * space characters between the parts are still in the text, which is what a
18579
+ * copy and a screen reader take, but a flex row does not draw them, so the
18580
+ * step is the one spacing. A long value ends in an ellipsis at the pill's
18581
+ * edge. Plain text, or the control `renderWords` makes, which gives up a
18582
+ * button's chrome and keeps the same line.
18583
+ */
18584
+ .crewlet-filter-pill__words {
18585
+ display: inline-flex;
18586
+ align-items: center;
18587
+ gap: var(--spacing-1);
18588
+ min-width: 0;
18589
+ margin: 0;
18590
+ padding: 0 var(--spacing-3);
18591
+ background: transparent;
18592
+ border: 0;
18593
+ color: var(--color-text-secondary);
18594
+ font-family: var(--font-family-sans);
18595
+ font-size: var(--font-size-xs);
18596
+ font-weight: var(--font-weight-regular);
18597
+ line-height: 1;
18598
+ white-space: nowrap;
18599
+ }
18600
+
18601
+ /* A pill with a remove control gives the words' trailing inset to the divider. */
18602
+ .crewlet-filter-pill:has(> .crewlet-filter-pill__remove) > .crewlet-filter-pill__words {
18603
+ padding-inline-end: var(--spacing-2);
18604
+ }
18605
+
18606
+ button.crewlet-filter-pill__words {
18607
+ cursor: pointer;
18608
+ }
18609
+
18610
+ .crewlet-filter-pill__words:focus-visible {
18611
+ outline: 2px solid var(--color-focus);
18612
+ outline-offset: var(--size-focus-ring-inset-offset);
18613
+ }
18614
+
18615
+ /*
18616
+ * THREE REGISTERS. The field and the relation are what the filter is ABOUT,
18617
+ * in the secondary ink at the regular weight; the value is the answer, in the
18618
+ * accent ink at the semibold weight, and the only part a long filter cuts.
18619
+ */
18620
+ .crewlet-filter-pill__field,
18621
+ .crewlet-filter-pill__operator {
18622
+ flex: none;
18623
+ color: var(--color-text-secondary);
18624
+ }
18625
+
18626
+ .crewlet-filter-pill__value {
18627
+ min-width: 0;
18628
+ overflow: hidden;
18629
+ text-overflow: ellipsis;
18630
+ color: var(--color-brand-accent-ink);
18631
+ font-weight: var(--font-weight-semibold);
18632
+ }
18633
+
18634
+ /*
18635
+ * A glyph after the words (a popover's chevron) carries the value's ink: a
18636
+ * grey glyph next to coloured text reads as two things.
18637
+ */
18638
+ .crewlet-filter-pill__words > svg {
18639
+ flex: none;
18640
+ color: var(--color-brand-accent-ink);
18641
+ }
18642
+
18643
+ /*
18644
+ * The remove control: as tall as the pill's inside, behind a hairline, in the
18645
+ * pill's own ink. At the small control's own height it stood past the pill's
18646
+ * inner edge and was cut off at the bottom.
18647
+ *
18648
+ * RAISED OVER ICONBUTTON'S OWN RULES (`.crewlet-icon-btn`, `--sm`), which
18649
+ * carry the same weight as one class and can load after this sheet in a
18650
+ * bundle: at equal weight the control kept its 26px height and its corner
18651
+ * radius in a 26px pill with a 1px edge, overran the pill by a pixel and lost
18652
+ * the bottom of its focus ring. The child combinator is the extra weight, and
18653
+ * a test holds it above every IconButton rule.
18654
+ */
18655
+ .crewlet-filter-pill > .crewlet-filter-pill__remove {
18656
+ height: auto;
18657
+ border-radius: 0;
18658
+ border-inline-start: 1px solid var(--color-brand-accent-soft-strong);
18659
+ color: var(--color-brand-accent-ink);
18660
+ }
18661
+
18662
+ /*
18663
+ * Its ring is drawn INSIDE it, like the words'. The pill clips to its own
18664
+ * radius, so an outset ring is cut off on every edge the control touches.
18665
+ */
18666
+ .crewlet-filter-pill > .crewlet-filter-pill__remove:focus-visible {
18667
+ outline-offset: var(--size-focus-ring-inset-offset);
18668
+ }
18669
+
18670
+ @media (prefers-reduced-motion: reduce) {
18671
+ .crewlet-filter-pill {
18672
+ transition: none;
18673
+ }
18674
+ }
18675
+
18676
+
18373
18677
  /* FindingList-MPLA2ZTO.css */
18374
18678
  /*
18375
18679
  * What a checker found: a quiet list, one row each, the tone's glyph in its
@@ -23011,7 +23315,7 @@ a.crewlet-icon-btn {
23011
23315
  }
23012
23316
 
23013
23317
 
23014
- /* Menu-OLUGHX56.css */
23318
+ /* Menu-I4SNXHOT.css */
23015
23319
  /*
23016
23320
  * The menu button's panel.
23017
23321
  *
@@ -23301,6 +23605,18 @@ a.crewlet-icon-btn {
23301
23605
  }
23302
23606
  }
23303
23607
 
23608
+ /*
23609
+ * A TRIGGER THAT IS THE VALUE it changes (`valueTrigger`): the surrounding
23610
+ * text's size, weight and ink, not a button label's, so a writer's row reads
23611
+ * as a reader's. Its start is Button's `flush`. Raised over the button's own
23612
+ * size and variant rules, which carry one class each.
23613
+ */
23614
+ .crewlet-menu-anchor > .crewlet-btn.crewlet-menu__value-trigger {
23615
+ font-size: inherit;
23616
+ font-weight: inherit;
23617
+ color: inherit;
23618
+ }
23619
+
23304
23620
 
23305
23621
  /* MergeConflicts-HCXPRQVR.css */
23306
23622
  /* MergeConflicts: each clash as the other side's lines beside the draft's,
@@ -36220,7 +36536,7 @@ b.crewlet-switcher__match {
36220
36536
  }
36221
36537
 
36222
36538
 
36223
- /* TableCells-F6MUV572.css */
36539
+ /* TableCells-TKSNLRK3.css */
36224
36540
  /* The read-only table cells. Each one holds a single line and shrinks inside
36225
36541
  its column (`min-width: 0`), so a long value is cut with an ellipsis and
36226
36542
  its whole text on the title rather than standing the row two lines tall. */
@@ -36254,6 +36570,7 @@ b.crewlet-switcher__match {
36254
36570
  .crewlet-table-cell__date {
36255
36571
  color: var(--color-text-tertiary);
36256
36572
  white-space: nowrap;
36573
+ font-variant-numeric: tabular-nums;
36257
36574
  }
36258
36575
 
36259
36576
  /*