@crewlethq/ui 0.4.4 → 0.5.1

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 (231) hide show
  1. package/README.md +888 -24
  2. package/dist/Accordion/index.js +2 -2
  3. package/dist/AddPill/index.js +1 -1
  4. package/dist/{AddPill-DFWXYLIQ.css → AddPill-IJQYCY6C.css} +9 -0
  5. package/dist/AppShell/AppShell.d.ts +26 -5
  6. package/dist/AppShell/index.js +3 -3
  7. package/dist/{AppShell-NVE6LHNI.css → AppShell-XARELGIH.css} +178 -25
  8. package/dist/Avatar/Avatar.d.ts +85 -40
  9. package/dist/Avatar/AvatarStack.d.ts +76 -0
  10. package/dist/Avatar/index.d.ts +5 -2
  11. package/dist/Avatar/index.js +1 -1
  12. package/dist/Avatar-XID7Z74C.css +200 -0
  13. package/dist/AvatarStack-GEJBNV7E.css +72 -0
  14. package/dist/BrandLockup/index.js +1 -1
  15. package/dist/{BrandLockup-6ISDEHPJ.css → BrandLockup-JKGXFCZF.css} +25 -19
  16. package/dist/Button/Button.d.ts +7 -2
  17. package/dist/Button/index.js +1 -1
  18. package/dist/{Button-D4J6B4MA.css → Button-X4B2TJAQ.css} +50 -19
  19. package/dist/Callout/index.js +1 -1
  20. package/dist/Canvas/index.js +4 -4
  21. package/dist/Card/Card.d.ts +9 -5
  22. package/dist/Card/index.js +1 -1
  23. package/dist/{Card-RLR254LD.css → Card-GLP7SUV6.css} +25 -18
  24. package/dist/Charts/BarList.d.ts +18 -1
  25. package/dist/Charts/ChartTooltip.d.ts +68 -0
  26. package/dist/Charts/StackedBar.d.ts +25 -7
  27. package/dist/Charts/StackedColumns.d.ts +112 -0
  28. package/dist/Charts/TimeSeries.d.ts +33 -2
  29. package/dist/Charts/dataColor.d.ts +22 -14
  30. package/dist/Charts/index.d.ts +6 -0
  31. package/dist/Charts/index.js +1 -1
  32. package/dist/Charts/useChartHover.d.ts +56 -0
  33. package/dist/Charts-B3YEF7R4.css +742 -0
  34. package/dist/Checkbox/index.js +1 -1
  35. package/dist/{Checkbox-VGW26YLQ.css → Checkbox-BOXQ747I.css} +2 -2
  36. package/dist/CodeBlock/index.js +4 -4
  37. package/dist/Combobox/index.js +5 -5
  38. package/dist/CommandPalette/CommandPalette.d.ts +97 -6
  39. package/dist/CommandPalette/index.d.ts +1 -1
  40. package/dist/CommandPalette/index.js +9 -7
  41. package/dist/CommandPalette-C5AMKGN2.css +259 -0
  42. package/dist/Copyable/index.js +3 -3
  43. package/dist/DataTable/index.js +7 -7
  44. package/dist/{DataTable-37UWTRN6.css → DataTable-OLHPF7D4.css} +35 -38
  45. package/dist/DataView/index.js +16 -16
  46. package/dist/{DataView-256YF32J.css → DataView-N6JX464S.css} +5 -4
  47. package/dist/DateTimePicker/index.js +5 -5
  48. package/dist/DiffList/index.js +1 -1
  49. package/dist/Disclosure/index.js +2 -2
  50. package/dist/EntityChip/EntityChip.d.ts +9 -12
  51. package/dist/EntityChip/index.d.ts +1 -1
  52. package/dist/EntityChip/index.js +2 -2
  53. package/dist/ErrorBoundary/index.js +2 -2
  54. package/dist/{ErrorBoundary-ME36CQTA.css → ErrorBoundary-U2PA3LY2.css} +4 -4
  55. package/dist/IconButton/index.js +1 -1
  56. package/dist/{IconButton-VQGNMJDI.css → IconButton-TVEUWK6L.css} +2 -2
  57. package/dist/ImageUpload/ImageUpload.d.ts +10 -7
  58. package/dist/ImageUpload/index.js +2 -2
  59. package/dist/{ImageUpload-HKFIZR6D.css → ImageUpload-YCHJMUGX.css} +24 -10
  60. package/dist/Input/index.js +2 -2
  61. package/dist/Kbd/Kbd.d.ts +14 -4
  62. package/dist/Kbd/index.js +1 -1
  63. package/dist/Kbd-JPLDVJIP.css +71 -0
  64. package/dist/Layer/index.js +1 -1
  65. package/dist/Link/index.js +1 -1
  66. package/dist/List/index.js +1 -1
  67. package/dist/{List-XTHESXLR.css → List-MYJIV6MP.css} +12 -2
  68. package/dist/ListInput/index.js +6 -6
  69. package/dist/Listbox/index.js +2 -2
  70. package/dist/Listbox/useListbox.d.ts +2 -0
  71. package/dist/{Listbox-ZXYYNN6U.css → Listbox-6WJNJQVQ.css} +32 -7
  72. package/dist/Menu/index.js +4 -4
  73. package/dist/Meter/Meter.d.ts +103 -16
  74. package/dist/Meter/index.d.ts +2 -2
  75. package/dist/Meter/index.js +1 -1
  76. package/dist/{Meter-SKOOXQBC.css → Meter-5VCSFMZW.css} +46 -7
  77. package/dist/Modal/index.js +4 -4
  78. package/dist/{Modal-XYQJ4BL6.css → Modal-JAYBS2KS.css} +13 -4
  79. package/dist/OrgLabel/OrgLabel.d.ts +60 -24
  80. package/dist/OrgLabel/index.d.ts +1 -1
  81. package/dist/OrgLabel/index.js +2 -1
  82. package/dist/{OrgLabel-D7U6QJZD.css → OrgLabel-CR233G34.css} +9 -18
  83. package/dist/OrgNode/index.js +3 -2
  84. package/dist/OrgTable/OrgTable.d.ts +2 -2
  85. package/dist/OrgTable/index.js +8 -7
  86. package/dist/Popover/index.js +2 -2
  87. package/dist/PricingCard/index.js +3 -3
  88. package/dist/{PricingCard-JFI7RYXP.css → PricingCard-7EFXRSD2.css} +4 -5
  89. package/dist/SearchTrigger/SearchTrigger.d.ts +23 -4
  90. package/dist/SearchTrigger/index.d.ts +1 -1
  91. package/dist/SearchTrigger/index.js +1 -1
  92. package/dist/SearchTrigger-Z5D4AAY7.css +112 -0
  93. package/dist/SegmentedControl/index.js +2 -2
  94. package/dist/SegmentedMeter/SegmentedMeter.d.ts +107 -0
  95. package/dist/SegmentedMeter/index.d.ts +3 -0
  96. package/dist/SegmentedMeter/index.js +2 -0
  97. package/dist/SegmentedMeter-KQNML2TW.css +109 -0
  98. package/dist/Select/index.js +3 -3
  99. package/dist/Shortcut/index.js +2 -2
  100. package/dist/SidebarNav/SidebarNav.d.ts +85 -25
  101. package/dist/SidebarNav/index.d.ts +1 -1
  102. package/dist/SidebarNav/index.js +1 -1
  103. package/dist/SidebarNav-X5NLZNWA.css +424 -0
  104. package/dist/StatCard/StatCard.d.ts +59 -12
  105. package/dist/StatCard/index.d.ts +1 -1
  106. package/dist/StatCard/index.js +1 -1
  107. package/dist/StatCard-KPAFD4E2.css +204 -0
  108. package/dist/StatGroup/index.js +1 -1
  109. package/dist/{StatGroup-TGB6AEKM.css → StatGroup-HVG6O62W.css} +8 -9
  110. package/dist/StatusDot/StatusDot.d.ts +24 -6
  111. package/dist/StatusDot/index.js +1 -1
  112. package/dist/StatusDot-7OMCQCZF.css +186 -0
  113. package/dist/Stepper/Stepper.d.ts +78 -0
  114. package/dist/Stepper/index.d.ts +3 -0
  115. package/dist/Stepper/index.js +4 -0
  116. package/dist/Stepper-HW4JM3YH.css +176 -0
  117. package/dist/Tabs/index.js +1 -1
  118. package/dist/{Tabs-MJ2E3VPK.css → Tabs-XCNPHA7B.css} +46 -26
  119. package/dist/Tag/Tag.d.ts +29 -22
  120. package/dist/Tag/index.js +2 -2
  121. package/dist/{Tag-VNZEYLB6.css → Tag-GBE7LQJP.css} +82 -83
  122. package/dist/TagsInput/index.js +7 -7
  123. package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +53 -21
  124. package/dist/ThemeSwitcher/index.d.ts +3 -3
  125. package/dist/ThemeSwitcher/index.js +4 -3
  126. package/dist/ThemeSwitcher/preferences.d.ts +19 -5
  127. package/dist/ThemeToggle/ThemeToggle.d.ts +40 -0
  128. package/dist/ThemeToggle/index.d.ts +2 -0
  129. package/dist/ThemeToggle/index.js +5 -0
  130. package/dist/TimeWindowPicker/index.js +8 -8
  131. package/dist/Toaster/index.js +2 -2
  132. package/dist/Toolbar/index.js +2 -2
  133. package/dist/{Toolbar-IP6LXN45.css → Toolbar-HUOSMNTH.css} +3 -1
  134. package/dist/Tooltip/index.js +2 -2
  135. package/dist/Tree/index.d.ts +2 -2
  136. package/dist/Tree/index.js +1 -1
  137. package/dist/Tree/layout.d.ts +103 -28
  138. package/dist/TreeCanvas/TreeCanvas.d.ts +60 -14
  139. package/dist/TreeCanvas/index.d.ts +1 -1
  140. package/dist/TreeCanvas/index.js +6 -6
  141. package/dist/TreeCanvas/motion.d.ts +3 -2
  142. package/dist/{TreeCanvas-WBNQPHC7.css → TreeCanvas-HVOV4SQN.css} +154 -30
  143. package/dist/TreeGrid/index.js +4 -4
  144. package/dist/{chunk-F6OE5FH3.js → chunk-2FPENTCF.js} +1 -1
  145. package/dist/chunk-4AK52VHB.js +88 -0
  146. package/dist/{chunk-7EM5T4ME.js → chunk-4IQD3HUQ.js} +2 -2
  147. package/dist/{chunk-YODNNSZL.js → chunk-4PZ6FJKW.js} +43 -13
  148. package/dist/{chunk-F27EPQ7D.js → chunk-4UQ7SMPK.js} +1 -1
  149. package/dist/chunk-5QWIJSQM.js +73 -0
  150. package/dist/{chunk-KIC7BZYJ.js → chunk-6MU7HNB4.js} +6 -5
  151. package/dist/{chunk-S2XHHEW4.js → chunk-74KMX7YH.js} +4 -4
  152. package/dist/{chunk-WNI2WSJF.js → chunk-7KBNFFM3.js} +1 -1
  153. package/dist/{chunk-EFSG7HNU.js → chunk-AUS5FNQE.js} +1 -1
  154. package/dist/{chunk-CMEE37QJ.js → chunk-BMYPGGPV.js} +4 -4
  155. package/dist/{chunk-H4FBTAYS.js → chunk-BNCCEER3.js} +8 -8
  156. package/dist/chunk-C5WJUZVR.js +56 -0
  157. package/dist/{chunk-5WS6L6FA.js → chunk-CAIHUYXV.js} +9 -9
  158. package/dist/{chunk-5KSRXHOW.js → chunk-CQY5NTRS.js} +1 -1
  159. package/dist/{chunk-MW356IVK.js → chunk-D6EVJUGU.js} +2 -2
  160. package/dist/{chunk-7PEFUMQJ.js → chunk-DHPUMOTX.js} +2 -2
  161. package/dist/{chunk-HZ5XZNPS.js → chunk-DS2C73RJ.js} +3 -3
  162. package/dist/{chunk-GKHAKGOF.js → chunk-DSUY5F4E.js} +3 -3
  163. package/dist/{chunk-Q4ZPPART.js → chunk-EFYPAJT3.js} +3 -3
  164. package/dist/{chunk-PATXSJGR.js → chunk-ERVO6OUF.js} +17 -17
  165. package/dist/{chunk-BZYDZBAN.js → chunk-ETYEBKR4.js} +3 -3
  166. package/dist/{chunk-CC67MUUO.js → chunk-FD5UEN6X.js} +30 -30
  167. package/dist/{chunk-5SDBMKUO.js → chunk-FIFNP6PL.js} +3 -3
  168. package/dist/{chunk-7HPRF5XN.js → chunk-FUF52K7E.js} +98 -16
  169. package/dist/{chunk-5KPQ6D7N.js → chunk-FZVJDJFN.js} +2 -2
  170. package/dist/chunk-IA232OTU.js +156 -0
  171. package/dist/{chunk-2EOKFKHX.js → chunk-IG27QX7Q.js} +7 -7
  172. package/dist/chunk-IKB6HFGK.js +55 -0
  173. package/dist/{chunk-T43A26SD.js → chunk-IPVQKAHO.js} +6 -6
  174. package/dist/{chunk-3EYF6HKB.js → chunk-IVFJD7WY.js} +28 -9
  175. package/dist/{chunk-XJWXPRSK.js → chunk-JGRNTBF2.js} +11 -11
  176. package/dist/chunk-K3OWD7BJ.js +121 -0
  177. package/dist/{chunk-6KCO2D5C.js → chunk-KD4H66L6.js} +7 -20
  178. package/dist/{chunk-SFZOKW2G.js → chunk-KJ34ZBBI.js} +8 -3
  179. package/dist/{chunk-AQTBF4EB.js → chunk-LFHCXZO5.js} +5 -5
  180. package/dist/{chunk-LWKJQTOM.js → chunk-MICH6QSJ.js} +1 -1
  181. package/dist/chunk-N3DPO6HG.js +226 -0
  182. package/dist/{chunk-S4GZWSKR.js → chunk-OM5E3TTK.js} +1 -1
  183. package/dist/{chunk-3QRYCPXQ.js → chunk-OPKIKM35.js} +6 -6
  184. package/dist/{chunk-5EKIWVOR.js → chunk-PGRPNDWM.js} +2 -2
  185. package/dist/{chunk-FSOW3ARP.js → chunk-PQNILU27.js} +9 -9
  186. package/dist/{chunk-QNCVHRZL.js → chunk-QVAFL2LE.js} +1 -1
  187. package/dist/{chunk-Q3B66TJM.js → chunk-QY7UU5ZB.js} +1 -1
  188. package/dist/{chunk-ITHXJHBB.js → chunk-R25RGPUB.js} +1 -0
  189. package/dist/{chunk-KLJCCMF3.js → chunk-R6735B37.js} +2 -2
  190. package/dist/{chunk-3ZP55QZE.js → chunk-R6FBDTP3.js} +4 -4
  191. package/dist/{chunk-7FZ53WDJ.js → chunk-RIAZM6L3.js} +1 -1
  192. package/dist/chunk-RJM4QCGG.js +550 -0
  193. package/dist/{chunk-NTRZGNEX.js → chunk-S3BCVWTU.js} +215 -46
  194. package/dist/chunk-S7KW47IQ.js +121 -0
  195. package/dist/{chunk-KNYYCWMK.js → chunk-SJQ546ID.js} +4 -4
  196. package/dist/{chunk-D35VTV2Z.js → chunk-SV7QAONL.js} +1 -1
  197. package/dist/{chunk-IAJLHVUA.js → chunk-TIWAHZZ6.js} +1 -1
  198. package/dist/{chunk-2PRH365R.js → chunk-UA7O3KKJ.js} +1 -1
  199. package/dist/{chunk-NPZY6YYL.js → chunk-UG5ZMAXW.js} +6 -6
  200. package/dist/{chunk-NDCATSW7.js → chunk-V34H2YCY.js} +1 -1
  201. package/dist/chunk-WIATRXEJ.js +22 -0
  202. package/dist/{chunk-5C5YMZQU.js → chunk-WOFOMTGB.js} +16 -10
  203. package/dist/{chunk-QYOFACSP.js → chunk-WSOFKOLP.js} +3 -3
  204. package/dist/{chunk-MNAXYY3R.js → chunk-WUVZDFHS.js} +31 -11
  205. package/dist/{chunk-DB2VDLVR.js → chunk-YIMOT5OO.js} +10 -10
  206. package/dist/{chunk-2ZQMA2WB.js → chunk-ZPSOF6VL.js} +2 -2
  207. package/dist/generated/index.d.ts +3 -0
  208. package/dist/generated/index.js +70 -66
  209. package/dist/index.js +70 -66
  210. package/dist/styles.css +2538 -741
  211. package/dist/utils/index.d.ts +1 -1
  212. package/dist/utils/tone.d.ts +7 -12
  213. package/package.json +4 -4
  214. package/scripts/check-css-literals.mjs +159 -23
  215. package/scripts/check-css-variables.mjs +5 -3
  216. package/scripts/css-source.mjs +97 -5
  217. package/dist/Avatar-P2KRQM2B.css +0 -156
  218. package/dist/Charts-D7G2BSXH.css +0 -277
  219. package/dist/CommandPalette-CSJDUCQA.css +0 -115
  220. package/dist/Kbd-W66MXQI5.css +0 -61
  221. package/dist/SearchTrigger-QXOYAUUY.css +0 -79
  222. package/dist/SidebarNav-QGSFKZYA.css +0 -319
  223. package/dist/StatCard-KYPKZUWX.css +0 -111
  224. package/dist/StatusDot-HA2L2FSX.css +0 -84
  225. package/dist/chunk-22O7LAW2.js +0 -41
  226. package/dist/chunk-AJNCATWZ.js +0 -144
  227. package/dist/chunk-F4PJZ4ED.js +0 -245
  228. package/dist/chunk-PNFASD6F.js +0 -98
  229. package/dist/chunk-PZSWF74H.js +0 -15
  230. package/dist/chunk-R66KLW7S.js +0 -143
  231. /package/dist/{chunk-ZCR6YGQ4.js → chunk-PKIN4IMB.js} +0 -0
