@crewlethq/ui 0.83.0 → 0.84.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 (82) hide show
  1. package/README.md +38 -0
  2. package/dist/ActionCard/ActionCard.d.ts +7 -7
  3. package/dist/ActionCard/index.js +1 -1
  4. package/dist/ActionCard-YZKL3CKR.css +130 -0
  5. package/dist/AppShell/AppShell.d.ts +14 -11
  6. package/dist/AppShell/index.js +1 -1
  7. package/dist/{AppShell-U7D2MUUF.css → AppShell-NX5HCD4O.css} +84 -44
  8. package/dist/ArtifactBar/index.js +1 -1
  9. package/dist/ArtifactCard/index.js +3 -3
  10. package/dist/ArtifactKindIllustration/index.js +1 -1
  11. package/dist/{ArtifactKinds-3EH4KR3F.css → ArtifactKinds-27TE3KJL.css} +7 -7
  12. package/dist/ArtifactMakeRow/index.js +1 -1
  13. package/dist/ArtifactNameCell/index.js +1 -1
  14. package/dist/Avatar/index.js +1 -1
  15. package/dist/{Avatar-MNE3WBZO.css → Avatar-CRSLRUVT.css} +11 -10
  16. package/dist/BriefCard/index.js +2 -1
  17. package/dist/CatalogTile/CatalogTile.d.ts +23 -5
  18. package/dist/CatalogTile/index.d.ts +1 -1
  19. package/dist/CatalogTile/index.js +2 -1
  20. package/dist/{CatalogTile-6VF36JWA.css → CatalogTile-TMOSGSV3.css} +4 -3
  21. package/dist/CommentThread/index.js +1 -1
  22. package/dist/CompactNav/CompactNav.d.ts +10 -6
  23. package/dist/CompactNav/index.js +1 -1
  24. package/dist/DeepWorkCard/index.js +2 -2
  25. package/dist/DirectoryList/index.js +1 -1
  26. package/dist/{DirectoryList-XZOWYOA3.css → DirectoryList-IXQIMNFS.css} +8 -1
  27. package/dist/EntityChip/index.js +1 -1
  28. package/dist/ImageUpload/index.js +1 -1
  29. package/dist/InboxList/InboxList.d.ts +28 -2
  30. package/dist/InboxList/index.d.ts +1 -1
  31. package/dist/InboxList/index.js +6 -1
  32. package/dist/{InboxList-OFGSX5IH.css → InboxList-X5Q5WWAI.css} +63 -2
  33. package/dist/ListDetail/ListDetail.d.ts +6 -0
  34. package/dist/ListDetail/index.js +1 -1
  35. package/dist/{ListDetail-N3L7PB46.css → ListDetail-JGESKTR7.css} +38 -0
  36. package/dist/OrgLabel/index.js +1 -1
  37. package/dist/OrgNode/index.js +1 -1
  38. package/dist/OrgTable/index.js +1 -1
  39. package/dist/PeopleRail/index.js +1 -1
  40. package/dist/PresenceStack/index.js +1 -1
  41. package/dist/Principal/index.js +1 -1
  42. package/dist/PrincipalPicker/index.js +1 -1
  43. package/dist/ReadingPane/ReadingPane.d.ts +17 -1
  44. package/dist/ReadingPane/index.d.ts +1 -1
  45. package/dist/ReadingPane/index.js +2 -1
  46. package/dist/{ReadingPane-VLYOWMCM.css → ReadingPane-VFTRDPC5.css} +19 -0
  47. package/dist/SectionFrame/index.js +2 -2
  48. package/dist/ShareDialog/index.js +1 -1
  49. package/dist/SheetGrid/index.js +1 -1
  50. package/dist/SidebarNav/SidebarNav.d.ts +18 -2
  51. package/dist/SidebarNav/index.d.ts +1 -1
  52. package/dist/SidebarNav/index.js +1 -1
  53. package/dist/{SidebarNav-E7PZGGA6.css → SidebarNav-IKBKGXW4.css} +20 -0
  54. package/dist/TableCells/index.js +1 -1
  55. package/dist/ThreadSummary/index.js +2 -2
  56. package/dist/VersionTimeline/index.js +1 -1
  57. package/dist/{chunk-Q7N2ATMC.js → chunk-64JNKLLP.js} +57 -9
  58. package/dist/chunk-6C7GQOBV.js +10 -0
  59. package/dist/{chunk-YRNNUCQP.js → chunk-7BDBO2NP.js} +1 -1
  60. package/dist/{chunk-QM3432PH.js → chunk-7IWZN5Q2.js} +3 -3
  61. package/dist/{chunk-25JQNHTC.js → chunk-BRK3HXGZ.js} +8 -2
  62. package/dist/{chunk-QE4OIE3Q.js → chunk-DJIWCW5Z.js} +6 -4
  63. package/dist/{chunk-QPHD4UUG.js → chunk-F6ZUM66S.js} +160 -25
  64. package/dist/{chunk-MVMVMHYI.js → chunk-HDEKHP65.js} +1 -1
  65. package/dist/{chunk-BXGBGYKH.js → chunk-HKUZ2GYX.js} +1 -1
  66. package/dist/{chunk-ZB3E2Z4Y.js → chunk-J5T5TDM2.js} +1 -1
  67. package/dist/{chunk-C46DDVTK.js → chunk-LTD7KLOU.js} +1 -1
  68. package/dist/{chunk-YBC2CYPD.js → chunk-O4VTQMEF.js} +1 -1
  69. package/dist/{chunk-HTBTAIH6.js → chunk-OM2LABPS.js} +2 -2
  70. package/dist/{chunk-PGBKZSSQ.js → chunk-ORONAXSF.js} +10 -7
  71. package/dist/{chunk-YP2FS6SH.js → chunk-QPYGJ7R7.js} +1 -1
  72. package/dist/{chunk-ICE3D63E.js → chunk-QWRAWKB2.js} +50 -9
  73. package/dist/{chunk-SRDNGGZE.js → chunk-RKIJAXQA.js} +1 -1
  74. package/dist/{chunk-CF4M6N6A.js → chunk-XYSSFI5C.js} +1 -7
  75. package/dist/{chunk-IRONPJB4.js → chunk-YTLWOHOY.js} +1 -1
  76. package/dist/generated/index.js +33 -32
  77. package/dist/index.js +33 -32
  78. package/dist/styles.css +306 -99
  79. package/dist/utils/developing.d.ts +10 -0
  80. package/package.json +3 -3
  81. package/dist/ActionCard-47WSZ2O5.css +0 -110
  82. package/dist/{chunk-CV2LU2T2.js → chunk-IYI6HWKN.js} +1 -1
