@crewlethq/ui 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -5
- package/dist/AppShell/index.js +2 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/{Avatar-QHYOFID3.css → Avatar-BPJ36QZR.css} +1 -1
- package/dist/AvatarPicker/index.js +6 -6
- package/dist/Breadcrumb/Breadcrumb.d.ts +68 -0
- package/dist/Breadcrumb/index.d.ts +3 -0
- package/dist/Breadcrumb/index.js +3 -0
- package/dist/Breadcrumb-YMWVM3SV.css +193 -0
- package/dist/ChoiceButtons/ChoiceButtons.d.ts +43 -0
- package/dist/ChoiceButtons/index.d.ts +3 -0
- package/dist/ChoiceButtons/index.js +3 -0
- package/dist/ChoiceButtons-DJ5EOGUA.css +127 -0
- package/dist/Combobox/index.js +2 -2
- package/dist/CommandPalette/CommandPalette.d.ts +48 -1
- package/dist/CommandPalette/index.js +3 -3
- package/dist/{CommandPalette-C5AMKGN2.css → CommandPalette-HBTNKHZQ.css} +55 -2
- package/dist/DataTable/index.js +4 -4
- package/dist/DataView/index.js +11 -11
- package/dist/DateTimePicker/index.js +2 -2
- package/dist/Document/Document.d.ts +56 -0
- package/dist/Document/index.d.ts +3 -0
- package/dist/Document/index.js +2 -0
- package/dist/Document-PQGXJHB7.css +288 -0
- package/dist/EntityChip/index.js +1 -1
- package/dist/Highlight/Highlight.d.ts +45 -0
- package/dist/Highlight/index.d.ts +3 -0
- package/dist/Highlight/index.js +2 -0
- package/dist/Highlight-DXLV2R6L.css +29 -0
- package/dist/HuePicker/index.js +3 -3
- package/dist/ImageUpload/index.js +2 -2
- package/dist/{ImageUpload-L2GE4JUM.css → ImageUpload-NVGMN7DP.css} +9 -6
- package/dist/InboxList/InboxList.d.ts +116 -0
- package/dist/InboxList/index.d.ts +3 -0
- package/dist/InboxList/index.js +5 -0
- package/dist/InboxList-YMFWKGGS.css +252 -0
- package/dist/KeyChip/KeyChip.d.ts +21 -0
- package/dist/KeyChip/index.d.ts +3 -0
- package/dist/KeyChip/index.js +2 -0
- package/dist/KeyChip-4XJU4BBE.css +30 -0
- package/dist/Link/Link.d.ts +17 -2
- package/dist/Link/index.js +1 -1
- package/dist/{Link-6BEFNMN2.css → Link-WPMVLKLY.css} +36 -1
- package/dist/ListInput/index.js +2 -2
- package/dist/Listbox/index.d.ts +2 -0
- package/dist/Listbox/index.js +1 -1
- package/dist/Listbox/useHighlightRest.d.ts +35 -0
- package/dist/MarkdownEditor/MarkdownEditor.d.ts +93 -0
- package/dist/MarkdownEditor/format.d.ts +34 -0
- package/dist/MarkdownEditor/index.d.ts +5 -0
- package/dist/MarkdownEditor/index.js +12 -0
- package/dist/MarkdownEditor-ZLSHTOIZ.css +146 -0
- package/dist/Modal/Modal.d.ts +5 -1
- package/dist/Modal/index.js +1 -1
- package/dist/{Modal-BNT3TDV2.css → Modal-3YJ2GG2T.css} +33 -0
- package/dist/OrgLabel/index.js +1 -1
- package/dist/OrgNode/index.js +1 -1
- package/dist/OrgTable/index.js +5 -5
- package/dist/Outline/Outline.d.ts +72 -0
- package/dist/Outline/index.d.ts +3 -0
- package/dist/Outline/index.js +2 -0
- package/dist/Outline-VCXKKU3E.css +78 -0
- package/dist/Popover/Popover.d.ts +21 -1
- package/dist/Popover/index.js +1 -1
- package/dist/ReadingPane/ReadingPane.d.ts +95 -0
- package/dist/ReadingPane/index.d.ts +3 -0
- package/dist/ReadingPane/index.js +4 -0
- package/dist/ReadingPane-5UOLPWY5.css +194 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +9 -1
- package/dist/SegmentedControl/index.js +3 -3
- package/dist/{SegmentedControl-76HODRBT.css → SegmentedControl-PKBLJVSA.css} +18 -0
- package/dist/Select/Select.d.ts +22 -0
- package/dist/Select/index.js +2 -2
- package/dist/{Select-4ANVLHUY.css → Select-XMZ44RWY.css} +24 -0
- package/dist/SidebarNav/index.js +2 -1
- package/dist/{SidebarNav-X5NLZNWA.css → SidebarNav-KF66MLOM.css} +4 -19
- package/dist/Switcher/Switcher.d.ts +151 -0
- package/dist/Switcher/index.d.ts +3 -0
- package/dist/Switcher/index.js +16 -0
- package/dist/Switcher-B44Q4WF4.css +346 -0
- package/dist/Tabs/Tabs.d.ts +7 -1
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-5I5Q5KKM.css → Tabs-ITJYJFMU.css} +49 -0
- package/dist/TagsInput/index.js +3 -3
- package/dist/ThemeGallery/ThemeGallery.d.ts +65 -0
- package/dist/ThemeGallery/index.d.ts +3 -0
- package/dist/ThemeGallery/index.js +6 -0
- package/dist/ThemeGallery-NITASULQ.css +93 -0
- package/dist/ThemeSwatch/ThemeSwatch.d.ts +71 -0
- package/dist/ThemeSwatch/index.d.ts +3 -0
- package/dist/ThemeSwatch/index.js +2 -0
- package/dist/ThemeSwatch-4DL457ZB.css +256 -0
- package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +5 -1
- package/dist/ThemeSwitcher/index.js +4 -4
- package/dist/ThemeToggle/ThemeToggle.d.ts +1 -1
- package/dist/ThemeToggle/index.js +1 -1
- package/dist/TimeWindowPicker/index.js +4 -4
- package/dist/Toaster/index.js +1 -1
- package/dist/{Toaster-NVDCEIP5.css → Toaster-KZ7YE2HA.css} +1 -0
- package/dist/Tree/index.d.ts +1 -1
- package/dist/Tree/index.js +1 -1
- package/dist/Tree/useTreeState.d.ts +37 -7
- package/dist/TreeCanvas/index.js +2 -2
- package/dist/TreeGrid/TreeGrid.d.ts +22 -2
- package/dist/TreeGrid/index.js +2 -2
- package/dist/{TreeGrid-NSW7VMOX.css → TreeGrid-FBX3MSJA.css} +19 -0
- package/dist/{chunk-EBBAAQDY.js → chunk-26PEPONN.js} +3 -1
- package/dist/{chunk-HV6IZFBK.js → chunk-4FFHJBEN.js} +2 -2
- package/dist/{chunk-JHQUT4WJ.js → chunk-4LDTQWS7.js} +1 -1
- package/dist/{chunk-GXYNEDNA.js → chunk-4Y7WKXAW.js} +1 -1
- package/dist/{chunk-MCPKHYMC.js → chunk-6LXMLQUM.js} +17 -4
- package/dist/{chunk-3UK4VFSK.js → chunk-6NIZCQUM.js} +1 -1
- package/dist/{chunk-ORNOOMVY.js → chunk-6TSZCBID.js} +2 -2
- package/dist/{chunk-ZMJHK7DR.js → chunk-75WOCYGC.js} +2 -2
- package/dist/chunk-77IEHFY4.js +299 -0
- package/dist/chunk-A5YKNRG6.js +94 -0
- package/dist/{chunk-HLBRPES3.js → chunk-B2CITO6R.js} +2 -2
- package/dist/{chunk-TEEJSTFG.js → chunk-CF6DTETT.js} +1 -1
- package/dist/{chunk-LAQK4V3Z.js → chunk-DJMLHCLD.js} +1 -1
- package/dist/{chunk-6MU7HNB4.js → chunk-F73MC7EZ.js} +47 -2
- package/dist/{chunk-ZPSOF6VL.js → chunk-FBSEJO2C.js} +1 -1
- package/dist/chunk-FYTIJM2T.js +40 -0
- package/dist/{chunk-ZHOM65MI.js → chunk-GG2QEZO2.js} +2 -2
- package/dist/chunk-H6VKCIWV.js +41 -0
- package/dist/{chunk-XV65NTIT.js → chunk-HKGS67VG.js} +94 -41
- package/dist/chunk-IG75YMUN.js +22 -0
- package/dist/{chunk-JCNUQ3US.js → chunk-JDPAA2JU.js} +1 -1
- package/dist/chunk-KLIEPFEZ.js +95 -0
- package/dist/{chunk-7LD6P32I.js → chunk-L3CTFFLZ.js} +2 -18
- package/dist/{chunk-UG5ZMAXW.js → chunk-LELD5KPA.js} +1 -1
- package/dist/chunk-MNFU2RNT.js +74 -0
- package/dist/{chunk-S3BCVWTU.js → chunk-MY374UUD.js} +49 -31
- package/dist/{chunk-K5Q2DK3P.js → chunk-NXDEPUVG.js} +1 -1
- package/dist/{chunk-PDUZO35I.js → chunk-O2ZDZZS7.js} +15 -6
- package/dist/{chunk-5WEVLIB6.js → chunk-RZ7RGECB.js} +1 -1
- package/dist/chunk-S3IENQ3E.js +336 -0
- package/dist/{chunk-WEIINZPA.js → chunk-SBRE7IML.js} +6 -2
- package/dist/{chunk-IVFJD7WY.js → chunk-UCCC7YVZ.js} +3 -2
- package/dist/{chunk-IINFVK3W.js → chunk-UZPHPW3Z.js} +6 -6
- package/dist/chunk-VWNC2L6W.js +110 -0
- package/dist/chunk-VYY56AMX.js +2 -0
- package/dist/chunk-WI6K5M5X.js +24 -0
- package/dist/{chunk-GOUKOXJK.js → chunk-WY2NLRZN.js} +3 -3
- package/dist/{chunk-SEFMO2EV.js → chunk-XFE5W2I4.js} +44 -5
- package/dist/chunk-XYCADWZN.js +100 -0
- package/dist/chunk-YSJC7AZC.js +62 -0
- package/dist/chunk-ZAJHGDAW.js +93 -0
- package/dist/generated/index.d.ts +12 -0
- package/dist/generated/index.js +65 -52
- package/dist/index.js +65 -52
- package/dist/styles.css +2449 -161
- package/dist/utils/highlight.d.ts +17 -0
- package/dist/utils/useMediaMatch.d.ts +12 -0
- package/package.json +3 -3
- package/dist/chunk-UAQIUSSK.js +0 -2
- package/dist/{chunk-74OVQWA5.js → chunk-6AR2T5Y4.js} +0 -0
- package/dist/{chunk-GARACZAH.js → chunk-LZP7FGT7.js} +1 -1
package/dist/styles.css
CHANGED
|
@@ -1088,7 +1088,7 @@
|
|
|
1088
1088
|
}
|
|
1089
1089
|
|
|
1090
1090
|
|
|
1091
|
-
/* Avatar-
|
|
1091
|
+
/* Avatar-BPJ36QZR.css */
|
|
1092
1092
|
/*
|
|
1093
1093
|
* The identity badge.
|
|
1094
1094
|
*
|
|
@@ -1233,7 +1233,7 @@
|
|
|
1233
1233
|
}
|
|
1234
1234
|
|
|
1235
1235
|
.crewlet-avatar--seeded {
|
|
1236
|
-
color: var(--color-text-on-
|
|
1236
|
+
color: var(--color-text-on-scrim);
|
|
1237
1237
|
}
|
|
1238
1238
|
|
|
1239
1239
|
.crewlet-avatar--tint-0 { background: var(--color-avatar-tint-0); }
|
|
@@ -1662,6 +1662,202 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
1662
1662
|
}
|
|
1663
1663
|
|
|
1664
1664
|
|
|
1665
|
+
/* Breadcrumb-YMWVM3SV.css */
|
|
1666
|
+
/*
|
|
1667
|
+
* The trail in a top bar.
|
|
1668
|
+
*
|
|
1669
|
+
* IT IS WHAT GIVES WAY, AND WHAT TAKES THE SLACK. `flex-grow: 1` is the spacer
|
|
1670
|
+
* a bar would otherwise need: the trail absorbs the free space, so the
|
|
1671
|
+
* controls after it stay in the bar's far corner. Its BASIS is 0, which is
|
|
1672
|
+
* what lets a wrapping bar break by what it holds rather than at a width, and
|
|
1673
|
+
* `flex-shrink: 100` puts it ahead of anything else on the bar that can give.
|
|
1674
|
+
*
|
|
1675
|
+
* ITS FLOOR IS THE WAY BACK OUT, measured by the component
|
|
1676
|
+
* (`--crewlet-breadcrumb-floor`): the ancestors at their width and the last
|
|
1677
|
+
* crumb's stub, at least 20ch, and never more than the whole bar. A fixed 20ch
|
|
1678
|
+
* alone let a seat's trail share a phone's line with its one button and cut
|
|
1679
|
+
* "Engineering · Co" mid-letter under it; measured, a trail that cannot show
|
|
1680
|
+
* its ancestry beside the controls makes the bar break a line instead.
|
|
1681
|
+
*
|
|
1682
|
+
* Past the whole bar the trail SCROLLS rather than clipping as a box: the
|
|
1683
|
+
* ancestors never shrink, so once they alone are wider than the bar there is
|
|
1684
|
+
* nothing left to ellipsise, and a clip lands wherever the pixels ran out.
|
|
1685
|
+
*/
|
|
1686
|
+
.crewlet-breadcrumb {
|
|
1687
|
+
display: flex;
|
|
1688
|
+
align-items: center;
|
|
1689
|
+
gap: 2px;
|
|
1690
|
+
flex: 1 100 0;
|
|
1691
|
+
min-width: min(100%, max(20ch, var(--crewlet-breadcrumb-floor, 0px)));
|
|
1692
|
+
overflow-x: auto;
|
|
1693
|
+
overflow-y: hidden;
|
|
1694
|
+
overscroll-behavior-x: contain;
|
|
1695
|
+
scrollbar-width: none;
|
|
1696
|
+
font-size: var(--font-size-sm);
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
.crewlet-breadcrumb::-webkit-scrollbar {
|
|
1700
|
+
display: none;
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1703
|
+
/* A trail that overflows is a tab stop (see Breadcrumb.tsx), and shows it. */
|
|
1704
|
+
.crewlet-breadcrumb:focus-visible {
|
|
1705
|
+
outline: 2px solid var(--color-focus);
|
|
1706
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
.crewlet-breadcrumb__part {
|
|
1710
|
+
display: inline-flex;
|
|
1711
|
+
align-items: center;
|
|
1712
|
+
gap: 2px;
|
|
1713
|
+
min-width: 0;
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
/*
|
|
1717
|
+
* THE OBJECT'S OWN NAME TAKES THE CUT, never the way back out. The reader
|
|
1718
|
+
* knows which object they are on, because the page below says so; what they
|
|
1719
|
+
* cannot reconstruct is the links out of it. So the ancestors keep their width
|
|
1720
|
+
* and the last part is the one that ellipsises.
|
|
1721
|
+
*/
|
|
1722
|
+
.crewlet-breadcrumb__part:not(:last-child) {
|
|
1723
|
+
flex: 0 0 auto;
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1726
|
+
svg.crewlet-breadcrumb__separator {
|
|
1727
|
+
flex: none;
|
|
1728
|
+
margin: 0 var(--spacing-1);
|
|
1729
|
+
color: var(--color-text-muted);
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
.crewlet-breadcrumb__crumb,
|
|
1733
|
+
.crewlet-breadcrumb__here {
|
|
1734
|
+
display: inline-flex;
|
|
1735
|
+
align-items: center;
|
|
1736
|
+
gap: calc(var(--spacing-1) * 1.5);
|
|
1737
|
+
min-width: 0;
|
|
1738
|
+
white-space: nowrap;
|
|
1739
|
+
overflow: hidden;
|
|
1740
|
+
text-overflow: ellipsis;
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1743
|
+
/*
|
|
1744
|
+
* The ancestors in the quiet ink: a link lifts to the primary ink under the
|
|
1745
|
+
* pointer, and one with nothing to press stays where it is. NO UNDERLINE: a
|
|
1746
|
+
* crumb is a piece of chrome, not a word in a sentence, and the step between
|
|
1747
|
+
* two measured text rungs is its hover in both themes.
|
|
1748
|
+
*/
|
|
1749
|
+
.crewlet-breadcrumb__crumb {
|
|
1750
|
+
border-radius: var(--radius-xs);
|
|
1751
|
+
color: var(--color-text-tertiary);
|
|
1752
|
+
text-decoration: none;
|
|
1753
|
+
transition: color var(--motion-duration-fast) var(--motion-easing-default);
|
|
1754
|
+
}
|
|
1755
|
+
|
|
1756
|
+
a.crewlet-breadcrumb__crumb:hover {
|
|
1757
|
+
color: var(--color-text-primary);
|
|
1758
|
+
text-decoration: none;
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1761
|
+
a.crewlet-breadcrumb__crumb:focus-visible {
|
|
1762
|
+
outline: 2px solid var(--color-focus);
|
|
1763
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
1764
|
+
}
|
|
1765
|
+
|
|
1766
|
+
/* FORCED COLOURS paints a link LinkText hovered or not, so the ink step cannot
|
|
1767
|
+
be seen there: the rule under the words is the hover in that mode. */
|
|
1768
|
+
@media (forced-colors: active) {
|
|
1769
|
+
a.crewlet-breadcrumb__crumb:hover {
|
|
1770
|
+
text-decoration: underline;
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1774
|
+
/* A glyph sits a step further from its word than a chip does from its name. */
|
|
1775
|
+
.crewlet-breadcrumb__icon {
|
|
1776
|
+
display: inline-flex;
|
|
1777
|
+
flex: none;
|
|
1778
|
+
margin-right: calc(var(--spacing-1) / 2);
|
|
1779
|
+
}
|
|
1780
|
+
|
|
1781
|
+
.crewlet-breadcrumb__badge,
|
|
1782
|
+
.crewlet-breadcrumb__key {
|
|
1783
|
+
flex: none;
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1786
|
+
/*
|
|
1787
|
+
* THE LABEL IS THE BOX THAT ELLIPSISES. The crumb around it is a flex
|
|
1788
|
+
* container, and `text-overflow` never reaches the anonymous item text inside
|
|
1789
|
+
* one makes; a span is a real flex item, and its `min-width: 0` is what lets
|
|
1790
|
+
* it shrink below its text at all.
|
|
1791
|
+
*/
|
|
1792
|
+
.crewlet-breadcrumb__text {
|
|
1793
|
+
min-width: 0;
|
|
1794
|
+
overflow: hidden;
|
|
1795
|
+
white-space: nowrap;
|
|
1796
|
+
text-overflow: ellipsis;
|
|
1797
|
+
}
|
|
1798
|
+
|
|
1799
|
+
/* THE LAST CRUMB IS THE PAGE'S `h1`, so the heading's own margins and size are
|
|
1800
|
+
the bar's, not the document's. */
|
|
1801
|
+
.crewlet-breadcrumb__here {
|
|
1802
|
+
margin: 0;
|
|
1803
|
+
color: var(--color-text-primary);
|
|
1804
|
+
font-size: inherit;
|
|
1805
|
+
font-weight: var(--font-weight-medium);
|
|
1806
|
+
line-height: inherit;
|
|
1807
|
+
}
|
|
1808
|
+
|
|
1809
|
+
/*
|
|
1810
|
+
* AND IT NEVER COLLAPSES TO NOTHING: a floor of a few characters keeps an
|
|
1811
|
+
* ellipsised stub, which is what tells a reader the trail has a last part at
|
|
1812
|
+
* all. The floor is the last part's alone; an ancestor never shrinks.
|
|
1813
|
+
*/
|
|
1814
|
+
.crewlet-breadcrumb__part:last-child > .crewlet-breadcrumb__here {
|
|
1815
|
+
min-width: 5ch;
|
|
1816
|
+
}
|
|
1817
|
+
|
|
1818
|
+
/*
|
|
1819
|
+
* A CONTROL AS THE HEADING'S WORDS draws its own edges: its hover fill and its
|
|
1820
|
+
* focus ring run to its own box, so the heading around it clips nothing.
|
|
1821
|
+
*/
|
|
1822
|
+
.crewlet-breadcrumb__here--control {
|
|
1823
|
+
overflow: visible;
|
|
1824
|
+
}
|
|
1825
|
+
|
|
1826
|
+
/* An identifier still waiting for its name, in the mono face a step down. */
|
|
1827
|
+
.crewlet-breadcrumb__crumb.is-mono,
|
|
1828
|
+
.crewlet-breadcrumb__here.is-mono {
|
|
1829
|
+
font-family: var(--font-family-mono);
|
|
1830
|
+
font-size: var(--font-size-compact);
|
|
1831
|
+
}
|
|
1832
|
+
|
|
1833
|
+
/*
|
|
1834
|
+
* ON A PHONE AN ANCESTOR WITH A GLYPH IS ITS GLYPH. The workspace's mark is
|
|
1835
|
+
* the one sign of where the reader is that survives a sidebar folded into a
|
|
1836
|
+
* drawer, and the line it shares with the drawer toggle and the page's primary
|
|
1837
|
+
* action has no room for its word as well. The word stays, out of sight, so
|
|
1838
|
+
* the crumb is still named.
|
|
1839
|
+
*/
|
|
1840
|
+
@media (width < 640px) {
|
|
1841
|
+
.crewlet-breadcrumb__part:not(:last-child) > .crewlet-breadcrumb__crumb:has(> .crewlet-breadcrumb__icon) > .crewlet-breadcrumb__text {
|
|
1842
|
+
position: absolute;
|
|
1843
|
+
width: 1px;
|
|
1844
|
+
height: 1px;
|
|
1845
|
+
margin: -1px;
|
|
1846
|
+
padding: 0;
|
|
1847
|
+
border: 0;
|
|
1848
|
+
overflow: hidden;
|
|
1849
|
+
clip-path: inset(50%);
|
|
1850
|
+
white-space: nowrap;
|
|
1851
|
+
}
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1855
|
+
.crewlet-breadcrumb__crumb {
|
|
1856
|
+
transition: none;
|
|
1857
|
+
}
|
|
1858
|
+
}
|
|
1859
|
+
|
|
1860
|
+
|
|
1665
1861
|
/* Button-UWKBTKYD.css */
|
|
1666
1862
|
/*
|
|
1667
1863
|
* The button, and the link drawn as one.
|
|
@@ -4053,6 +4249,136 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
4053
4249
|
}
|
|
4054
4250
|
|
|
4055
4251
|
|
|
4252
|
+
/* ChoiceButtons-DJ5EOGUA.css */
|
|
4253
|
+
/*
|
|
4254
|
+
* One answer, sent with one press: a column of buttons as tall as a touch
|
|
4255
|
+
* target, the recommended one first and filled with the accent.
|
|
4256
|
+
*
|
|
4257
|
+
* The plain option is the secondary button's recipe (the card's own ground
|
|
4258
|
+
* inside the strong hairline), and the recommended one the primary's, so the
|
|
4259
|
+
* pair reads as the screen's one primary action and its alternatives.
|
|
4260
|
+
*/
|
|
4261
|
+
|
|
4262
|
+
.crewlet-choice-buttons {
|
|
4263
|
+
display: grid;
|
|
4264
|
+
grid-template-columns: minmax(0, 1fr);
|
|
4265
|
+
gap: var(--spacing-2);
|
|
4266
|
+
}
|
|
4267
|
+
|
|
4268
|
+
.crewlet-choice-buttons__option {
|
|
4269
|
+
display: flex;
|
|
4270
|
+
align-items: center;
|
|
4271
|
+
justify-content: space-between;
|
|
4272
|
+
gap: var(--spacing-3);
|
|
4273
|
+
min-width: 0;
|
|
4274
|
+
min-height: var(--size-control-lg);
|
|
4275
|
+
padding: calc(var(--spacing-2) + var(--spacing-1) / 2) calc(var(--spacing-3) + var(--spacing-1) / 2);
|
|
4276
|
+
border: 1px solid var(--color-border-strong);
|
|
4277
|
+
border-radius: var(--radius-md);
|
|
4278
|
+
background: var(--color-surface-subtle);
|
|
4279
|
+
color: var(--color-text-primary);
|
|
4280
|
+
font: inherit;
|
|
4281
|
+
font-size: var(--font-size-sm);
|
|
4282
|
+
font-weight: var(--font-weight-medium);
|
|
4283
|
+
line-height: var(--font-line-height-snug);
|
|
4284
|
+
text-align: left;
|
|
4285
|
+
cursor: pointer;
|
|
4286
|
+
transition:
|
|
4287
|
+
background var(--motion-duration-fast) var(--motion-easing-default),
|
|
4288
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
4289
|
+
}
|
|
4290
|
+
|
|
4291
|
+
.crewlet-choice-buttons__option:hover:not([aria-disabled='true']) {
|
|
4292
|
+
background: var(--color-surface-elevated);
|
|
4293
|
+
border-color: var(--color-border-strong-hover);
|
|
4294
|
+
}
|
|
4295
|
+
|
|
4296
|
+
.crewlet-choice-buttons__option:active:not([aria-disabled='true']) {
|
|
4297
|
+
background: var(--color-surface-pressed);
|
|
4298
|
+
}
|
|
4299
|
+
|
|
4300
|
+
/*
|
|
4301
|
+
* The plain option draws the strong hairline, so its ring is drawn over that
|
|
4302
|
+
* edge rather than a gap away from it, which would read as a second outline.
|
|
4303
|
+
*/
|
|
4304
|
+
.crewlet-choice-buttons__option:focus-visible {
|
|
4305
|
+
outline: 2px solid var(--color-focus);
|
|
4306
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
4307
|
+
}
|
|
4308
|
+
|
|
4309
|
+
.crewlet-choice-buttons__option[aria-disabled='true'] {
|
|
4310
|
+
cursor: not-allowed;
|
|
4311
|
+
}
|
|
4312
|
+
|
|
4313
|
+
/* The option on its way: still this option, mid-action. */
|
|
4314
|
+
.crewlet-choice-buttons__option[aria-busy='true'] {
|
|
4315
|
+
cursor: progress;
|
|
4316
|
+
}
|
|
4317
|
+
|
|
4318
|
+
.crewlet-choice-buttons__option--recommended {
|
|
4319
|
+
background: var(--color-brand-accent);
|
|
4320
|
+
border-color: transparent;
|
|
4321
|
+
color: var(--color-text-on-accent);
|
|
4322
|
+
}
|
|
4323
|
+
|
|
4324
|
+
.crewlet-choice-buttons__option--recommended:hover:not([aria-disabled='true']) {
|
|
4325
|
+
background: var(--color-brand-accent-hover);
|
|
4326
|
+
border-color: transparent;
|
|
4327
|
+
}
|
|
4328
|
+
|
|
4329
|
+
.crewlet-choice-buttons__option--recommended:active:not([aria-disabled='true']) {
|
|
4330
|
+
background: var(--color-brand-accent-active);
|
|
4331
|
+
}
|
|
4332
|
+
|
|
4333
|
+
/*
|
|
4334
|
+
* The accent fill draws no edge, and an inset ring on it would be drawn in
|
|
4335
|
+
* nearly the fill's own colour, so its ring stands off it as a primary
|
|
4336
|
+
* button's does.
|
|
4337
|
+
*/
|
|
4338
|
+
.crewlet-choice-buttons__option--recommended:focus-visible {
|
|
4339
|
+
outline-offset: 2px;
|
|
4340
|
+
}
|
|
4341
|
+
|
|
4342
|
+
.crewlet-choice-buttons__text {
|
|
4343
|
+
display: grid;
|
|
4344
|
+
gap: 2px;
|
|
4345
|
+
min-width: 0;
|
|
4346
|
+
overflow-wrap: anywhere;
|
|
4347
|
+
}
|
|
4348
|
+
|
|
4349
|
+
.crewlet-choice-buttons__detail {
|
|
4350
|
+
font-size: var(--font-size-xs);
|
|
4351
|
+
font-weight: var(--font-weight-regular);
|
|
4352
|
+
color: var(--color-text-tertiary);
|
|
4353
|
+
}
|
|
4354
|
+
|
|
4355
|
+
/*
|
|
4356
|
+
* On the accent fill the detail takes the label's own ink. The tertiary step
|
|
4357
|
+
* is measured on the surfaces, not on the accent, where it does not clear.
|
|
4358
|
+
*/
|
|
4359
|
+
.crewlet-choice-buttons__option--recommended .crewlet-choice-buttons__detail {
|
|
4360
|
+
color: var(--color-text-on-accent);
|
|
4361
|
+
}
|
|
4362
|
+
|
|
4363
|
+
/*
|
|
4364
|
+
* The mark, in the micro-label register. Full ink rather than a faded one:
|
|
4365
|
+
* eleven pixels of white on the accent clears 4.5:1 only at full strength.
|
|
4366
|
+
*/
|
|
4367
|
+
.crewlet-choice-buttons__note {
|
|
4368
|
+
flex: none;
|
|
4369
|
+
font-size: var(--font-size-2xs);
|
|
4370
|
+
font-weight: var(--font-weight-medium);
|
|
4371
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
4372
|
+
text-transform: uppercase;
|
|
4373
|
+
}
|
|
4374
|
+
|
|
4375
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4376
|
+
.crewlet-choice-buttons__option {
|
|
4377
|
+
transition: none;
|
|
4378
|
+
}
|
|
4379
|
+
}
|
|
4380
|
+
|
|
4381
|
+
|
|
4056
4382
|
/* ChoiceList-2PQJS4DX.css */
|
|
4057
4383
|
/*
|
|
4058
4384
|
* A short list of answers in one bordered box: a radio, the label with a line
|
|
@@ -4439,7 +4765,7 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
4439
4765
|
}
|
|
4440
4766
|
|
|
4441
4767
|
|
|
4442
|
-
/* CommandPalette-
|
|
4768
|
+
/* CommandPalette-HBTNKHZQ.css */
|
|
4443
4769
|
/*
|
|
4444
4770
|
* The command palette: a field, an optional row of scopes, one scroller
|
|
4445
4771
|
* holding the lead and the list, and a key legend.
|
|
@@ -4498,17 +4824,70 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
4498
4824
|
* glyph stood 24px in and the keycap 28px from the edge; at 12px they stand
|
|
4499
4825
|
* 20px and 16px in, where the approved palette draws them, and the query still
|
|
4500
4826
|
* starts on the line the design's does.
|
|
4827
|
+
*
|
|
4828
|
+
* The band is the BAR around the field, so a step's chip shares it: the field
|
|
4829
|
+
* itself draws no box and fills what the chip leaves.
|
|
4501
4830
|
*/
|
|
4502
|
-
.crewlet-
|
|
4831
|
+
.crewlet-palette__bar {
|
|
4832
|
+
display: flex;
|
|
4833
|
+
align-items: center;
|
|
4834
|
+
gap: var(--spacing-2);
|
|
4503
4835
|
flex-shrink: 0;
|
|
4504
4836
|
min-height: var(--size-row-lg);
|
|
4505
4837
|
padding-inline: var(--spacing-3);
|
|
4506
|
-
border: none;
|
|
4507
4838
|
border-bottom: 1px solid var(--color-border-default);
|
|
4839
|
+
}
|
|
4840
|
+
|
|
4841
|
+
.crewlet-input.crewlet-palette__field {
|
|
4842
|
+
flex: 1;
|
|
4843
|
+
min-width: 0;
|
|
4844
|
+
align-self: stretch;
|
|
4845
|
+
padding-inline: 0;
|
|
4846
|
+
border: none;
|
|
4508
4847
|
border-radius: 0;
|
|
4509
4848
|
background: transparent;
|
|
4510
4849
|
}
|
|
4511
4850
|
|
|
4851
|
+
/*
|
|
4852
|
+
* THE STEP'S CHIP: where the reader is, and the way back. It wears the
|
|
4853
|
+
* accent's soft tint and ink, the kit's mark for "this is on", because a step
|
|
4854
|
+
* is a narrowing the reader chose, as a filter that is on is; it is a control,
|
|
4855
|
+
* so it takes the pointer and draws its own ring.
|
|
4856
|
+
*/
|
|
4857
|
+
.crewlet-palette__step {
|
|
4858
|
+
display: inline-flex;
|
|
4859
|
+
align-items: center;
|
|
4860
|
+
gap: var(--spacing-1);
|
|
4861
|
+
flex: none;
|
|
4862
|
+
min-height: var(--size-target-min);
|
|
4863
|
+
padding: 0 var(--spacing-2) 0 var(--spacing-1);
|
|
4864
|
+
border: none;
|
|
4865
|
+
border-radius: var(--radius-sm);
|
|
4866
|
+
background: var(--color-brand-accent-soft);
|
|
4867
|
+
color: var(--color-brand-accent-ink);
|
|
4868
|
+
font: inherit;
|
|
4869
|
+
font-size: var(--font-size-xs);
|
|
4870
|
+
font-weight: var(--font-weight-medium);
|
|
4871
|
+
white-space: nowrap;
|
|
4872
|
+
cursor: pointer;
|
|
4873
|
+
}
|
|
4874
|
+
|
|
4875
|
+
/* Under the pointer it draws the line the soft tint is paired with, rather
|
|
4876
|
+
than a stronger fill its ink was never measured on. */
|
|
4877
|
+
.crewlet-palette__step:hover {
|
|
4878
|
+
box-shadow: inset 0 0 0 1px var(--color-brand-accent-soft-strong);
|
|
4879
|
+
}
|
|
4880
|
+
|
|
4881
|
+
.crewlet-palette__step:focus-visible {
|
|
4882
|
+
outline: 2px solid var(--color-focus);
|
|
4883
|
+
outline-offset: 1px;
|
|
4884
|
+
}
|
|
4885
|
+
|
|
4886
|
+
/* In a step the query starts a gap after the chip, not a text inset after it. */
|
|
4887
|
+
.crewlet-palette__bar.is-step .crewlet-input__control {
|
|
4888
|
+
padding-left: 0;
|
|
4889
|
+
}
|
|
4890
|
+
|
|
4512
4891
|
.crewlet-input.crewlet-palette__field .crewlet-input__control {
|
|
4513
4892
|
font-size: var(--font-size-md);
|
|
4514
4893
|
}
|
|
@@ -8023,14 +8402,305 @@ svg.crewlet-datetime__chevron {
|
|
|
8023
8402
|
}
|
|
8024
8403
|
|
|
8025
8404
|
|
|
8026
|
-
/*
|
|
8405
|
+
/* Document-PQGXJHB7.css */
|
|
8027
8406
|
/*
|
|
8028
|
-
*
|
|
8407
|
+
* Rendered markdown, set as a document (Document.tsx).
|
|
8029
8408
|
*
|
|
8030
|
-
*
|
|
8031
|
-
*
|
|
8032
|
-
*
|
|
8033
|
-
|
|
8409
|
+
* Every size here is a step on the type ramp and every gap a spacing step,
|
|
8410
|
+
* because a reading column set in sizes of its own (32, 20, 18, 15 and 14.5px
|
|
8411
|
+
* were measured on one) is a column that drifts from every other surface.
|
|
8412
|
+
*/
|
|
8413
|
+
|
|
8414
|
+
.crewlet-document {
|
|
8415
|
+
/* The two rhythms a size sets: between blocks, and above a section. */
|
|
8416
|
+
--crewlet-document-gap: var(--spacing-4);
|
|
8417
|
+
--crewlet-document-section-gap: var(--spacing-6);
|
|
8418
|
+
margin: 0;
|
|
8419
|
+
min-width: 0;
|
|
8420
|
+
font-family: var(--font-family-sans);
|
|
8421
|
+
font-size: var(--font-size-sm);
|
|
8422
|
+
line-height: var(--font-line-height-relaxed);
|
|
8423
|
+
color: var(--color-text-secondary);
|
|
8424
|
+
/* The renderer decides what a break is, so the whitespace rule is normal. */
|
|
8425
|
+
white-space: normal;
|
|
8426
|
+
overflow-wrap: break-word;
|
|
8427
|
+
}
|
|
8428
|
+
|
|
8429
|
+
.crewlet-document--sm {
|
|
8430
|
+
--crewlet-document-gap: var(--spacing-3);
|
|
8431
|
+
--crewlet-document-section-gap: var(--spacing-5);
|
|
8432
|
+
font-size: var(--font-size-compact);
|
|
8433
|
+
line-height: var(--font-line-height-normal);
|
|
8434
|
+
}
|
|
8435
|
+
|
|
8436
|
+
.crewlet-document--measure {
|
|
8437
|
+
max-width: var(--size-measure);
|
|
8438
|
+
}
|
|
8439
|
+
|
|
8440
|
+
/*
|
|
8441
|
+
* EVERY BLOCK'S OWN MARGIN IS ZEROED FIRST, and the rhythm is one rule over
|
|
8442
|
+
* siblings. The other way round, a margin reset per element after the sibling
|
|
8443
|
+
* rule, is how a rhythm dies: the shorthand resets the top margin too, at the
|
|
8444
|
+
* same specificity and later in the file, and every block runs into the next.
|
|
8445
|
+
*/
|
|
8446
|
+
.crewlet-document :where(p, h1, h2, h3, h4, h5, h6, ul, ol, pre, blockquote, table, figure) {
|
|
8447
|
+
margin: 0;
|
|
8448
|
+
}
|
|
8449
|
+
|
|
8450
|
+
.crewlet-document > * + * {
|
|
8451
|
+
margin-block-start: var(--crewlet-document-gap);
|
|
8452
|
+
}
|
|
8453
|
+
|
|
8454
|
+
.crewlet-document :where(h1, h2, h3, h4, h5, h6) {
|
|
8455
|
+
font-weight: var(--font-weight-semibold);
|
|
8456
|
+
line-height: var(--font-line-height-tight);
|
|
8457
|
+
letter-spacing: var(--font-letter-spacing-snug);
|
|
8458
|
+
color: var(--color-text-primary);
|
|
8459
|
+
/* An outline that scrolls a heading into view leaves it a little air. */
|
|
8460
|
+
scroll-margin-block-start: var(--spacing-6);
|
|
8461
|
+
}
|
|
8462
|
+
|
|
8463
|
+
/* A heading opens a section, so it gets more air above it than a paragraph. */
|
|
8464
|
+
.crewlet-document > * + :where(h1, h2, h3, h4, h5, h6) {
|
|
8465
|
+
margin-block-start: var(--crewlet-document-section-gap);
|
|
8466
|
+
}
|
|
8467
|
+
|
|
8468
|
+
.crewlet-document h1 {
|
|
8469
|
+
font-size: var(--font-size-2xl);
|
|
8470
|
+
}
|
|
8471
|
+
|
|
8472
|
+
.crewlet-document h2 {
|
|
8473
|
+
font-size: var(--font-size-xl);
|
|
8474
|
+
}
|
|
8475
|
+
|
|
8476
|
+
.crewlet-document h3 {
|
|
8477
|
+
font-size: var(--font-size-lg);
|
|
8478
|
+
}
|
|
8479
|
+
|
|
8480
|
+
.crewlet-document :where(h4, h5, h6) {
|
|
8481
|
+
font-size: var(--font-size-md);
|
|
8482
|
+
}
|
|
8483
|
+
|
|
8484
|
+
.crewlet-document--sm h1 {
|
|
8485
|
+
font-size: var(--font-size-lg);
|
|
8486
|
+
}
|
|
8487
|
+
|
|
8488
|
+
.crewlet-document--sm h2 {
|
|
8489
|
+
font-size: var(--font-size-md);
|
|
8490
|
+
}
|
|
8491
|
+
|
|
8492
|
+
.crewlet-document--sm h3 {
|
|
8493
|
+
font-size: var(--font-size-sm);
|
|
8494
|
+
}
|
|
8495
|
+
|
|
8496
|
+
.crewlet-document--sm :where(h4, h5, h6) {
|
|
8497
|
+
font-size: var(--font-size-compact);
|
|
8498
|
+
color: var(--color-text-secondary);
|
|
8499
|
+
}
|
|
8500
|
+
|
|
8501
|
+
/*
|
|
8502
|
+
* A HEADING AN OUTLINE MOVED TO takes focus, so a keyboard carries on from it.
|
|
8503
|
+
* A press draws no ring (`:focus-visible` does not match one); a keyboard's is
|
|
8504
|
+
* drawn off the text, because the heading is not a control.
|
|
8505
|
+
*/
|
|
8506
|
+
.crewlet-document :where(h1, h2, h3, h4, h5, h6):focus-visible {
|
|
8507
|
+
outline: 2px solid var(--color-focus);
|
|
8508
|
+
outline-offset: var(--spacing-1);
|
|
8509
|
+
border-radius: var(--radius-xs);
|
|
8510
|
+
}
|
|
8511
|
+
|
|
8512
|
+
.crewlet-document :where(strong, b) {
|
|
8513
|
+
font-weight: var(--font-weight-semibold);
|
|
8514
|
+
color: var(--color-text-primary);
|
|
8515
|
+
}
|
|
8516
|
+
|
|
8517
|
+
.crewlet-document :where(ul, ol) {
|
|
8518
|
+
padding-inline-start: var(--spacing-5);
|
|
8519
|
+
}
|
|
8520
|
+
|
|
8521
|
+
.crewlet-document li + li,
|
|
8522
|
+
.crewlet-document li > :where(ul, ol) {
|
|
8523
|
+
margin-block-start: var(--spacing-1);
|
|
8524
|
+
}
|
|
8525
|
+
|
|
8526
|
+
.crewlet-document li::marker {
|
|
8527
|
+
color: var(--color-text-tertiary);
|
|
8528
|
+
}
|
|
8529
|
+
|
|
8530
|
+
/*
|
|
8531
|
+
* A TASK LIST keeps its box on the line rather than in the marker's place: the
|
|
8532
|
+
* marker is what says "list", and the box is what says "done". The item's
|
|
8533
|
+
* content is ONE column beside the box, never a second cell of the row, so a
|
|
8534
|
+
* sublist hangs under the line it belongs to.
|
|
8535
|
+
*/
|
|
8536
|
+
.crewlet-document ul:has(> li > input[type='checkbox']) {
|
|
8537
|
+
list-style: none;
|
|
8538
|
+
padding-inline-start: 0;
|
|
8539
|
+
}
|
|
8540
|
+
|
|
8541
|
+
.crewlet-document li:has(> input[type='checkbox']) {
|
|
8542
|
+
display: flex;
|
|
8543
|
+
align-items: flex-start;
|
|
8544
|
+
gap: var(--spacing-2);
|
|
8545
|
+
}
|
|
8546
|
+
|
|
8547
|
+
.crewlet-document li:has(> input[type='checkbox']) > :not(input) {
|
|
8548
|
+
flex: 1;
|
|
8549
|
+
min-width: 0;
|
|
8550
|
+
}
|
|
8551
|
+
|
|
8552
|
+
.crewlet-document li > input[type='checkbox'] {
|
|
8553
|
+
flex: none;
|
|
8554
|
+
margin: 0;
|
|
8555
|
+
/* On the first line's centre rather than on the top of its box. */
|
|
8556
|
+
margin-block-start: 0.35em;
|
|
8557
|
+
accent-color: var(--color-brand-accent);
|
|
8558
|
+
}
|
|
8559
|
+
|
|
8560
|
+
/*
|
|
8561
|
+
* A FENCED BLOCK WRAPS RATHER THAN SCROLLING. One long line of JSON in a body
|
|
8562
|
+
* otherwise pushes the whole page sideways, and a block that scrolled instead
|
|
8563
|
+
* would owe a tab stop, since a scroller no keyboard reaches is content no
|
|
8564
|
+
* keyboard reads. `anywhere` because these lines have no spaces to break at.
|
|
8565
|
+
*/
|
|
8566
|
+
.crewlet-document pre {
|
|
8567
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
8568
|
+
border-radius: var(--radius-sm);
|
|
8569
|
+
background: var(--color-surface-inset);
|
|
8570
|
+
font-family: var(--font-family-mono);
|
|
8571
|
+
font-size: var(--font-size-xs);
|
|
8572
|
+
line-height: var(--font-line-height-normal);
|
|
8573
|
+
color: var(--color-text-primary);
|
|
8574
|
+
white-space: pre-wrap;
|
|
8575
|
+
overflow-wrap: anywhere;
|
|
8576
|
+
}
|
|
8577
|
+
|
|
8578
|
+
.crewlet-document pre code {
|
|
8579
|
+
padding: 0;
|
|
8580
|
+
background: none;
|
|
8581
|
+
font: inherit;
|
|
8582
|
+
}
|
|
8583
|
+
|
|
8584
|
+
.crewlet-document :not(pre) > code {
|
|
8585
|
+
padding: 0 var(--spacing-1);
|
|
8586
|
+
border-radius: var(--radius-xs);
|
|
8587
|
+
background: var(--color-surface-inset);
|
|
8588
|
+
font-family: var(--font-family-mono);
|
|
8589
|
+
font-size: var(--font-size-xs);
|
|
8590
|
+
color: var(--color-text-primary);
|
|
8591
|
+
overflow-wrap: anywhere;
|
|
8592
|
+
}
|
|
8593
|
+
|
|
8594
|
+
.crewlet-document blockquote {
|
|
8595
|
+
padding-inline-start: var(--spacing-3);
|
|
8596
|
+
border-inline-start: 2px solid var(--color-border-strong);
|
|
8597
|
+
color: var(--color-text-secondary);
|
|
8598
|
+
}
|
|
8599
|
+
|
|
8600
|
+
.crewlet-document hr {
|
|
8601
|
+
margin-block: var(--crewlet-document-section-gap);
|
|
8602
|
+
border: 0;
|
|
8603
|
+
border-block-start: 1px solid var(--color-border-default);
|
|
8604
|
+
}
|
|
8605
|
+
|
|
8606
|
+
/*
|
|
8607
|
+
* A link in running prose keeps a permanent underline, through hover too:
|
|
8608
|
+
* colour alone is not what says "link" (WCAG 1.4.1). The pointer is answered
|
|
8609
|
+
* by the ink moving to the primary step.
|
|
8610
|
+
*/
|
|
8611
|
+
.crewlet-document a,
|
|
8612
|
+
.crewlet-document a:hover {
|
|
8613
|
+
text-decoration: underline;
|
|
8614
|
+
text-underline-offset: 2px;
|
|
8615
|
+
}
|
|
8616
|
+
|
|
8617
|
+
.crewlet-document a {
|
|
8618
|
+
color: var(--color-brand-accent-ink);
|
|
8619
|
+
}
|
|
8620
|
+
|
|
8621
|
+
.crewlet-document a:hover {
|
|
8622
|
+
color: var(--color-text-primary);
|
|
8623
|
+
}
|
|
8624
|
+
|
|
8625
|
+
.crewlet-document a:focus-visible {
|
|
8626
|
+
outline: 2px solid var(--color-focus);
|
|
8627
|
+
outline-offset: 2px;
|
|
8628
|
+
border-radius: var(--radius-xs);
|
|
8629
|
+
}
|
|
8630
|
+
|
|
8631
|
+
.crewlet-document img {
|
|
8632
|
+
max-width: 100%;
|
|
8633
|
+
height: auto;
|
|
8634
|
+
border-radius: var(--radius-sm);
|
|
8635
|
+
}
|
|
8636
|
+
|
|
8637
|
+
/*
|
|
8638
|
+
* A TABLE WRITTEN FOR A DOCUMENT can be wider than the column it lands in, so
|
|
8639
|
+
* the element a renderer wraps it in scrolls rather than the page. The table
|
|
8640
|
+
* itself keeps its display, because a table set `display: block` loses its
|
|
8641
|
+
* table semantics to more than one screen reader.
|
|
8642
|
+
*/
|
|
8643
|
+
.crewlet-document :where(div):has(> table) {
|
|
8644
|
+
overflow-x: auto;
|
|
8645
|
+
}
|
|
8646
|
+
|
|
8647
|
+
/* The scroller is a tab stop (see Document.tsx), so it draws the ring inside
|
|
8648
|
+
its own box, where the table's edge would otherwise clip an outset one. */
|
|
8649
|
+
.crewlet-document :where(div):has(> table):focus-visible {
|
|
8650
|
+
outline: 2px solid var(--color-focus);
|
|
8651
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
8652
|
+
border-radius: var(--radius-xs);
|
|
8653
|
+
}
|
|
8654
|
+
|
|
8655
|
+
.crewlet-document table {
|
|
8656
|
+
width: 100%;
|
|
8657
|
+
border-collapse: collapse;
|
|
8658
|
+
font-size: var(--font-size-compact);
|
|
8659
|
+
line-height: var(--font-line-height-snug);
|
|
8660
|
+
}
|
|
8661
|
+
|
|
8662
|
+
.crewlet-document--sm table {
|
|
8663
|
+
font-size: var(--font-size-xs);
|
|
8664
|
+
}
|
|
8665
|
+
|
|
8666
|
+
.crewlet-document :where(th, td) {
|
|
8667
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
8668
|
+
border-block-end: 1px solid var(--color-border-default);
|
|
8669
|
+
text-align: start;
|
|
8670
|
+
vertical-align: top;
|
|
8671
|
+
}
|
|
8672
|
+
|
|
8673
|
+
.crewlet-document th {
|
|
8674
|
+
font-weight: var(--font-weight-semibold);
|
|
8675
|
+
color: var(--color-text-primary);
|
|
8676
|
+
white-space: nowrap;
|
|
8677
|
+
}
|
|
8678
|
+
|
|
8679
|
+
/*
|
|
8680
|
+
* The title above a body. The largest step a reading screen spends, at the
|
|
8681
|
+
* tight tracking every title on the ramp takes, and it wraps anywhere because
|
|
8682
|
+
* a title is an address somebody typed and may hold no space at all.
|
|
8683
|
+
*/
|
|
8684
|
+
.crewlet-document-title {
|
|
8685
|
+
margin: 0;
|
|
8686
|
+
font-family: var(--font-family-sans);
|
|
8687
|
+
font-size: var(--font-size-3xl);
|
|
8688
|
+
font-weight: var(--font-weight-semibold);
|
|
8689
|
+
line-height: var(--font-line-height-tight);
|
|
8690
|
+
letter-spacing: var(--font-letter-spacing-tight);
|
|
8691
|
+
color: var(--color-text-primary);
|
|
8692
|
+
overflow-wrap: anywhere;
|
|
8693
|
+
}
|
|
8694
|
+
|
|
8695
|
+
|
|
8696
|
+
/* EmptyState-C6HRBGT7.css */
|
|
8697
|
+
/*
|
|
8698
|
+
* The empty state.
|
|
8699
|
+
*
|
|
8700
|
+
* ITS MARK IS DECORATION and takes the decoration ink, which is the one place
|
|
8701
|
+
* that step is allowed: a 32px glyph a reader does not have to make out. Every
|
|
8702
|
+
* word in the box is on a step that clears 4.5:1, because the sentence is the
|
|
8703
|
+
* whole point of the component.
|
|
8034
8704
|
*/
|
|
8035
8705
|
|
|
8036
8706
|
.crewlet-empty-state {
|
|
@@ -8465,6 +9135,38 @@ svg.crewlet-datetime__chevron {
|
|
|
8465
9135
|
}
|
|
8466
9136
|
|
|
8467
9137
|
|
|
9138
|
+
/* Highlight-DXLV2R6L.css */
|
|
9139
|
+
/*
|
|
9140
|
+
* Words a search matched (Highlight.tsx).
|
|
9141
|
+
*/
|
|
9142
|
+
|
|
9143
|
+
/*
|
|
9144
|
+
* A GROUND, NEVER AN INK. The marked word keeps the ink of the text around it,
|
|
9145
|
+
* so it reads at the contrast that text was measured at, and the accent's soft
|
|
9146
|
+
* step behind it says "this is what you searched for" without making the word
|
|
9147
|
+
* louder than its sentence. The accent is the one colour that means "where the
|
|
9148
|
+
* reader is", and a match is exactly that: the reader's own question, found.
|
|
9149
|
+
*/
|
|
9150
|
+
.crewlet-highlight__match {
|
|
9151
|
+
border-radius: var(--radius-xs);
|
|
9152
|
+
background: var(--color-brand-accent-soft-strong);
|
|
9153
|
+
color: inherit;
|
|
9154
|
+
}
|
|
9155
|
+
|
|
9156
|
+
/*
|
|
9157
|
+
* Forced colours replaces every author ground with the canvas, which would
|
|
9158
|
+
* leave a match drawn exactly like the words beside it. The system's own pair
|
|
9159
|
+
* for a mark is what that mode reserves for this job.
|
|
9160
|
+
*/
|
|
9161
|
+
@media (forced-colors: active) {
|
|
9162
|
+
.crewlet-highlight__match {
|
|
9163
|
+
forced-color-adjust: none;
|
|
9164
|
+
background: Mark;
|
|
9165
|
+
color: MarkText;
|
|
9166
|
+
}
|
|
9167
|
+
}
|
|
9168
|
+
|
|
9169
|
+
|
|
8468
9170
|
/* HuePicker-5QIUR6L7.css */
|
|
8469
9171
|
/*
|
|
8470
9172
|
* A hue's swatch: the hue itself, as a dot beside its name. The name carries
|
|
@@ -8662,14 +9364,17 @@ svg.crewlet-datetime__chevron {
|
|
|
8662
9364
|
}
|
|
8663
9365
|
|
|
8664
9366
|
|
|
8665
|
-
/* ImageUpload-
|
|
9367
|
+
/* ImageUpload-NVGMN7DP.css */
|
|
8666
9368
|
/*
|
|
8667
9369
|
* ImageUpload, the click-to-upload affordance built on Avatar.
|
|
8668
9370
|
*
|
|
8669
|
-
* WHITE ON THE SCRIM, from tokens, in
|
|
9371
|
+
* WHITE ON THE SCRIM, from tokens, in every theme. The overlay used to spell
|
|
8670
9372
|
* its own rgba(0, 0, 0, 0.5) and three shades of white; the scrim and the
|
|
8671
|
-
* on-
|
|
8672
|
-
*
|
|
9373
|
+
* on-scrim step are the two values the palette measures for exactly this,
|
|
9374
|
+
* which is a label drawn on something dark whatever is behind it. The
|
|
9375
|
+
* on-accent step is not: a theme whose accent is light labels it dark. The
|
|
9376
|
+
* remove button is the danger fill, and takes the on-danger step for the
|
|
9377
|
+
* same reason.
|
|
8673
9378
|
*
|
|
8674
9379
|
* NO LITERAL FALLBACKS INSIDE var(). A fallback is what renders whenever the
|
|
8675
9380
|
* token name is misspelt, so it hides the very failure it looks like
|
|
@@ -8756,7 +9461,7 @@ svg.crewlet-datetime__chevron {
|
|
|
8756
9461
|
justify-content: center;
|
|
8757
9462
|
gap: 2px;
|
|
8758
9463
|
background: var(--color-surface-scrim);
|
|
8759
|
-
color: var(--color-text-on-
|
|
9464
|
+
color: var(--color-text-on-scrim);
|
|
8760
9465
|
opacity: 0;
|
|
8761
9466
|
transition: opacity var(--motion-duration-base) var(--motion-easing-default);
|
|
8762
9467
|
pointer-events: none;
|
|
@@ -8801,7 +9506,7 @@ svg.crewlet-datetime__chevron {
|
|
|
8801
9506
|
height: calc(var(--crewlet-image-upload-size) * 0.3);
|
|
8802
9507
|
border-radius: var(--radius-circle);
|
|
8803
9508
|
border: 2px solid var(--color-surface-scrim);
|
|
8804
|
-
border-top-color: var(--color-text-on-
|
|
9509
|
+
border-top-color: var(--color-text-on-scrim);
|
|
8805
9510
|
animation: crewlet-image-upload-spin calc(var(--motion-duration-slow) * 2.5) linear infinite;
|
|
8806
9511
|
}
|
|
8807
9512
|
|
|
@@ -8831,7 +9536,7 @@ svg.crewlet-datetime__chevron {
|
|
|
8831
9536
|
border-radius: var(--radius-circle);
|
|
8832
9537
|
background: var(--color-feedback-danger);
|
|
8833
9538
|
border: 2px solid var(--color-surface-background);
|
|
8834
|
-
color: var(--color-text-on-
|
|
9539
|
+
color: var(--color-text-on-danger);
|
|
8835
9540
|
cursor: pointer;
|
|
8836
9541
|
opacity: 0;
|
|
8837
9542
|
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
@@ -8876,44 +9581,299 @@ svg.crewlet-datetime__chevron {
|
|
|
8876
9581
|
}
|
|
8877
9582
|
|
|
8878
9583
|
|
|
8879
|
-
/*
|
|
9584
|
+
/* InboxList-YMFWKGGS.css */
|
|
8880
9585
|
/*
|
|
8881
|
-
*
|
|
9586
|
+
* The inbox's column: groups of rows, each row a control with the task it is
|
|
9587
|
+
* about under it, and the quiet toggles at the end.
|
|
8882
9588
|
*
|
|
8883
|
-
*
|
|
8884
|
-
*
|
|
8885
|
-
*
|
|
9589
|
+
* EVERY TRACK IS minmax(0, 1fr). An `auto` track grows to its widest content,
|
|
9590
|
+
* and a row holding a long unbroken word pushed the whole column past its
|
|
9591
|
+
* edge, cutting every row off at the right.
|
|
8886
9592
|
*/
|
|
8887
9593
|
|
|
8888
|
-
.crewlet-
|
|
8889
|
-
|
|
8890
|
-
|
|
8891
|
-
|
|
8892
|
-
|
|
8893
|
-
|
|
8894
|
-
|
|
8895
|
-
|
|
8896
|
-
--crewlet-inline-code-size: 0.92em;
|
|
8897
|
-
font-family: var(--font-family-mono);
|
|
8898
|
-
/* An identifier is read character by character; a ligature joins two of them
|
|
8899
|
-
into a drawing of something nobody typed. */
|
|
8900
|
-
font-variant-ligatures: none;
|
|
8901
|
-
font-size: var(--crewlet-inline-code-size);
|
|
8902
|
-
background: var(--color-surface-inset);
|
|
8903
|
-
border-radius: var(--radius-xs);
|
|
8904
|
-
padding: 1px var(--spacing-1);
|
|
8905
|
-
color: var(--color-text-secondary);
|
|
8906
|
-
/* A URL IS ONE UNBREAKABLE WORD to a line breaker. Without this the chip is
|
|
8907
|
-
pushed whole onto its own line and the sentence around it is torn up. */
|
|
8908
|
-
overflow-wrap: anywhere;
|
|
9594
|
+
.crewlet-inbox-list {
|
|
9595
|
+
display: grid;
|
|
9596
|
+
grid-template-columns: minmax(0, 1fr);
|
|
9597
|
+
align-content: start;
|
|
9598
|
+
gap: 2px;
|
|
9599
|
+
min-width: 0;
|
|
9600
|
+
font-size: var(--font-size-compact);
|
|
9601
|
+
line-height: var(--font-line-height-body);
|
|
8909
9602
|
}
|
|
8910
9603
|
|
|
8911
|
-
|
|
8912
|
-
|
|
8913
|
-
|
|
8914
|
-
|
|
8915
|
-
|
|
8916
|
-
|
|
9604
|
+
.crewlet-inbox-list__group {
|
|
9605
|
+
display: grid;
|
|
9606
|
+
grid-template-columns: minmax(0, 1fr);
|
|
9607
|
+
gap: 2px;
|
|
9608
|
+
min-width: 0;
|
|
9609
|
+
}
|
|
9610
|
+
|
|
9611
|
+
/* The heading's own line box is the label's, so the label sits where it is drawn. */
|
|
9612
|
+
.crewlet-inbox-list__label {
|
|
9613
|
+
margin: 0;
|
|
9614
|
+
padding: var(--spacing-3) var(--spacing-2) var(--spacing-1);
|
|
9615
|
+
font: inherit;
|
|
9616
|
+
font-size: var(--font-size-2xs);
|
|
9617
|
+
line-height: var(--font-line-height-snug);
|
|
9618
|
+
}
|
|
9619
|
+
|
|
9620
|
+
.crewlet-inbox-list__rows {
|
|
9621
|
+
display: grid;
|
|
9622
|
+
grid-template-columns: minmax(0, 1fr);
|
|
9623
|
+
gap: 2px;
|
|
9624
|
+
margin: 0;
|
|
9625
|
+
padding: 0;
|
|
9626
|
+
list-style: none;
|
|
9627
|
+
}
|
|
9628
|
+
|
|
9629
|
+
/* ---- The row ------------------------------------------------------------ */
|
|
9630
|
+
|
|
9631
|
+
/*
|
|
9632
|
+
* The ITEM takes the hover and the selected fill, so the control and the task
|
|
9633
|
+
* under it read as one row. The selected fill is the neutral pressed step, and
|
|
9634
|
+
* a selected row takes no hover on top of it: both are a background on the
|
|
9635
|
+
* same element, and a composite of the two is a colour nothing has measured.
|
|
9636
|
+
*/
|
|
9637
|
+
.crewlet-inbox-row {
|
|
9638
|
+
min-width: 0;
|
|
9639
|
+
border-radius: var(--radius-md);
|
|
9640
|
+
transition: background var(--motion-duration-fast) var(--motion-easing-default);
|
|
9641
|
+
}
|
|
9642
|
+
|
|
9643
|
+
.crewlet-inbox-row:hover {
|
|
9644
|
+
background: var(--color-surface-hover);
|
|
9645
|
+
}
|
|
9646
|
+
|
|
9647
|
+
.crewlet-inbox-row--selected,
|
|
9648
|
+
.crewlet-inbox-row--selected:hover {
|
|
9649
|
+
background: var(--color-surface-pressed);
|
|
9650
|
+
}
|
|
9651
|
+
|
|
9652
|
+
/*
|
|
9653
|
+
* FORCED COLORS repaints every author background to Canvas, which takes the
|
|
9654
|
+
* open row's fill with it, so the row the pane is showing would look like
|
|
9655
|
+
* every other. An outline is the one mark the mode keeps, drawn inside the row
|
|
9656
|
+
* so the scroller does not clip it, in the system's colour for exactly this.
|
|
9657
|
+
*/
|
|
9658
|
+
@media (forced-colors: active) {
|
|
9659
|
+
.crewlet-inbox-row--selected {
|
|
9660
|
+
outline: 2px solid Highlight;
|
|
9661
|
+
outline-offset: -2px;
|
|
9662
|
+
}
|
|
9663
|
+
}
|
|
9664
|
+
|
|
9665
|
+
.crewlet-inbox-row__control {
|
|
9666
|
+
display: flex;
|
|
9667
|
+
align-items: flex-start;
|
|
9668
|
+
gap: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
9669
|
+
width: 100%;
|
|
9670
|
+
min-width: 0;
|
|
9671
|
+
padding: calc(var(--spacing-2) + var(--spacing-1) / 2) var(--spacing-2) var(--spacing-1);
|
|
9672
|
+
border: 0;
|
|
9673
|
+
border-radius: var(--radius-md);
|
|
9674
|
+
background: none;
|
|
9675
|
+
color: inherit;
|
|
9676
|
+
font: inherit;
|
|
9677
|
+
text-align: left;
|
|
9678
|
+
text-decoration: none;
|
|
9679
|
+
cursor: pointer;
|
|
9680
|
+
}
|
|
9681
|
+
|
|
9682
|
+
/* With no task under it, the control closes the row at the same padding it opened with. */
|
|
9683
|
+
.crewlet-inbox-row__control:only-child {
|
|
9684
|
+
padding-bottom: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
9685
|
+
}
|
|
9686
|
+
|
|
9687
|
+
/*
|
|
9688
|
+
* The ring is drawn INSIDE: the list sits in a clipping scroller, where an
|
|
9689
|
+
* outset ring is cut off on the first and last rows and painted over by the
|
|
9690
|
+
* row below.
|
|
9691
|
+
*/
|
|
9692
|
+
.crewlet-inbox-row__control:focus-visible {
|
|
9693
|
+
outline: 2px solid var(--color-focus);
|
|
9694
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
9695
|
+
}
|
|
9696
|
+
|
|
9697
|
+
.crewlet-inbox-row__leading {
|
|
9698
|
+
display: inline-flex;
|
|
9699
|
+
flex: none;
|
|
9700
|
+
justify-content: center;
|
|
9701
|
+
width: var(--size-target-min);
|
|
9702
|
+
margin-top: 1px;
|
|
9703
|
+
}
|
|
9704
|
+
|
|
9705
|
+
.crewlet-inbox-row__main {
|
|
9706
|
+
display: grid;
|
|
9707
|
+
flex: 1;
|
|
9708
|
+
gap: 2px;
|
|
9709
|
+
min-width: 0;
|
|
9710
|
+
}
|
|
9711
|
+
|
|
9712
|
+
.crewlet-inbox-row__head {
|
|
9713
|
+
display: flex;
|
|
9714
|
+
align-items: baseline;
|
|
9715
|
+
gap: var(--spacing-1);
|
|
9716
|
+
min-width: 0;
|
|
9717
|
+
}
|
|
9718
|
+
|
|
9719
|
+
.crewlet-inbox-row__title {
|
|
9720
|
+
min-width: 0;
|
|
9721
|
+
overflow: hidden;
|
|
9722
|
+
text-overflow: ellipsis;
|
|
9723
|
+
white-space: nowrap;
|
|
9724
|
+
font-weight: var(--font-weight-medium);
|
|
9725
|
+
color: var(--color-text-primary);
|
|
9726
|
+
}
|
|
9727
|
+
|
|
9728
|
+
.crewlet-inbox-row__qualifier {
|
|
9729
|
+
flex: none;
|
|
9730
|
+
font-size: var(--font-size-xs);
|
|
9731
|
+
color: var(--color-text-tertiary);
|
|
9732
|
+
}
|
|
9733
|
+
|
|
9734
|
+
.crewlet-inbox-row__qualifier--danger {
|
|
9735
|
+
color: var(--color-feedback-danger-ink);
|
|
9736
|
+
}
|
|
9737
|
+
|
|
9738
|
+
.crewlet-inbox-row__meta {
|
|
9739
|
+
flex: none;
|
|
9740
|
+
margin-inline-start: auto;
|
|
9741
|
+
font-size: var(--font-size-xs);
|
|
9742
|
+
font-variant-numeric: tabular-nums;
|
|
9743
|
+
white-space: nowrap;
|
|
9744
|
+
color: var(--color-text-tertiary);
|
|
9745
|
+
}
|
|
9746
|
+
|
|
9747
|
+
.crewlet-inbox-row__text {
|
|
9748
|
+
display: -webkit-box;
|
|
9749
|
+
-webkit-box-orient: vertical;
|
|
9750
|
+
-webkit-line-clamp: 3;
|
|
9751
|
+
line-clamp: 3;
|
|
9752
|
+
overflow: hidden;
|
|
9753
|
+
overflow-wrap: anywhere;
|
|
9754
|
+
line-height: var(--font-line-height-snug);
|
|
9755
|
+
color: var(--color-text-secondary);
|
|
9756
|
+
}
|
|
9757
|
+
|
|
9758
|
+
.crewlet-inbox-row__excerpt {
|
|
9759
|
+
color: var(--color-text-tertiary);
|
|
9760
|
+
}
|
|
9761
|
+
|
|
9762
|
+
/* Unread: a heavier name, and the words in the primary ink. */
|
|
9763
|
+
.crewlet-inbox-row__control--unread .crewlet-inbox-row__title {
|
|
9764
|
+
font-weight: var(--font-weight-semibold);
|
|
9765
|
+
}
|
|
9766
|
+
|
|
9767
|
+
.crewlet-inbox-row__control--unread .crewlet-inbox-row__text,
|
|
9768
|
+
.crewlet-inbox-row__control--actionable .crewlet-inbox-row__text {
|
|
9769
|
+
color: var(--color-text-primary);
|
|
9770
|
+
}
|
|
9771
|
+
|
|
9772
|
+
/*
|
|
9773
|
+
* Settled. The strike is drawn in the strong hairline rather than the text's
|
|
9774
|
+
* own ink, so the words under it stay legible; the state is also read out,
|
|
9775
|
+
* because a line through a word says nothing to somebody listening.
|
|
9776
|
+
*/
|
|
9777
|
+
.crewlet-inbox-row__control--done .crewlet-inbox-row__text {
|
|
9778
|
+
text-decoration: line-through;
|
|
9779
|
+
text-decoration-color: var(--color-border-strong);
|
|
9780
|
+
color: var(--color-text-tertiary);
|
|
9781
|
+
}
|
|
9782
|
+
|
|
9783
|
+
/*
|
|
9784
|
+
* The task, under the words and lined up with them: the control's start pad,
|
|
9785
|
+
* the leading slot and the gap after it.
|
|
9786
|
+
*/
|
|
9787
|
+
.crewlet-inbox-row__aside {
|
|
9788
|
+
min-width: 0;
|
|
9789
|
+
padding:
|
|
9790
|
+
0 var(--spacing-2) calc(var(--spacing-2) + var(--spacing-1) / 2)
|
|
9791
|
+
calc(var(--spacing-2) + var(--size-target-min) + var(--spacing-2) + var(--spacing-1) / 2);
|
|
9792
|
+
overflow-wrap: anywhere;
|
|
9793
|
+
font-size: var(--font-size-xs);
|
|
9794
|
+
line-height: var(--font-line-height-snug);
|
|
9795
|
+
}
|
|
9796
|
+
|
|
9797
|
+
/* ---- The end of the list ---------------------------------------------- */
|
|
9798
|
+
|
|
9799
|
+
.crewlet-inbox-list__more {
|
|
9800
|
+
display: flex;
|
|
9801
|
+
flex-wrap: wrap;
|
|
9802
|
+
gap: calc(var(--spacing-4) + var(--spacing-1) / 2);
|
|
9803
|
+
padding: calc(var(--spacing-3) + var(--spacing-1) / 2) var(--spacing-2) 0;
|
|
9804
|
+
}
|
|
9805
|
+
|
|
9806
|
+
.crewlet-inbox-list__toggle {
|
|
9807
|
+
padding: 0;
|
|
9808
|
+
border: 0;
|
|
9809
|
+
border-radius: var(--radius-xs);
|
|
9810
|
+
background: none;
|
|
9811
|
+
font: inherit;
|
|
9812
|
+
font-size: var(--font-size-xs);
|
|
9813
|
+
color: var(--color-text-tertiary);
|
|
9814
|
+
cursor: pointer;
|
|
9815
|
+
transition: color var(--motion-duration-fast) var(--motion-easing-default);
|
|
9816
|
+
}
|
|
9817
|
+
|
|
9818
|
+
.crewlet-inbox-list__toggle:hover,
|
|
9819
|
+
.crewlet-inbox-list__toggle[aria-expanded='true'] {
|
|
9820
|
+
color: var(--color-text-primary);
|
|
9821
|
+
}
|
|
9822
|
+
|
|
9823
|
+
.crewlet-inbox-list__toggle:focus-visible {
|
|
9824
|
+
outline: 2px solid var(--color-focus);
|
|
9825
|
+
outline-offset: 2px;
|
|
9826
|
+
}
|
|
9827
|
+
|
|
9828
|
+
@media (prefers-reduced-motion: reduce) {
|
|
9829
|
+
.crewlet-inbox-row {
|
|
9830
|
+
transition: none;
|
|
9831
|
+
}
|
|
9832
|
+
|
|
9833
|
+
.crewlet-inbox-list__toggle {
|
|
9834
|
+
transition: none;
|
|
9835
|
+
}
|
|
9836
|
+
}
|
|
9837
|
+
|
|
9838
|
+
|
|
9839
|
+
/* InlineCode-6WSR5COL.css */
|
|
9840
|
+
/*
|
|
9841
|
+
* One identifier inside a sentence: a mono chip on the inset surface.
|
|
9842
|
+
*
|
|
9843
|
+
* The size is relative (0.92em) rather than a step off the scale, because the
|
|
9844
|
+
* chip has to sit inside whatever register its sentence is set in. A fixed
|
|
9845
|
+
* size makes it either a shout inside a caption or a whisper inside a lead.
|
|
9846
|
+
*/
|
|
9847
|
+
|
|
9848
|
+
.crewlet-inline-code {
|
|
9849
|
+
/*
|
|
9850
|
+
* RELATIVE, so it is deliberately not a step off the type scale: the chip
|
|
9851
|
+
* sits inside whatever register its sentence is set in, and an absolute size
|
|
9852
|
+
* makes it a shout inside a caption or a whisper inside a lead. The mono
|
|
9853
|
+
* face also runs larger than the sans at the same nominal size, which is
|
|
9854
|
+
* what the reduction corrects.
|
|
9855
|
+
*/
|
|
9856
|
+
--crewlet-inline-code-size: 0.92em;
|
|
9857
|
+
font-family: var(--font-family-mono);
|
|
9858
|
+
/* An identifier is read character by character; a ligature joins two of them
|
|
9859
|
+
into a drawing of something nobody typed. */
|
|
9860
|
+
font-variant-ligatures: none;
|
|
9861
|
+
font-size: var(--crewlet-inline-code-size);
|
|
9862
|
+
background: var(--color-surface-inset);
|
|
9863
|
+
border-radius: var(--radius-xs);
|
|
9864
|
+
padding: 1px var(--spacing-1);
|
|
9865
|
+
color: var(--color-text-secondary);
|
|
9866
|
+
/* A URL IS ONE UNBREAKABLE WORD to a line breaker. Without this the chip is
|
|
9867
|
+
pushed whole onto its own line and the sentence around it is torn up. */
|
|
9868
|
+
overflow-wrap: anywhere;
|
|
9869
|
+
}
|
|
9870
|
+
|
|
9871
|
+
/*
|
|
9872
|
+
* A `${NAME}` pointer. It is one token a reader copies, so it keeps its braces
|
|
9873
|
+
* together. THE SAME INK AS ANY OTHER CHIP: a pointer is the name of a sealed
|
|
9874
|
+
* entry, and drawn a step quieter than the identifiers around it, it read as
|
|
9875
|
+
* decoration rather than as the thing an operator has to type back.
|
|
9876
|
+
*/
|
|
8917
9877
|
.crewlet-inline-code--reference {
|
|
8918
9878
|
overflow-wrap: normal;
|
|
8919
9879
|
white-space: nowrap;
|
|
@@ -9685,6 +10645,39 @@ svg.crewlet-datetime__chevron {
|
|
|
9685
10645
|
}
|
|
9686
10646
|
|
|
9687
10647
|
|
|
10648
|
+
/* KeyChip-4XJU4BBE.css */
|
|
10649
|
+
/*
|
|
10650
|
+
* A project's key as a chip: the raised rung inside the plain hairline, in the
|
|
10651
|
+
* mono face at the micro step and the secondary ink.
|
|
10652
|
+
*
|
|
10653
|
+
* The rail's suite measures this ink on this fill against every ground a rail
|
|
10654
|
+
* row can have (SidebarNav.test.tsx), because the rail is where the chip sits
|
|
10655
|
+
* on the most grounds: the frame, a pointed row and the current row.
|
|
10656
|
+
*/
|
|
10657
|
+
.crewlet-key-chip {
|
|
10658
|
+
display: inline-flex;
|
|
10659
|
+
align-items: center;
|
|
10660
|
+
flex: none;
|
|
10661
|
+
padding: 0 calc(var(--spacing-1) + 1px);
|
|
10662
|
+
border: 1px solid var(--color-border-default);
|
|
10663
|
+
border-radius: var(--radius-xs);
|
|
10664
|
+
background: var(--color-surface-elevated);
|
|
10665
|
+
color: var(--color-text-secondary);
|
|
10666
|
+
font-family: var(--font-family-mono);
|
|
10667
|
+
font-size: var(--font-size-2xs);
|
|
10668
|
+
font-weight: var(--font-weight-medium);
|
|
10669
|
+
letter-spacing: var(--font-letter-spacing-normal);
|
|
10670
|
+
line-height: var(--font-line-height-body);
|
|
10671
|
+
white-space: nowrap;
|
|
10672
|
+
}
|
|
10673
|
+
|
|
10674
|
+
/* The letters a search matched: the weight carries it, in the primary ink. */
|
|
10675
|
+
.crewlet-key-chip__match {
|
|
10676
|
+
font-weight: var(--font-weight-bold);
|
|
10677
|
+
color: var(--color-text-primary);
|
|
10678
|
+
}
|
|
10679
|
+
|
|
10680
|
+
|
|
9688
10681
|
/* Layer-NAFSGCFA.css */
|
|
9689
10682
|
/*
|
|
9690
10683
|
* The portal target a LayerHost provides.
|
|
@@ -9885,9 +10878,10 @@ svg.crewlet-datetime__chevron {
|
|
|
9885
10878
|
|
|
9886
10879
|
|
|
9887
10880
|
|
|
9888
|
-
/* Link-
|
|
10881
|
+
/* Link-WPMVLKLY.css */
|
|
9889
10882
|
/*
|
|
9890
|
-
* A link, in the
|
|
10883
|
+
* A link, in the three registers a console needs: a navigation, an identity
|
|
10884
|
+
* and a quiet reference.
|
|
9891
10885
|
*
|
|
9892
10886
|
* The ink is the accent's INK step, not the accent fill. The fill is a mark
|
|
9893
10887
|
* and clears 3:1; text has to clear 4.5:1, and at caption size it is exactly
|
|
@@ -9920,10 +10914,44 @@ svg.crewlet-datetime__chevron {
|
|
|
9920
10914
|
color: var(--color-brand-accent-ink);
|
|
9921
10915
|
}
|
|
9922
10916
|
|
|
10917
|
+
/*
|
|
10918
|
+
* A reference among other words. Its own ink sits between the accent ink and
|
|
10919
|
+
* the secondary text, so a column of rows that each name a task does not read
|
|
10920
|
+
* as a column of links, and the hover steps it up to the full accent ink with
|
|
10921
|
+
* no underline. The ink is a token rather than a mix of two, because a mix is
|
|
10922
|
+
* a colour nobody measured; this one clears 4.5:1 on every surface and on a
|
|
10923
|
+
* pressed row.
|
|
10924
|
+
*/
|
|
10925
|
+
.crewlet-link--quiet {
|
|
10926
|
+
color: var(--color-text-link-quiet);
|
|
10927
|
+
}
|
|
10928
|
+
|
|
10929
|
+
.crewlet-link--quiet:hover {
|
|
10930
|
+
color: var(--color-brand-accent-ink);
|
|
10931
|
+
text-decoration: none;
|
|
10932
|
+
}
|
|
10933
|
+
|
|
10934
|
+
/*
|
|
10935
|
+
* FORCED COLORS paints every link in LinkText whatever its state, so the step
|
|
10936
|
+
* up to the accent ink cannot be seen there, and a hover with no underline is
|
|
10937
|
+
* no hover at all. The rule under the words is the one mark the mode leaves to
|
|
10938
|
+
* the author, so it is where the quiet variant's hover goes in that mode.
|
|
10939
|
+
*/
|
|
10940
|
+
@media (forced-colors: active) {
|
|
10941
|
+
.crewlet-link--quiet:hover {
|
|
10942
|
+
text-decoration: underline;
|
|
10943
|
+
}
|
|
10944
|
+
}
|
|
10945
|
+
|
|
9923
10946
|
.crewlet-link--body {
|
|
9924
10947
|
font-size: var(--font-size-sm);
|
|
9925
10948
|
}
|
|
9926
10949
|
|
|
10950
|
+
/* Set inside a sentence: the sentence's own size, whatever it is. */
|
|
10951
|
+
.crewlet-link--inherit {
|
|
10952
|
+
font-size: inherit;
|
|
10953
|
+
}
|
|
10954
|
+
|
|
9927
10955
|
/*
|
|
9928
10956
|
* A caption-sized link takes the caption's SIZE and keeps the link's ink. It
|
|
9929
10957
|
* is medium weight and does not wrap, because the thing it names (an event id,
|
|
@@ -10458,13 +11486,162 @@ svg.crewlet-datetime__chevron {
|
|
|
10458
11486
|
}
|
|
10459
11487
|
|
|
10460
11488
|
|
|
10461
|
-
/*
|
|
11489
|
+
/* MarkdownEditor-ZLSHTOIZ.css */
|
|
10462
11490
|
/*
|
|
10463
|
-
*
|
|
11491
|
+
* Writing markdown (MarkdownEditor.tsx): the bar, the source or its preview,
|
|
11492
|
+
* and the footer, in ONE box.
|
|
10464
11493
|
*
|
|
10465
|
-
*
|
|
10466
|
-
*
|
|
10467
|
-
*
|
|
11494
|
+
* THE BOX TAKES THE RING, and only for the field. It is the package's one ring
|
|
11495
|
+
* for a field: the box's own hairline drawn in the focus colour, laid on the
|
|
11496
|
+
* boundary (see Input.css). It is asked of the FIELD rather than of
|
|
11497
|
+
* :focus-within, so a reader walking the bar's controls sees each control's
|
|
11498
|
+
* own ring and not a second one round the whole editor.
|
|
11499
|
+
*/
|
|
11500
|
+
|
|
11501
|
+
.crewlet-markdown-editor {
|
|
11502
|
+
/* The height the field and the preview stand at, so switching between them
|
|
11503
|
+
does not move what is under the editor. */
|
|
11504
|
+
--crewlet-markdown-editor-height: calc(
|
|
11505
|
+
var(--crewlet-markdown-editor-rows, 14) * var(--font-size-compact) * var(--font-line-height-relaxed) +
|
|
11506
|
+
var(--spacing-3) * 2
|
|
11507
|
+
);
|
|
11508
|
+
display: flex;
|
|
11509
|
+
flex-direction: column;
|
|
11510
|
+
min-width: 0;
|
|
11511
|
+
border: 1px solid var(--color-border-control);
|
|
11512
|
+
border-radius: var(--radius-md);
|
|
11513
|
+
background: var(--color-surface-subtle);
|
|
11514
|
+
transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
11515
|
+
}
|
|
11516
|
+
|
|
11517
|
+
.crewlet-markdown-editor:hover {
|
|
11518
|
+
border-color: var(--color-border-hover);
|
|
11519
|
+
}
|
|
11520
|
+
|
|
11521
|
+
.crewlet-markdown-editor:has(.crewlet-markdown-editor__field:focus-visible) {
|
|
11522
|
+
outline: 1px solid var(--color-focus);
|
|
11523
|
+
outline-offset: -1px;
|
|
11524
|
+
}
|
|
11525
|
+
|
|
11526
|
+
/* A refused body keeps its colour while the writer is in it: the ring takes
|
|
11527
|
+
the danger step, so "here" and "refused" stay one edge. */
|
|
11528
|
+
.crewlet-markdown-editor--invalid {
|
|
11529
|
+
border-color: var(--color-feedback-danger);
|
|
11530
|
+
}
|
|
11531
|
+
|
|
11532
|
+
.crewlet-markdown-editor--invalid:has(.crewlet-markdown-editor__field:focus-visible) {
|
|
11533
|
+
outline-color: var(--color-feedback-danger);
|
|
11534
|
+
}
|
|
11535
|
+
|
|
11536
|
+
.crewlet-markdown-editor--disabled {
|
|
11537
|
+
opacity: 0.6;
|
|
11538
|
+
}
|
|
11539
|
+
|
|
11540
|
+
/* The bar sits on the box's top edge, a hairline under it. Two classes, so it
|
|
11541
|
+
outranks the toolbar's own padding whichever stylesheet loads first. */
|
|
11542
|
+
.crewlet-markdown-editor .crewlet-markdown-editor__bar {
|
|
11543
|
+
gap: var(--spacing-1);
|
|
11544
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
11545
|
+
border-block-end: 1px solid var(--color-border-default);
|
|
11546
|
+
}
|
|
11547
|
+
|
|
11548
|
+
.crewlet-markdown-editor__group {
|
|
11549
|
+
display: inline-flex;
|
|
11550
|
+
align-items: center;
|
|
11551
|
+
gap: calc(var(--spacing-1) / 2);
|
|
11552
|
+
}
|
|
11553
|
+
|
|
11554
|
+
/* A hairline between groups, so nine controls read as three ideas. */
|
|
11555
|
+
.crewlet-markdown-editor__group + .crewlet-markdown-editor__group {
|
|
11556
|
+
padding-inline-start: var(--spacing-1);
|
|
11557
|
+
border-inline-start: 1px solid var(--color-border-default);
|
|
11558
|
+
}
|
|
11559
|
+
|
|
11560
|
+
.crewlet-markdown-editor__spacer {
|
|
11561
|
+
flex: 1;
|
|
11562
|
+
}
|
|
11563
|
+
|
|
11564
|
+
.crewlet-markdown-editor__panel {
|
|
11565
|
+
display: flex;
|
|
11566
|
+
flex-direction: column;
|
|
11567
|
+
min-width: 0;
|
|
11568
|
+
}
|
|
11569
|
+
|
|
11570
|
+
/*
|
|
11571
|
+
* THE SOURCE IS SET IN THE MONOSPACE FACE: a writer counts the hashes of a
|
|
11572
|
+
* heading and lines up the bars of a table, and a proportional face makes
|
|
11573
|
+
* both a guess.
|
|
11574
|
+
*/
|
|
11575
|
+
.crewlet-markdown-editor__field {
|
|
11576
|
+
display: block;
|
|
11577
|
+
box-sizing: border-box;
|
|
11578
|
+
width: 100%;
|
|
11579
|
+
min-height: var(--crewlet-markdown-editor-height);
|
|
11580
|
+
margin: 0;
|
|
11581
|
+
padding: var(--spacing-3) var(--spacing-4);
|
|
11582
|
+
border: 0;
|
|
11583
|
+
border-radius: 0;
|
|
11584
|
+
background: transparent;
|
|
11585
|
+
font-family: var(--font-family-mono);
|
|
11586
|
+
font-size: var(--font-size-compact);
|
|
11587
|
+
line-height: var(--font-line-height-relaxed);
|
|
11588
|
+
color: var(--color-text-primary);
|
|
11589
|
+
resize: vertical;
|
|
11590
|
+
}
|
|
11591
|
+
|
|
11592
|
+
.crewlet-markdown-editor__field::placeholder {
|
|
11593
|
+
color: var(--color-text-tertiary);
|
|
11594
|
+
}
|
|
11595
|
+
|
|
11596
|
+
/* The ring is the box's. A transparent outline stays, because forced colours
|
|
11597
|
+
paints an outline where this would otherwise draw none. */
|
|
11598
|
+
.crewlet-markdown-editor__field:focus-visible {
|
|
11599
|
+
outline: 2px solid transparent;
|
|
11600
|
+
outline-offset: -2px;
|
|
11601
|
+
}
|
|
11602
|
+
|
|
11603
|
+
.crewlet-markdown-editor__field:disabled {
|
|
11604
|
+
cursor: not-allowed;
|
|
11605
|
+
}
|
|
11606
|
+
|
|
11607
|
+
.crewlet-markdown-editor__preview {
|
|
11608
|
+
min-height: var(--crewlet-markdown-editor-height);
|
|
11609
|
+
padding: var(--spacing-3) var(--spacing-4);
|
|
11610
|
+
min-width: 0;
|
|
11611
|
+
}
|
|
11612
|
+
|
|
11613
|
+
.crewlet-markdown-editor__empty {
|
|
11614
|
+
margin: 0;
|
|
11615
|
+
font-size: var(--font-size-compact);
|
|
11616
|
+
color: var(--color-text-tertiary);
|
|
11617
|
+
}
|
|
11618
|
+
|
|
11619
|
+
.crewlet-markdown-editor__footer {
|
|
11620
|
+
display: flex;
|
|
11621
|
+
flex-wrap: wrap;
|
|
11622
|
+
align-items: center;
|
|
11623
|
+
gap: var(--spacing-1) var(--spacing-3);
|
|
11624
|
+
padding: var(--spacing-1) var(--spacing-3);
|
|
11625
|
+
border-block-start: 1px solid var(--color-border-default);
|
|
11626
|
+
font-size: var(--font-size-xs);
|
|
11627
|
+
font-variant-numeric: tabular-nums;
|
|
11628
|
+
color: var(--color-text-tertiary);
|
|
11629
|
+
}
|
|
11630
|
+
|
|
11631
|
+
@media (prefers-reduced-motion: reduce) {
|
|
11632
|
+
.crewlet-markdown-editor {
|
|
11633
|
+
transition: none;
|
|
11634
|
+
}
|
|
11635
|
+
}
|
|
11636
|
+
|
|
11637
|
+
|
|
11638
|
+
/* Menu-BT5PMFJI.css */
|
|
11639
|
+
/*
|
|
11640
|
+
* The menu button's panel.
|
|
11641
|
+
*
|
|
11642
|
+
* It shares the popover's surface deliberately: a menu and a popover are the
|
|
11643
|
+
* same object to a reader, and two surfaces that differ by a shadow step are
|
|
11644
|
+
* how a design system starts to look assembled rather than designed. What is
|
|
10468
11645
|
* its own is the row: a check column, a danger ink, and a hover that is
|
|
10469
11646
|
* neutral because focus, not the pointer, is what moves through a menu.
|
|
10470
11647
|
*
|
|
@@ -10827,7 +12004,7 @@ svg.crewlet-datetime__chevron {
|
|
|
10827
12004
|
}
|
|
10828
12005
|
|
|
10829
12006
|
|
|
10830
|
-
/* Modal-
|
|
12007
|
+
/* Modal-3YJ2GG2T.css */
|
|
10831
12008
|
/*
|
|
10832
12009
|
* The modal surface: the veil, the frame, and the three bands inside it.
|
|
10833
12010
|
*
|
|
@@ -10914,6 +12091,28 @@ svg.crewlet-datetime__chevron {
|
|
|
10914
12091
|
padding-top: var(--spacing-10);
|
|
10915
12092
|
}
|
|
10916
12093
|
|
|
12094
|
+
/*
|
|
12095
|
+
* THE BOTTOM SHEET: pinned to the bottom edge with no inset, so it rises from
|
|
12096
|
+
* where a thumb already is. Its frame takes the window's width and keeps a
|
|
12097
|
+
* corner on its top edge only, and its foot stays clear of a phone's home
|
|
12098
|
+
* indicator.
|
|
12099
|
+
*/
|
|
12100
|
+
.crewlet-modal-overlay--dialog.crewlet-modal-overlay--bottom {
|
|
12101
|
+
align-items: flex-end;
|
|
12102
|
+
padding: 0;
|
|
12103
|
+
}
|
|
12104
|
+
|
|
12105
|
+
.crewlet-modal-overlay--bottom > .crewlet-modal--dialog {
|
|
12106
|
+
width: 100%;
|
|
12107
|
+
max-height: calc(100dvh - var(--spacing-10));
|
|
12108
|
+
border-bottom: none;
|
|
12109
|
+
border-radius: var(--radius-xl) var(--radius-xl) 0 0;
|
|
12110
|
+
padding-bottom: env(safe-area-inset-bottom, 0px);
|
|
12111
|
+
/* It rises further and sooner than a dialog drops in: a sheet arrives from
|
|
12112
|
+
the edge it is pinned to, and a thumb is waiting on it. */
|
|
12113
|
+
animation: crewlet-modal-lift var(--motion-duration-moderate) var(--motion-easing-emphasized);
|
|
12114
|
+
}
|
|
12115
|
+
|
|
10917
12116
|
/*
|
|
10918
12117
|
* The sheet's veil fades over the same span the sheet itself travels, so the
|
|
10919
12118
|
* two are one movement rather than a ground that lands and a panel that
|
|
@@ -11309,6 +12508,13 @@ svg.crewlet-datetime__chevron {
|
|
|
11309
12508
|
}
|
|
11310
12509
|
}
|
|
11311
12510
|
|
|
12511
|
+
@keyframes crewlet-modal-lift {
|
|
12512
|
+
from {
|
|
12513
|
+
opacity: 0;
|
|
12514
|
+
transform: translateY(var(--spacing-6));
|
|
12515
|
+
}
|
|
12516
|
+
}
|
|
12517
|
+
|
|
11312
12518
|
/*
|
|
11313
12519
|
* A SHEET TRAVELS ITS OWN WIDTH, which is what makes the motion read as a
|
|
11314
12520
|
* sheet rather than as a box appearing beside the page: the frame starts
|
|
@@ -11332,6 +12538,10 @@ svg.crewlet-datetime__chevron {
|
|
|
11332
12538
|
.crewlet-modal--sheet {
|
|
11333
12539
|
animation: none;
|
|
11334
12540
|
}
|
|
12541
|
+
|
|
12542
|
+
.crewlet-modal-overlay--bottom > .crewlet-modal--dialog {
|
|
12543
|
+
animation: none;
|
|
12544
|
+
}
|
|
11335
12545
|
}
|
|
11336
12546
|
|
|
11337
12547
|
|
|
@@ -12373,6 +13583,87 @@ svg.crewlet-datetime__chevron {
|
|
|
12373
13583
|
}
|
|
12374
13584
|
|
|
12375
13585
|
|
|
13586
|
+
/* Outline-VCXKKU3E.css */
|
|
13587
|
+
/*
|
|
13588
|
+
* A document's outline, "On this page" (Outline.tsx).
|
|
13589
|
+
*
|
|
13590
|
+
* QUIET UNTIL IT IS CURRENT. The entries are the tertiary ink at the caption
|
|
13591
|
+
* step, so the column beside a page reads as a map rather than as a second
|
|
13592
|
+
* page, and the entry the reader is in takes the primary ink and the accent
|
|
13593
|
+
* edge every current row in the system takes.
|
|
13594
|
+
*/
|
|
13595
|
+
|
|
13596
|
+
.crewlet-outline {
|
|
13597
|
+
display: flex;
|
|
13598
|
+
flex-direction: column;
|
|
13599
|
+
gap: var(--spacing-2);
|
|
13600
|
+
min-width: 0;
|
|
13601
|
+
}
|
|
13602
|
+
|
|
13603
|
+
/* The outline's name in the register of a group label: sentence case at the
|
|
13604
|
+
caption step, the 4.5:1 ink. */
|
|
13605
|
+
.crewlet-outline__title {
|
|
13606
|
+
margin: 0;
|
|
13607
|
+
font-family: var(--font-family-sans);
|
|
13608
|
+
font-size: var(--font-size-xs);
|
|
13609
|
+
font-weight: var(--font-weight-medium);
|
|
13610
|
+
line-height: var(--font-line-height-tight);
|
|
13611
|
+
color: var(--color-text-tertiary);
|
|
13612
|
+
}
|
|
13613
|
+
|
|
13614
|
+
.crewlet-outline__list {
|
|
13615
|
+
display: flex;
|
|
13616
|
+
flex-direction: column;
|
|
13617
|
+
margin: 0;
|
|
13618
|
+
padding: 0;
|
|
13619
|
+
list-style: none;
|
|
13620
|
+
}
|
|
13621
|
+
|
|
13622
|
+
/*
|
|
13623
|
+
* One entry: the heading's text, wrapped rather than cut, because a heading
|
|
13624
|
+
* cut to fit is a section the reader cannot tell from its neighbour. The edge
|
|
13625
|
+
* the current entry draws is held on every entry in its resting colour, so
|
|
13626
|
+
* nothing moves when the current entry changes.
|
|
13627
|
+
*/
|
|
13628
|
+
.crewlet-outline__item {
|
|
13629
|
+
display: block;
|
|
13630
|
+
width: 100%;
|
|
13631
|
+
min-height: var(--size-target-min);
|
|
13632
|
+
margin: 0;
|
|
13633
|
+
padding: calc(var(--spacing-1) / 2) var(--spacing-2);
|
|
13634
|
+
padding-inline-start: calc(var(--spacing-3) + var(--spacing-3) * var(--crewlet-outline-depth, 0));
|
|
13635
|
+
border: 0;
|
|
13636
|
+
border-inline-start: 2px solid var(--color-border-default);
|
|
13637
|
+
border-radius: 0;
|
|
13638
|
+
background: none;
|
|
13639
|
+
font-family: var(--font-family-sans);
|
|
13640
|
+
font-size: var(--font-size-xs);
|
|
13641
|
+
font-weight: var(--font-weight-regular);
|
|
13642
|
+
line-height: var(--font-line-height-snug);
|
|
13643
|
+
text-align: start;
|
|
13644
|
+
color: var(--color-text-tertiary);
|
|
13645
|
+
overflow-wrap: anywhere;
|
|
13646
|
+
cursor: pointer;
|
|
13647
|
+
}
|
|
13648
|
+
|
|
13649
|
+
.crewlet-outline__item:hover {
|
|
13650
|
+
color: var(--color-text-primary);
|
|
13651
|
+
}
|
|
13652
|
+
|
|
13653
|
+
/* The ring lies on the entry's own edge, never a second line beside it. */
|
|
13654
|
+
.crewlet-outline__item:focus-visible {
|
|
13655
|
+
outline: 2px solid var(--color-focus);
|
|
13656
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
13657
|
+
}
|
|
13658
|
+
|
|
13659
|
+
/* The weight stays the resting one: a bolder entry is a wider one, and a
|
|
13660
|
+
wider entry can wrap onto a second line as the reader scrolls past it. */
|
|
13661
|
+
.crewlet-outline__item--current {
|
|
13662
|
+
border-inline-start-color: var(--color-brand-accent);
|
|
13663
|
+
color: var(--color-text-primary);
|
|
13664
|
+
}
|
|
13665
|
+
|
|
13666
|
+
|
|
12376
13667
|
/* PageHeader-6EYWQXRE.css */
|
|
12377
13668
|
/*
|
|
12378
13669
|
* The head of a screen.
|
|
@@ -13041,81 +14332,278 @@ svg.crewlet-datetime__chevron {
|
|
|
13041
14332
|
}
|
|
13042
14333
|
|
|
13043
14334
|
|
|
13044
|
-
/*
|
|
14335
|
+
/* ReadingPane-5UOLPWY5.css */
|
|
13045
14336
|
/*
|
|
13046
|
-
*
|
|
13047
|
-
*
|
|
13048
|
-
*
|
|
14337
|
+
* One item read in full, in one column.
|
|
14338
|
+
*
|
|
14339
|
+
* The pane is its own container, so the column narrows its margins when the
|
|
14340
|
+
* PANE is narrow (beside a list on a small laptop, or alone on a phone)
|
|
14341
|
+
* rather than when the window is.
|
|
13049
14342
|
*/
|
|
13050
14343
|
|
|
13051
|
-
.crewlet-
|
|
13052
|
-
|
|
13053
|
-
|
|
14344
|
+
.crewlet-reading-pane {
|
|
14345
|
+
container: crewlet-reading-pane / inline-size;
|
|
14346
|
+
min-width: 0;
|
|
13054
14347
|
}
|
|
13055
14348
|
|
|
14349
|
+
.crewlet-reading-pane__column {
|
|
14350
|
+
/* A question and its answers read best at about seventy characters a line. */
|
|
14351
|
+
--crewlet-reading-pane-measure: 640px;
|
|
13056
14352
|
|
|
13057
|
-
|
|
13058
|
-
|
|
13059
|
-
|
|
13060
|
-
|
|
13061
|
-
|
|
13062
|
-
|
|
13063
|
-
* sheet. In each it is one rung up from what it stands on, the sheet on the
|
|
13064
|
-
* frame and the card on the sheet, inside the default hairline, so it reads
|
|
13065
|
-
* as a field sunk into neither and lifted off both.
|
|
13066
|
-
*/
|
|
13067
|
-
|
|
13068
|
-
.crewlet-search-trigger {
|
|
13069
|
-
display: inline-flex;
|
|
13070
|
-
align-items: center;
|
|
13071
|
-
gap: var(--spacing-2);
|
|
13072
|
-
/* The design's 10px inside each end: two steps and a half. */
|
|
13073
|
-
padding: 0 calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
13074
|
-
border: 1px solid var(--color-border-default);
|
|
13075
|
-
border-radius: var(--radius-md);
|
|
13076
|
-
color: var(--color-text-tertiary);
|
|
13077
|
-
font-family: var(--font-family-sans);
|
|
14353
|
+
display: grid;
|
|
14354
|
+
grid-template-columns: minmax(0, 1fr);
|
|
14355
|
+
gap: calc(var(--spacing-4) + var(--spacing-1) / 2);
|
|
14356
|
+
max-width: var(--crewlet-reading-pane-measure);
|
|
14357
|
+
margin: 0 auto;
|
|
14358
|
+
padding: calc(var(--spacing-6) + var(--spacing-1)) calc(var(--spacing-6) + var(--spacing-1)) var(--spacing-8);
|
|
13078
14359
|
font-size: var(--font-size-compact);
|
|
13079
|
-
|
|
13080
|
-
|
|
13081
|
-
transition:
|
|
13082
|
-
border-color var(--motion-duration-fast) var(--motion-easing-default),
|
|
13083
|
-
color var(--motion-duration-fast) var(--motion-easing-default);
|
|
14360
|
+
line-height: var(--font-line-height-body);
|
|
14361
|
+
color: var(--color-text-primary);
|
|
13084
14362
|
}
|
|
13085
14363
|
|
|
13086
|
-
|
|
13087
|
-
|
|
13088
|
-
|
|
13089
|
-
|
|
13090
|
-
* the medium control and one scale step, so it reads as the way in rather
|
|
13091
|
-
* than as one more button.
|
|
13092
|
-
*/
|
|
13093
|
-
.crewlet-search-trigger--rail {
|
|
13094
|
-
display: flex;
|
|
13095
|
-
width: 100%;
|
|
13096
|
-
height: calc(var(--size-control-md) + var(--spacing-1));
|
|
13097
|
-
background: var(--color-surface-background);
|
|
14364
|
+
@container crewlet-reading-pane (width < 640px) {
|
|
14365
|
+
.crewlet-reading-pane__column {
|
|
14366
|
+
padding-inline: var(--spacing-4);
|
|
14367
|
+
}
|
|
13098
14368
|
}
|
|
13099
14369
|
|
|
13100
|
-
/*
|
|
13101
|
-
* A SCREEN'S OWN SEARCH, in a bar on the sheet: the CARD's ground, the
|
|
13102
|
-
* control height of the buttons beside it, and a resting width of its own.
|
|
13103
|
-
*/
|
|
13104
|
-
.crewlet-search-trigger--toolbar {
|
|
13105
|
-
/* The resting width of the box, the design's. A bar with less room sets it. */
|
|
13106
|
-
--crewlet-search-trigger-width: 200px;
|
|
14370
|
+
/* ---- The byline -------------------------------------------------------- */
|
|
13107
14371
|
|
|
13108
|
-
|
|
13109
|
-
|
|
13110
|
-
|
|
14372
|
+
.crewlet-reading-pane__byline {
|
|
14373
|
+
display: flex;
|
|
14374
|
+
align-items: center;
|
|
14375
|
+
gap: var(--spacing-2);
|
|
14376
|
+
min-width: 0;
|
|
14377
|
+
margin: 0;
|
|
14378
|
+
color: var(--color-text-tertiary);
|
|
13111
14379
|
}
|
|
13112
14380
|
|
|
13113
|
-
.crewlet-
|
|
13114
|
-
|
|
13115
|
-
|
|
14381
|
+
.crewlet-reading-pane__start,
|
|
14382
|
+
.crewlet-reading-pane__leading {
|
|
14383
|
+
display: inline-flex;
|
|
14384
|
+
flex: none;
|
|
14385
|
+
align-items: center;
|
|
13116
14386
|
}
|
|
13117
14387
|
|
|
13118
|
-
|
|
14388
|
+
.crewlet-reading-pane__by {
|
|
14389
|
+
min-width: 0;
|
|
14390
|
+
overflow-wrap: anywhere;
|
|
14391
|
+
color: var(--color-text-secondary);
|
|
14392
|
+
}
|
|
14393
|
+
|
|
14394
|
+
.crewlet-reading-pane__by strong {
|
|
14395
|
+
font-weight: var(--font-weight-medium);
|
|
14396
|
+
color: var(--color-text-primary);
|
|
14397
|
+
}
|
|
14398
|
+
|
|
14399
|
+
.crewlet-reading-pane__note {
|
|
14400
|
+
color: var(--color-text-tertiary);
|
|
14401
|
+
}
|
|
14402
|
+
|
|
14403
|
+
/* ---- The title and what it needs -------------------------------------- */
|
|
14404
|
+
|
|
14405
|
+
.crewlet-reading-pane__title {
|
|
14406
|
+
margin: 0;
|
|
14407
|
+
font-size: var(--font-size-2xl);
|
|
14408
|
+
font-weight: var(--font-weight-semibold);
|
|
14409
|
+
line-height: var(--font-line-height-tight);
|
|
14410
|
+
letter-spacing: var(--font-letter-spacing-snug);
|
|
14411
|
+
text-wrap: balance;
|
|
14412
|
+
overflow-wrap: anywhere;
|
|
14413
|
+
color: var(--color-text-primary);
|
|
14414
|
+
}
|
|
14415
|
+
|
|
14416
|
+
.crewlet-reading-pane__lead {
|
|
14417
|
+
display: grid;
|
|
14418
|
+
gap: var(--spacing-2);
|
|
14419
|
+
min-width: 0;
|
|
14420
|
+
font-size: var(--font-size-sm);
|
|
14421
|
+
line-height: var(--font-line-height-normal);
|
|
14422
|
+
overflow-wrap: anywhere;
|
|
14423
|
+
color: var(--color-text-secondary);
|
|
14424
|
+
}
|
|
14425
|
+
|
|
14426
|
+
.crewlet-reading-pane__lead > * {
|
|
14427
|
+
margin: 0;
|
|
14428
|
+
}
|
|
14429
|
+
|
|
14430
|
+
.crewlet-reading-pane__quote {
|
|
14431
|
+
display: grid;
|
|
14432
|
+
gap: var(--spacing-2);
|
|
14433
|
+
min-width: 0;
|
|
14434
|
+
margin: 0;
|
|
14435
|
+
font-size: var(--font-size-md);
|
|
14436
|
+
line-height: var(--font-line-height-normal);
|
|
14437
|
+
overflow-wrap: anywhere;
|
|
14438
|
+
color: var(--color-text-primary);
|
|
14439
|
+
}
|
|
14440
|
+
|
|
14441
|
+
.crewlet-reading-pane__quote > * {
|
|
14442
|
+
margin: 0;
|
|
14443
|
+
}
|
|
14444
|
+
|
|
14445
|
+
.crewlet-reading-pane__quote--verbatim {
|
|
14446
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
14447
|
+
border-left: 2px solid var(--color-border-strong);
|
|
14448
|
+
font-family: var(--font-family-mono);
|
|
14449
|
+
font-size: var(--font-size-xs);
|
|
14450
|
+
white-space: pre-wrap;
|
|
14451
|
+
}
|
|
14452
|
+
|
|
14453
|
+
/* ---- The reasoning ----------------------------------------------------- */
|
|
14454
|
+
|
|
14455
|
+
.crewlet-reading-pane__reasoning {
|
|
14456
|
+
display: grid;
|
|
14457
|
+
gap: var(--spacing-1);
|
|
14458
|
+
min-width: 0;
|
|
14459
|
+
padding: var(--spacing-3) calc(var(--spacing-3) + var(--spacing-1) / 2);
|
|
14460
|
+
border-radius: var(--radius-md);
|
|
14461
|
+
background: var(--color-surface-inset);
|
|
14462
|
+
}
|
|
14463
|
+
|
|
14464
|
+
.crewlet-reading-pane__reasoning-title {
|
|
14465
|
+
margin: 0;
|
|
14466
|
+
font-size: var(--font-size-xs);
|
|
14467
|
+
color: var(--color-text-tertiary);
|
|
14468
|
+
}
|
|
14469
|
+
|
|
14470
|
+
.crewlet-reading-pane__reasoning-title strong {
|
|
14471
|
+
font-weight: var(--font-weight-semibold);
|
|
14472
|
+
color: var(--color-text-primary);
|
|
14473
|
+
}
|
|
14474
|
+
|
|
14475
|
+
.crewlet-reading-pane__reasoning-body {
|
|
14476
|
+
display: grid;
|
|
14477
|
+
gap: var(--spacing-2);
|
|
14478
|
+
min-width: 0;
|
|
14479
|
+
overflow-wrap: anywhere;
|
|
14480
|
+
color: var(--color-text-secondary);
|
|
14481
|
+
}
|
|
14482
|
+
|
|
14483
|
+
.crewlet-reading-pane__reasoning-body > * {
|
|
14484
|
+
margin: 0;
|
|
14485
|
+
}
|
|
14486
|
+
|
|
14487
|
+
.crewlet-reading-pane__reasoning-footer {
|
|
14488
|
+
margin-top: calc(var(--spacing-1) / 2);
|
|
14489
|
+
}
|
|
14490
|
+
|
|
14491
|
+
/* ---- What the reader did ----------------------------------------------- */
|
|
14492
|
+
|
|
14493
|
+
.crewlet-reading-pane__outcome {
|
|
14494
|
+
display: flex;
|
|
14495
|
+
align-items: center;
|
|
14496
|
+
gap: var(--spacing-2);
|
|
14497
|
+
min-width: 0;
|
|
14498
|
+
margin: 0;
|
|
14499
|
+
font-size: var(--font-size-xs);
|
|
14500
|
+
overflow-wrap: anywhere;
|
|
14501
|
+
color: var(--color-feedback-success-ink);
|
|
14502
|
+
}
|
|
14503
|
+
|
|
14504
|
+
.crewlet-reading-pane__outcome-mark {
|
|
14505
|
+
flex: none;
|
|
14506
|
+
}
|
|
14507
|
+
|
|
14508
|
+
.crewlet-reading-pane__outcome strong {
|
|
14509
|
+
font-weight: var(--font-weight-medium);
|
|
14510
|
+
color: var(--color-text-primary);
|
|
14511
|
+
}
|
|
14512
|
+
|
|
14513
|
+
/* ---- A section after the answer ---------------------------------------- */
|
|
14514
|
+
|
|
14515
|
+
.crewlet-reading-pane__section {
|
|
14516
|
+
display: grid;
|
|
14517
|
+
grid-template-columns: minmax(0, 1fr);
|
|
14518
|
+
gap: var(--spacing-3);
|
|
14519
|
+
padding-top: calc(var(--spacing-4) + var(--spacing-1) / 2);
|
|
14520
|
+
border-top: 1px solid var(--color-border-default);
|
|
14521
|
+
}
|
|
14522
|
+
|
|
14523
|
+
/* The heading's own line box is the label's, so the label sits where it is drawn. */
|
|
14524
|
+
.crewlet-reading-pane__section-label {
|
|
14525
|
+
margin: 0;
|
|
14526
|
+
font: inherit;
|
|
14527
|
+
font-size: var(--font-size-2xs);
|
|
14528
|
+
line-height: var(--font-line-height-snug);
|
|
14529
|
+
}
|
|
14530
|
+
|
|
14531
|
+
|
|
14532
|
+
/* RelativeTime-EBAQPGO2.css */
|
|
14533
|
+
/*
|
|
14534
|
+
* A relative time is text, so it takes the register around it. Its one rule is
|
|
14535
|
+
* tabular figures: the words change once a second, and proportional digits
|
|
14536
|
+
* would move whatever sits beside them on every tick.
|
|
14537
|
+
*/
|
|
14538
|
+
|
|
14539
|
+
.crewlet-relative-time {
|
|
14540
|
+
font-variant-numeric: tabular-nums;
|
|
14541
|
+
white-space: nowrap;
|
|
14542
|
+
}
|
|
14543
|
+
|
|
14544
|
+
|
|
14545
|
+
/* SearchTrigger-KIZLWBEH.css */
|
|
14546
|
+
/*
|
|
14547
|
+
* A button drawn as the field it stands in for.
|
|
14548
|
+
*
|
|
14549
|
+
* TWO PLACES, TWO GROUNDS. The approved design draws it in the rail, the
|
|
14550
|
+
* whole width of the sidebar on the frame, and in a screen's own bar on the
|
|
14551
|
+
* sheet. In each it is one rung up from what it stands on, the sheet on the
|
|
14552
|
+
* frame and the card on the sheet, inside the default hairline, so it reads
|
|
14553
|
+
* as a field sunk into neither and lifted off both.
|
|
14554
|
+
*/
|
|
14555
|
+
|
|
14556
|
+
.crewlet-search-trigger {
|
|
14557
|
+
display: inline-flex;
|
|
14558
|
+
align-items: center;
|
|
14559
|
+
gap: var(--spacing-2);
|
|
14560
|
+
/* The design's 10px inside each end: two steps and a half. */
|
|
14561
|
+
padding: 0 calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
14562
|
+
border: 1px solid var(--color-border-default);
|
|
14563
|
+
border-radius: var(--radius-md);
|
|
14564
|
+
color: var(--color-text-tertiary);
|
|
14565
|
+
font-family: var(--font-family-sans);
|
|
14566
|
+
font-size: var(--font-size-compact);
|
|
14567
|
+
text-align: start;
|
|
14568
|
+
cursor: pointer;
|
|
14569
|
+
transition:
|
|
14570
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default),
|
|
14571
|
+
color var(--motion-duration-fast) var(--motion-easing-default);
|
|
14572
|
+
}
|
|
14573
|
+
|
|
14574
|
+
/*
|
|
14575
|
+
* THE RAIL'S FIELD: the full width of the sidebar, on the SHEET's ground, and
|
|
14576
|
+
* a step taller than a control. It is the rail's one field and the first
|
|
14577
|
+
* thing in it under the company's name, and the design stands it at 34px,
|
|
14578
|
+
* the medium control and one scale step, so it reads as the way in rather
|
|
14579
|
+
* than as one more button.
|
|
14580
|
+
*/
|
|
14581
|
+
.crewlet-search-trigger--rail {
|
|
14582
|
+
display: flex;
|
|
14583
|
+
width: 100%;
|
|
14584
|
+
height: calc(var(--size-control-md) + var(--spacing-1));
|
|
14585
|
+
background: var(--color-surface-background);
|
|
14586
|
+
}
|
|
14587
|
+
|
|
14588
|
+
/*
|
|
14589
|
+
* A SCREEN'S OWN SEARCH, in a bar on the sheet: the CARD's ground, the
|
|
14590
|
+
* control height of the buttons beside it, and a resting width of its own.
|
|
14591
|
+
*/
|
|
14592
|
+
.crewlet-search-trigger--toolbar {
|
|
14593
|
+
/* The resting width of the box, the design's. A bar with less room sets it. */
|
|
14594
|
+
--crewlet-search-trigger-width: 200px;
|
|
14595
|
+
|
|
14596
|
+
min-width: var(--crewlet-search-trigger-width);
|
|
14597
|
+
height: var(--size-control-md);
|
|
14598
|
+
background: var(--color-surface-subtle);
|
|
14599
|
+
}
|
|
14600
|
+
|
|
14601
|
+
.crewlet-search-trigger:hover {
|
|
14602
|
+
border-color: var(--color-border-hover);
|
|
14603
|
+
color: var(--color-text-primary);
|
|
14604
|
+
}
|
|
14605
|
+
|
|
14606
|
+
/* One ring, over the trigger's own boundary rather than 2px off it, which is
|
|
13119
14607
|
two edges with a gap between them: the rule every field keeps (see
|
|
13120
14608
|
Input.css). */
|
|
13121
14609
|
.crewlet-search-trigger:focus-visible {
|
|
@@ -13302,7 +14790,7 @@ svg.crewlet-datetime__chevron {
|
|
|
13302
14790
|
}
|
|
13303
14791
|
|
|
13304
14792
|
|
|
13305
|
-
/* SegmentedControl-
|
|
14793
|
+
/* SegmentedControl-PKBLJVSA.css */
|
|
13306
14794
|
/*
|
|
13307
14795
|
* SegmentedControl: the pill row, drawn with the Tabs classes.
|
|
13308
14796
|
*
|
|
@@ -13464,6 +14952,24 @@ svg.crewlet-datetime__chevron {
|
|
|
13464
14952
|
color: var(--color-brand-accent-ink);
|
|
13465
14953
|
}
|
|
13466
14954
|
|
|
14955
|
+
/*
|
|
14956
|
+
* EQUAL SHARES. The row fills the width it is given and every option takes
|
|
14957
|
+
* an equal column of it, so two settings stacked in one panel draw one box.
|
|
14958
|
+
* Two classes, for the reason the card row gives: the pill's own rules size
|
|
14959
|
+
* the row to its content.
|
|
14960
|
+
*/
|
|
14961
|
+
.crewlet-tabs.crewlet-segmented--fill {
|
|
14962
|
+
display: grid;
|
|
14963
|
+
grid-auto-flow: column;
|
|
14964
|
+
grid-auto-columns: minmax(0, 1fr);
|
|
14965
|
+
width: 100%;
|
|
14966
|
+
}
|
|
14967
|
+
|
|
14968
|
+
.crewlet-segmented--fill .crewlet-segmented__option {
|
|
14969
|
+
justify-content: center;
|
|
14970
|
+
min-width: 0;
|
|
14971
|
+
}
|
|
14972
|
+
|
|
13467
14973
|
|
|
13468
14974
|
/* SegmentedMeter-KQNML2TW.css */
|
|
13469
14975
|
/*
|
|
@@ -13577,7 +15083,7 @@ svg.crewlet-datetime__chevron {
|
|
|
13577
15083
|
}
|
|
13578
15084
|
|
|
13579
15085
|
|
|
13580
|
-
/* Select-
|
|
15086
|
+
/* Select-XMZ44RWY.css */
|
|
13581
15087
|
/*
|
|
13582
15088
|
* Select: one chrome over two controls, and the product's only dropdown.
|
|
13583
15089
|
*
|
|
@@ -13877,6 +15383,30 @@ svg.crewlet-select__chevron {
|
|
|
13877
15383
|
min-width: 0;
|
|
13878
15384
|
}
|
|
13879
15385
|
|
|
15386
|
+
/*
|
|
15387
|
+
* WHAT AN OPTION DRAWS BEFORE ITS LABEL (a swatch, an avatar, a glyph),
|
|
15388
|
+
* centred on the label's first line rather than on the row, so a row with a
|
|
15389
|
+
* second line keeps its mark beside the words it belongs to. The same slot on
|
|
15390
|
+
* the trigger, while that option is the one chosen, sits on the value's line.
|
|
15391
|
+
*/
|
|
15392
|
+
.crewlet-select__option-leading,
|
|
15393
|
+
.crewlet-select__leading {
|
|
15394
|
+
display: inline-flex;
|
|
15395
|
+
align-items: center;
|
|
15396
|
+
flex: none;
|
|
15397
|
+
}
|
|
15398
|
+
|
|
15399
|
+
.crewlet-select__option-leading {
|
|
15400
|
+
min-height: calc(var(--font-line-height-normal) * 1em);
|
|
15401
|
+
}
|
|
15402
|
+
|
|
15403
|
+
/* A hint ends the row's FIRST line, on the label's baseline, rather than
|
|
15404
|
+
sitting on the row's top edge at its own smaller size. */
|
|
15405
|
+
.crewlet-select__option:has(> .crewlet-listbox__hint) .crewlet-select__option-body,
|
|
15406
|
+
.crewlet-select__option > .crewlet-listbox__hint {
|
|
15407
|
+
align-self: baseline;
|
|
15408
|
+
}
|
|
15409
|
+
|
|
13880
15410
|
/*
|
|
13881
15411
|
* ONE LINE, WHICH IS WHAT THE ELLIPSIS BELOW WAS ALWAYS FOR. `overflow:
|
|
13882
15412
|
* hidden` clips what leaves the box and `text-overflow` replaces what a LINE
|
|
@@ -13964,7 +15494,7 @@ svg.crewlet-select__chevron {
|
|
|
13964
15494
|
}
|
|
13965
15495
|
|
|
13966
15496
|
|
|
13967
|
-
/* SidebarNav-
|
|
15497
|
+
/* SidebarNav-KF66MLOM.css */
|
|
13968
15498
|
/*
|
|
13969
15499
|
* The rail's navigation.
|
|
13970
15500
|
*
|
|
@@ -14230,26 +15760,11 @@ svg.crewlet-select__chevron {
|
|
|
14230
15760
|
|
|
14231
15761
|
/*
|
|
14232
15762
|
* A PROJECT'S KEY, as a chip in the glyph's place: the prefix every item in
|
|
14233
|
-
* the project is filed under, in mono so ENG and PROD line up by letter.
|
|
14234
|
-
* is the
|
|
14235
|
-
*
|
|
14236
|
-
*
|
|
15763
|
+
* the project is filed under, in mono so ENG and PROD line up by letter. The
|
|
15764
|
+
* chip is the kit's `KeyChip` (KeyChip.css); the suite below measures its ink
|
|
15765
|
+
* on every ground a row can have, and on the reader's own row, which is raised
|
|
15766
|
+
* too, its hairline is what draws it.
|
|
14237
15767
|
*/
|
|
14238
|
-
.crewlet-nav-item__lead {
|
|
14239
|
-
display: inline-flex;
|
|
14240
|
-
align-items: center;
|
|
14241
|
-
flex: none;
|
|
14242
|
-
padding: 0 calc(var(--spacing-1) + 1px);
|
|
14243
|
-
border: 1px solid var(--color-border-default);
|
|
14244
|
-
border-radius: var(--radius-xs);
|
|
14245
|
-
background: var(--color-surface-elevated);
|
|
14246
|
-
color: var(--color-text-secondary);
|
|
14247
|
-
font-family: var(--font-family-mono);
|
|
14248
|
-
font-size: var(--font-size-2xs);
|
|
14249
|
-
font-weight: var(--font-weight-medium);
|
|
14250
|
-
letter-spacing: var(--font-letter-spacing-normal);
|
|
14251
|
-
line-height: var(--font-line-height-body);
|
|
14252
|
-
}
|
|
14253
15768
|
|
|
14254
15769
|
/*
|
|
14255
15770
|
* THE COUNT: how many of something the destination holds, as a quiet figure
|
|
@@ -15647,6 +17162,355 @@ svg.crewlet-select__chevron {
|
|
|
15647
17162
|
}
|
|
15648
17163
|
|
|
15649
17164
|
|
|
17165
|
+
/* Switcher-B44Q4WF4.css */
|
|
17166
|
+
/*
|
|
17167
|
+
* The switcher: a button that is the page's name, and a banded panel under it
|
|
17168
|
+
* (a search band, a list that scrolls, and a footer that does not).
|
|
17169
|
+
*
|
|
17170
|
+
* The rows are the listbox register (`Listbox.css`), because a project in this
|
|
17171
|
+
* list and a result in the command palette are read the same way, and the
|
|
17172
|
+
* raised row that marks where the arrows are must mean the same in both. What
|
|
17173
|
+
* this adds is the switcher's own: a lead column every row's key lines up in,
|
|
17174
|
+
* the current subject outlined in the accent, and a held row that keeps its
|
|
17175
|
+
* reason without a hover.
|
|
17176
|
+
*/
|
|
17177
|
+
|
|
17178
|
+
.crewlet-switcher {
|
|
17179
|
+
/* The panel's own measures: a width that holds a key, a long name and a
|
|
17180
|
+
count, and a height that holds eight projects with Recent above them
|
|
17181
|
+
without scrolling. */
|
|
17182
|
+
--crewlet-switcher-width: 360px;
|
|
17183
|
+
--crewlet-switcher-max-height: 520px;
|
|
17184
|
+
--crewlet-switcher-lead: 52px;
|
|
17185
|
+
}
|
|
17186
|
+
|
|
17187
|
+
/* ── The button ─────────────────────────────────────────────────────────── */
|
|
17188
|
+
|
|
17189
|
+
/*
|
|
17190
|
+
* THE PAGE'S NAME, WITH NO BOX AT REST. It is the heading of the page as much
|
|
17191
|
+
* as it is a control, so it reads as text in the trail until the pointer
|
|
17192
|
+
* reaches it; the fill appears under the pointer and stays while the panel is
|
|
17193
|
+
* open, and the chevron turns. The name takes the cut, never the key or the
|
|
17194
|
+
* chevron.
|
|
17195
|
+
*/
|
|
17196
|
+
.crewlet-switcher-trigger {
|
|
17197
|
+
display: inline-flex;
|
|
17198
|
+
align-items: center;
|
|
17199
|
+
gap: calc(var(--spacing-1) * 1.5);
|
|
17200
|
+
min-width: 0;
|
|
17201
|
+
max-width: 100%;
|
|
17202
|
+
height: var(--size-row-sm);
|
|
17203
|
+
padding: 0 var(--spacing-1) 0 calc(var(--spacing-1) * 1.5);
|
|
17204
|
+
border: none;
|
|
17205
|
+
border-radius: var(--radius-md);
|
|
17206
|
+
background: transparent;
|
|
17207
|
+
color: var(--color-text-primary);
|
|
17208
|
+
font: inherit;
|
|
17209
|
+
font-weight: var(--font-weight-medium);
|
|
17210
|
+
cursor: pointer;
|
|
17211
|
+
transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
17212
|
+
}
|
|
17213
|
+
|
|
17214
|
+
.crewlet-switcher-trigger:hover,
|
|
17215
|
+
.crewlet-switcher-trigger[aria-expanded='true'] {
|
|
17216
|
+
background: var(--color-surface-hover);
|
|
17217
|
+
}
|
|
17218
|
+
|
|
17219
|
+
.crewlet-switcher-trigger:active {
|
|
17220
|
+
background: var(--color-surface-pressed);
|
|
17221
|
+
}
|
|
17222
|
+
|
|
17223
|
+
/* Inside the button's own edge, so the trail's scrollport never clips it. */
|
|
17224
|
+
.crewlet-switcher-trigger:focus-visible {
|
|
17225
|
+
outline: 2px solid var(--color-focus);
|
|
17226
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
17227
|
+
}
|
|
17228
|
+
|
|
17229
|
+
.crewlet-switcher-trigger__label {
|
|
17230
|
+
min-width: 0;
|
|
17231
|
+
overflow: hidden;
|
|
17232
|
+
text-overflow: ellipsis;
|
|
17233
|
+
white-space: nowrap;
|
|
17234
|
+
}
|
|
17235
|
+
|
|
17236
|
+
.crewlet-switcher-trigger.is-mono .crewlet-switcher-trigger__label {
|
|
17237
|
+
font-family: var(--font-family-mono);
|
|
17238
|
+
font-size: var(--font-size-compact);
|
|
17239
|
+
}
|
|
17240
|
+
|
|
17241
|
+
.crewlet-switcher-trigger .crewlet-key-chip,
|
|
17242
|
+
.crewlet-switcher-trigger__tag {
|
|
17243
|
+
display: inline-flex;
|
|
17244
|
+
flex: none;
|
|
17245
|
+
}
|
|
17246
|
+
|
|
17247
|
+
svg.crewlet-switcher-trigger__chevron {
|
|
17248
|
+
flex: none;
|
|
17249
|
+
color: var(--color-text-tertiary);
|
|
17250
|
+
transition:
|
|
17251
|
+
transform var(--motion-duration-fast) var(--motion-easing-default),
|
|
17252
|
+
color var(--motion-duration-fast) var(--motion-easing-default);
|
|
17253
|
+
}
|
|
17254
|
+
|
|
17255
|
+
.crewlet-switcher-trigger:hover svg.crewlet-switcher-trigger__chevron {
|
|
17256
|
+
color: var(--color-text-secondary);
|
|
17257
|
+
}
|
|
17258
|
+
|
|
17259
|
+
.crewlet-switcher-trigger[aria-expanded='true'] svg.crewlet-switcher-trigger__chevron {
|
|
17260
|
+
color: var(--color-text-secondary);
|
|
17261
|
+
transform: rotate(180deg);
|
|
17262
|
+
}
|
|
17263
|
+
|
|
17264
|
+
/* ── The three surfaces ─────────────────────────────────────────────────── */
|
|
17265
|
+
|
|
17266
|
+
/*
|
|
17267
|
+
* ANCHORED: the popover's own surface (the subtle rung, the default hairline,
|
|
17268
|
+
* the large corner and the deepest shadow) at the switcher's size. The bands
|
|
17269
|
+
* lay themselves out inside it, so the panel itself does not scroll.
|
|
17270
|
+
*/
|
|
17271
|
+
.crewlet-popover.crewlet-switcher {
|
|
17272
|
+
display: flex;
|
|
17273
|
+
flex-direction: column;
|
|
17274
|
+
width: var(--crewlet-switcher-width);
|
|
17275
|
+
min-width: 0;
|
|
17276
|
+
max-width: calc(100vw - var(--spacing-4));
|
|
17277
|
+
max-height: min(var(--crewlet-switcher-max-height), calc(100dvh - var(--spacing-10) - var(--spacing-4)));
|
|
17278
|
+
overflow: hidden;
|
|
17279
|
+
}
|
|
17280
|
+
|
|
17281
|
+
/*
|
|
17282
|
+
* CENTRED: the same panel as a dialog, a step lower than a dialog stands so
|
|
17283
|
+
* it clears the page's bar, arriving at the popover's pace rather than a
|
|
17284
|
+
* dialog's, because it is the same panel opened from somewhere else.
|
|
17285
|
+
*/
|
|
17286
|
+
.crewlet-modal.crewlet-switcher--centered {
|
|
17287
|
+
--crewlet-modal-width: var(--crewlet-switcher-width);
|
|
17288
|
+
|
|
17289
|
+
max-height: min(var(--crewlet-switcher-max-height), calc(100dvh - var(--spacing-10) - var(--spacing-6)));
|
|
17290
|
+
margin-top: var(--spacing-2);
|
|
17291
|
+
animation-duration: var(--motion-duration-base);
|
|
17292
|
+
}
|
|
17293
|
+
|
|
17294
|
+
/* A SHEET carries a grab handle over its title, which says it came from the
|
|
17295
|
+
edge it is pinned to. Decoration: the close control is what closes it. */
|
|
17296
|
+
.crewlet-modal.crewlet-switcher--sheet::before {
|
|
17297
|
+
content: '';
|
|
17298
|
+
flex: none;
|
|
17299
|
+
width: calc(var(--spacing-7) + var(--spacing-1));
|
|
17300
|
+
height: var(--spacing-1);
|
|
17301
|
+
margin: var(--spacing-2) auto 0;
|
|
17302
|
+
border-radius: var(--radius-pill);
|
|
17303
|
+
background: var(--color-border-strong);
|
|
17304
|
+
}
|
|
17305
|
+
|
|
17306
|
+
.crewlet-switcher--sheet .crewlet-modal__header {
|
|
17307
|
+
min-height: var(--size-control-lg);
|
|
17308
|
+
padding: 0 var(--spacing-2) 0 var(--spacing-4);
|
|
17309
|
+
}
|
|
17310
|
+
|
|
17311
|
+
/* A dialog's body scrolls its whole content; here the list alone scrolls. */
|
|
17312
|
+
.crewlet-switcher .crewlet-modal__body {
|
|
17313
|
+
display: flex;
|
|
17314
|
+
flex-direction: column;
|
|
17315
|
+
overflow: hidden;
|
|
17316
|
+
}
|
|
17317
|
+
|
|
17318
|
+
.crewlet-switcher__panel {
|
|
17319
|
+
display: flex;
|
|
17320
|
+
flex: 1 1 auto;
|
|
17321
|
+
flex-direction: column;
|
|
17322
|
+
min-height: 0;
|
|
17323
|
+
}
|
|
17324
|
+
|
|
17325
|
+
/* ── The search band ────────────────────────────────────────────────────── */
|
|
17326
|
+
|
|
17327
|
+
/*
|
|
17328
|
+
* The field with no box of its own, as the command palette draws it: the band
|
|
17329
|
+
* is the field. It is set at the trail's size rather than the palette's
|
|
17330
|
+
* headline size, because the panel is a list read at a glance, and at the
|
|
17331
|
+
* reading size on a phone, where a smaller field zooms the page when tapped.
|
|
17332
|
+
*/
|
|
17333
|
+
.crewlet-input.crewlet-switcher__search {
|
|
17334
|
+
flex-shrink: 0;
|
|
17335
|
+
min-height: var(--size-control-lg);
|
|
17336
|
+
padding-inline: var(--spacing-3) var(--spacing-2);
|
|
17337
|
+
border: none;
|
|
17338
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
17339
|
+
border-radius: 0;
|
|
17340
|
+
background: transparent;
|
|
17341
|
+
}
|
|
17342
|
+
|
|
17343
|
+
.crewlet-input.crewlet-switcher__search .crewlet-input__control {
|
|
17344
|
+
font-size: var(--font-size-sm);
|
|
17345
|
+
}
|
|
17346
|
+
|
|
17347
|
+
.crewlet-switcher--sheet .crewlet-input.crewlet-switcher__search .crewlet-input__control {
|
|
17348
|
+
font-size: var(--font-size-md);
|
|
17349
|
+
}
|
|
17350
|
+
|
|
17351
|
+
/* ── The list ───────────────────────────────────────────────────────────── */
|
|
17352
|
+
|
|
17353
|
+
.crewlet-switcher__scroller {
|
|
17354
|
+
flex: 1 1 auto;
|
|
17355
|
+
min-height: 0;
|
|
17356
|
+
overflow-y: auto;
|
|
17357
|
+
overscroll-behavior: contain;
|
|
17358
|
+
padding: var(--spacing-1);
|
|
17359
|
+
scrollbar-width: thin;
|
|
17360
|
+
}
|
|
17361
|
+
|
|
17362
|
+
.crewlet-switcher__list {
|
|
17363
|
+
display: flex;
|
|
17364
|
+
flex-direction: column;
|
|
17365
|
+
}
|
|
17366
|
+
|
|
17367
|
+
/*
|
|
17368
|
+
* A ROW: a lead column, the name, and a figure at the end. Both classes are
|
|
17369
|
+
* named so this ties with nothing in `Listbox.css`, whose rows are a step
|
|
17370
|
+
* shorter and padded on every side.
|
|
17371
|
+
*/
|
|
17372
|
+
.crewlet-listbox__option.crewlet-switcher__option {
|
|
17373
|
+
gap: 0;
|
|
17374
|
+
min-height: var(--size-row-md);
|
|
17375
|
+
padding-block: 0;
|
|
17376
|
+
font-weight: var(--font-weight-medium);
|
|
17377
|
+
text-decoration: none;
|
|
17378
|
+
}
|
|
17379
|
+
|
|
17380
|
+
.crewlet-switcher--sheet .crewlet-listbox__option.crewlet-switcher__option {
|
|
17381
|
+
min-height: var(--size-control-lg);
|
|
17382
|
+
font-size: var(--font-size-sm);
|
|
17383
|
+
}
|
|
17384
|
+
|
|
17385
|
+
/*
|
|
17386
|
+
* THE CURRENT SUBJECT, outlined by its own accent hairline inside the row: an
|
|
17387
|
+
* outline rather than a shadow, so forced-colours mode keeps it. The row the
|
|
17388
|
+
* arrows are on takes the raised fill as every listbox row does; both can land
|
|
17389
|
+
* on one row, and it never gains a second border.
|
|
17390
|
+
*/
|
|
17391
|
+
.crewlet-listbox__option.crewlet-switcher__option.is-current {
|
|
17392
|
+
color: var(--color-text-primary);
|
|
17393
|
+
outline: 1px solid var(--color-brand-accent);
|
|
17394
|
+
outline-offset: -1px;
|
|
17395
|
+
}
|
|
17396
|
+
|
|
17397
|
+
/* A HELD ROW answers no pointer: no fill under it, and the reason in the quiet
|
|
17398
|
+
ink at its end says why. */
|
|
17399
|
+
.crewlet-listbox__option.crewlet-switcher__option[aria-disabled='true'] {
|
|
17400
|
+
background: transparent;
|
|
17401
|
+
color: var(--color-text-tertiary);
|
|
17402
|
+
}
|
|
17403
|
+
|
|
17404
|
+
/* Every row's key starts on one line, whatever the key's length. */
|
|
17405
|
+
.crewlet-switcher__lead {
|
|
17406
|
+
display: flex;
|
|
17407
|
+
flex: none;
|
|
17408
|
+
align-items: center;
|
|
17409
|
+
width: var(--crewlet-switcher-lead);
|
|
17410
|
+
color: var(--color-text-tertiary);
|
|
17411
|
+
}
|
|
17412
|
+
|
|
17413
|
+
.crewlet-switcher__label {
|
|
17414
|
+
flex: 1 1 auto;
|
|
17415
|
+
min-width: 0;
|
|
17416
|
+
overflow: hidden;
|
|
17417
|
+
text-overflow: ellipsis;
|
|
17418
|
+
white-space: nowrap;
|
|
17419
|
+
}
|
|
17420
|
+
|
|
17421
|
+
/* The letters a search matched: the weight carries it, in the primary ink. */
|
|
17422
|
+
b.crewlet-switcher__match {
|
|
17423
|
+
font-weight: var(--font-weight-bold);
|
|
17424
|
+
color: var(--color-text-primary);
|
|
17425
|
+
}
|
|
17426
|
+
|
|
17427
|
+
.crewlet-switcher__meta {
|
|
17428
|
+
display: inline-flex;
|
|
17429
|
+
flex: none;
|
|
17430
|
+
align-items: center;
|
|
17431
|
+
gap: calc(var(--spacing-1) * 1.5);
|
|
17432
|
+
margin-left: var(--spacing-3);
|
|
17433
|
+
color: var(--color-text-tertiary);
|
|
17434
|
+
font-size: var(--font-size-xs);
|
|
17435
|
+
font-weight: var(--font-weight-regular);
|
|
17436
|
+
font-variant-numeric: tabular-nums;
|
|
17437
|
+
white-space: nowrap;
|
|
17438
|
+
}
|
|
17439
|
+
|
|
17440
|
+
/* A group's heading carries its count at its end. */
|
|
17441
|
+
.crewlet-switcher__heading {
|
|
17442
|
+
display: flex;
|
|
17443
|
+
align-items: baseline;
|
|
17444
|
+
justify-content: space-between;
|
|
17445
|
+
}
|
|
17446
|
+
|
|
17447
|
+
.crewlet-switcher__count {
|
|
17448
|
+
font-variant-numeric: tabular-nums;
|
|
17449
|
+
letter-spacing: normal;
|
|
17450
|
+
}
|
|
17451
|
+
|
|
17452
|
+
/* A line about the list itself, on the inset rung: not a row, so not a row's
|
|
17453
|
+
shape. */
|
|
17454
|
+
.crewlet-switcher__note {
|
|
17455
|
+
margin: calc(var(--spacing-1) * 1.5) var(--spacing-2) var(--spacing-1);
|
|
17456
|
+
padding: var(--spacing-2) calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
17457
|
+
border-radius: var(--radius-md);
|
|
17458
|
+
background: var(--color-surface-inset);
|
|
17459
|
+
color: var(--color-text-secondary);
|
|
17460
|
+
font-size: var(--font-size-xs);
|
|
17461
|
+
}
|
|
17462
|
+
|
|
17463
|
+
/* A state of the list, said in two lines, with its actions as rows under it. */
|
|
17464
|
+
.crewlet-switcher__message {
|
|
17465
|
+
display: grid;
|
|
17466
|
+
gap: var(--spacing-1);
|
|
17467
|
+
padding: var(--spacing-3) var(--spacing-3) var(--spacing-2);
|
|
17468
|
+
}
|
|
17469
|
+
|
|
17470
|
+
.crewlet-switcher__message-title {
|
|
17471
|
+
color: var(--color-text-primary);
|
|
17472
|
+
font-size: var(--font-size-compact);
|
|
17473
|
+
font-weight: var(--font-weight-semibold);
|
|
17474
|
+
}
|
|
17475
|
+
|
|
17476
|
+
.crewlet-switcher__message-body {
|
|
17477
|
+
color: var(--color-text-secondary);
|
|
17478
|
+
font-size: var(--font-size-xs);
|
|
17479
|
+
}
|
|
17480
|
+
|
|
17481
|
+
/* Placeholder rows the shape of the rows on their way. */
|
|
17482
|
+
.crewlet-switcher__skeleton-row {
|
|
17483
|
+
display: flex;
|
|
17484
|
+
align-items: center;
|
|
17485
|
+
height: var(--size-row-md);
|
|
17486
|
+
padding: 0 var(--spacing-3);
|
|
17487
|
+
}
|
|
17488
|
+
|
|
17489
|
+
.crewlet-switcher__skeleton-row > .crewlet-switcher__meta {
|
|
17490
|
+
margin-left: auto;
|
|
17491
|
+
}
|
|
17492
|
+
|
|
17493
|
+
/* ── The footer ─────────────────────────────────────────────────────────── */
|
|
17494
|
+
|
|
17495
|
+
.crewlet-switcher__footer {
|
|
17496
|
+
display: flex;
|
|
17497
|
+
flex: none;
|
|
17498
|
+
flex-direction: column;
|
|
17499
|
+
padding: var(--spacing-1);
|
|
17500
|
+
border-top: 1px solid var(--color-border-default);
|
|
17501
|
+
}
|
|
17502
|
+
|
|
17503
|
+
@media (prefers-reduced-motion: reduce) {
|
|
17504
|
+
.crewlet-switcher-trigger {
|
|
17505
|
+
transition: none;
|
|
17506
|
+
}
|
|
17507
|
+
|
|
17508
|
+
svg.crewlet-switcher-trigger__chevron {
|
|
17509
|
+
transition: none;
|
|
17510
|
+
}
|
|
17511
|
+
}
|
|
17512
|
+
|
|
17513
|
+
|
|
15650
17514
|
/* Table-TGCS4C3F.css */
|
|
15651
17515
|
/*
|
|
15652
17516
|
* Table: the operator's table, on the elements a table is made of.
|
|
@@ -15819,7 +17683,7 @@ svg.crewlet-select__chevron {
|
|
|
15819
17683
|
}
|
|
15820
17684
|
|
|
15821
17685
|
|
|
15822
|
-
/* Tabs-
|
|
17686
|
+
/* Tabs-ITJYJFMU.css */
|
|
15823
17687
|
/*
|
|
15824
17688
|
* The pill register: Tabs and SegmentedControl.
|
|
15825
17689
|
*
|
|
@@ -16100,26 +17964,75 @@ svg.crewlet-select__chevron {
|
|
|
16100
17964
|
box-shadow: var(--shadow-xs), 0 0 0 1px var(--color-border-default);
|
|
16101
17965
|
}
|
|
16102
17966
|
|
|
16103
|
-
/*
|
|
16104
|
-
* THE RING IS AN OUTLINE. Forced-colors mode drops every box-shadow and keeps
|
|
16105
|
-
* outlines, so a ring drawn as a shadow disappears for exactly the readers who
|
|
16106
|
-
* need one most.
|
|
16107
|
-
*/
|
|
16108
|
-
.crewlet-tabs__tab:focus-visible {
|
|
17967
|
+
/*
|
|
17968
|
+
* THE RING IS AN OUTLINE. Forced-colors mode drops every box-shadow and keeps
|
|
17969
|
+
* outlines, so a ring drawn as a shadow disappears for exactly the readers who
|
|
17970
|
+
* need one most.
|
|
17971
|
+
*/
|
|
17972
|
+
.crewlet-tabs__tab:focus-visible {
|
|
17973
|
+
outline: 2px solid var(--color-focus);
|
|
17974
|
+
outline-offset: 2px;
|
|
17975
|
+
}
|
|
17976
|
+
|
|
17977
|
+
/*
|
|
17978
|
+
* A CHIP RINGS ON ITS OWN EDGE, flush rather than 2px off it. The chip that
|
|
17979
|
+
* is on draws a hairline round itself, and a ring standing off that hairline
|
|
17980
|
+
* was two edges with a gap between them, which reads as a second outline
|
|
17981
|
+
* rather than as focus. Flush, the ring covers the hairline, and it stays
|
|
17982
|
+
* inside the well's 2px inset: two pixels wide, it meets the well's own
|
|
17983
|
+
* boundary rather than leaving a sliver of the well between the two.
|
|
17984
|
+
*/
|
|
17985
|
+
.crewlet-tabs--pill .crewlet-tabs__tab:focus-visible {
|
|
17986
|
+
outline-offset: 0;
|
|
17987
|
+
}
|
|
17988
|
+
|
|
17989
|
+
/* ─── Chip (a lens row) ───────────────────────────────────────── */
|
|
17990
|
+
/*
|
|
17991
|
+
* QUIET CHIPS WITH NO WELL: the lenses of an object or a scope, set beside its
|
|
17992
|
+
* name in a page's bar. A well round them was a second box beside the name the
|
|
17993
|
+
* lenses are about, and a raised chip inside it a second highlight. Here the
|
|
17994
|
+
* chip that is on is drawn by its own border in the accent and nothing else,
|
|
17995
|
+
* which is the kit's one way of saying "this one is chosen".
|
|
17996
|
+
*/
|
|
17997
|
+
.crewlet-tabs--chip {
|
|
17998
|
+
display: inline-flex;
|
|
17999
|
+
align-items: center;
|
|
18000
|
+
gap: calc(var(--spacing-1) / 2);
|
|
18001
|
+
}
|
|
18002
|
+
|
|
18003
|
+
.crewlet-tabs--chip .crewlet-tabs__tab {
|
|
18004
|
+
min-height: var(--size-control-sm);
|
|
18005
|
+
padding: 0 calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
18006
|
+
border-radius: var(--radius-md);
|
|
18007
|
+
color: var(--color-text-secondary);
|
|
18008
|
+
font-size: var(--font-size-xs);
|
|
18009
|
+
}
|
|
18010
|
+
|
|
18011
|
+
.crewlet-tabs--chip .crewlet-tabs__tab:hover:not(.is-disabled):not(.is-active) {
|
|
18012
|
+
background: var(--color-surface-hover);
|
|
18013
|
+
}
|
|
18014
|
+
|
|
18015
|
+
/* A COUNT IS A QUIET FIGURE here, not a pill: a pill inside a chip is a box
|
|
18016
|
+
inside a box, beside a name that already has its own. */
|
|
18017
|
+
.crewlet-tabs--chip .crewlet-count {
|
|
18018
|
+
min-width: 0;
|
|
18019
|
+
padding: 0;
|
|
18020
|
+
background: none;
|
|
18021
|
+
}
|
|
18022
|
+
|
|
18023
|
+
/* An outline rather than a border, so a chip turning on does not move its
|
|
18024
|
+
neighbours by a pixel, and forced-colors mode keeps it. */
|
|
18025
|
+
.crewlet-tabs--chip .crewlet-tabs__tab.is-active {
|
|
18026
|
+
color: var(--color-text-primary);
|
|
18027
|
+
outline: 1px solid var(--color-brand-accent);
|
|
18028
|
+
outline-offset: -1px;
|
|
18029
|
+
}
|
|
18030
|
+
|
|
18031
|
+
/* THE RING TAKES THE BORDER'S PLACE: declared after it and of the same
|
|
18032
|
+
weight, so a focused chip that is on draws one edge, the ring. */
|
|
18033
|
+
.crewlet-tabs--chip .crewlet-tabs__tab:focus-visible {
|
|
16109
18034
|
outline: 2px solid var(--color-focus);
|
|
16110
|
-
outline-offset: 2px;
|
|
16111
|
-
}
|
|
16112
|
-
|
|
16113
|
-
/*
|
|
16114
|
-
* A CHIP RINGS ON ITS OWN EDGE, flush rather than 2px off it. The chip that
|
|
16115
|
-
* is on draws a hairline round itself, and a ring standing off that hairline
|
|
16116
|
-
* was two edges with a gap between them, which reads as a second outline
|
|
16117
|
-
* rather than as focus. Flush, the ring covers the hairline, and it stays
|
|
16118
|
-
* inside the well's 2px inset: two pixels wide, it meets the well's own
|
|
16119
|
-
* boundary rather than leaving a sliver of the well between the two.
|
|
16120
|
-
*/
|
|
16121
|
-
.crewlet-tabs--pill .crewlet-tabs__tab:focus-visible {
|
|
16122
|
-
outline-offset: 0;
|
|
18035
|
+
outline-offset: -2px;
|
|
16123
18036
|
}
|
|
16124
18037
|
|
|
16125
18038
|
.crewlet-tabs__tab.is-disabled,
|
|
@@ -17037,6 +18950,361 @@ svg.crewlet-select__chevron {
|
|
|
17037
18950
|
}
|
|
17038
18951
|
|
|
17039
18952
|
|
|
18953
|
+
/* ThemeGallery-NITASULQ.css */
|
|
18954
|
+
/*
|
|
18955
|
+
* The gallery of themes: each group's heading over a grid of cards.
|
|
18956
|
+
*
|
|
18957
|
+
* A ROW HOLDS THE SAME NUMBER OF CARDS IN EVERY GROUP (`columns`, three by
|
|
18958
|
+
* default), so a group of one draws a card the size of every other card
|
|
18959
|
+
* rather than one stretched across the row, and the swatches line up from
|
|
18960
|
+
* group to group.
|
|
18961
|
+
*/
|
|
18962
|
+
|
|
18963
|
+
.crewlet-theme-gallery__groups {
|
|
18964
|
+
display: flex;
|
|
18965
|
+
flex-direction: column;
|
|
18966
|
+
gap: var(--spacing-3);
|
|
18967
|
+
}
|
|
18968
|
+
|
|
18969
|
+
.crewlet-theme-gallery__group {
|
|
18970
|
+
display: flex;
|
|
18971
|
+
flex-direction: column;
|
|
18972
|
+
gap: var(--spacing-1);
|
|
18973
|
+
}
|
|
18974
|
+
|
|
18975
|
+
.crewlet-theme-gallery__heading {
|
|
18976
|
+
color: var(--color-text-tertiary);
|
|
18977
|
+
font-size: var(--font-size-2xs);
|
|
18978
|
+
line-height: var(--font-line-height-normal);
|
|
18979
|
+
}
|
|
18980
|
+
|
|
18981
|
+
.crewlet-theme-gallery__cards {
|
|
18982
|
+
display: grid;
|
|
18983
|
+
grid-template-columns: repeat(var(--crewlet-theme-gallery-columns), minmax(0, 1fr));
|
|
18984
|
+
gap: var(--spacing-2);
|
|
18985
|
+
}
|
|
18986
|
+
|
|
18987
|
+
/*
|
|
18988
|
+
* A CARD IS ITS BORDER. Resting, the plain hairline; under the pointer, the
|
|
18989
|
+
* strong one; chosen, the accent. One line round the card in every state, so
|
|
18990
|
+
* the chosen card is never a card inside a frame.
|
|
18991
|
+
*/
|
|
18992
|
+
.crewlet-theme-gallery__card {
|
|
18993
|
+
display: flex;
|
|
18994
|
+
flex-direction: column;
|
|
18995
|
+
gap: var(--spacing-1);
|
|
18996
|
+
min-width: 0;
|
|
18997
|
+
padding: var(--spacing-2);
|
|
18998
|
+
border: 1px solid var(--color-border-default);
|
|
18999
|
+
border-radius: var(--radius-md);
|
|
19000
|
+
background: var(--color-surface-subtle);
|
|
19001
|
+
color: var(--color-text-primary);
|
|
19002
|
+
font: inherit;
|
|
19003
|
+
text-align: left;
|
|
19004
|
+
cursor: pointer;
|
|
19005
|
+
}
|
|
19006
|
+
|
|
19007
|
+
/* Not on the chosen card: under the pointer it keeps the accent, or the one
|
|
19008
|
+
card that says "this one" would stop saying it while it is being pointed at. */
|
|
19009
|
+
.crewlet-theme-gallery__card:hover:not(:disabled):not(.is-chosen) {
|
|
19010
|
+
border-color: var(--color-border-strong);
|
|
19011
|
+
}
|
|
19012
|
+
|
|
19013
|
+
.crewlet-theme-gallery__card.is-chosen {
|
|
19014
|
+
border-color: var(--color-brand-accent);
|
|
19015
|
+
}
|
|
19016
|
+
|
|
19017
|
+
/* The ring is drawn OVER the border, inset by its width, never a second line outside it. */
|
|
19018
|
+
.crewlet-theme-gallery__card:focus-visible {
|
|
19019
|
+
outline: 2px solid var(--color-focus);
|
|
19020
|
+
outline-offset: -1px;
|
|
19021
|
+
}
|
|
19022
|
+
|
|
19023
|
+
.crewlet-theme-gallery__card:disabled {
|
|
19024
|
+
cursor: not-allowed;
|
|
19025
|
+
opacity: 0.5;
|
|
19026
|
+
}
|
|
19027
|
+
|
|
19028
|
+
.crewlet-theme-gallery__name {
|
|
19029
|
+
overflow: hidden;
|
|
19030
|
+
font-size: var(--font-size-xs);
|
|
19031
|
+
font-weight: var(--font-weight-medium);
|
|
19032
|
+
line-height: var(--font-line-height-tight);
|
|
19033
|
+
text-overflow: ellipsis;
|
|
19034
|
+
white-space: nowrap;
|
|
19035
|
+
}
|
|
19036
|
+
|
|
19037
|
+
/*
|
|
19038
|
+
* FORCED COLORS keeps the border and drops the accent, so the chosen card
|
|
19039
|
+
* would look like every other; the system's own selected colour says it.
|
|
19040
|
+
*/
|
|
19041
|
+
@media (forced-colors: active) {
|
|
19042
|
+
.crewlet-theme-gallery__card.is-chosen {
|
|
19043
|
+
border-color: Highlight;
|
|
19044
|
+
border-width: 2px;
|
|
19045
|
+
}
|
|
19046
|
+
}
|
|
19047
|
+
|
|
19048
|
+
|
|
19049
|
+
/* ThemeSwatch-4DL457ZB.css */
|
|
19050
|
+
/*
|
|
19051
|
+
* A theme's thumbnail.
|
|
19052
|
+
*
|
|
19053
|
+
* EVERY COLOUR IS THE THEME'S OWN, from the custom properties ThemeSwatch sets
|
|
19054
|
+
* on each half (--crewlet-swatch-*), and none is the page's except the
|
|
19055
|
+
* outline, which is the page's hairline because the page is where the
|
|
19056
|
+
* thumbnail sits. Two halves share the box equally: dark, then light.
|
|
19057
|
+
*
|
|
19058
|
+
* IT IS A PICTURE, so forced-colors mode leaves it alone: repainted to the
|
|
19059
|
+
* system's two colours, every theme would draw the same blank box.
|
|
19060
|
+
*/
|
|
19061
|
+
|
|
19062
|
+
.crewlet-theme-swatch {
|
|
19063
|
+
display: grid;
|
|
19064
|
+
grid-auto-flow: column;
|
|
19065
|
+
grid-auto-columns: minmax(0, 1fr);
|
|
19066
|
+
flex: none;
|
|
19067
|
+
overflow: hidden;
|
|
19068
|
+
border: 1px solid var(--color-border-default);
|
|
19069
|
+
forced-color-adjust: none;
|
|
19070
|
+
}
|
|
19071
|
+
|
|
19072
|
+
.crewlet-theme-swatch--chip {
|
|
19073
|
+
width: 26px;
|
|
19074
|
+
height: 16px;
|
|
19075
|
+
border-radius: var(--radius-xs);
|
|
19076
|
+
}
|
|
19077
|
+
|
|
19078
|
+
.crewlet-theme-swatch--card {
|
|
19079
|
+
width: 100%;
|
|
19080
|
+
height: 38px;
|
|
19081
|
+
border-radius: var(--radius-sm);
|
|
19082
|
+
}
|
|
19083
|
+
|
|
19084
|
+
.crewlet-theme-swatch--pane {
|
|
19085
|
+
width: 100%;
|
|
19086
|
+
aspect-ratio: 4 / 3;
|
|
19087
|
+
border-radius: var(--radius-md);
|
|
19088
|
+
}
|
|
19089
|
+
|
|
19090
|
+
.crewlet-theme-swatch__half {
|
|
19091
|
+
display: grid;
|
|
19092
|
+
grid-template-columns: 26% minmax(0, 1fr);
|
|
19093
|
+
min-width: 0;
|
|
19094
|
+
background: var(--crewlet-swatch-frame);
|
|
19095
|
+
}
|
|
19096
|
+
|
|
19097
|
+
/* ── The chip: each palette's frame, with its accent on it ────────────── */
|
|
19098
|
+
|
|
19099
|
+
.crewlet-theme-swatch--chip .crewlet-theme-swatch__half {
|
|
19100
|
+
grid-template-columns: none;
|
|
19101
|
+
place-items: center;
|
|
19102
|
+
}
|
|
19103
|
+
|
|
19104
|
+
.crewlet-theme-swatch__dot {
|
|
19105
|
+
width: 6px;
|
|
19106
|
+
height: 6px;
|
|
19107
|
+
border-radius: var(--radius-circle);
|
|
19108
|
+
background: var(--crewlet-swatch-accent);
|
|
19109
|
+
}
|
|
19110
|
+
|
|
19111
|
+
/* ── The card: a rail, a sheet, a card on it ──────────────────────────── */
|
|
19112
|
+
|
|
19113
|
+
.crewlet-theme-swatch__rail {
|
|
19114
|
+
display: flex;
|
|
19115
|
+
flex-direction: column;
|
|
19116
|
+
gap: 3px;
|
|
19117
|
+
padding: 6px 4px;
|
|
19118
|
+
min-width: 0;
|
|
19119
|
+
}
|
|
19120
|
+
|
|
19121
|
+
.crewlet-theme-swatch__rail-row {
|
|
19122
|
+
display: block;
|
|
19123
|
+
width: 80%;
|
|
19124
|
+
height: 3px;
|
|
19125
|
+
border-radius: var(--radius-pill);
|
|
19126
|
+
background: var(--crewlet-swatch-muted);
|
|
19127
|
+
}
|
|
19128
|
+
|
|
19129
|
+
/* The row the reader is on stands on the raised rung, as the rail draws it. */
|
|
19130
|
+
.crewlet-theme-swatch__rail-row.is-current {
|
|
19131
|
+
width: 100%;
|
|
19132
|
+
height: 6px;
|
|
19133
|
+
background: var(--crewlet-swatch-raised);
|
|
19134
|
+
}
|
|
19135
|
+
|
|
19136
|
+
.crewlet-theme-swatch__sheet {
|
|
19137
|
+
display: flex;
|
|
19138
|
+
flex-direction: column;
|
|
19139
|
+
min-width: 0;
|
|
19140
|
+
margin: 3px 3px 3px 0;
|
|
19141
|
+
padding: 3px;
|
|
19142
|
+
border-radius: var(--radius-xs);
|
|
19143
|
+
background: var(--crewlet-swatch-sheet);
|
|
19144
|
+
}
|
|
19145
|
+
|
|
19146
|
+
.crewlet-theme-swatch__card {
|
|
19147
|
+
display: flex;
|
|
19148
|
+
flex: 1;
|
|
19149
|
+
flex-direction: column;
|
|
19150
|
+
justify-content: space-between;
|
|
19151
|
+
min-width: 0;
|
|
19152
|
+
padding: 4px;
|
|
19153
|
+
border: 1px solid var(--crewlet-swatch-hairline);
|
|
19154
|
+
border-radius: var(--radius-xs);
|
|
19155
|
+
background: var(--crewlet-swatch-card);
|
|
19156
|
+
}
|
|
19157
|
+
|
|
19158
|
+
.crewlet-theme-swatch__line {
|
|
19159
|
+
display: block;
|
|
19160
|
+
width: 60%;
|
|
19161
|
+
height: 3px;
|
|
19162
|
+
border-radius: var(--radius-pill);
|
|
19163
|
+
background: var(--crewlet-swatch-text);
|
|
19164
|
+
}
|
|
19165
|
+
|
|
19166
|
+
/*
|
|
19167
|
+
* THE ACTION GIVES WAY BEFORE IT DISAPPEARS. A narrow thumbnail has less room
|
|
19168
|
+
* than the action and the four states take, so the action narrows to a floor
|
|
19169
|
+
* and the row clips its last states, rather than the action, which is what a
|
|
19170
|
+
* theme is chosen for, shrinking to nothing.
|
|
19171
|
+
*/
|
|
19172
|
+
.crewlet-theme-swatch__row {
|
|
19173
|
+
display: flex;
|
|
19174
|
+
align-items: center;
|
|
19175
|
+
gap: 2px;
|
|
19176
|
+
overflow: hidden;
|
|
19177
|
+
}
|
|
19178
|
+
|
|
19179
|
+
/* The primary action: the accent's fill. */
|
|
19180
|
+
.crewlet-theme-swatch__action {
|
|
19181
|
+
display: block;
|
|
19182
|
+
flex: 0 1 14px;
|
|
19183
|
+
min-width: 6px;
|
|
19184
|
+
height: 6px;
|
|
19185
|
+
margin-right: auto;
|
|
19186
|
+
border-radius: var(--radius-pill);
|
|
19187
|
+
background: var(--crewlet-swatch-accent);
|
|
19188
|
+
}
|
|
19189
|
+
|
|
19190
|
+
/* The four states, in the order the kit names them. */
|
|
19191
|
+
.crewlet-theme-swatch__state {
|
|
19192
|
+
display: block;
|
|
19193
|
+
flex: none;
|
|
19194
|
+
width: 4px;
|
|
19195
|
+
height: 4px;
|
|
19196
|
+
border-radius: var(--radius-circle);
|
|
19197
|
+
}
|
|
19198
|
+
|
|
19199
|
+
.crewlet-theme-swatch__state--info { background: var(--crewlet-swatch-info); }
|
|
19200
|
+
.crewlet-theme-swatch__state--warning { background: var(--crewlet-swatch-warning); }
|
|
19201
|
+
.crewlet-theme-swatch__state--danger { background: var(--crewlet-swatch-danger); }
|
|
19202
|
+
.crewlet-theme-swatch__state--success { background: var(--crewlet-swatch-success); }
|
|
19203
|
+
|
|
19204
|
+
/* ── The pane: the same sketch, large enough to read as a screen ───────── */
|
|
19205
|
+
|
|
19206
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__half {
|
|
19207
|
+
grid-template-columns: 26% minmax(0, 1fr);
|
|
19208
|
+
}
|
|
19209
|
+
|
|
19210
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__rail {
|
|
19211
|
+
gap: 7px;
|
|
19212
|
+
padding: 12px 8px;
|
|
19213
|
+
}
|
|
19214
|
+
|
|
19215
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__rail-row {
|
|
19216
|
+
height: 5px;
|
|
19217
|
+
}
|
|
19218
|
+
|
|
19219
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__rail-row.is-current {
|
|
19220
|
+
height: 12px;
|
|
19221
|
+
border: 1px solid var(--crewlet-swatch-hairline);
|
|
19222
|
+
border-radius: var(--radius-xs);
|
|
19223
|
+
}
|
|
19224
|
+
|
|
19225
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__sheet {
|
|
19226
|
+
gap: 8px;
|
|
19227
|
+
margin: 6px 6px 6px 0;
|
|
19228
|
+
padding: 10px;
|
|
19229
|
+
border-radius: var(--radius-sm);
|
|
19230
|
+
}
|
|
19231
|
+
|
|
19232
|
+
.crewlet-theme-swatch__title {
|
|
19233
|
+
display: block;
|
|
19234
|
+
flex: none;
|
|
19235
|
+
width: 40%;
|
|
19236
|
+
height: 6px;
|
|
19237
|
+
border-radius: var(--radius-pill);
|
|
19238
|
+
background: var(--crewlet-swatch-text);
|
|
19239
|
+
}
|
|
19240
|
+
|
|
19241
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__card {
|
|
19242
|
+
flex: none;
|
|
19243
|
+
gap: 7px;
|
|
19244
|
+
justify-content: flex-start;
|
|
19245
|
+
padding: 8px;
|
|
19246
|
+
}
|
|
19247
|
+
|
|
19248
|
+
.crewlet-theme-swatch__item {
|
|
19249
|
+
display: flex;
|
|
19250
|
+
align-items: center;
|
|
19251
|
+
gap: 6px;
|
|
19252
|
+
}
|
|
19253
|
+
|
|
19254
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__state {
|
|
19255
|
+
width: 6px;
|
|
19256
|
+
height: 6px;
|
|
19257
|
+
}
|
|
19258
|
+
|
|
19259
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__line {
|
|
19260
|
+
width: 45%;
|
|
19261
|
+
height: 4px;
|
|
19262
|
+
}
|
|
19263
|
+
|
|
19264
|
+
.crewlet-theme-swatch__muted {
|
|
19265
|
+
display: block;
|
|
19266
|
+
width: 18%;
|
|
19267
|
+
height: 4px;
|
|
19268
|
+
margin-left: auto;
|
|
19269
|
+
border-radius: var(--radius-pill);
|
|
19270
|
+
background: var(--crewlet-swatch-muted);
|
|
19271
|
+
}
|
|
19272
|
+
|
|
19273
|
+
.crewlet-theme-swatch__actions {
|
|
19274
|
+
display: flex;
|
|
19275
|
+
gap: 6px;
|
|
19276
|
+
margin-top: auto;
|
|
19277
|
+
}
|
|
19278
|
+
|
|
19279
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__action {
|
|
19280
|
+
display: grid;
|
|
19281
|
+
flex: none;
|
|
19282
|
+
place-items: center;
|
|
19283
|
+
width: 40%;
|
|
19284
|
+
height: 16px;
|
|
19285
|
+
margin-right: 0;
|
|
19286
|
+
border-radius: var(--radius-xs);
|
|
19287
|
+
}
|
|
19288
|
+
|
|
19289
|
+
/* The primary action's label, in the colour the theme labels its accent with. */
|
|
19290
|
+
.crewlet-theme-swatch__label {
|
|
19291
|
+
display: block;
|
|
19292
|
+
width: 50%;
|
|
19293
|
+
height: 4px;
|
|
19294
|
+
border-radius: var(--radius-pill);
|
|
19295
|
+
background: var(--crewlet-swatch-on-accent);
|
|
19296
|
+
}
|
|
19297
|
+
|
|
19298
|
+
.crewlet-theme-swatch__secondary {
|
|
19299
|
+
display: block;
|
|
19300
|
+
width: 26%;
|
|
19301
|
+
height: 16px;
|
|
19302
|
+
border: 1px solid var(--crewlet-swatch-hairline);
|
|
19303
|
+
border-radius: var(--radius-xs);
|
|
19304
|
+
background: var(--crewlet-swatch-card);
|
|
19305
|
+
}
|
|
19306
|
+
|
|
19307
|
+
|
|
17040
19308
|
/* TimeWindowPicker-GBF4JDFI.css */
|
|
17041
19309
|
/*
|
|
17042
19310
|
* TimeWindowPicker: one trigger over one panel.
|
|
@@ -17603,7 +19871,7 @@ svg.crewlet-time-window__tick {
|
|
|
17603
19871
|
}
|
|
17604
19872
|
|
|
17605
19873
|
|
|
17606
|
-
/* Toaster-
|
|
19874
|
+
/* Toaster-KZ7YE2HA.css */
|
|
17607
19875
|
/*
|
|
17608
19876
|
* The toast stack.
|
|
17609
19877
|
*
|
|
@@ -17796,6 +20064,7 @@ svg.crewlet-time-window__tick {
|
|
|
17796
20064
|
.crewlet-toast--danger .crewlet-toast__action-link {
|
|
17797
20065
|
background: var(--color-feedback-danger);
|
|
17798
20066
|
border-color: var(--color-feedback-danger);
|
|
20067
|
+
color: var(--color-text-on-danger);
|
|
17799
20068
|
}
|
|
17800
20069
|
|
|
17801
20070
|
.crewlet-toast--danger .crewlet-toast__action-btn:hover,
|
|
@@ -19270,7 +21539,7 @@ svg.crewlet-time-window__tick {
|
|
|
19270
21539
|
}
|
|
19271
21540
|
|
|
19272
21541
|
|
|
19273
|
-
/* TreeGrid-
|
|
21542
|
+
/* TreeGrid-FBX3MSJA.css */
|
|
19274
21543
|
/*
|
|
19275
21544
|
* A hierarchy as rows and columns (TreeGrid.tsx).
|
|
19276
21545
|
*
|
|
@@ -19399,6 +21668,25 @@ svg.crewlet-time-window__tick {
|
|
|
19399
21668
|
outline-offset: var(--size-focus-ring-inset-offset);
|
|
19400
21669
|
}
|
|
19401
21670
|
|
|
21671
|
+
/*
|
|
21672
|
+
* A HEADLESS GRID keeps its header row for a screen reader and draws no band:
|
|
21673
|
+
* the row is taken out of the layout the way VisuallyHidden takes text out,
|
|
21674
|
+
* and the first row of the body loses the hairline that would otherwise sit
|
|
21675
|
+
* under the frame's own edge as a second line.
|
|
21676
|
+
*/
|
|
21677
|
+
.crewlet-tree-grid--headless .crewlet-tree-grid__head {
|
|
21678
|
+
position: absolute;
|
|
21679
|
+
width: 1px;
|
|
21680
|
+
height: 1px;
|
|
21681
|
+
overflow: hidden;
|
|
21682
|
+
clip-path: inset(50%);
|
|
21683
|
+
white-space: nowrap;
|
|
21684
|
+
}
|
|
21685
|
+
|
|
21686
|
+
.crewlet-tree-grid--headless .crewlet-tree-grid__head + [role='rowgroup'] > .crewlet-tree-grid__row:first-child {
|
|
21687
|
+
border-top: 0;
|
|
21688
|
+
}
|
|
21689
|
+
|
|
19402
21690
|
/* The selection is where the reader is, so it takes the accent. */
|
|
19403
21691
|
.crewlet-tree-grid__row[aria-selected='true'] {
|
|
19404
21692
|
box-shadow: inset 2px 0 0 var(--color-brand-accent);
|