@@ -0,0 +1,176 @@
1
+ /*
2
+ * The stepper: where a sequence has got to (Stepper.tsx).
3
+ *
4
+ * THE APPROVED DESIGN'S STEP ROW. Each step is a 20px pill inside the default
5
+ * hairline, the 11px step at the medium weight, 8px inside each end and 5px
6
+ * between a mark and the word; two pills are joined by a 10px rule in the
7
+ * strong hairline's colour with 6px either side of it. A finished step is the
8
+ * secondary ink behind a check, the current step its tone's soft tint under
9
+ * its ink behind its dot, and a step still to come the tertiary ink.
10
+ *
11
+ * EVERY INK IS A MEASURED PAIR. The secondary and tertiary steps are held to
12
+ * 4.5:1 on every opaque rung, and each tone's ink to 4.5:1 on its own soft
13
+ * tint over every rung, by the palette suite in @crewlethq/tokens; the pill
14
+ * draws nothing else. The current pill is the design's `work-soft` under
15
+ * `work-ink` in the default tone, and a Tag's colours in every tone, which is
16
+ * what a chip naming a state is in this kit.
17
+ */
18
+
19
+ .crewlet-stepper {
20
+ display: flex;
21
+ flex-wrap: wrap;
22
+ align-items: center;
23
+ /* The design's 6px between a pill and the rule beside it: a step and a half. */
24
+ gap: calc(var(--spacing-1) * 1.5);
25
+ min-width: 0;
26
+ margin: 0;
27
+ padding: 0;
28
+ list-style: none;
29
+ }
30
+
31
+ .crewlet-stepper__step {
32
+ display: inline-flex;
33
+ align-items: center;
34
+ gap: calc(var(--spacing-1) * 1.5);
35
+ min-width: 0;
36
+ }
37
+
38
+ /*
39
+ * THE RULE BETWEEN TWO STEPS is drawn by the second of them, so a sequence of
40
+ * one draws none and nothing trails the last. A pseudo-element, because it is
41
+ * furniture: it carries nothing a reader has to be told, and the list already
42
+ * says the steps are in order. 10px by a hairline, the measure of this one
43
+ * mark, and fixed at every density as a hairline is.
44
+ */
45
+ .crewlet-stepper__step + .crewlet-stepper__step::before {
46
+ content: '';
47
+ flex: none;
48
+ width: 10px;
49
+ height: 1px;
50
+ background: var(--color-border-strong);
51
+ }
52
+
53
+ .crewlet-stepper__chip {
54
+ display: inline-flex;
55
+ align-items: center;
56
+ /* The design's 5px between the check or the dot and the word. */
57
+ gap: calc(var(--spacing-1) * 1.25);
58
+ box-sizing: border-box;
59
+ /* The design's 20px pill, which follows the density with every other step
60
+ height in the kit. It labels and takes no press, so the 24px target floor
61
+ is not its to clear. */
62
+ height: calc(20px * var(--density, 1));
63
+ max-width: 100%;
64
+ padding: 0 var(--spacing-2);
65
+ border: 1px solid var(--color-border-default);
66
+ border-radius: var(--radius-pill);
67
+ color: var(--color-text-tertiary);
68
+ font-family: var(--font-family-sans);
69
+ font-size: var(--font-size-2xs);
70
+ font-weight: var(--font-weight-medium);
71
+ line-height: 1;
72
+ white-space: nowrap;
73
+ }
74
+
75
+ .crewlet-stepper__label {
76
+ min-width: 0;
77
+ overflow: hidden;
78
+ text-overflow: ellipsis;
79
+ }
80
+
81
+ .crewlet-stepper__check {
82
+ flex: none;
83
+ }
84
+
85
+ .crewlet-stepper__step--done > .crewlet-stepper__chip {
86
+ color: var(--color-text-secondary);
87
+ }
88
+
89
+ /*
90
+ * THE CURRENT STEP, in its tone. The hairline goes transparent rather than
91
+ * away, so the pill keeps its box and the row does not move by a pixel as the
92
+ * current step advances along it, and so forced-colors mode, which draws a
93
+ * transparent border in the system's own colour, still outlines it.
94
+ */
95
+ .crewlet-stepper--info .crewlet-stepper__step--current > .crewlet-stepper__chip {
96
+ border-color: transparent;
97
+ background: var(--color-feedback-info-soft);
98
+ color: var(--color-feedback-info-ink);
99
+ }
100
+
101
+ .crewlet-stepper--success .crewlet-stepper__step--current > .crewlet-stepper__chip {
102
+ border-color: transparent;
103
+ background: var(--color-feedback-success-soft);
104
+ color: var(--color-feedback-success-ink);
105
+ }
106
+
107
+ .crewlet-stepper--warning .crewlet-stepper__step--current > .crewlet-stepper__chip {
108
+ border-color: transparent;
109
+ background: var(--color-feedback-warning-soft);
110
+ color: var(--color-feedback-warning-ink);
111
+ }
112
+
113
+ .crewlet-stepper--danger .crewlet-stepper__step--current > .crewlet-stepper__chip {
114
+ border-color: transparent;
115
+ background: var(--color-feedback-danger-soft);
116
+ color: var(--color-feedback-danger-ink);
117
+ }
118
+
119
+ .crewlet-stepper--brand .crewlet-stepper__step--current > .crewlet-stepper__chip {
120
+ border-color: transparent;
121
+ background: var(--color-brand-accent-soft);
122
+ color: var(--color-brand-accent-ink);
123
+ }
124
+
125
+ /*
126
+ * INSIDE THE PILL THE DOT IS THE PILL'S OWN INK, as a Tag's is, and for the
127
+ * Tag's reason: StatusDot paints the fill step, measured as a mark on the
128
+ * opaque rungs, and here it stands on the tone's soft tint instead, where
129
+ * nothing measures it. The ink is the step that IS measured on that tint, at
130
+ * 4.5:1, and the colour of the word beside it. A pulsing dot keeps
131
+ * StatusDot's halo, the same soft step drawn once more over the pill, which
132
+ * stands dE 3.92 off it at the least (the light warning pill on the frame).
133
+ *
134
+ * Two classes deep, so it beats StatusDot's own tone rule whichever order the
135
+ * bundle writes the two files in.
136
+ */
137
+ .crewlet-stepper .crewlet-stepper__dot {
138
+ background: currentColor;
139
+ }
140
+
141
+ /*
142
+ * FORCED COLORS repaints every background to Canvas, which takes the current
143
+ * step's tint and its dot, so the one step the row is about would read like
144
+ * any other. The current pill is drawn as the system draws a selection,
145
+ * HighlightText on Highlight, with its dot in the same ink, and the rule
146
+ * between two steps in GrayText; the chips' hairlines are borders, which the
147
+ * mode keeps in its own colour.
148
+ *
149
+ * THE CURRENT PILL OPTS OUT OF THE ADJUSTMENT, which is safe only because
150
+ * every colour it draws in that mode is a system colour. Left to it, Chromium
151
+ * paints a Canvas backplate behind every run of text, and HighlightText is
152
+ * written for Highlight, not for Canvas: in a dark high-contrast theme the
153
+ * step's words drew black on black (measured in Chromium 153 with the mode
154
+ * emulated). Opting out also keeps shadows, so the pulsing dot's halo, which
155
+ * is the tone's soft tint and no system colour, is held still inside it.
156
+ */
157
+ @media (forced-colors: active) {
158
+ .crewlet-stepper .crewlet-stepper__step--current > .crewlet-stepper__chip {
159
+ forced-color-adjust: none;
160
+ border-color: Highlight;
161
+ background: Highlight;
162
+ color: HighlightText;
163
+ }
164
+
165
+ .crewlet-stepper .crewlet-stepper__dot {
166
+ background: HighlightText;
167
+ }
168
+
169
+ .crewlet-stepper .crewlet-stepper__dot.is-pulsing::after {
170
+ animation: none;
171
+ }
172
+
173
+ .crewlet-stepper__step + .crewlet-stepper__step::before {
174
+ background: GrayText;
175
+ }
176
+ }
@@ -1,4 +1,4 @@
1
- export { TabPanel, Tabs, tabId } from '../chunk-Q3B66TJM.js';
1
+ export { TabPanel, Tabs, tabId } from '../chunk-QY7UU5ZB.js';
2
2
  import '../chunk-BHHIIK3M.js';