package/dist/styles.css CHANGED
@@ -109,13 +109,15 @@
109
109
  }
110
110
 
111
111
 
112
- /* ActionCard-47WSZ2O5.css */
112
+ /* ActionCard-YZKL3CKR.css */
113
113
  /*
114
- * ActionCard: a first step offered as a picture, on an artifact kind's
115
- * colour ground. The ground is the kind's own Ground steps (ArtifactKinds.css)
116
- * laid over the card rung, which the palette suite holds to 4.5:1 for the
117
- * primary text in every palette and both modes, with the kind's glow behind
118
- * the drawing.
114
+ * ActionCard: a first step offered as a picture, on a CALM TINT of an
115
+ * artifact kind's hue. The ground is the kind's own Ground steps
116
+ * (ArtifactKinds.css): the card rung tinted by a share of the hue's chroma,
117
+ * never a slab of it, which the palette suite holds to 4.5:1 for the primary
118
+ * text in every palette and both modes and to a chroma ceiling. The edge is
119
+ * the kind's hue stepped toward the ink until it clears 3:1, a step further
120
+ * under the pointer, and a soft halo of the hue stands behind the drawing.
119
121
  */
120
122
 
121
123
  /*
@@ -143,6 +145,7 @@
143
145
 
144
146
  .crewlet-action-card {
145
147
  --crewlet-action-card-ground: var(--crewlet-kind-ground);
148
+ --crewlet-action-card-edge: var(--crewlet-kind-edge);
146
149
  position: relative;
147
150
  display: flex;
148
151
  flex: none;
@@ -153,30 +156,41 @@
153
156
  box-sizing: border-box;
154
157
  overflow: hidden;
155
158
  padding: var(--spacing-3) var(--spacing-3) 0;
156
- /* The kind's hue itself is the edge: 3:1 or more on the sheet in every
157
- palette and mode, where the kind's Line step measured 2.5:1. */
158
- border: 1px solid var(--crewlet-kind-hue);
159
- border-radius: var(--radius-lg);
159
+ /* THE KIND'S OWN EDGE: its hue stepped toward the ink until it clears 3:1
160
+ on the sheet and on the card's tint (`--color-artifact-kind-<kind>-edge`,
161
+ derived by the tokens build and held by its suite). The Line step, the
162
+ hue at 0.38, did not clear it, and a neutral grey outline read as a card
163
+ from another family. */
164
+ border: 1px solid var(--crewlet-action-card-edge);
165
+ /* The edge scale: the extra-large corner a tall card of its own takes, and
166
+ the smallest shadow, so the card sits on the page rather than in it. */
167
+ border-radius: var(--radius-xl);
160
168
  background-color: var(--color-surface-subtle);
161
169
  background-image:
162
- radial-gradient(110% 64% at 50% 100%, var(--crewlet-kind-glow) 0%, transparent 72%),
170
+ radial-gradient(90% 56% at 50% 100%, var(--crewlet-kind-glow) 0%, transparent 72%),
163
171
  linear-gradient(180deg, var(--crewlet-action-card-ground) 0%, var(--crewlet-kind-ground-end) 100%);
172
+ box-shadow: var(--shadow-xs);
164
173
  color: var(--color-text-primary);
165
174
  font: inherit;
166
175
  text-align: left;
167
176
  cursor: pointer;
168
177
  scroll-snap-align: start;
169
- transition: box-shadow var(--motion-duration-fast) var(--motion-easing-default);
178
+ transition:
179
+ box-shadow var(--motion-duration-fast) var(--motion-easing-default),
180
+ border-color var(--motion-duration-fast) var(--motion-easing-default);
170
181
  }
171
182
 
172
- /* A QUIET HOVER: the ground deepens a step and a small shadow lifts the
173
- card off the page. Nothing moves. */
183
+ /* A QUIET HOVER: the tint deepens a step, the edge takes a stronger step of
184
+ the hue, and a small shadow lifts the card off the page. Nothing moves, so
185
+ a row of cards stays still under a pointer passing over it. */
174
186
  .crewlet-action-card:hover {
175
187
  --crewlet-action-card-ground: var(--crewlet-kind-ground-strong);
188
+ --crewlet-action-card-edge: var(--crewlet-kind-edge-strong);
176
189
  box-shadow: var(--shadow-sm);
177
190
  }
178
191
 
179
- /* The card draws its own edge, so the ring is drawn over it. */
192
+ /* The card draws its own edge, so the ring is drawn over it, on the same
193
+ corner. */
180
194
  .crewlet-action-card:focus-visible {
181
195
  outline: 2px solid var(--color-focus);
182
196
  outline-offset: var(--size-focus-ring-inset-offset);
@@ -192,23 +206,29 @@
192
206
  text-wrap: balance;
193
207
  }
194
208
 
195
- /* The drawing stands on the card's foot, still. */
209
+ /*
210
+ * THE DRAWING STANDS ON THE CARD'S FOOT, still, the card's own width less its
211
+ * inset. Every kind's drawing is one canvas (160 by 120), so each takes the
212
+ * same box whatever its shape, a tall page and a wide slide alike, where a
213
+ * fixed width and a height cap drew a page half the size of a slide. It is
214
+ * set a step into the foot, so it stands on the edge rather than floating
215
+ * above it, on a soft shadow of the kind's Fill.
216
+ */
196
217
  .crewlet-action-card__art {
197
218
  display: flex;
198
219
  align-items: flex-end;
199
220
  justify-content: center;
200
- height: 100px;
201
- margin: 0 calc(var(--spacing-3) * -1);
221
+ margin-bottom: calc(var(--spacing-2) * -1);
202
222
  }