3
3
  import '../chunk-BZFWDIV6.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -84,21 +84,29 @@
84
84
 
85
85
  /* ─── Pill (segmented control) ────────────────────────────────── */
86
86
  /*
87
- * A WELL WITH CHIPS IN IT, not a panel with buttons in it. The container is
88
- * the inset surface and carries no boundary of its own: the chip that is on
89
- * is what the reader looks for, and it is found by being the one thing lifted
90
- * off the well rather than by a border around the whole set.
87
+ * A WELL WITH CHIPS IN IT, not a panel with buttons in it: the approved
88
+ * design's segmented control. The well is the RAISED rung inside the default
89
+ * hairline, and the chip that is on is the CARD's own ground, lifted by a
90
+ * hairline and a small shadow, so it is found by being the one thing that
91
+ * matches the panel the row sits on.
92
+ *
93
+ * A RUNG AND A HAIRLINE, NOT A TRANSLUCENT WELL. The inset overlay it used to
94
+ * be stands almost nowhere off a card, so the well had no extent and the
95
+ * chips floated; the raised rung is held a visible step above the card by the
96
+ * palette suite, and the hairline finds it on any other ground.
91
97
  *
92
98
  * The inset is 2px, which is smaller than the scale's first step on purpose:
93
- * it is the gap a chip needs to read as sitting IN the well, and a 4px one
94
- * makes the row a control step taller than the button beside it.
99
+ * it is the gap a chip needs to read as sitting IN the well. With the 1px
100
+ * boundary it is three pixels a side, and a 24px chip makes a 30px row: the
101
+ * medium control step, the height of the button beside it.
95
102
  */