203
223
 
204
224
  .crewlet-action-card__art .crewlet-kind-illustration {
205
- width: 112px;
206
- max-height: 96px;
207
- margin-bottom: calc(var(--spacing-2) * -1);
208
- filter: drop-shadow(0 6px 12px var(--crewlet-kind-line));
225
+ width: 100%;
226
+ height: auto;
227
+ filter: drop-shadow(0 4px 10px var(--crewlet-kind-fill));
209
228
  }
210
229
 
211
- /* FORCED COLORS drops the ground; the hue's border stays as the card's edge. */
230
+ /* FORCED COLORS drops the ground and the hue; the edge is drawn in the
231
+ system's text colour, so the card keeps its outline. */
212
232
  @media (forced-colors: active) {
213
233
  .crewlet-action-card {
214
234
  border-color: CanvasText;
@@ -944,7 +964,7 @@
944
964
  }
945
965
 
946
966
 
947
- /* AppShell-U7D2MUUF.css */
967
+ /* AppShell-NX5HCD4O.css */
948
968
  /*
949
969
  * The application frame: a rail on the FRAME, and the screen on a SHEET that
950
970
  * floats beside it.
@@ -973,6 +993,11 @@
973
993
  .crewlet-app-shell {
974
994
  --crewlet-app-shell-rail: var(--size-shell-rail);
975
995
  --crewlet-app-shell-topbar: var(--size-shell-topbar);
996
+ /* THE SHEET'S SIDE INSET, ONE LENGTH: the bar's, the content column's, and
997
+ the inset a box that reaches past the column to the sheet's edge keeps
998
+ inside itself (a `ListDetail` on a fill screen), one step narrower on a
999
+ narrow window. */
1000
+ --crewlet-app-shell-inset: var(--spacing-5);
976
1001
  /* What stands on the frame to the sheet's left: the rail's column, or
977
1002
  nothing where there is no rail or the rail is a drawer. */
978
1003
  --crewlet-app-shell-beside: var(--crewlet-app-shell-rail);
@@ -1575,7 +1600,8 @@
1575
1600
  gap: var(--spacing-3);
1576
1601
  flex: none;
1577
1602
  height: var(--crewlet-app-shell-topbar);
1578
- padding: 0 calc(var(--spacing-5) + var(--crewlet-app-shell-gutter, 0px)) 0 var(--spacing-5);
1603
+ padding: 0 calc(var(--crewlet-app-shell-inset) + var(--crewlet-app-shell-gutter, 0px)) 0
1604
+ var(--crewlet-app-shell-inset);
1579
1605
  border-bottom: 1px solid var(--color-border-default);
1580
1606
  background: var(--color-surface-background);
1581
1607
  }
@@ -1665,46 +1691,76 @@
1665
1691
  gap: var(--spacing-5);
1666
1692
  max-width: var(--size-content-max);
1667
1693
  margin: 0 auto;
1668
- padding: var(--spacing-5) var(--spacing-5);
1694
+ padding: var(--crewlet-app-shell-inset);
1669
1695
  padding-bottom: var(--crewlet-app-shell-content-end);
1670
1696
  min-width: 0;
1671
1697
  }
1672
1698
 
1673
- /* A screen that draws to the bottom of the window: the scroller stops
1674
- scrolling and the content column takes the height that is left.
1675
-
1676
- IT KEEPS THE GUTTER RESERVED, like every other screen. The top bar's end
1677
- inset counts the scroller's gutter (`--crewlet-app-shell-gutter`, measured
1678
- by the shell), so a fill screen that reserved none put the bar's controls
1679
- one gutter further out than on the screen beside it: with classic
1680
- scrollbars, Add seat moved 11px between an org chart and its roster, two
1681
- tabs of one page. A strip at the end edge of a full-screen canvas is the
1682
- smaller cost than a bar that moves under the pointer. */
1699
+ /*
1700
+ * A screen that draws to the bottom of the window: the scroller stops
1701
+ * scrolling and the content column takes the height that is left, and the
1702
+ * whole width, since a screen that fills the window is a frame for panes
1703
+ * rather than a page of prose (prose inside it keeps its own measure).
1704
+ *
1705
+ * THE SCROLLER RESERVES NO GUTTER; THE COLUMN PADS BY IT INSTEAD. Nothing
1706
+ * scrolls here, so the strip a scrolling screen keeps for its scrollbar is
1707
+ * only there to hold the content where the bar's controls expect it (the
1708
+ * bar's end inset counts the gutter). A reserved strip did that, and also
1709
+ * stood between the sheet's edge and every pane that scrolls on its own: a
1710
+ * list's detail drew its scrollbar 31px inside the sheet, beside an empty
1711
+ * strip, and nothing in the screen could paint over a reserved gutter. The
1712
+ * same length as padding holds the content exactly where it stood, and a box
1713
+ * standing in the column can reach past padding: the column publishes it as
1714
+ * `--crewlet-app-shell-bleed-end`, and a `ListDetail` takes it back so its
1715
+ * scrollbar is the sheet's last pixel. The scrollbar's width is read off the
1716
+ * shell's gauge here (AppShell.tsx), so the bar keeps its place between a
1717
+ * fill screen and a scrolling one.
1718
+ */
1683
1719
  .crewlet-app-shell--fill .crewlet-app-shell__main {
1684
1720
  overflow: hidden;
1721
+ scrollbar-gutter: auto;
1685
1722
  }
1686
1723
 
1687
1724
  .crewlet-app-shell--fill .crewlet-app-shell__content {
1688
1725
  --crewlet-app-shell-content-end: var(--spacing-5);
1726
+ --crewlet-app-shell-bleed-end: calc(var(--crewlet-app-shell-inset) + var(--crewlet-app-shell-gutter, 0px));
1689
1727
 
1690
1728
  height: 100%;
1729
+ max-width: none;
1730
+ padding-right: var(--crewlet-app-shell-bleed-end);
1691
1731
  }
1692
1732
 