96
103
  .crewlet-tabs--pill {
97
104
  --crewlet-tabs-pill-inset: 2px;
98
105
 
99
106
  gap: var(--crewlet-tabs-pill-inset);
100
107
  padding: var(--crewlet-tabs-pill-inset);
101
- background: var(--color-surface-inset);
108
+ background: var(--color-surface-elevated);
109
+ border: 1px solid var(--color-border-default);
102
110
  border-radius: var(--radius-md);
103
111
  width: fit-content;
104
112
  }
@@ -186,19 +194,22 @@
186
194
 
187
195
  /*
188
196
  * A CHIP STANDS SHORTER THAN THE CONTROL IT SITS BESIDE, and it is the row
189
- * that has to match: the well adds its inset above and below every chip, so a
190
- * chip at a full control step makes the whole segmented row taller than the
191
- * button next to it. Six pixels off the md step and four off the sm one is
192
- * what the engine's own segmented row has always drawn.
197
+ * that has to match: the well adds its boundary and its inset above and below
198
+ * every chip, so a chip at a full control step makes the whole segmented row
199
+ * taller than the button next to it. Six pixels off the md step is exactly
200
+ * that boundary and inset, and it leaves the design's 24px chip in a 30px row.
193
201
  *
194
- * AND THE FLOOR IS TAKEN AGAIN AFTER THE SUBTRACTION. --size-control-sm
195
- * carries a 24px floor of its own, but subtracting from a step subtracts from
196
- * its floor too: at compact density `calc(var(--size-control-sm) - 4px)` is
197
- * 20px, under the target a finger can hit. max() against --size-target-min
198
- * leaves the value exactly 24px at density 1 and reachable at every other.
202
+ * AND THE FLOOR IS TAKEN AGAIN AFTER THE SUBTRACTION. Subtracting from a step
203
+ * subtracts from its floor too: at compact density
204
+ * `calc(var(--size-control-md) - 6px)` is 18.6px, under the target a finger
205
+ * can hit. max() against --size-target-min holds every density at 24px or
206
+ * more, and at density 1 the two agree.
199
207
  *
200
- * The corner is one hairline tighter than the well around it rather than a
201
- * step of its own, which is what reads as a chip sitting IN the well.
208
+ * The corner is the small radius, the design's: the well's 8px less its 1px
209
+ * boundary and 2px inset is 5px, and a chip a pixel rounder than that
210
+ * concentric curve is what reads as a chip sitting IN the well rather than a
211
+ * second well inside it. The side pad is the design's 10px, two steps and a
212
+ * half.
202
213
  *
203
214
  * AND THE CONTENT IS CENTRED IN THE CHIP. It was aligned to the start, for a
204
215
  * chip stretched on a grid track, which is a case the pill chrome's own
@@ -212,8 +223,9 @@
212
223
  */
213
224
  .crewlet-tabs--pill .crewlet-tabs__tab {
214
225
  min-height: max(var(--size-target-min), calc(var(--size-control-md) - 6px));
215
- padding: 0 var(--spacing-3);
216
- border-radius: var(--radius-chip);
226
+ padding: 0 calc(var(--spacing-2) + var(--spacing-1) / 2);
227
+ border-radius: var(--radius-sm);
228
+ color: var(--color-text-secondary);
217
229
  font-size: var(--font-size-xs);
218
230
  }
219
231
 
@@ -221,12 +233,12 @@
221
233
  * THE SMALL CHIP IS THE QUIET ONE. It is the register the rail's foot wears,
222
234
  * where a theme row and a density row sit beside a status pill and are read
223
235
  * past rather than read, so its side pad is the scale's first step rather
224
- * than its second and its glyph is the step under the label register's.
236
+ * than two and a half and its glyph is the step under the label register's.
225
237
  *
226
- * The height does not follow: at the reader's default density this chip is
227
- * already exactly --size-target-min, so a shorter one would be a target a
228
- * finger misses. The whole reduction comes out of the width, where the pad is
229
- * spent, and the floor above catches what is left.
238
+ * The height does not follow: the medium chip is already exactly
239
+ * --size-target-min at the reader's default density, so a shorter one would be
240
+ * a target a finger misses. The whole reduction comes out of the width, where
241
+ * the pad is spent, and the floor catches what the subtraction leaves.
230
242
  */
231
243
  .crewlet-tabs--pill.crewlet-tabs--sm .crewlet-tabs__tab {
232
244
  min-height: max(var(--size-target-min), calc(var(--size-control-sm) - 4px));
@@ -253,9 +265,17 @@
253
265
  color: var(--color-text-primary);
254
266
  }
255
267
 