1693
1733
  /*
1694
- * A FLUSH SCREEN draws its own frame to the sheet's edges: the column gives up
1695
- * its pad, its measure and its gap, and the scroller reserves no gutter, since
1696
- * nothing in it scrolls and a strip at its end would cut the screen's own
1697
- * edge. The column is the containing block for a `LayerHost` the screen
1698
- * keeps, so its layers fill the screen rather than the window.
1734
+ * THE GAUGE: an empty scroller, never seen, that always draws its scrollbar,
1735
+ * so the shell can read the scrollbar's width on a fill screen, where the
1736
+ * screen's own scroller reserves none. It is a row of no height in the
1737
+ * sheet's column, clipped, so it takes no room and moves nothing; the ruler
1738
+ * inside it has a height of its own, because a scroller of no height draws
1739
+ * no scrollbar in Firefox and measured 0 there.
1699
1740
  */
1700
- .crewlet-app-shell--fill-flush .crewlet-app-shell__main {
1701
- scrollbar-gutter: auto;
1741
+ .crewlet-app-shell__gauge {
1742
+ flex: none;
1743
+ height: 0;
1744
+ overflow: hidden;
1745
+ visibility: hidden;
1702
1746
  }
1703
1747
 
1748
+ .crewlet-app-shell__gauge-ruler {
1749
+ height: var(--size-target-min);
1750
+ overflow-y: scroll;
1751
+ }
1752
+
1753
+ /*
1754
+ * A FLUSH SCREEN draws its own frame to the sheet's edges: the column gives up
1755
+ * its pad and its gap as well, so there is nothing for a box in it to reach
1756
+ * past. The column is the containing block for a `LayerHost` the screen
1757
+ * keeps, so its layers fill the screen rather than the window.
1758
+ */
1704
1759
  .crewlet-app-shell--fill-flush .crewlet-app-shell__content {
1760
+ --crewlet-app-shell-bleed-end: 0px;
1761
+
1705
1762
  position: relative;
1706
1763
  gap: 0;
1707
- max-width: none;
1708
1764
  padding: 0;
1709
1765
  }
1710
1766
 
@@ -1869,22 +1925,26 @@
1869
1925
  }
1870
1926
 
1871
1927
  /*
1872
- * THE FOLD CONTROL stands in the rail's top left corner, in both shapes, so
1873
- * it never moves under the pointer that pressed it: a minus while the rail is
1874
- * full and a plus while it is compact. The corner is the square the head
1875
- * leaves empty up and to the left of the brand's mark, and the control is the
1876
- * target floor (`--size-target-min`), so it ends short of the mark on the
1877
- * compact column's centre at every density.
1928
+ * THE FOLD CONTROL stands on the head's row, before the brand's mark, in both
1929
+ * shapes, so it never moves under the pointer that pressed it: chevrons
1930
+ * pointing left to fold the rail and right to unfold it.
1931
+ *
1932
+ * THE CONTROL AND THE MARK ARE ONE PAIR: the control at the target floor
1933
+ * (`--size-target-min`, at every density), a step (`--spacing-1`), then the
1934
+ * mark, which is a target's size too, the pair centred in the compact column
1935
+ * so the 76px column holds both (12 + 24 + 4 + 24 + 12). The control is
1936
+ * centred on the bar's line as the mark is: the inset, then half of what the
1937
+ * bar leaves round it. The mark's inset below is the same arithmetic from the
1938
+ * other side.
1878
1939
  *
1879
1940
  * Quiet until the rail is pointed at: the tertiary ink, which holds 3:1 on
1880
1941
  * the frame, then the secondary, and the ghost's own primary under the
1881
- * pointer. Its ring is drawn inside its own box, because the corner it
1882
- * stands in is the window's, and a ring outside it would be cut there.
1942
+ * pointer. Its ring is drawn inside its own box, clear of the mark beside it.
1883
1943
  */
1884
1944
  .crewlet-app-shell__fold {
1885
1945
  position: absolute;
1886
- top: 0;
1887
- left: 0;
1946
+ top: calc(var(--size-shell-inset) + (var(--crewlet-app-shell-topbar) - var(--size-target-min)) / 2);
1947
+ left: calc((var(--size-shell-rail-compact) - 2 * var(--size-target-min) - var(--spacing-1)) / 2);
1888
1948
  z-index: 1;
1889
1949
  display: inline-flex;
1890
1950
  }
@@ -1904,13 +1964,20 @@
1904
1964
  }
1905
1965
 
1906
1966
  /*
1907
- * THE MARK STANDS WHERE THE COMPACT RAIL'S DOES, in both shapes: centred over
1908
- * the compact column, in the head. Full, the name follows it; compact, the
1909
- * name is not drawn (the link keeps it as its name and title).
1967
+ * THE MARK STANDS WHERE THE COMPACT RAIL'S DOES, in both shapes. With no fold
1968
+ * control it is centred over the compact column; beside the fold control it
1969
+ * is the second of the pair (above), a step after the control, which is half
1970
+ * the column and half the step in. Full, the name follows it; compact, the
1971
+ * name is not drawn (the link keeps it as its name and title), and the
1972
+ * lockup's end inset is given up, so the mark is all the column holds.
1910
1973
  */
1911
- .crewlet-app-shell--foldable .crewlet-app-shell__rail-head > .crewlet-brand,
1912
1974
  .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-head > .crewlet-brand {
1913
1975
  padding-left: calc((var(--size-shell-rail-compact) - var(--crewlet-brand-mark)) / 2);
1976
+ padding-right: 0;
1977
+ }
1978
+
1979
+ .crewlet-app-shell--foldable[data-rail] .crewlet-app-shell__rail-head > .crewlet-brand {
1980
+ padding-left: calc((var(--size-shell-rail-compact) + var(--spacing-1)) / 2);
1914
1981
  }
1915
1982
 
1916
1983
  .crewlet-app-shell[data-rail='compact'] .crewlet-brand__name,