268
+ /*
269
+ * The chip that is on: the CARD's ground and the primary ink, lifted by the
270
+ * default hairline drawn round it and the smallest shadow under it, the
271
+ * design's chip. The hairline is the half that finds it: on a dark palette a
272
+ * shadow over a dark well is nearly invisible. Both are one shadow list, and
273
+ * neither token in it is ever `none`, which would drop the whole list.
274
+ */
256
275
  .crewlet-tabs--pill .crewlet-tabs__tab.is-active {
257
276
  background: var(--color-surface-subtle);
258
- box-shadow: var(--shadow-xs);
277
+ color: var(--color-text-primary);
278
+ box-shadow: var(--shadow-xs), 0 0 0 1px var(--color-border-default);
259
279
  }
260
280
 
261
281
  /*
package/dist/Tag/Tag.d.ts CHANGED
@@ -1,17 +1,20 @@
1
1
  import type { HTMLAttributes, MouseEvent, ReactNode } from 'react';
2
- import type { PhaseTone, Tone } from '../utils/tone.js';
2
+ import type { Tone } from '../utils/tone.js';
3
3
  /**
4
- * Which vocabulary a tag speaks: a state, or a phase. Both, because the same
5
- * pill draws "failed" on the Model screen and "execute" on the turn beside it,
6
- * and a second component for the second vocabulary would be one recipe spelled
7
- * twice.
4
+ * What a tag's colour says: a state, the accent, or nothing at all.
5
+ *
6
+ * The same pill draws "failed" on the Model screen and "execute" on the turn
7
+ * beside it, and only the first is a state. The second is a CATEGORY, a phase,
8
+ * and a category is the neutral tag with its word: a hue per phase was a second
9
+ * colour vocabulary that said nothing the word did not, spent from the hues the
10
+ * states are held apart in.
8
11
  */
9
- export type TagVariant = Tone | PhaseTone;
12
+ export type TagVariant = Tone;
10
13
  /**
11
- * How much room the pill takes. The engine draws ONE badge and spends its
12
- * variation on tone, so these are three heights of that badge rather than
13
- * three different marks: `sm` is the engine's own geometry and the default,
14
- * `xs` a denser mark for a packed row, `md` a small control's height for a
14
+ * How much room the pill takes. The design draws ONE pill and spends its
15
+ * variation on tone, so these are three heights of that pill rather than
16
+ * three different marks: `sm` is the design's 22px pill and the default, `xs`
17
+ * the 18px count pill for a packed row, `md` a small control's height for a
15
18
  * toolbar.
16
19
  */
17
20
  export type TagSize = 'xs' | 'sm' | 'md';
@@ -26,7 +29,7 @@ export type TagSize = 'xs' | 'sm' | 'md';
26
29
  export type InteractiveTagSize = Exclude<TagSize, 'xs'>;
27
30
  export type TagAppearance = 'soft' | 'outline';
28
31
  interface TagLook {
29
- /** The state or the phase this tag names. Neutral by default. */
32
+ /** The state this tag names. Neutral by default, which is what a category such as a phase takes. */
30
33
  variant?: TagVariant | undefined;
31
34
  /** A tinted fill, or a boundary over the surface beneath. */
32
35
  appearance?: TagAppearance | undefined;
@@ -79,7 +82,7 @@ export interface InteractiveTagProps extends TagLook, Omit<HTMLAttributes<HTMLEl
79
82
  }
80
83
  export type TagProps = StaticTagProps | InteractiveTagProps;
81
84
  /**
82
- * A small pill that names a state, a phase or a value.
85
+ * A small pill that names a state, a category or a value.
83
86
  *
84
87
  * COLOUR IS NEVER THE ONLY CARRIER. Every tag renders its label, in every
85
88
  * variant, so a reader who cannot separate the warning hue from the danger one
@@ -90,18 +93,22 @@ export type TagProps = StaticTagProps | InteractiveTagProps;
90
93
  * under the tone's `ink`, never the solid fill with a label on it: the fill
91
94
  * step is measured as a MARK, at 3:1, and putting text on it would put that
92
95
  * text under the 4.5:1 it has to clear. 0.2.0 spelled five dark-theme literals
93
- * here instead, which measured between 1.14:1 and 1.58:1 on a light page.
96
+ * here instead, which measured between 1.14:1 and 1.58:1 on a light page. The
97
+ * neutral tag, which names no state, is the raised rung under the secondary
98
+ * ink, inside the strong hairline: its fill is a surface, and on a raised
99
+ * ground a borderless one would draw nothing.
94
100
  *
95
- * ITS LINE BOX IS FIXED. The height comes from the size step rather than from
96
- * the content, so a cell that holds a tag on one row and nothing on the next
97
- * is the same height on both and a table does not ripple as states arrive.
101
+ * IT IS A PILL, the approved design's: 22px with round ends at the caption
102
+ * step. Its line box is fixed. The height comes from the size step rather
103
+ * than from the content, so a cell that holds a tag on one row and nothing on
104
+ * the next is the same height on both and a table does not ripple as states
105
+ * arrive.
98
106
  *
99
- * A TAG THAT ACTS IS FOUR PIXELS TALLER THAN ONE THAT LABELS, and that is the
100
- * one place this pill departs from the engine's badge. The engine draws its
101
- * actionable badge at the inert one's 20px, which is a pointer target under
102
- * the 24px WCAG 2.2 accepts; everything else about the two, the tint, the ink,
103
- * the radius, the type and the padding, is identical, so a row still reads as
104
- * one set.
107
+ * A TAG THAT ACTS IS TWO PIXELS TALLER THAN ONE THAT LABELS, and that is the
108
+ * one place this pill departs from the design. The design draws its pill at
109
+ * 22px whatever it does, which is a pointer target under the 24px WCAG 2.2
110
+ * accepts; everything else about the two, the tint, the ink, the radius, the
111
+ * type and the padding, is identical, so a row still reads as one set.
105
112
  */
106
113
  export declare function Tag(props: TagProps): import("react").JSX.Element;
107
114
  export {};
package/dist/Tag/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Tag } from '../chunk-S2XHHEW4.js';
2
- import '../chunk-PZSWF74H.js';
1
+ export { Tag } from '../chunk-74KMX7YH.js';
2
+ import '../chunk-WIATRXEJ.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  /*
2
- * The tag: a small pill naming a state, a phase or a value.
2
+ * The tag: a small pill naming a state, a category or a value.
3
3
  *
4
4
  * THREE VARIABLES CARRY EVERY VARIANT. A tag is its tone's `soft` tint under
5
5
  * its tone's `ink`, with the `line` step as the boundary it grows when it can
@@ -19,39 +19,49 @@
19
19
 
20
20
  .crewlet-tag {
21
21
  /*
22
- * THE ENGINE'S BADGE. Its line box is 11px at the document's 1.5 leading
23
- * plus a pixel of padding and a pixel of border on each side, which lands on
24
- * 20.5px; the step below is the whole pixel that renders, and it scales with
25
- * density the way every size token does.
22
+ * THE APPROVED DESIGN'S PILL: 22px tall with fully round ends, the caption
23
+ * step at the medium weight, and 9px of room inside each end, which is the
24
+ * step a rounded end eats before the first letter clears it.
26
25
  *
27
26
  * The height is a STEP and the floor is separate, because the two answer
28
- * different questions. A tag that only labels takes the engine's geometry
29
- * exactly. A tag that ACTS is a pointer target, and 20px fails WCAG 2.2, so
30
- * it takes the 24px floor as well: the engine draws its actionable badge at
31
- * the inert one's height, which is the one place its look and the target
32
- * rule disagree. Nothing else about the pill changes, so a row of tags still
33
- * reads as one set.
27
+ * different questions. A tag that only labels takes the design's geometry
28
+ * exactly. A tag that ACTS is a pointer target, and 22px fails WCAG 2.2, so
29
+ * it takes the 24px floor as well. Nothing else about the pill changes, so a
30
+ * row of tags still reads as one set.
31
+ *
32
+ * THE NEUTRAL PILL IS THE RAISED RUNG under the secondary ink, the design's
33
+ * quiet pill: a category, a count, a word that is not a state. Every other
34
+ * variant below is its tone's soft tint under its ink.
35
+ *
36
+ * The boundary at rest is `--crewlet-tag-edge`: transparent for a tinted
37
+ * pill, whose hue already separates it from any neutral ground, and the
38
+ * strong border step for the neutral one (see its rule below).
34
39
  */
35
- --crewlet-tag-height: calc(20px * var(--density, 1));
40
+ --crewlet-tag-height: calc(22px * var(--density, 1));
36
41
  --crewlet-tag-floor: 0px;
37
- --crewlet-tag-fill: var(--color-surface-inset);
42
+ /* The design's 9px inside each round end: two steps and a quarter, so it
43
+ follows the density with every other gap. The remove control and the
44
+ press half of a split pill read it too, to reach the pill's own ends. */
45
+ --crewlet-tag-pad: calc(var(--spacing-2) + var(--spacing-1) / 4);
46
+ --crewlet-tag-fill: var(--color-surface-elevated);
38
47
  --crewlet-tag-ink: var(--color-text-secondary);
39
48
  --crewlet-tag-line: var(--color-border-hover);
49
+ --crewlet-tag-edge: transparent;
40
50
 
41
51
  display: inline-flex;
42
52
  align-items: center;
43
- gap: var(--spacing-1);
53
+ /* The design's 6px between a dot or a glyph and the word: a step and a
54
+ half. */
55
+ gap: calc(var(--spacing-1) * 1.5);
44
56
  height: max(var(--crewlet-tag-height), var(--crewlet-tag-floor));
45
- padding: 0 var(--spacing-2);
46
- border: 1px solid transparent;
47
- border-radius: var(--radius-xs);
57
+ padding: 0 var(--crewlet-tag-pad);
58
+ border: 1px solid var(--crewlet-tag-edge);
59
+ border-radius: var(--radius-pill);
48
60
  background: var(--crewlet-tag-fill);
49
61
  color: var(--crewlet-tag-ink);
50
62
  font-family: var(--font-family-sans);
51
- font-size: var(--font-size-2xs);
63
+ font-size: var(--font-size-xs);
52
64
  font-weight: var(--font-weight-medium);
53
- /* The engine tracks the badge a hundredth of an em open, which is the
54
- normal step at this size: a hundredth of 11px is a tenth of a pixel. */
55
65
  letter-spacing: var(--font-letter-spacing-normal);
56
66
  line-height: 1;
57
67
  /* A tag is an atomic token: its label never breaks across lines inside the
@@ -104,53 +114,54 @@
104
114
  /* ── sizes ─────────────────────────────────────────────────────────────── */
105
115
 
106
116
  /*
107
- * THREE HEIGHTS OF ONE BADGE. The engine draws a single pill and spends its
117
+ * THREE HEIGHTS OF ONE PILL. The design draws a single pill and spends its
108
118
  * variation on tone rather than on size, so the steps here differ by how much
109
- * room the pill takes and not by what it is: the type, the radius, the weight
110
- * and the tracking are the engine's at every one of them.
119
+ * room the pill takes and not by what it is: the radius, the weight and the
120
+ * tracking are the design's at every one of them.
111
121
  *
112
- * xs is an 18px pill and is NON-INTERACTIVE for that reason: it is under the
113
- * 24px target floor, and the component refuses a press at this step. It is for
114
- * a mark inside a dense row, where the label is still the carrier.
122
+ * xs is the design's 18px count pill, the one a rail row carries, and is
123
+ * NON-INTERACTIVE for that reason: it is under the 24px target floor, and the
124
+ * component refuses a press at this step. It is for a mark inside a dense
125
+ * row, where the label is still the carrier, and it takes the micro step, the
126
+ * design's 10.5px at the scale's floor.
115
127
  *
116
128
  * EVERY STEP SCALES WITH DENSITY, which is not decoration: written as a flat
117
- * 18px, this one stayed put while the badge above it came down to
118
- * 20 x 0.82 = 16.4px, so the dense mark rendered TALLER than the badge it is
119
- * meant to sit inside a row of. A step that does not move with the rest of the
120
- * scale is a step that overtakes one of its neighbours at some density.
129
+ * 18px, this one stayed put while the pill above it came down with the
130
+ * density, so the dense mark rendered TALLER than the pill it is meant to sit
131
+ * inside a row of. A step that does not move with the rest of the scale is a
132
+ * step that overtakes one of its neighbours at some density.
121
133
  */
122
134
  .crewlet-tag--xs {
123
135
  --crewlet-tag-height: calc(18px * var(--density, 1));
124
- padding: 0 var(--spacing-1);
125
- gap: 3px;
136
+ --crewlet-tag-pad: calc(var(--spacing-1) * 1.5);
137
+ gap: var(--spacing-1);
138
+ font-size: var(--font-size-2xs);
126
139
  }
127
140
 
128
- /* The engine's badge, and the default. */
141
+ /* The design's pill, and the default. */
129
142
  .crewlet-tag--sm {
130
- --crewlet-tag-height: calc(20px * var(--density, 1));
143
+ --crewlet-tag-height: calc(22px * var(--density, 1));
131
144
  }
132
145
 
133
146
  /* The md step is a small control's own height, so a tag and a small button in
134
- one toolbar sit on the same baseline. One type step up with it: 11px inside
135
- a 28px pill reads as a label that lost its box. */
147
+ one toolbar sit on the same line. */
136
148
  .crewlet-tag--md {
137
149
  --crewlet-tag-height: var(--size-control-sm);
138
- font-size: var(--font-size-xs);
139
150
  }
140
151
 
141
152
  /*
142
153
  * A TAG THAT ACTS CLEARS 24px, at every density and every step. Last among the
143
154
  * steps so it is the floor whichever one is drawn, and a floor rather than a
144
- * height so the md step keeps its 28px.
155
+ * height so the md step keeps its 26px.
145
156
  */
146
157
  .crewlet-tag--acts {
147
158
  --crewlet-tag-floor: max(24px, calc(24px * var(--density, 1)));
148
159
  }
149
160
 
150
- /* One step down from the sans, where there is a step to take: a mono face
151
- draws larger than the sans at the same size, and a machine value beside a
152
- word has to read as the same line. At the two smaller steps the sans is
153
- already at the bottom of the scale and the mono stays beside it. */
161
+ /* One step down from the sans: a mono face draws larger than the sans at the
162
+ same size, and a machine value beside a word has to read as the same line.
163
+ At xs the sans is already at the bottom of the scale and the mono stays
164
+ beside it. */
154
165
  .crewlet-tag--monospace .crewlet-tag__label {
155
166
  font-family: var(--font-family-mono);
156
167
  font-size: var(--font-size-2xs);
@@ -188,43 +199,6 @@
188
199
  --crewlet-tag-line: var(--color-brand-accent-soft-strong);
189
200
  }
190
201
 
191
- /*
192
- * The phase family has a soft step and no line step, because nothing else in
193
- * the system needed a phase boundary. The ink is the boundary here: it is the
194
- * same hue at a strength a 1px rule can be seen at, and a border is not text,
195
- * so the rule that an ink step is never a BACKGROUND is untouched.
196
- *
197
- * A PHASE IS SET IN THE MICRO-LABEL REGISTER, uppercase and tracked open,
198
- * where a state is set in the badge's own. Phase is the one categorical
199
- * identity the product spends colour on outside a chart, and it is what a
200
- * reader follows across four screens; the second register is what separates it
201
- * at a glance from the state badge sitting beside it on the same row.
202
- */
203
- .crewlet-tag--phase-onboarding,
204
- .crewlet-tag--phase-execute,
205
- .crewlet-tag--phase-review {
206
- letter-spacing: var(--font-letter-spacing-wide);
207
- text-transform: uppercase;
208
- }
209
-
210
- .crewlet-tag--phase-onboarding {
211
- --crewlet-tag-fill: var(--color-phase-onboarding-soft);
212
- --crewlet-tag-ink: var(--color-phase-onboarding-ink);
213
- --crewlet-tag-line: var(--color-phase-onboarding-ink);
214
- }
215
-
216
- .crewlet-tag--phase-execute {
217
- --crewlet-tag-fill: var(--color-phase-execute-soft);
218
- --crewlet-tag-ink: var(--color-phase-execute-ink);
219
- --crewlet-tag-line: var(--color-phase-execute-ink);
220
- }
221
-
222
- .crewlet-tag--phase-review {
223
- --crewlet-tag-fill: var(--color-phase-review-soft);
224
- --crewlet-tag-ink: var(--color-phase-review-ink);
225
- --crewlet-tag-line: var(--color-phase-review-ink);
226
- }
227
-
228
202
  /* ── appearance ────────────────────────────────────────────────────────── */
229
203
 
230
204
  /*
@@ -237,6 +211,31 @@
237
211
  border-color: var(--crewlet-tag-line);
238
212
  }
239
213
 
214
+ /*
215
+ * THE NEUTRAL PILL CARRIES A BOUNDARY, because its fill IS a surface. The
216
+ * raised rung is also the ground of a palette's lead block, a raised card and
217
+ * the rail's current row, and on any of them a raised pill with a transparent
218
+ * boundary was the colour of what it stood on: the pill vanished and its words
219
+ * read as loose text with odd gaps between them.
220
+ *
221
+ * THE STRONG STEP, NOT THE DEFAULT ONE. The design's own chip is found by 1px
222
+ * of its line step (`.chip`), which is the default border here, and that
223
+ * measured under the hairline dE of 3 on five grounds a pill lands on: 2.76 on
224
+ * the light frame, 2.86 on a pressed row over a light card, 2.77 and 2.71 on an
225
+ * inset well inside a raised surface, and 2.08 on a hovered row over the dark
226
+ * sheet. The strong step is the design's line-2, the boundary it draws round a
227
+ * key cap (`.kbd`), and it clears 3 on every rung and every overlay in both
228
+ * themes. The suite measures all of them.
229
+ *
230
+ * The hover takes the strong step once more, because the press line a tinted
231
+ * pill moves to on hover IS the strong step in both themes, and a hover that
232
+ * lands on the resting boundary draws no hover at all.
233
+ */
234
+ .crewlet-tag--neutral.crewlet-tag--soft {
235
+ --crewlet-tag-edge: var(--color-border-strong);
236
+ --crewlet-tag-line: var(--color-border-strong-hover);
237
+ }
238
+
240
239
  /* The neutral outline is the engine's `.badge.outline`: the hairline step as
241
240
  the boundary, and the tertiary ink, which is a quieter register than the
242
241
  tinted outlines keep. It is the appearance for a value that is not a state
@@ -295,9 +294,9 @@
295
294
  align-self: stretch;
296
295
  gap: inherit;
297
296
  min-width: 0;
298
- padding: 0 var(--spacing-2);
297
+ padding: 0 var(--crewlet-tag-pad);
299
298
  border: 0;
300
- border-radius: var(--radius-xs) 0 0 var(--radius-xs);
299
+ border-radius: var(--radius-pill) 0 0 var(--radius-pill);
301
300
  background: transparent;
302
301
  /* A button inherits none of these. */
303
302
  color: inherit;
@@ -354,10 +353,10 @@
354
353
  min-width: 24px;
355
354
  margin-block-start: -1px;
356
355
  margin-block-end: -1px;
357
- margin-right: calc(var(--spacing-2) * -1);
356
+ margin-right: calc(var(--crewlet-tag-pad) * -1);
358
357
  padding: 0 var(--spacing-1);
359
358
  border: 0;
360
- border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
359
+ border-radius: 0 var(--radius-pill) var(--radius-pill) 0;
361
360
  background: transparent;
362
361
  color: inherit;
363
362
  cursor: pointer;