@@ -2034,6 +2101,9 @@
2034
2101
  @media (width < 1024px) {
2035
2102
  .crewlet-app-shell {
2036
2103
  --crewlet-app-shell-beside: 0px;
2104
+ /* 16px: the content's 12px stood every page's first line 4px left of
2105
+ the bar's title and the controls over it. */
2106
+ --crewlet-app-shell-inset: var(--spacing-4);
2037
2107
  grid-template-columns: minmax(0, 1fr);
2038
2108
  }
2039
2109
 
@@ -2116,18 +2186,8 @@
2116
2186
  display: inline-flex;
2117
2187
  }
2118
2188
 
2119
- /* THE TOP BAR'S GUTTER, 16px: the content's 12px stood every page's first
2120
- line 4px left of the title and the controls over it. The bar and the
2121
- content take it together. */
2122
- .crewlet-app-shell__topbar {
2123
- padding: 0 calc(var(--spacing-4) + var(--crewlet-app-shell-gutter, 0px)) 0 var(--spacing-4);
2124
- }
2125
-
2126
2189
  .crewlet-app-shell__content {
2127
2190
  --crewlet-app-shell-content-end: var(--spacing-9);
2128
-
2129
- padding: var(--spacing-4) var(--spacing-4);
2130
- padding-bottom: var(--crewlet-app-shell-content-end);
2131
2191
  }
2132
2192
  }
2133
2193
 
@@ -4465,7 +4525,7 @@ a.crewlet-kind-tile:hover .crewlet-kind-tile__frame,
4465
4525
  }
4466
4526
 
4467
4527
 
4468
- /* ArtifactKinds-3EH4KR3F.css */
4528
+ /* ArtifactKinds-27TE3KJL.css */
4469
4529
  /*
4470
4530
  * A kind's colours, set once per kind on `--crewlet-kind-*` by its class
4471
4531
  * (`crewlet-kind--<kind>`): the hue, its Fill and Line steps, the ink a
@@ -4477,13 +4537,13 @@ a.crewlet-kind-tile:hover .crewlet-kind-tile__frame,
4477
4537
  * its own, imported by each surface that tints, because the glyph's module
4478
4538
  * carries no stylesheet (a frame that draws one glyph takes nothing else).
4479
4539
  */
4480
- .crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); --crewlet-kind-ground: var(--color-artifact-kind-doc-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-doc-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-doc-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-doc-glow); }
4481
- .crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); --crewlet-kind-ground: var(--color-artifact-kind-slides-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-slides-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-slides-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-slides-glow); }
4482
- .crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); --crewlet-kind-ground: var(--color-artifact-kind-design-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-design-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-design-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-design-glow); }
4483
- .crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); --crewlet-kind-ground: var(--color-artifact-kind-dashboard-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-dashboard-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-dashboard-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-dashboard-glow); }
4484
- .crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); --crewlet-kind-ground: var(--color-artifact-kind-html-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-html-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-html-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-html-glow); }
4485
- .crewlet-kind--brand { --crewlet-kind-hue: var(--color-artifact-kind-brand); --crewlet-kind-fill: var(--color-artifact-kind-brand-fill); --crewlet-kind-line: var(--color-artifact-kind-brand-line); --crewlet-kind-ink: var(--color-artifact-kind-brand-ink); --crewlet-kind-ground: var(--color-artifact-kind-brand-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-brand-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-brand-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-brand-glow); }
4486
- .crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); --crewlet-kind-ground: var(--color-artifact-kind-sheet-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-sheet-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-sheet-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-sheet-glow); }
4540
+ .crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); --crewlet-kind-ground: var(--color-artifact-kind-doc-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-doc-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-doc-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-doc-glow); --crewlet-kind-edge: var(--color-artifact-kind-doc-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-doc-edge-strong); }
4541
+ .crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); --crewlet-kind-ground: var(--color-artifact-kind-slides-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-slides-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-slides-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-slides-glow); --crewlet-kind-edge: var(--color-artifact-kind-slides-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-slides-edge-strong); }
4542
+ .crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); --crewlet-kind-ground: var(--color-artifact-kind-design-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-design-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-design-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-design-glow); --crewlet-kind-edge: var(--color-artifact-kind-design-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-design-edge-strong); }
4543
+ .crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); --crewlet-kind-ground: var(--color-artifact-kind-dashboard-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-dashboard-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-dashboard-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-dashboard-glow); --crewlet-kind-edge: var(--color-artifact-kind-dashboard-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-dashboard-edge-strong); }
4544
+ .crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); --crewlet-kind-ground: var(--color-artifact-kind-html-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-html-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-html-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-html-glow); --crewlet-kind-edge: var(--color-artifact-kind-html-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-html-edge-strong); }
4545
+ .crewlet-kind--brand { --crewlet-kind-hue: var(--color-artifact-kind-brand); --crewlet-kind-fill: var(--color-artifact-kind-brand-fill); --crewlet-kind-line: var(--color-artifact-kind-brand-line); --crewlet-kind-ink: var(--color-artifact-kind-brand-ink); --crewlet-kind-ground: var(--color-artifact-kind-brand-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-brand-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-brand-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-brand-glow); --crewlet-kind-edge: var(--color-artifact-kind-brand-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-brand-edge-strong); }
4546
+ .crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); --crewlet-kind-ground: var(--color-artifact-kind-sheet-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-sheet-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-sheet-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-sheet-glow); --crewlet-kind-edge: var(--color-artifact-kind-sheet-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-sheet-edge-strong); }
4487
4547
 
4488
4548
 
4489
4549
  /* ArtifactMakeRow-6UX2LTF7.css */
@@ -5023,7 +5083,7 @@ a.crewlet-make-row__item:active {
5023
5083
  }
5024
5084
 
5025
5085
 
5026
- /* Avatar-MNE3WBZO.css */
5086
+ /* Avatar-CRSLRUVT.css */
5027
5087
  /*
5028
5088
  * The identity badge.
5029
5089
  *
@@ -5365,18 +5425,19 @@ a.crewlet-make-row__item:active {
5365
5425
  * room one without takes: the corner badge hangs past it rather than growing
5366
5426
  * it, and a row lays out the same either way.
5367
5427
  *
5368
- * THE BADGE WHERE A READER LOOKS FOR PRESENCE: under a third of the face (0.3
5369
- * of the box), hanging a twentieth of the box past its bottom-right corner,
5370
- * with the notch (a gap of the ground round it) kept. At 36px that is an 11px
5371
- * badge set 2px past the corner, the size and place of a presence dot, where
5372
- * a badge at 0.42 of the box read as a second face. It never drops under
5373
- * 10px, where its glyph stops being a shape, and always hangs at least a
5374
- * pixel past the corner.
5428
+ * THE BADGE WHERE A READER LOOKS FOR PRESENCE: a quarter of the face (0.25
5429
+ * of the box), hanging a twenty-fifth of the box past its bottom-right
5430
+ * corner, with the notch (a gap of the ground round it) kept. At 40px that is
5431
+ * a 10px badge set under 2px past the corner, the size and place of a
5432
+ * presence dot. It never drops under 8px, the smallest its glyph still reads
5433
+ * as a shape, and always hangs at least a pixel past the corner. The floor
5434
+ * used to be 10px and the share 0.3, which made the badge half of a 20px face
5435
+ * and a third of a 32px one: a second face beside the first, not a dot on it.
5375
5436
  */
5376
5437
  .crewlet-avatar-frame {
5377
- --crewlet-avatar-status-size: max(10px, calc(var(--crewlet-avatar-size) * 0.3));
5378
- --crewlet-avatar-status-overhang: max(1px, calc(var(--crewlet-avatar-size) * 0.05));
5379
- --crewlet-avatar-status-gap: 2px;
5438
+ --crewlet-avatar-status-size: max(8px, calc(var(--crewlet-avatar-size) * 0.25));
5439
+ --crewlet-avatar-status-overhang: max(1px, calc(var(--crewlet-avatar-size) * 0.04));
5440
+ --crewlet-avatar-status-gap: 1.5px;
5380
5441
  position: relative;
5381
5442
  display: inline-flex;
5382
5443
  flex: none;
@@ -8678,7 +8739,7 @@ a.crewlet-breadcrumb__crumb:focus-visible {
8678
8739
  }
8679
8740
 
8680
8741
 
8681
- /* CatalogTile-6VF36JWA.css */
8742
+ /* CatalogTile-TMOSGSV3.css */
8682
8743
  /*
8683
8744
  * CatalogTile: mark, name and state, one sentence, and a foot with a quiet
8684
8745
  * fact and one action.
@@ -8760,9 +8821,10 @@ a.crewlet-breadcrumb__crumb:focus-visible {
8760
8821
  overflow-wrap: anywhere;
8761
8822
  }
8762
8823
 
8763
- /* A state in words (a StatusDot's label) at a Tag's caption step, so a row
8764
- reads the same whichever one a tile carries. It inherited the page's size,
8765
- and on a 16px page "Connected" stood taller than the name before it. */
8824
+ /* THE STATE, the tone's dot and its word, at the caption step the fact
8825
+ beside it takes, so a compact tile's line reads name, state, fact at one
8826
+ height. It inherited the page's size, and on a 16px page "Connected" stood
8827
+ taller than the name before it. */
8766
8828
  .crewlet-catalog-tile__status {
8767
8829
  display: inline-flex;
8768
8830
  font-size: var(--font-size-xs);
@@ -19032,7 +19094,7 @@ svg.crewlet-datetime__chevron {
19032
19094
  }
19033
19095
 
19034
19096
 
19035
- /* DirectoryList-XZOWYOA3.css */
19097
+ /* DirectoryList-IXQIMNFS.css */
19036
19098
  /*
19037
19099
  * DirectoryList: named groups of links, each line a mark, a label and a state,
19038
19100
  * and one foot that holds the bottom (DirectoryList.tsx).
@@ -19052,7 +19114,12 @@ svg.crewlet-datetime__chevron {
19052
19114
  font-family: var(--font-family-sans);
19053
19115
  }
19054
19116
 
19055
- /* The groups take the room and scroll on their own, so the foot stays put. */
19117
+ /* The groups take the room and scroll on their own, so the foot stays put.
19118
+
19119
+ THEIR INSET IS INSIDE THE SCROLLER. The gutter is reserved whether or not
19120
+ they scroll, and the lines end a step before it: a line's state pill stood
19121
+ against the scrollbar, and moved by its width when the list grew long
19122
+ enough to scroll. */
19056
19123
  .crewlet-directory__groups {
19057
19124
  display: flex;
19058
19125
  flex: 1 1 auto;
@@ -19061,7 +19128,9 @@ svg.crewlet-datetime__chevron {
19061
19128
  under it rather than a band between two runs of them. */
19062
19129
  gap: var(--spacing-3);
19063
19130
  min-height: 0;
19131
+ padding-right: var(--spacing-2);
19064
19132
  overflow-y: auto;
19133
+ scrollbar-gutter: stable;
19065
19134
  }
19066
19135
 
19067
19136
  .crewlet-directory__group {
@@ -22296,7 +22365,7 @@ a.crewlet-icon-btn {
22296
22365
  }
22297
22366
 
22298
22367
 
22299
- /* InboxList-OFGSX5IH.css */
22368
+ /* InboxList-X5Q5WWAI.css */
22300
22369
  /*
22301
22370
  * The inbox's column: groups of rows, each row a control with the task it is
22302
22371
  * about under it, and the quiet toggles at the end.
@@ -22325,6 +22394,9 @@ a.crewlet-icon-btn {
22325
22394
 
22326
22395
  /* The heading's own line box is the label's, so the label sits where it is drawn. */
22327
22396
  .crewlet-inbox-list__label {
22397
+ /* The arrival's wash stands behind the label's words, inside it. */
22398
+ position: relative;
22399
+ isolation: isolate;
22328
22400
  margin: 0;
22329
22401
  padding: var(--spacing-3) var(--spacing-2) var(--spacing-1);
22330
22402
  font: inherit;
@@ -22332,6 +22404,32 @@ a.crewlet-icon-btn {
22332
22404
  line-height: var(--font-line-height-snug);
22333
22405
  }
22334
22406
 
22407
+ /*
22408
+ * A ROW ARRIVED: a wash of the accent that fades back to the ground, over the
22409
+ * row itself, or over a group's label and count where the row landed in a
22410
+ * closed group. The row's keyframes name no last step, so the wash returns
22411
+ * to whatever the row draws of its own (hover, selected).
22412
+ */
22413
+ .crewlet-inbox-list__arrival {
22414
+ position: absolute;
22415
+ inset: 0;
22416
+ z-index: -1;
22417
+ border-radius: var(--radius-xs);
22418
+ pointer-events: none;
22419
+ animation: crewlet-inbox-arrive calc(var(--motion-duration-moderate) * 8) var(--motion-easing-out) both;
22420
+ }
22421
+
22422
+ .crewlet-inbox-row--arrived {
22423
+ animation: crewlet-inbox-arrive calc(var(--motion-duration-moderate) * 8) var(--motion-easing-out);
22424
+ }
22425
+
22426
+ @keyframes crewlet-inbox-arrive {
22427
+ 0%,
22428
+ 40% {
22429
+ background: var(--color-brand-accent-soft-strong);
22430
+ }
22431
+ }
22432
+
22335
22433
  /* The count after a label, in the quiet ink and the label's own register. */
22336
22434
  .crewlet-inbox-list__count {
22337
22435
  margin-inline-start: var(--spacing-1);
@@ -22406,12 +22504,38 @@ a.crewlet-icon-btn {
22406
22504
  * a selected row takes no hover on top of it: both are a background on the
22407
22505
  * same element, and a composite of the two is a colour nothing has measured.
22408
22506
  */
22507
+ /* ONE TRACK, so a leaving row can close its height (below). */
22409
22508
  .crewlet-inbox-row {
22509
+ display: grid;
22510
+ grid-template-rows: 1fr;
22410
22511
  min-width: 0;
22411
22512
  border-radius: var(--radius-md);
22412
22513
  transition: background var(--motion-duration-fast) var(--motion-easing-default);
22413
22514
  }
22414
22515
 
22516
+ .crewlet-inbox-row__body {
22517
+ min-width: 0;
22518
+ min-height: 0;
22519
+ }
22520
+
22521
+ /*
22522
+ * A ROW LEAVING closes its one track to nothing and fades, on the slow step
22523
+ * with the emphasized curve, the motion a column opens and shuts by, so the
22524
+ * rows under it slide up into its place. The shell's presence waits on the
22525
+ * track's transition (`INBOX_ROW_LEAVE`), and the row is inert all the while.
22526
+ */
22527
+ .crewlet-inbox-row--leaving {
22528
+ grid-template-rows: 0fr;
22529
+ opacity: 0;
22530
+ transition:
22531
+ grid-template-rows var(--motion-duration-slow) var(--motion-easing-emphasized),
22532
+ opacity var(--motion-duration-moderate) var(--motion-easing-out);
22533
+ }
22534
+
22535
+ .crewlet-inbox-row--leaving .crewlet-inbox-row__body {
22536
+ overflow: hidden;
22537
+ }
22538
+
22415
22539
  .crewlet-inbox-row:hover {
22416
22540
  background: var(--color-surface-hover);
22417
22541
  }
@@ -22648,7 +22772,7 @@ a.crewlet-icon-btn {
22648
22772
  }
22649
22773
 
22650
22774
  /* A row with no leading slot: the words start at the control's own pad, and so does the task. */
22651
- .crewlet-inbox-row:not(:has(.crewlet-inbox-row__leading)) > .crewlet-inbox-row__aside {
22775
+ .crewlet-inbox-row:not(:has(.crewlet-inbox-row__leading)) .crewlet-inbox-row__aside {
22652
22776
  padding-inline-start: var(--spacing-2);
22653
22777
  }
22654
22778
 
@@ -22684,10 +22808,16 @@ a.crewlet-icon-btn {
22684
22808
  }
22685
22809
 
22686
22810
  @media (prefers-reduced-motion: reduce) {
22687
- .crewlet-inbox-row {
22811
+ .crewlet-inbox-row,
22812
+ .crewlet-inbox-row--leaving {
22688
22813
  transition: none;
22689
22814
  }
22690
22815
 
22816
+ .crewlet-inbox-row--arrived,
22817
+ .crewlet-inbox-list__arrival {
22818
+ animation: none;
22819
+ }
22820
+
22691
22821
  .crewlet-inbox-list__toggle,
22692
22822
  .crewlet-inbox-list__chevron {
22693
22823
  transition: none;
@@ -24910,7 +25040,7 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
24910
25040
  }
24911
25041
 
24912
25042
 
24913
- /* ListDetail-N3L7PB46.css */
25043
+ /* ListDetail-JGESKTR7.css */
24914
25044
  /*
24915
25045
  * ListDetail: a list beside the detail of what is chosen in it, each scrolling
24916
25046
  * on its own in the height it is given, one pane where it is narrow
@@ -24923,6 +25053,17 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
24923
25053
  * drew the detail 130px wide beside a 17rem list. The phone rule below is the
24924
25054
  * one decision that stays the window's: on a phone the page scrolls as a
24925
25055
  * whole rather than each pane on its own.
25056
+ *
25057
+ * ON A SCREEN THAT FILLS THE WINDOW, THE PANE THAT SCROLLS IS ITS OUTERMOST
25058
+ * BOX, and its inset is padding inside it. Standing directly in the fill
25059
+ * column, the ListDetail reaches past the column's end pad to the sheet's
25060
+ * edge (below), so the scrollbar is the sheet's last pixel; the detail then
25061
+ * reserves its scrollbar's gutter whether or not it scrolls, and keeps the
25062
+ * screen's side inset between its content and that gutter, so a trailing
25063
+ * control (a header's Disconnect, a tile's Open) never touches the scrollbar,
25064
+ * does not move when the detail grows long enough to scroll, and ends under
25065
+ * the bar's last control. Anywhere else (a scrolling or a flush screen, or
25066
+ * outside a shell) it is as wide as its box, with nothing reserved.
24926
25067
  */
24927
25068
 
24928
25069
  /* THE HAIRLINE STANDS MIDWAY between the two panes: the list's inset before it
@@ -24930,6 +25071,9 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
24930
25071
  the list than to the detail it divides it from; the two still add to 64. */
24931
25072
  .crewlet-list-detail {
24932
25073
  --crewlet-list-detail-gutter: var(--spacing-7);
25074
+ /* The inset at a scrolling pane's end: the screen's own side inset in a
25075
+ shell, so the page's two edges match. */
25076
+ --crewlet-list-detail-end: var(--crewlet-app-shell-inset, var(--spacing-5));
24933
25077
 
24934
25078
  container: crewlet-list-detail / inline-size;
24935
25079
  display: flex;
@@ -24940,6 +25084,21 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
24940
25084
  min-height: 0;
24941
25085
  }
24942
25086
 
25087
+ /* STANDING IN A FILL SCREEN'S COLUMN, IT TAKES THE COLUMN'S END PAD BACK: the
25088
+ inset and the scrollbar's width, which the shell publishes for exactly
25089
+ this (`--crewlet-app-shell-bleed-end`, AppShell.css). The detail keeps the
25090
+ same inset inside itself, and reserves its gutter, there and only there. */
25091
+ :where(.crewlet-app-shell--fill:not(.crewlet-app-shell--fill-flush) .crewlet-app-shell__content) > .crewlet-list-detail {
25092
+ margin-right: calc(var(--crewlet-app-shell-bleed-end, 0px) * -1);
25093
+ }
25094
+
25095
+ :where(.crewlet-app-shell--fill:not(.crewlet-app-shell--fill-flush) .crewlet-app-shell__content)
25096
+ > .crewlet-list-detail
25097
+ .crewlet-list-detail__detail {
25098
+ padding-right: var(--crewlet-list-detail-end);
25099
+ scrollbar-gutter: stable;
25100
+ }
25101
+
24943
25102
  .crewlet-list-detail__panes {
24944
25103
  display: grid;
24945
25104
  flex: 1 1 auto;
@@ -24981,6 +25140,15 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
24981
25140
  overflow-y: auto;
24982
25141
  }
24983
25142
 
25143
+ /* The list is the pane that scrolls now, and takes the detail's end where
25144
+ the ListDetail reaches the sheet. */
25145
+ :where(.crewlet-app-shell--fill:not(.crewlet-app-shell--fill-flush) .crewlet-app-shell__content)
25146
+ > .crewlet-list-detail
25147
+ .crewlet-list-detail__list {
25148
+ padding-right: var(--crewlet-list-detail-end);
25149
+ scrollbar-gutter: stable;
25150
+ }
25151
+
24984
25152
  .crewlet-list-detail--showing-list .crewlet-list-detail__detail,
24985
25153
  .crewlet-list-detail--showing-detail .crewlet-list-detail__list {
24986
25154
  display: none;
@@ -31110,7 +31278,7 @@ button.crewlet-presence-stack__member:focus-visible {
31110
31278
  }
31111
31279
 
31112
31280
 
31113
- /* ReadingPane-VLYOWMCM.css */
31281
+ /* ReadingPane-VFTRDPC5.css */
31114
31282
  /*
31115
31283
  * One item read in full, in one column.
31116
31284
  *
@@ -31145,6 +31313,25 @@ button.crewlet-presence-stack__member:focus-visible {
31145
31313
  }
31146
31314
  }
31147
31315
 
31316
+ /* A NEW ITEM PLAYS IN (`contentKey`): a short fade and rise, so the reader
31317
+ sees the pane move on rather than its words change under them. */
31318
+ .crewlet-reading-pane__column--entering {
31319
+ animation: crewlet-reading-pane-enter var(--motion-duration-moderate) var(--motion-easing-out);
31320
+ }
31321
+
31322
+ @keyframes crewlet-reading-pane-enter {
31323
+ from {
31324
+ opacity: 0;
31325
+ transform: translateY(var(--spacing-2));
31326
+ }
31327
+ }
31328
+
31329
+ @media (prefers-reduced-motion: reduce) {
31330
+ .crewlet-reading-pane__column--entering {
31331
+ animation: none;
31332
+ }
31333
+ }
31334
+
31148
31335
  /* ---- The byline -------------------------------------------------------- */
31149
31336
 
31150
31337
  .crewlet-reading-pane__byline {
@@ -36174,7 +36361,7 @@ svg.crewlet-select__chevron {
36174
36361
  }
36175
36362
 
36176
36363
 
36177
- /* SidebarNav-E7PZGGA6.css */
36364
+ /* SidebarNav-IKBKGXW4.css */
36178
36365
  /*
36179
36366
  * The rail's navigation.
36180
36367
  *
@@ -36592,6 +36779,26 @@ svg.crewlet-select__chevron {
36592
36779
  line-height: 1;
36593
36780
  }
36594
36781
 
36782
+ /*
36783
+ * A QUIET BADGE keeps the pill, its size and its place at the row's end, and
36784
+ * takes the quiet count's grey: a neutral wash (`--color-fill-soft`, the
36785
+ * ground of a quiet label at rest) carrying the secondary ink, for work that
36786
+ * is the reader's own and waiting, but not calling. The secondary ink rather
36787
+ * than the count's tertiary, because on a wash over a hovered row the
36788
+ * tertiary measured 4.41:1 in light; it is the ink the compact rail's quiet
36789
+ * figure takes, so the two shapes draw the same grey. On the reader's own row
36790
+ * its ink lifts to the row's, as the count's does; the suite measures the
36791
+ * pair on every ground a row can have.
36792
+ */
36793
+ .crewlet-nav-item__badge--quiet {
36794
+ background: var(--color-fill-soft);
36795
+ color: var(--color-text-secondary);
36796
+ }
36797
+
36798
+ .crewlet-nav-item__row[aria-current='page'] .crewlet-nav-item__badge--quiet {
36799
+ color: inherit;
36800
+ }
36801
+
36595
36802
  /* Beside a count the badge is the second figure, not a second push to the
36596
36803
  end: two auto margins would split the room between them and float the
36597
36804
  count into the middle of the row. */