@crewlethq/ui 0.81.2 → 0.83.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 +89 -4
- package/dist/Accordion/index.js +3 -3
- package/dist/ActionCard/ActionCard.d.ts +49 -0
- package/dist/ActionCard/index.d.ts +4 -0
- package/dist/ActionCard/index.js +2 -0
- package/dist/ActionCard-47WSZ2O5.css +110 -0
- package/dist/ActivityLine/ActivityLine.d.ts +27 -0
- package/dist/ActivityLine/index.d.ts +4 -0
- package/dist/ActivityLine/index.js +4 -0
- package/dist/ActivityLine-AMSERTOB.css +74 -0
- package/dist/AgentHandoffPanel/index.js +15 -15
- package/dist/AppShell/AccountRow.d.ts +19 -1
- package/dist/AppShell/AppShell.d.ts +62 -4
- package/dist/AppShell/index.d.ts +1 -1
- package/dist/AppShell/index.js +12 -6
- package/dist/AppShell/railMotion.d.ts +60 -0
- package/dist/AppShell/railShape.d.ts +22 -0
- package/dist/{AppShell-2IBUS4TH.css → AppShell-U7D2MUUF.css} +291 -20
- package/dist/ArrangeFrame/index.js +2 -2
- package/dist/ArrangeGroup/index.js +2 -2
- package/dist/ArrangeList/index.js +8 -7
- package/dist/ArtifactBar/index.js +13 -11
- package/dist/ArtifactCard/index.js +13 -13
- package/dist/ArtifactCover/index.js +3 -3
- package/dist/ArtifactKindIllustration/index.js +1 -1
- package/dist/ArtifactKinds-3EH4KR3F.css +18 -0
- package/dist/ArtifactMakeRow/index.js +1 -1
- package/dist/ArtifactNameCell/index.js +1 -1
- package/dist/ArtifactPanel/index.js +5 -5
- package/dist/AttachmentChip/index.js +2 -2
- package/dist/AuthLayout/index.js +5 -4
- package/dist/Avatar/Avatar.d.ts +30 -28
- package/dist/Avatar/AvatarStack.d.ts +2 -2
- package/dist/Avatar/index.d.ts +1 -1
- package/dist/Avatar/index.js +2 -2
- package/dist/{Avatar-VJSJGFRG.css → Avatar-MNE3WBZO.css} +56 -54
- package/dist/AvatarPicker/index.js +13 -12
- package/dist/{AvatarStack-7I3P7LCK.css → AvatarStack-KEHD3GWY.css} +16 -4
- package/dist/BrandLockup/BrandLockup.d.ts +6 -0
- package/dist/BrandLockup/index.js +2 -1
- package/dist/BriefCard/BriefCard.d.ts +23 -1
- package/dist/BriefCard/index.d.ts +2 -2
- package/dist/BriefCard/index.js +7 -7
- package/dist/{BriefCard-VKTH3BSW.css → BriefCard-QCL7MVUV.css} +26 -0
- package/dist/Canvas/index.js +8 -6
- package/dist/CanvasBoard/index.js +11 -9
- package/dist/CanvasToolbar/index.js +10 -8
- package/dist/Card/index.js +2 -2
- package/dist/ChangeList/index.js +5 -5
- package/dist/ChangeMark/index.js +6 -4
- package/dist/CharacterPicker/index.js +2 -2
- package/dist/ChatDay/ChatDay.d.ts +53 -0
- package/dist/ChatDay/index.d.ts +5 -0
- package/dist/ChatDay/index.js +3 -0
- package/dist/ChatDay-E3FF5HWF.css +116 -0
- package/dist/ChatDivider/ChatDivider.d.ts +31 -0
- package/dist/ChatDivider/index.d.ts +4 -0
- package/dist/ChatDivider/index.js +2 -0
- package/dist/ChatDivider-7ZNDL2PZ.css +76 -0
- package/dist/ChatMessage/ChatMessage.d.ts +111 -0
- package/dist/ChatMessage/index.d.ts +4 -0
- package/dist/ChatMessage/index.js +5 -0
- package/dist/ChatMessage-FH7VRVCH.css +304 -0
- package/dist/ChatScale-L4SIHSKL.css +42 -0
- package/dist/ChatThread/ChatThread.d.ts +33 -4
- package/dist/ChatThread/index.d.ts +1 -1
- package/dist/ChatThread/index.js +2 -2
- package/dist/{ChatThread-2KO3FZKQ.css → ChatThread-HAECJMP6.css} +17 -0
- package/dist/CheckGrid/index.js +6 -6
- package/dist/Checkbox/index.js +5 -5
- package/dist/ChipField/ChipField.d.ts +82 -0
- package/dist/ChipField/index.d.ts +4 -0
- package/dist/ChipField/index.js +9 -0
- package/dist/ChipField-D4CW6XFA.css +108 -0
- package/dist/ColorField/index.js +5 -5
- package/dist/Combobox/index.js +7 -7
- package/dist/CommandPalette/index.js +12 -11
- package/dist/CommentThread/index.js +14 -14
- package/dist/CompactNav/CompactNav.d.ts +175 -0
- package/dist/CompactNav/index.d.ts +4 -0
- package/dist/CompactNav/index.js +9 -0
- package/dist/CompactNav-CU2AQXBC.css +322 -0
- package/dist/Composer/Composer.d.ts +26 -2
- package/dist/Composer/index.d.ts +2 -1
- package/dist/Composer/index.js +7 -7
- package/dist/{Composer-HQIMTMRC.css → Composer-ZEGHEAFE.css} +71 -0
- package/dist/ConfirmField/index.js +5 -5
- package/dist/ContrastBadge/index.js +2 -2
- package/dist/ContrastHelp/index.js +7 -6
- package/dist/Count/Count.d.ts +24 -6
- package/dist/Count/index.d.ts +1 -1
- package/dist/Count/index.js +1 -1
- package/dist/{Count-ZJ6ID4ZU.css → Count-2HXBBYPO.css} +19 -0
- package/dist/DataGrid/index.js +8 -8
- package/dist/DataTable/index.js +11 -10
- package/dist/DataView/index.js +18 -17
- package/dist/DatasetSource/index.js +3 -3
- package/dist/DateTimePicker/index.js +6 -5
- package/dist/DeepWorkCard/index.js +9 -9
- package/dist/Disclosure/index.js +3 -3
- package/dist/DocTabsEditor/index.js +11 -9
- package/dist/DockColumn/DockColumn.d.ts +68 -0
- package/dist/DockColumn/index.d.ts +3 -0
- package/dist/DockColumn/index.js +6 -0
- package/dist/DockColumn-SMJCXHS4.css +61 -0
- package/dist/Document/index.js +2 -2
- package/dist/EditingStatus/index.js +2 -2
- package/dist/{Editor-IMYESOW7.js → Editor-5D5Z3LBQ.js} +9 -8
- package/dist/EmojiPicker/EmojiPicker.d.ts +51 -0
- package/dist/EmojiPicker/emoji.d.ts +24 -0
- package/dist/EmojiPicker/index.d.ts +5 -0
- package/dist/EmojiPicker/index.js +15 -0
- package/dist/EmojiPicker-FMWYN2WX.css +63 -0
- package/dist/EntityChip/index.js +3 -3
- package/dist/EntityList/index.js +6 -6
- package/dist/FactList/index.js +6 -4
- package/dist/FolderTile/index.js +3 -3
- package/dist/FollowBanner/index.js +4 -4
- package/dist/HuePicker/index.js +9 -8
- package/dist/ImageUpload/ImageUpload.d.ts +6 -7
- package/dist/ImageUpload/index.js +3 -3
- package/dist/{ImageUpload-OWI7CCG7.css → ImageUpload-IFXZROFZ.css} +6 -37
- package/dist/InlineEditor/index.js +7 -7
- package/dist/Input/index.js +4 -4
- package/dist/Kbd/Kbd.d.ts +9 -0
- package/dist/Kbd/index.d.ts +1 -1
- package/dist/Kbd/index.js +1 -1
- package/dist/Layer/index.js +2 -2
- package/dist/LinkCard/LinkCard.d.ts +64 -0
- package/dist/LinkCard/index.d.ts +5 -0
- package/dist/LinkCard/index.js +5 -0
- package/dist/LinkCard-5I4MYU6I.css +155 -0
- package/dist/LinkInterstitial/index.js +7 -6
- package/dist/ListInput/index.js +10 -9
- package/dist/Listbox/index.js +3 -3
- package/dist/LogoSlot/index.js +3 -3
- package/dist/MarkdownEditor/format.d.ts +9 -1
- package/dist/MarkdownEditor/index.d.ts +2 -2
- package/dist/MarkdownEditor/index.js +10 -9
- package/dist/MediaMatch/index.d.ts +1 -1
- package/dist/MediaMatch/index.js +1 -1
- package/dist/MediaMatch/useMediaMatch.d.ts +14 -0
- package/dist/MentionChip/MentionChip.d.ts +25 -0
- package/dist/MentionChip/index.d.ts +3 -0
- package/dist/MentionChip/index.js +2 -0
- package/dist/MentionChip-W7MZZVRZ.css +42 -0
- package/dist/MentionMenu/MentionMenu.d.ts +82 -0
- package/dist/MentionMenu/index.d.ts +4 -0
- package/dist/MentionMenu/index.js +3 -0
- package/dist/MentionMenu-4NAQ45S4.css +65 -0
- package/dist/Menu/index.js +5 -4
- package/dist/MergeConflicts/index.js +9 -8
- package/dist/MessageActions/MessageActions.d.ts +58 -0
- package/dist/MessageActions/index.d.ts +4 -0
- package/dist/MessageActions/index.js +18 -0
- package/dist/MessageActions-Q4F5UH3S.css +73 -0
- package/dist/Modal/Modal.d.ts +12 -0
- package/dist/Modal/index.js +6 -5
- package/dist/{Modal-FYQYEI3N.css → Modal-GKUOO7PZ.css} +26 -1
- package/dist/OpenInAppCard/index.js +8 -8
- package/dist/OrgLabel/index.js +3 -3
- package/dist/OrgNode/index.js +4 -4
- package/dist/OrgTable/index.js +7 -7
- package/dist/Outline/index.js +2 -1
- package/dist/PeekRail/index.js +1 -1
- package/dist/PeopleRail/index.js +4 -4
- package/dist/PersonRow/PersonRow.d.ts +70 -0
- package/dist/PersonRow/index.d.ts +3 -0
- package/dist/PersonRow/index.js +2 -0
- package/dist/PersonRow-V5GTPNVP.css +161 -0
- package/dist/Popover/index.js +4 -3
- package/dist/Presence/index.d.ts +2 -0
- package/dist/Presence/index.js +4 -0
- package/dist/Presence/usePresence.d.ts +109 -0
- package/dist/PresenceStack/index.js +3 -3
- package/dist/{PresenceStack-ZV67BH4V.css → PresenceStack-2DTYRADY.css} +4 -6
- package/dist/PresenterView/index.js +5 -5
- package/dist/PricingCard/index.js +2 -2
- package/dist/Principal/index.js +3 -3
- package/dist/PrincipalPicker/index.js +11 -11
- package/dist/ProposalCard/index.js +15 -15
- package/dist/ReactionBar/ReactionBar.d.ts +84 -0
- package/dist/ReactionBar/index.d.ts +4 -0
- package/dist/ReactionBar/index.js +17 -0
- package/dist/ReactionBar-XXI4V7XG.css +93 -0
- package/dist/RecordChip/index.js +5 -4
- package/dist/RefusalCard/index.js +6 -6
- package/dist/RelatedRow/index.js +3 -3
- package/dist/Reorder/index.js +2 -1
- package/dist/ResultTableCard/index.js +7 -7
- package/dist/ReviewList/index.js +2 -2
- package/dist/RichEditor/index.js +2 -2
- package/dist/RunChip/index.js +5 -5
- package/dist/SandboxedFrame/index.js +2 -2
- package/dist/SectionFrame/index.js +2 -2
- package/dist/SegmentedControl/index.js +8 -7
- package/dist/Select/index.js +4 -4
- package/dist/SelectionBar/index.js +6 -6
- package/dist/SetupWizard/index.js +6 -6
- package/dist/ShareDialog/index.js +13 -12
- package/dist/SheetColumnEditor/index.js +17 -16
- package/dist/SheetGrid/index.js +14 -12
- package/dist/Shortcut/index.js +3 -3
- package/dist/SidePanel/SidePanel.d.ts +8 -1
- package/dist/SidePanel/SidePanelBase.d.ts +3 -1
- package/dist/SidePanel/index.js +5 -5
- package/dist/{SidePanel-VXKUKLOJ.css → SidePanel-BKWT6Q6Z.css} +36 -0
- package/dist/SidebarNav/SidebarNav.d.ts +52 -3
- package/dist/SidebarNav/index.js +1 -1
- package/dist/{SidebarNav-VTQ3G4AE.css → SidebarNav-E7PZGGA6.css} +132 -7
- package/dist/Skeleton/index.js +1 -1
- package/dist/{Skeleton-7ZA5ETJM.css → Skeleton-GIXV3KK5.css} +3 -1
- package/dist/SlideCompare/index.js +5 -5
- package/dist/SlideFilmstrip/index.js +11 -9
- package/dist/SlideGrid/index.js +4 -4
- package/dist/SlideStage/index.js +3 -3
- package/dist/SourceEditor/index.js +2 -2
- package/dist/StatusCard/index.js +5 -5
- package/dist/Switcher/index.js +13 -12
- package/dist/TableCells/index.js +5 -5
- package/dist/Tabs/index.js +7 -6
- package/dist/Tag/Tag.d.ts +9 -2
- package/dist/Tag/index.js +1 -1
- package/dist/{Tag-JTJVZM2D.css → Tag-WLDOROB5.css} +24 -0
- package/dist/TagsInput/index.js +6 -6
- package/dist/ThemeGallery/index.js +5 -5
- package/dist/ThemeSwitcher/index.js +9 -8
- package/dist/ThinkingIndicator/index.js +1 -1
- package/dist/{ThinkingIndicator-JMK2TNMZ.css → ThinkingIndicator-S7ZL2C77.css} +8 -0
- package/dist/ThreadSummary/ThreadSummary.d.ts +43 -0
- package/dist/ThreadSummary/index.d.ts +4 -0
- package/dist/ThreadSummary/index.js +6 -0
- package/dist/ThreadSummary-AGR4NDMD.css +90 -0
- package/dist/TimeRangePicker/index.js +13 -12
- package/dist/TimeWindowPicker/index.js +11 -10
- package/dist/Toaster/index.js +2 -2
- package/dist/Toolbar/index.js +3 -3
- package/dist/Tooltip/Tooltip.d.ts +30 -3
- package/dist/Tooltip/index.js +5 -3
- package/dist/TreeCanvas/index.js +10 -7
- package/dist/TreeGrid/index.js +3 -3
- package/dist/ValueField/index.js +9 -9
- package/dist/VersionCompare/index.js +10 -9
- package/dist/VersionTimeline/index.js +4 -4
- package/dist/WidgetFrame/index.js +2 -2
- package/dist/{chunk-LOWQK2PB.js → chunk-22CU7V4J.js} +4 -4
- package/dist/{chunk-WCDPFTJZ.js → chunk-25JQNHTC.js} +92 -28
- package/dist/{chunk-6LXS3X7A.js → chunk-2L4WHYMT.js} +1 -1
- package/dist/{chunk-6G6WHTC7.js → chunk-2O5CMV76.js} +1 -1
- package/dist/{chunk-FQI62PIZ.js → chunk-2SVQBQAD.js} +2 -2
- package/dist/{chunk-7PJFUQMY.js → chunk-2ZSCHQOA.js} +1 -1
- package/dist/chunk-3BRXEMYT.js +46 -0
- package/dist/{chunk-H22SR76M.js → chunk-3H6OZUZ3.js} +1 -1
- package/dist/{chunk-VK45YJLH.js → chunk-3IWZVEXA.js} +2 -2
- package/dist/{chunk-2STOSJT3.js → chunk-46FIBJCV.js} +7 -7
- package/dist/chunk-4DEKONVJ.js +87 -0
- package/dist/{chunk-NUZHC6MM.js → chunk-4ITETIGZ.js} +12 -1
- package/dist/{chunk-73GUXYYE.js → chunk-5AHNW5CP.js} +1 -1
- package/dist/{chunk-FFGEJUAP.js → chunk-5ILRWUE7.js} +2 -2
- package/dist/chunk-5JPOFAVN.js +58 -0
- package/dist/{chunk-S5QJZOPL.js → chunk-5K5SZGBI.js} +1 -1
- package/dist/{chunk-YB64PWIN.js → chunk-5V6GW6HK.js} +1 -1
- package/dist/{chunk-LM6VYJTV.js → chunk-5YXMKZUA.js} +1 -1
- package/dist/{chunk-5XBNJNSO.js → chunk-65RFU7LF.js} +1 -1
- package/dist/{chunk-7MGXHCVK.js → chunk-6M2N6ETA.js} +1 -1
- package/dist/{chunk-OWHETZIU.js → chunk-6SFDL4QH.js} +1 -1
- package/dist/{chunk-WK4FQPYW.js → chunk-77VOASOY.js} +5 -5
- package/dist/{chunk-UYF2B2TH.js → chunk-7ELFH3RJ.js} +1 -1
- package/dist/{chunk-HPI5J6AR.js → chunk-7K6LVM5I.js} +2 -2
- package/dist/{chunk-YQDRJZ5J.js → chunk-7M7WKYOV.js} +8 -8
- package/dist/{chunk-A5YKNRG6.js → chunk-7QCSISHM.js} +2 -1
- package/dist/{chunk-CYYBE2MM.js → chunk-7U6PK242.js} +1 -1
- package/dist/{chunk-I33UIUZD.js → chunk-7ZSEUO5Q.js} +51 -40
- package/dist/{chunk-LCZULGMB.js → chunk-ABRWL5FJ.js} +2 -2
- package/dist/{chunk-VG3SIJ3M.js → chunk-AFLS26AC.js} +2 -2
- package/dist/{chunk-4XF7ENQA.js → chunk-AOJ6ZA77.js} +2 -2
- package/dist/{chunk-Q2T4L6ML.js → chunk-AQNP3KQU.js} +5 -5
- package/dist/{chunk-6X5PGHEX.js → chunk-AUSFKGKL.js} +2 -2
- package/dist/{chunk-6R334YT3.js → chunk-AZYE7NR4.js} +2 -2
- package/dist/{chunk-WKKWF277.js → chunk-BN5FEJL5.js} +2 -2
- package/dist/{chunk-MPVMB2DV.js → chunk-BVML4UVB.js} +3 -2
- package/dist/{chunk-EAIOXW2W.js → chunk-BXGBGYKH.js} +8 -14
- package/dist/chunk-C4256UXE.js +21 -0
- package/dist/{chunk-2FMBZCFR.js → chunk-C42XW5YP.js} +1 -1
- package/dist/{chunk-4MRFLHJC.js → chunk-C46DDVTK.js} +1 -1
- package/dist/{chunk-5BOFC5OP.js → chunk-CF4M6N6A.js} +20 -4
- package/dist/{chunk-ANTAQAR4.js → chunk-CMAZZY2I.js} +7 -1
- package/dist/{chunk-3JXX5S3Z.js → chunk-CV2LU2T2.js} +2 -2
- package/dist/{chunk-MLDTLZAO.js → chunk-D2GT3CR4.js} +3 -3
- package/dist/{chunk-57AKYFML.js → chunk-DD7RBNT4.js} +3 -3
- package/dist/{chunk-KL6A7JGH.js → chunk-DRFOTWJE.js} +2 -2
- package/dist/{chunk-MUFBHVCT.js → chunk-DWQYV5AV.js} +2 -2
- package/dist/{chunk-CNEHFH2A.js → chunk-EAHEJNVJ.js} +1 -1
- package/dist/chunk-EALRMP7N.js +69 -0
- package/dist/{chunk-E35HYQMK.js → chunk-EBVZHVPD.js} +12 -5
- package/dist/{chunk-KHJIEPZV.js → chunk-EC6EUIAD.js} +9 -6
- package/dist/{chunk-XNNY27SC.js → chunk-ED4A6Q24.js} +1 -1
- package/dist/{chunk-6LN64KGG.js → chunk-F7HZYTZT.js} +6 -3
- package/dist/{chunk-RTMNULTL.js → chunk-FLW5U7YS.js} +2 -2
- package/dist/{chunk-JQEXAH7G.js → chunk-FPU7AA3X.js} +5 -16
- package/dist/{chunk-GHQG4VZA.js → chunk-G3CACE5L.js} +3 -3
- package/dist/{chunk-JMTBK55P.js → chunk-G4EHZHKM.js} +2 -2
- package/dist/{chunk-45M73G5A.js → chunk-GLKQHN7G.js} +5 -5
- package/dist/{chunk-N2BF272H.js → chunk-HF5L56YQ.js} +1 -1
- package/dist/chunk-HTBTAIH6.js +37 -0
- package/dist/chunk-HTS5RJ7S.js +6 -0
- package/dist/{chunk-BRLZXYPA.js → chunk-I4IUX3JF.js} +1 -1
- package/dist/{chunk-BXCL6P5Z.js → chunk-I4PBFJGX.js} +1 -1
- package/dist/{chunk-ADGNISEI.js → chunk-IAP7APOX.js} +5 -5
- package/dist/chunk-ICE3D63E.js +384 -0
- package/dist/{chunk-BT3GB7HC.js → chunk-IRONPJB4.js} +3 -3
- package/dist/chunk-IUBOLGHG.js +140 -0
- package/dist/chunk-JLOESTT2.js +10 -0
- package/dist/{chunk-5EFLA6BW.js → chunk-K6RWEQ6P.js} +2 -2
- package/dist/{chunk-ZQEJSEPS.js → chunk-K6Y6CDEZ.js} +2 -2
- package/dist/chunk-K774LUN3.js +20 -0
- package/dist/{chunk-7KBNFFM3.js → chunk-KXWJJWBD.js} +6 -3
- package/dist/{chunk-53J2YNQA.js → chunk-L5VU3LZT.js} +1 -1
- package/dist/chunk-L72URIHR.js +36 -0
- package/dist/{chunk-VERJCAJ4.js → chunk-LBGKLYBY.js} +1 -1
- package/dist/{chunk-PRN5IP2R.js → chunk-LMEMH6DO.js} +1 -1
- package/dist/{chunk-I22MUEG7.js → chunk-LNQSNXGJ.js} +1 -1
- package/dist/chunk-LT44RL62.js +50 -0
- package/dist/{chunk-222VILSP.js → chunk-LVJGN5II.js} +1 -1
- package/dist/{chunk-AYHIF6DH.js → chunk-LZNPL266.js} +1 -1
- package/dist/{chunk-R45VM5EX.js → chunk-MMV7NEAC.js} +1 -1
- package/dist/{chunk-2IIHMJMZ.js → chunk-MVKUE4FI.js} +2 -2
- package/dist/{chunk-37U3Z65B.js → chunk-MVMVMHYI.js} +1 -1
- package/dist/{chunk-JD7P2GJP.js → chunk-MYAARF4Z.js} +1 -1
- package/dist/{chunk-OBPINJNO.js → chunk-NCUSI4ZU.js} +3 -3
- package/dist/{chunk-NKBKQEKS.js → chunk-NFXCJGHG.js} +1 -1
- package/dist/{chunk-OZAZHM55.js → chunk-NKBKHOMU.js} +1 -1
- package/dist/{chunk-MGQKF7GK.js → chunk-NN475NAP.js} +1 -1
- package/dist/{chunk-6EWNMSS4.js → chunk-NNZRTR5M.js} +2 -2
- package/dist/{chunk-JT7WRPZ6.js → chunk-NTRKC2JV.js} +1 -1
- package/dist/{chunk-63GBSOLU.js → chunk-NXBCAXP5.js} +2 -2
- package/dist/{chunk-NR4CPM4T.js → chunk-NXFTCPF6.js} +1 -1
- package/dist/chunk-O3MYBNRO.js +80 -0
- package/dist/{chunk-RMEBFYL7.js → chunk-O6EV6GKI.js} +1 -1
- package/dist/{chunk-YL7AR6PR.js → chunk-O7KG4CXB.js} +3 -3
- package/dist/{chunk-FB3TCNQP.js → chunk-O7N6W52M.js} +3 -3
- package/dist/chunk-ONHYFU7D.js +25 -0
- package/dist/{chunk-T24HBEU6.js → chunk-OOOVL77Y.js} +1 -1
- package/dist/{chunk-BLGBD2D2.js → chunk-P7HMY3BQ.js} +4 -4
- package/dist/chunk-PCAT2EFB.js +104 -0
- package/dist/{chunk-TPIMOGOZ.js → chunk-PEBQMX5X.js} +1 -1
- package/dist/{chunk-UY3FWQWG.js → chunk-PGBKZSSQ.js} +201 -22
- package/dist/{chunk-4TMBAOXK.js → chunk-PW57R4BN.js} +1 -1
- package/dist/chunk-PX5BOALQ.js +13 -0
- package/dist/{chunk-CFTBESST.js → chunk-Q6TCUSQA.js} +2 -2
- package/dist/{chunk-ZWXHTXZO.js → chunk-QGEDXYLB.js} +2 -2
- package/dist/{chunk-ZKLEAK7M.js → chunk-QM3432PH.js} +7 -7
- package/dist/{chunk-WTXCK46H.js → chunk-R2QBQ6NO.js} +1 -1
- package/dist/{chunk-Z6JKZI4E.js → chunk-RBQRTGXX.js} +1 -1
- package/dist/{chunk-TJIBTHWJ.js → chunk-RDIQB5ZE.js} +3 -3
- package/dist/{chunk-TPCBPGSB.js → chunk-RO5JU6SN.js} +4 -4
- package/dist/{chunk-O222F2IX.js → chunk-SGMWLUYQ.js} +6 -6
- package/dist/{chunk-HEA6TERQ.js → chunk-SHH7UD5U.js} +1 -1
- package/dist/{chunk-CLJGFOTV.js → chunk-SKGOKLJD.js} +31 -18
- package/dist/{chunk-CSXJIIO4.js → chunk-SNQ7PH3D.js} +1 -1
- package/dist/chunk-SPNTUQBV.js +244 -0
- package/dist/{chunk-RIAPCEB5.js → chunk-T3S3D4FC.js} +5 -5
- package/dist/chunk-TDFLCUBE.js +6 -0
- package/dist/{chunk-OQG4P5KU.js → chunk-TGGYSQRD.js} +5 -6
- package/dist/{chunk-7FF6CZW5.js → chunk-TQKQRS2J.js} +36 -8
- package/dist/chunk-TRXTO3WC.js +114 -0
- package/dist/{chunk-H5XTJ7GJ.js → chunk-TUEM2XIW.js} +1 -1
- package/dist/{chunk-4AUTALJA.js → chunk-U2IQNDDR.js} +1 -1
- package/dist/{chunk-IVTQWOXV.js → chunk-ULYHDP7U.js} +1 -1
- package/dist/{chunk-DGSK4LLS.js → chunk-V6WDJUYK.js} +1 -1
- package/dist/{chunk-Z2MZTI3H.js → chunk-VB3FVKNI.js} +1 -1
- package/dist/{chunk-R5OATXWU.js → chunk-VONEKR3J.js} +38 -15
- package/dist/{chunk-CZQ7UITX.js → chunk-WANKINXG.js} +3 -3
- package/dist/{chunk-HQOEAUDJ.js → chunk-WMO722J2.js} +2 -2
- package/dist/{chunk-D7G2QGET.js → chunk-X3US25XJ.js} +1 -1
- package/dist/{chunk-GPFYITOF.js → chunk-X7VZQKIW.js} +1 -1
- package/dist/{chunk-L4HHWG4V.js → chunk-XA2QKGBJ.js} +3 -3
- package/dist/{chunk-DV5L2GRY.js → chunk-XJMES7AE.js} +1 -1
- package/dist/{chunk-5NJMSYDZ.js → chunk-XNC3M4IN.js} +1 -1
- package/dist/{chunk-B2YSFWUG.js → chunk-XRWHDW6F.js} +9 -9
- package/dist/{chunk-TKUAGWNR.js → chunk-XTJHMP3W.js} +2 -2
- package/dist/{chunk-KTIQSSME.js → chunk-XZY6S3UC.js} +6 -3
- package/dist/{chunk-7KHM2FZH.js → chunk-YGRTX67J.js} +1 -1
- package/dist/{chunk-RTPQDNW3.js → chunk-YJQXESOJ.js} +5 -1
- package/dist/chunk-YP2FS6SH.js +54 -0
- package/dist/{chunk-LMQG3VPG.js → chunk-YQ7Q52XU.js} +1 -1
- package/dist/{chunk-G4CGDUCP.js → chunk-YRNNUCQP.js} +1 -1
- package/dist/{chunk-5CEQ3HLH.js → chunk-YXKSUILG.js} +6 -6
- package/dist/{chunk-NHLNHH4J.js → chunk-ZB3E2Z4Y.js} +1 -1
- package/dist/{chunk-IL3XLDW7.js → chunk-ZDWAIVWL.js} +1 -1
- package/dist/{chunk-SNIPM6K7.js → chunk-ZJVLGYE3.js} +3 -3
- package/dist/{chunk-BFM5G2Z6.js → chunk-ZPTKAYJK.js} +1 -1
- package/dist/{chunk-2PIH6JHJ.js → chunk-ZXTDWTXS.js} +1 -1
- package/dist/{chunk-C667GCU7.js → chunk-ZXXZESCD.js} +9 -7
- package/dist/generated/index.d.ts +17 -0
- package/dist/generated/index.js +184 -163
- package/dist/index.js +184 -163
- package/dist/styles.css +2769 -156
- package/dist/utils/composedRef.d.ts +39 -0
- package/dist/utils/focusModality.d.ts +14 -0
- package/dist/utils/heldHint.d.ts +6 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.js +4 -2
- package/dist/utils/tokenMs.d.ts +6 -0
- package/package.json +5 -5
- package/dist/ArtifactKinds-O3CALPVX.css +0 -16
- package/dist/{chunk-PLNJEDGI.js → chunk-I4IO56EY.js} +1 -1
- package/dist/{chunk-FEJANUZK.js → chunk-KBSD476L.js} +0 -0
- package/dist/{chunk-624X3RVA.js → chunk-O55JQ7BE.js} +1 -1
- /package/dist/{chunk-CDFQ7MQK.js → chunk-REEZQCML.js} +0 -0
package/dist/styles.css
CHANGED
|
@@ -109,6 +109,196 @@
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
|
|
112
|
+
/* ActionCard-47WSZ2O5.css */
|
|
113
|
+
/*
|
|
114
|
+
* ActionCard: a first step offered as a picture, on an artifact kind's
|
|
115
|
+
* colour ground. The ground is the kind's own Ground steps (ArtifactKinds.css)
|
|
116
|
+
* laid over the card rung, which the palette suite holds to 4.5:1 for the
|
|
117
|
+
* primary text in every palette and both modes, with the kind's glow behind
|
|
118
|
+
* the drawing.
|
|
119
|
+
*/
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* ONE ROW THAT SCROLLS SIDEWAYS when it runs out of width, so a phone shows
|
|
123
|
+
* two cards and part of the third (the part says there is more) instead of a
|
|
124
|
+
* tall stack. The block padding keeps the focus ring and the hover shadow
|
|
125
|
+
* inside the scroller's clip; the negative margin gives that space back to
|
|
126
|
+
* the layout. A host that runs the row to its container's edges sets the
|
|
127
|
+
* inline padding and `scroll-padding-inline` to its own inset.
|
|
128
|
+
*/
|
|
129
|
+
.crewlet-action-cards {
|
|
130
|
+
display: flex;
|
|
131
|
+
gap: var(--spacing-2);
|
|
132
|
+
overflow-x: auto;
|
|
133
|
+
margin-block: calc(var(--spacing-1) * -1) calc(var(--spacing-2) * -1);
|
|
134
|
+
padding-block: var(--spacing-1) var(--spacing-2);
|
|
135
|
+
scroll-snap-type: x mandatory;
|
|
136
|
+
overscroll-behavior-x: contain;
|
|
137
|
+
scrollbar-width: none;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.crewlet-action-cards::-webkit-scrollbar {
|
|
141
|
+
display: none;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.crewlet-action-card {
|
|
145
|
+
--crewlet-action-card-ground: var(--crewlet-kind-ground);
|
|
146
|
+
position: relative;
|
|
147
|
+
display: flex;
|
|
148
|
+
flex: none;
|
|
149
|
+
flex-direction: column;
|
|
150
|
+
justify-content: space-between;
|
|
151
|
+
width: 148px;
|
|
152
|
+
height: 172px;
|
|
153
|
+
box-sizing: border-box;
|
|
154
|
+
overflow: hidden;
|
|
155
|
+
padding: var(--spacing-3) var(--spacing-3) 0;
|
|
156
|
+
/* The kind's hue itself is the edge: 3:1 or more on the sheet in every
|
|
157
|
+
palette and mode, where the kind's Line step measured 2.5:1. */
|
|
158
|
+
border: 1px solid var(--crewlet-kind-hue);
|
|
159
|
+
border-radius: var(--radius-lg);
|
|
160
|
+
background-color: var(--color-surface-subtle);
|
|
161
|
+
background-image:
|
|
162
|
+
radial-gradient(110% 64% at 50% 100%, var(--crewlet-kind-glow) 0%, transparent 72%),
|
|
163
|
+
linear-gradient(180deg, var(--crewlet-action-card-ground) 0%, var(--crewlet-kind-ground-end) 100%);
|
|
164
|
+
color: var(--color-text-primary);
|
|
165
|
+
font: inherit;
|
|
166
|
+
text-align: left;
|
|
167
|
+
cursor: pointer;
|
|
168
|
+
scroll-snap-align: start;
|
|
169
|
+
transition: box-shadow var(--motion-duration-fast) var(--motion-easing-default);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* A QUIET HOVER: the ground deepens a step and a small shadow lifts the
|
|
173
|
+
card off the page. Nothing moves. */
|
|
174
|
+
.crewlet-action-card:hover {
|
|
175
|
+
--crewlet-action-card-ground: var(--crewlet-kind-ground-strong);
|
|
176
|
+
box-shadow: var(--shadow-sm);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* The card draws its own edge, so the ring is drawn over it. */
|
|
180
|
+
.crewlet-action-card:focus-visible {
|
|
181
|
+
outline: 2px solid var(--color-focus);
|
|
182
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* The title at the medium weight, as every emphasis in a conversation is,
|
|
186
|
+
two lines at most at its width, balanced so neither line is one word. */
|
|
187
|
+
.crewlet-action-card__title {
|
|
188
|
+
max-width: 14ch;
|
|
189
|
+
font-size: var(--font-size-sm);
|
|
190
|
+
font-weight: var(--font-weight-medium);
|
|
191
|
+
line-height: var(--font-line-height-snug);
|
|
192
|
+
text-wrap: balance;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* The drawing stands on the card's foot, still. */
|
|
196
|
+
.crewlet-action-card__art {
|
|
197
|
+
display: flex;
|
|
198
|
+
align-items: flex-end;
|
|
199
|
+
justify-content: center;
|
|
200
|
+
height: 100px;
|
|
201
|
+
margin: 0 calc(var(--spacing-3) * -1);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.crewlet-action-card__art .crewlet-kind-illustration {
|
|
205
|
+
width: 112px;
|
|
206
|
+
max-height: 96px;
|
|
207
|
+
margin-bottom: calc(var(--spacing-2) * -1);
|
|
208
|
+
filter: drop-shadow(0 6px 12px var(--crewlet-kind-line));
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/* FORCED COLORS drops the ground; the hue's border stays as the card's edge. */
|
|
212
|
+
@media (forced-colors: active) {
|
|
213
|
+
.crewlet-action-card {
|
|
214
|
+
border-color: CanvasText;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
@media (prefers-reduced-motion: reduce) {
|
|
219
|
+
.crewlet-action-card {
|
|
220
|
+
transition: none;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
/* ActivityLine-AMSERTOB.css */
|
|
226
|
+
/*
|
|
227
|
+
* Who is typing and which agent is working, under a composer, in the meta
|
|
228
|
+
* step and the tertiary ink.
|
|
229
|
+
*/
|
|
230
|
+
|
|
231
|
+
.crewlet-activity-line {
|
|
232
|
+
display: flex;
|
|
233
|
+
flex-wrap: wrap;
|
|
234
|
+
align-items: center;
|
|
235
|
+
gap: var(--spacing-1) var(--spacing-4);
|
|
236
|
+
min-height: 20px;
|
|
237
|
+
min-width: 0;
|
|
238
|
+
color: var(--color-text-tertiary);
|
|
239
|
+
font-size: var(--crewlet-chat-meta);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/* No piece is wider than the line: a long working status truncates. */
|
|
243
|
+
.crewlet-activity-line > * {
|
|
244
|
+
max-width: 100%;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* The working line in the line's own step, over the indicator's. */
|
|
248
|
+
.crewlet-activity-line .crewlet-activity-line__working {
|
|
249
|
+
font-size: var(--crewlet-chat-meta);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.crewlet-activity-line__typing {
|
|
253
|
+
display: inline-flex;
|
|
254
|
+
align-items: center;
|
|
255
|
+
gap: var(--spacing-2);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.crewlet-activity-line__dots {
|
|
259
|
+
display: inline-flex;
|
|
260
|
+
gap: 2px;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.crewlet-activity-line__dots > i {
|
|
264
|
+
width: 4px;
|
|
265
|
+
height: 4px;
|
|
266
|
+
border-radius: var(--radius-circle);
|
|
267
|
+
background: currentColor;
|
|
268
|
+
animation: crewlet-activity-line-typing calc(var(--motion-duration-slow) * 4) var(--motion-easing-in-out) infinite;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.crewlet-activity-line__dots > i:nth-child(2) {
|
|
272
|
+
animation-delay: var(--motion-duration-base);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.crewlet-activity-line__dots > i:nth-child(3) {
|
|
276
|
+
animation-delay: var(--motion-duration-slow);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
@keyframes crewlet-activity-line-typing {
|
|
280
|
+
0%,
|
|
281
|
+
60%,
|
|
282
|
+
100% {
|
|
283
|
+
opacity: 0.3;
|
|
284
|
+
transform: none;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
30% {
|
|
288
|
+
opacity: 1;
|
|
289
|
+
transform: translateY(-2px);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/* Under reduced motion the dots hold still at full strength: the words say
|
|
294
|
+
who is typing. */
|
|
295
|
+
@media (prefers-reduced-motion: reduce) {
|
|
296
|
+
.crewlet-activity-line__dots > i {
|
|
297
|
+
animation: none;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
|
|
112
302
|
/* AddPill-FPM5RUKI.css */
|
|
113
303
|
/*
|
|
114
304
|
* The control that adds a child (AddPill.tsx).
|
|
@@ -754,7 +944,7 @@
|
|
|
754
944
|
}
|
|
755
945
|
|
|
756
946
|
|
|
757
|
-
/* AppShell-
|
|
947
|
+
/* AppShell-U7D2MUUF.css */
|
|
758
948
|
/*
|
|
759
949
|
* The application frame: a rail on the FRAME, and the screen on a SHEET that
|
|
760
950
|
* floats beside it.
|
|
@@ -784,30 +974,40 @@
|
|
|
784
974
|
--crewlet-app-shell-rail: var(--size-shell-rail);
|
|
785
975
|
--crewlet-app-shell-topbar: var(--size-shell-topbar);
|
|
786
976
|
/* What stands on the frame to the sheet's left: the rail's column, or
|
|
787
|
-
nothing where there is no rail or the rail is a drawer.
|
|
788
|
-
below subtracts it, so it is one name for both. */
|
|
977
|
+
nothing where there is no rail or the rail is a drawer. */
|
|
789
978
|
--crewlet-app-shell-beside: var(--crewlet-app-shell-rail);
|
|
790
|
-
/*
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
979
|
+
/*
|
|
980
|
+
* THE ASIDE'S TRACK, while it is a column: the inset it is held off the
|
|
981
|
+
* window's edge by at least, and the panel's width and that inset at most.
|
|
982
|
+
* THE CAP IS THE GRID'S. The page's sheet takes the host's floor as its
|
|
983
|
+
* own track's minimum (`--crewlet-app-shell-aside-reserve`, the page's sheet
|
|
984
|
+
* with its own inset and hairlines), and the grid hands the aside what is
|
|
985
|
+
* left once the rail and that floor have theirs, up to its width. The rail's
|
|
986
|
+
* track is the rail's live width, so while the rail eases between its
|
|
987
|
+
* shapes the cap eases with it: a cap computed from the rail's VARIABLE
|
|
988
|
+
* named the shape drawn, and jumped at both ends of a fold. With no reserve
|
|
989
|
+
* the panel takes the width it was given, as far as the window holds it.
|
|
990
|
+
*/
|
|
991
|
+
--crewlet-app-shell-aside-track: minmax(
|
|
992
|
+
var(--size-shell-inset),
|
|
993
|
+
calc(var(--crewlet-app-shell-aside) + var(--size-shell-inset))
|
|
994
|
+
);
|
|
995
|
+
/* The page's floor beside an aside column, never more than the window
|
|
996
|
+
leaves it: on a window too narrow for the floor, the page gives way rather
|
|
997
|
+
than the shell growing past the window's edge. */
|
|
998
|
+
--crewlet-app-shell-sheet-floor: min(
|
|
999
|
+
var(--crewlet-app-shell-aside-reserve, 0px),
|
|
1000
|
+
max(0px, 100% - var(--crewlet-app-shell-beside) - var(--size-shell-inset))
|
|
804
1001
|
);
|
|
805
1002
|
/* Where the drawer's veil sits while it is open. The shell replaces it with
|
|
806
1003
|
the surface's own place in the layer band; this default only has to clear
|
|
807
1004
|
the page chrome for the moment before that lands. */
|
|
808
1005
|
--crewlet-app-shell-drawer-z: var(--z-index-overlay);
|
|
809
1006
|
display: grid;
|
|
810
|
-
|
|
1007
|
+
/* The rail's track is the rail's own width (`auto`), and the rail takes
|
|
1008
|
+
`--crewlet-app-shell-rail` itself, so the track follows it while it eases
|
|
1009
|
+
between its two shapes (see the rail's motion, below). */
|
|
1010
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
811
1011
|
/* One row, the viewport's height less nothing: the sheet's own margin is
|
|
812
1012
|
what holds it off the frame's edges, and a row sized by its content would
|
|
813
1013
|
let a tall screen push the sheet's bottom edge off the window. */
|
|
@@ -846,11 +1046,11 @@
|
|
|
846
1046
|
keeps its column and is only narrower, so nothing under the bar moves but
|
|
847
1047
|
its end edge. */
|
|
848
1048
|
.crewlet-app-shell[data-aside='column'] {
|
|
849
|
-
grid-template-columns: var(--crewlet-app-shell-
|
|
1049
|
+
grid-template-columns: auto minmax(var(--crewlet-app-shell-sheet-floor), 1fr) var(--crewlet-app-shell-aside-track);
|
|
850
1050
|
}
|
|
851
1051
|
|
|
852
1052
|
.crewlet-app-shell--no-rail[data-aside='column'] {
|
|
853
|
-
grid-template-columns: minmax(
|
|
1053
|
+
grid-template-columns: minmax(var(--crewlet-app-shell-sheet-floor), 1fr) var(--crewlet-app-shell-aside-track);
|
|
854
1054
|
}
|
|
855
1055
|
|
|
856
1056
|
/* The skip link, drawn only while it holds focus, over everything. */
|
|
@@ -890,16 +1090,31 @@
|
|
|
890
1090
|
* run the height of the window parallel to it, eight pixels off.
|
|
891
1091
|
*/
|
|
892
1092
|
.crewlet-app-shell__rail {
|
|
1093
|
+
/* The fold control's containing block. Re-declared as `fixed` by the
|
|
1094
|
+
narrow block below, which comes later at the same weight, so the drawer
|
|
1095
|
+
keeps its layer. */
|
|
1096
|
+
position: relative;
|
|
893
1097
|
display: flex;
|
|
894
1098
|
flex-direction: column;
|
|
1099
|
+
width: var(--crewlet-app-shell-rail);
|
|
895
1100
|
min-height: 0;
|
|
896
1101
|
min-width: 0;
|
|
1102
|
+
/* THE MOVING EDGE CUTS WHAT IT PASSES. While the rail eases between its
|
|
1103
|
+
shapes its content keeps the width of the shape drawn (below), and the
|
|
1104
|
+
edge clips it rather than squeezing it. Across only: a ring or a badge
|
|
1105
|
+
at a row's top or bottom is never cut. */
|
|
1106
|
+
overflow-x: clip;
|
|
897
1107
|
background: var(--color-surface-frame);
|
|
1108
|
+
transition: width var(--motion-duration-slow) var(--motion-easing-emphasized);
|
|
898
1109
|
}
|
|
899
1110
|
|
|
1111
|
+
/* THE CONTENT IS LAID OUT AT ITS SHAPE'S WIDTH, never at a width between the
|
|
1112
|
+
two, so no word in the rail rewraps while it moves and nothing drifts with
|
|
1113
|
+
the edge: the column stands still and the edge travels over it. */
|
|
900
1114
|
.crewlet-app-shell__rail-inner {
|
|
901
1115
|
display: flex;
|
|
902
1116
|
flex-direction: column;
|
|
1117
|
+
width: var(--crewlet-app-shell-rail);
|
|
903
1118
|
min-height: 0;
|
|
904
1119
|
height: 100%;
|
|
905
1120
|
}
|
|
@@ -1475,6 +1690,24 @@
|
|
|
1475
1690
|
height: 100%;
|
|
1476
1691
|
}
|
|
1477
1692
|
|
|
1693
|
+
/*
|
|
1694
|
+
* A FLUSH SCREEN draws its own frame to the sheet's edges: the column gives up
|
|
1695
|
+
* its pad, its measure and its gap, and the scroller reserves no gutter, since
|
|
1696
|
+
* nothing in it scrolls and a strip at its end would cut the screen's own
|
|
1697
|
+
* edge. The column is the containing block for a `LayerHost` the screen
|
|
1698
|
+
* keeps, so its layers fill the screen rather than the window.
|
|
1699
|
+
*/
|
|
1700
|
+
.crewlet-app-shell--fill-flush .crewlet-app-shell__main {
|
|
1701
|
+
scrollbar-gutter: auto;
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
.crewlet-app-shell--fill-flush .crewlet-app-shell__content {
|
|
1705
|
+
position: relative;
|
|
1706
|
+
gap: 0;
|
|
1707
|
+
max-width: none;
|
|
1708
|
+
padding: 0;
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1478
1711
|
/* Hidden by default, revealed by the breakpoint below: the wide layout has the
|
|
1479
1712
|
rail on screen already, so the control that opens it has nothing to do. */
|
|
1480
1713
|
.crewlet-app-shell__toggle {
|
|
@@ -1624,6 +1857,180 @@
|
|
|
1624
1857
|
animation: crewlet-app-shell-aside-slide var(--motion-duration-slow) var(--motion-easing-emphasized);
|
|
1625
1858
|
}
|
|
1626
1859
|
|
|
1860
|
+
/*
|
|
1861
|
+
* THE COMPACT RAIL: the same rail, narrowed to the compact column. One
|
|
1862
|
+
* variable is the rail's width for the grid, the aside's cap and the drawer
|
|
1863
|
+
* alike, so folding the rail is this one declaration. The shell writes the
|
|
1864
|
+
* attribute only where the layout is wide: the drawer under the step is
|
|
1865
|
+
* always the full list.
|
|
1866
|
+
*/
|
|
1867
|
+
.crewlet-app-shell[data-rail='compact'] {
|
|
1868
|
+
--crewlet-app-shell-rail: var(--size-shell-rail-compact);
|
|
1869
|
+
}
|
|
1870
|
+
|
|
1871
|
+
/*
|
|
1872
|
+
* THE FOLD CONTROL stands in the rail's top left corner, in both shapes, so
|
|
1873
|
+
* it never moves under the pointer that pressed it: a minus while the rail is
|
|
1874
|
+
* full and a plus while it is compact. The corner is the square the head
|
|
1875
|
+
* leaves empty up and to the left of the brand's mark, and the control is the
|
|
1876
|
+
* target floor (`--size-target-min`), so it ends short of the mark on the
|
|
1877
|
+
* compact column's centre at every density.
|
|
1878
|
+
*
|
|
1879
|
+
* Quiet until the rail is pointed at: the tertiary ink, which holds 3:1 on
|
|
1880
|
+
* the frame, then the secondary, and the ghost's own primary under the
|
|
1881
|
+
* pointer. Its ring is drawn inside its own box, because the corner it
|
|
1882
|
+
* stands in is the window's, and a ring outside it would be cut there.
|
|
1883
|
+
*/
|
|
1884
|
+
.crewlet-app-shell__fold {
|
|
1885
|
+
position: absolute;
|
|
1886
|
+
top: 0;
|
|
1887
|
+
left: 0;
|
|
1888
|
+
z-index: 1;
|
|
1889
|
+
display: inline-flex;
|
|
1890
|
+
}
|
|
1891
|
+
|
|
1892
|
+
.crewlet-app-shell__fold > .crewlet-icon-btn {
|
|
1893
|
+
width: var(--size-target-min);
|
|
1894
|
+
height: var(--size-target-min);
|
|
1895
|
+
color: var(--color-text-tertiary);
|
|
1896
|
+
}
|
|
1897
|
+
|
|
1898
|
+
.crewlet-app-shell__rail:hover > .crewlet-app-shell__fold > .crewlet-icon-btn:not(:hover) {
|
|
1899
|
+
color: var(--color-text-secondary);
|
|
1900
|
+
}
|
|
1901
|
+
|
|
1902
|
+
.crewlet-app-shell__fold > .crewlet-icon-btn:focus-visible {
|
|
1903
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
/*
|
|
1907
|
+
* THE MARK STANDS WHERE THE COMPACT RAIL'S DOES, in both shapes: centred over
|
|
1908
|
+
* the compact column, in the head. Full, the name follows it; compact, the
|
|
1909
|
+
* name is not drawn (the link keeps it as its name and title).
|
|
1910
|
+
*/
|
|
1911
|
+
.crewlet-app-shell--foldable .crewlet-app-shell__rail-head > .crewlet-brand,
|
|
1912
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-head > .crewlet-brand {
|
|
1913
|
+
padding-left: calc((var(--size-shell-rail-compact) - var(--crewlet-brand-mark)) / 2);
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-brand__name,
|
|
1917
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-brand__context {
|
|
1918
|
+
display: none;
|
|
1919
|
+
}
|
|
1920
|
+
|
|
1921
|
+
/*
|
|
1922
|
+
* COMPACT, THE STATUS HAS A ROW OF ITS OWN under the mark, a small control
|
|
1923
|
+
* step tall, its dot and its count centred in the column: the first thing
|
|
1924
|
+
* under the head, before the places, where the fold control stood before it
|
|
1925
|
+
* moved to the corner.
|
|
1926
|
+
*/
|
|
1927
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-inner > .crewlet-app-shell__rail-status {
|
|
1928
|
+
justify-content: center;
|
|
1929
|
+
min-width: 0;
|
|
1930
|
+
min-height: var(--size-control-sm);
|
|
1931
|
+
margin: 0;
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-body {
|
|
1935
|
+
padding: var(--spacing-1) 0;
|
|
1936
|
+
scrollbar-width: thin;
|
|
1937
|
+
}
|
|
1938
|
+
|
|
1939
|
+
/*
|
|
1940
|
+
* The compact foot: what the full foot holds, centred in the column, a step
|
|
1941
|
+
* apart: a Settings tile, the reader's face.
|
|
1942
|
+
*/
|
|
1943
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-foot {
|
|
1944
|
+
align-items: center;
|
|
1945
|
+
gap: var(--spacing-2);
|
|
1946
|
+
padding: var(--spacing-1) 0 var(--spacing-3);
|
|
1947
|
+
}
|
|
1948
|
+
|
|
1949
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-foot > .crewlet-compact-nav {
|
|
1950
|
+
align-self: stretch;
|
|
1951
|
+
}
|
|
1952
|
+
|
|
1953
|
+
/*
|
|
1954
|
+
* THE COMPACT FACE IS CENTRED ON THE TILES' LINE. It gives up the full row's
|
|
1955
|
+
* badge column and the step after it (above): kept, the step stood the face
|
|
1956
|
+
* 4px left of the column's centre, in a box 8px wider than the face, so the
|
|
1957
|
+
* face sat off the line every tile above it is centred on.
|
|
1958
|
+
*/
|
|
1959
|
+
.crewlet-app-shell__rail-foot .crewlet-account-row--compact .crewlet-account-row__avatar {
|
|
1960
|
+
width: auto;
|
|
1961
|
+
margin-inline-end: 0;
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
/*
|
|
1965
|
+
* THE RAIL'S MOTION (railMotion.ts). The rail's width eases between the two
|
|
1966
|
+
* shapes on the slow step with the emphasized curve, the motion a
|
|
1967
|
+
* `DockColumn` opens and closes by, so a column of the frame and a column of
|
|
1968
|
+
* a screen move as one. What the rail holds keeps the width of the shape
|
|
1969
|
+
* drawn, so the moving edge clips the words rather than squeezing them.
|
|
1970
|
+
*
|
|
1971
|
+
* FOLDING, the full rail stays drawn, inert, while the edge narrows to the
|
|
1972
|
+
* compact column, and its words fade out on the base step; the compact column
|
|
1973
|
+
* is drawn when the rail's motion has ended, and fades in on the fast step.
|
|
1974
|
+
* UNFOLDING, the full rail is drawn at once and fades in while the edge
|
|
1975
|
+
* uncovers it. The brand's mark and the fold control are in the same place in
|
|
1976
|
+
* both shapes, so neither fades.
|
|
1977
|
+
*
|
|
1978
|
+
* THE WORDS LEAVE BY A TRANSITION and arrive by keyframes. A fold takes their
|
|
1979
|
+
* opacity to nothing; a fold pressed again mid way (`reverse`) declares
|
|
1980
|
+
* nothing of its own, so the same transition takes the opacity back from
|
|
1981
|
+
* wherever it had reached. Faded out by keyframes instead, a reversal could
|
|
1982
|
+
* only start an entrance from nothing, and the words blinked out and back.
|
|
1983
|
+
* The transition is declared only while the rail moves, so nothing else that
|
|
1984
|
+
* sets these parts' opacity is eased.
|
|
1985
|
+
*/
|
|
1986
|
+
.crewlet-app-shell[data-rail-motion='fold'] > .crewlet-app-shell__rail {
|
|
1987
|
+
width: var(--size-shell-rail-compact);
|
|
1988
|
+
}
|
|
1989
|
+
|
|
1990
|
+
/* Two names for one entrance, so an unfold pressed while the compact column
|
|
1991
|
+
is still arriving starts the full rail's entrance afresh. */
|
|
1992
|
+
@keyframes crewlet-app-shell-rail-unfold {
|
|
1993
|
+
from {
|
|
1994
|
+
opacity: 0;
|
|
1995
|
+
}
|
|
1996
|
+
}
|
|
1997
|
+
|
|
1998
|
+
@keyframes crewlet-app-shell-rail-settle {
|
|
1999
|
+
from {
|
|
2000
|
+
opacity: 0;
|
|
2001
|
+
}
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-body,
|
|
2005
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-foot,
|
|
2006
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-status,
|
|
2007
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-head .crewlet-brand__name,
|
|
2008
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-head .crewlet-brand__context {
|
|
2009
|
+
transition: opacity var(--motion-duration-base) var(--motion-easing-out);
|
|
2010
|
+
}
|
|
2011
|
+
|
|
2012
|
+
.crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-body,
|
|
2013
|
+
.crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-foot,
|
|
2014
|
+
.crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-status,
|
|
2015
|
+
.crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-head .crewlet-brand__name,
|
|
2016
|
+
.crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-head .crewlet-brand__context {
|
|
2017
|
+
opacity: 0;
|
|
2018
|
+
}
|
|
2019
|
+
|
|
2020
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-body,
|
|
2021
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-foot,
|
|
2022
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-status,
|
|
2023
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-head .crewlet-brand__name,
|
|
2024
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-head .crewlet-brand__context {
|
|
2025
|
+
animation: crewlet-app-shell-rail-unfold var(--motion-duration-slow) var(--motion-easing-out);
|
|
2026
|
+
}
|
|
2027
|
+
|
|
2028
|
+
.crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-body,
|
|
2029
|
+
.crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-foot,
|
|
2030
|
+
.crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-status {
|
|
2031
|
+
animation: crewlet-app-shell-rail-settle var(--motion-duration-fast) var(--motion-easing-out);
|
|
2032
|
+
}
|
|
2033
|
+
|
|
1627
2034
|
@media (width < 1024px) {
|
|
1628
2035
|
.crewlet-app-shell {
|
|
1629
2036
|
--crewlet-app-shell-beside: 0px;
|
|
@@ -1634,7 +2041,7 @@
|
|
|
1634
2041
|
step is still a column; the rail is a drawer here and takes no track. */
|
|
1635
2042
|
.crewlet-app-shell[data-aside='column'],
|
|
1636
2043
|
.crewlet-app-shell--no-rail[data-aside='column'] {
|
|
1637
|
-
grid-template-columns: minmax(
|
|
2044
|
+
grid-template-columns: minmax(var(--crewlet-app-shell-sheet-floor), 1fr) var(--crewlet-app-shell-aside-track);
|
|
1638
2045
|
}
|
|
1639
2046
|
|
|
1640
2047
|
.crewlet-app-shell--no-rail {
|
|
@@ -1699,6 +2106,12 @@
|
|
|
1699
2106
|
transition: transform var(--motion-duration-slow) var(--motion-easing-emphasized);
|
|
1700
2107
|
}
|
|
1701
2108
|
|
|
2109
|
+
/* The drawer never changes shape, and on a window narrower than the rail
|
|
2110
|
+
it is the window's width: its content fills it rather than being cut. */
|
|
2111
|
+
.crewlet-app-shell__rail-inner {
|
|
2112
|
+
width: auto;
|
|
2113
|
+
}
|
|
2114
|
+
|
|
1702
2115
|
.crewlet-app-shell__toggle {
|
|
1703
2116
|
display: inline-flex;
|
|
1704
2117
|
}
|
|
@@ -1733,6 +2146,27 @@
|
|
|
1733
2146
|
.crewlet-app-shell__aside[data-shape='sheet'] {
|
|
1734
2147
|
animation: none;
|
|
1735
2148
|
}
|
|
2149
|
+
|
|
2150
|
+
/* Under reduced motion the shell draws the new shape at once
|
|
2151
|
+
(`usePresence`), so no phase starts; these hold even if one did. */
|
|
2152
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-body,
|
|
2153
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-foot,
|
|
2154
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-status,
|
|
2155
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-head .crewlet-brand__name,
|
|
2156
|
+
.crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-head .crewlet-brand__context {
|
|
2157
|
+
transition: none;
|
|
2158
|
+
}
|
|
2159
|
+
|
|
2160
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-body,
|
|
2161
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-foot,
|
|
2162
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-status,
|
|
2163
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-head .crewlet-brand__name,
|
|
2164
|
+
.crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-head .crewlet-brand__context,
|
|
2165
|
+
.crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-body,
|
|
2166
|
+
.crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-foot,
|
|
2167
|
+
.crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-status {
|
|
2168
|
+
animation: none;
|
|
2169
|
+
}
|
|
1736
2170
|
}
|
|
1737
2171
|
|
|
1738
2172
|
/* ── the account row ───────────────────────────────────────────────────── */
|
|
@@ -1933,6 +2367,33 @@ button.crewlet-account-row__who:focus-visible {
|
|
|
1933
2367
|
gap: var(--spacing-1);
|
|
1934
2368
|
}
|
|
1935
2369
|
|
|
2370
|
+
/*
|
|
2371
|
+
* THE COMPACT ACCOUNT: the reader's face alone, centred in the compact rail's
|
|
2372
|
+
* foot, the face's own corner carrying the lift, the hover and the ring. It
|
|
2373
|
+
* keeps the row's link and menu rules above (hover, current, ring), with no
|
|
2374
|
+
* pad of its own, so the box is the face.
|
|
2375
|
+
*/
|
|
2376
|
+
.crewlet-account-row--compact {
|
|
2377
|
+
justify-content: center;
|
|
2378
|
+
padding: 0;
|
|
2379
|
+
}
|
|
2380
|
+
|
|
2381
|
+
.crewlet-account-row__who--compact,
|
|
2382
|
+
.crewlet-app-shell__rail-foot .crewlet-account-row__who--compact {
|
|
2383
|
+
flex: none;
|
|
2384
|
+
width: auto;
|
|
2385
|
+
min-height: 0;
|
|
2386
|
+
padding: calc(var(--spacing-1) / 2);
|
|
2387
|
+
border-radius: var(--radius-md);
|
|
2388
|
+
}
|
|
2389
|
+
|
|
2390
|
+
/* The ring stands off the face, outside it: drawn inside, it would cover the
|
|
2391
|
+
face's own edge and status. */
|
|
2392
|
+
.crewlet-account-row__who.crewlet-account-row__who--compact:focus-visible {
|
|
2393
|
+
outline: 2px solid var(--color-focus);
|
|
2394
|
+
outline-offset: 2px;
|
|
2395
|
+
}
|
|
2396
|
+
|
|
1936
2397
|
@media (prefers-reduced-motion: reduce) {
|
|
1937
2398
|
.crewlet-account-row__who {
|
|
1938
2399
|
transition: none;
|
|
@@ -4004,23 +4465,25 @@ a.crewlet-kind-tile:hover .crewlet-kind-tile__frame,
|
|
|
4004
4465
|
}
|
|
4005
4466
|
|
|
4006
4467
|
|
|
4007
|
-
/* ArtifactKinds-
|
|
4468
|
+
/* ArtifactKinds-3EH4KR3F.css */
|
|
4008
4469
|
/*
|
|
4009
4470
|
* A kind's colours, set once per kind on `--crewlet-kind-*` by its class
|
|
4010
|
-
* (`crewlet-kind--<kind>`): the hue, its Fill and Line steps
|
|
4011
|
-
* glyph is drawn in
|
|
4012
|
-
*
|
|
4471
|
+
* (`crewlet-kind--<kind>`): the hue, its Fill and Line steps, the ink a
|
|
4472
|
+
* glyph is drawn in, and the Ground steps a card drawn ON the kind's colour
|
|
4473
|
+
* reads (its ground, the ground under the pointer, the ground at its foot
|
|
4474
|
+
* and the glow behind its drawing; ActionCard). Every surface that tints by
|
|
4475
|
+
* kind reads these, so a kind glyph in a bar, a card's badge and a Make row's tile repaint together with
|
|
4013
4476
|
* the theme, and no surface spells a kind's colour of its own. A sheet of
|
|
4014
4477
|
* its own, imported by each surface that tints, because the glyph's module
|
|
4015
4478
|
* carries no stylesheet (a frame that draws one glyph takes nothing else).
|
|
4016
4479
|
*/
|
|
4017
|
-
.crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); }
|
|
4018
|
-
.crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); }
|
|
4019
|
-
.crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); }
|
|
4020
|
-
.crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); }
|
|
4021
|
-
.crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); }
|
|
4022
|
-
.crewlet-kind--brand { --crewlet-kind-hue: var(--color-artifact-kind-brand); --crewlet-kind-fill: var(--color-artifact-kind-brand-fill); --crewlet-kind-line: var(--color-artifact-kind-brand-line); --crewlet-kind-ink: var(--color-artifact-kind-brand-ink); }
|
|
4023
|
-
.crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); }
|
|
4480
|
+
.crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); --crewlet-kind-ground: var(--color-artifact-kind-doc-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-doc-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-doc-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-doc-glow); }
|
|
4481
|
+
.crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); --crewlet-kind-ground: var(--color-artifact-kind-slides-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-slides-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-slides-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-slides-glow); }
|
|
4482
|
+
.crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); --crewlet-kind-ground: var(--color-artifact-kind-design-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-design-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-design-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-design-glow); }
|
|
4483
|
+
.crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); --crewlet-kind-ground: var(--color-artifact-kind-dashboard-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-dashboard-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-dashboard-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-dashboard-glow); }
|
|
4484
|
+
.crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); --crewlet-kind-ground: var(--color-artifact-kind-html-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-html-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-html-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-html-glow); }
|
|
4485
|
+
.crewlet-kind--brand { --crewlet-kind-hue: var(--color-artifact-kind-brand); --crewlet-kind-fill: var(--color-artifact-kind-brand-fill); --crewlet-kind-line: var(--color-artifact-kind-brand-line); --crewlet-kind-ink: var(--color-artifact-kind-brand-ink); --crewlet-kind-ground: var(--color-artifact-kind-brand-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-brand-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-brand-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-brand-glow); }
|
|
4486
|
+
.crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); --crewlet-kind-ground: var(--color-artifact-kind-sheet-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-sheet-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-sheet-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-sheet-glow); }
|
|
4024
4487
|
|
|
4025
4488
|
|
|
4026
4489
|
/* ArtifactMakeRow-6UX2LTF7.css */
|
|
@@ -4560,7 +5023,7 @@ a.crewlet-make-row__item:active {
|
|
|
4560
5023
|
}
|
|
4561
5024
|
|
|
4562
5025
|
|
|
4563
|
-
/* Avatar-
|
|
5026
|
+
/* Avatar-MNE3WBZO.css */
|
|
4564
5027
|
/*
|
|
4565
5028
|
* The identity badge.
|
|
4566
5029
|
*
|
|
@@ -4569,9 +5032,10 @@ a.crewlet-make-row__item:active {
|
|
|
4569
5032
|
* same eight families it also spent on phases and event categories, so one
|
|
4570
5033
|
* amber meant "the execute phase", "the decision category" and "the Analyst"
|
|
4571
5034
|
* at once. A hash of a name carries no information: rename the seat and its
|
|
4572
|
-
* colour changes, which is the proof it never meant anything. Identity is
|
|
4573
|
-
*
|
|
4574
|
-
*
|
|
5035
|
+
* colour changes, which is the proof it never meant anything. Identity is
|
|
5036
|
+
* what the face holds (a monogram set in the kind's face, a picture, or for an
|
|
5037
|
+
* agent an operator gave one, its character and its hue) and the name beside
|
|
5038
|
+
* it. Every face is ONE SHAPE, people and agents alike (see "the shape").
|
|
4575
5039
|
*
|
|
4576
5040
|
* A STATE IS A CORNER BADGE, NEVER A LINE ROUND THE PLATE. A ring in a state's
|
|
4577
5041
|
* hue round a plate in the agent's own hue put two colours on a 32px mark and
|
|
@@ -4711,46 +5175,40 @@ a.crewlet-make-row__item:active {
|
|
|
4711
5175
|
font-size: var(--font-size-sm);
|
|
4712
5176
|
}
|
|
4713
5177
|
|
|
4714
|
-
/* ──
|
|
5178
|
+
/* ── the shape ────────────────────────────────────────────────────────── */
|
|
4715
5179
|
|
|
4716
5180
|
/*
|
|
4717
|
-
*
|
|
4718
|
-
* the
|
|
5181
|
+
* ONE FACE SHAPE FOR PEOPLE AND AGENTS: a square with rounded corners, the
|
|
5182
|
+
* corner two ninths of the side (8px on a 36px face), never under the xs
|
|
5183
|
+
* radius on the smallest faces and never over the lg radius on the largest.
|
|
5184
|
+
* A person was a circle and an agent a squircle, so a row of people and
|
|
5185
|
+
* agents changed shape from face to face, and a list of members read as two
|
|
5186
|
+
* lists. One shape lines every face up on the same square and lets what the
|
|
5187
|
+
* face holds say who it is: a character on its hue, a picture, or initials
|
|
5188
|
+
* set in the kind's own face (below).
|
|
4719
5189
|
*
|
|
4720
|
-
* THE CORNER MOVES WITH THE BOX,
|
|
4721
|
-
*
|
|
4722
|
-
*
|
|
4723
|
-
*
|
|
4724
|
-
*
|
|
4725
|
-
* component, and they disagreed: `size={80}` drew a squarer badge than
|
|
4726
|
-
* `size="lg"` at half its width.
|
|
4727
|
-
*
|
|
4728
|
-
* WHERE THE BROWSER DRAWS A SQUIRCLE, IT IS A WHOLE ONE. `corner-shape:
|
|
4729
|
-
* squircle` is a superellipse of exponent 4, which at a given radius reaches
|
|
4730
|
-
* much closer to the box's corner than a circular arc does: at the 45 degree
|
|
4731
|
-
* point it stands 0.159 of the radius in from each edge, against 0.293 for an
|
|
4732
|
-
* arc. Kept at 0.29 of the box, that corner would stand 0.046 of the box in,
|
|
4733
|
-
* half the design's depth and a nearly square badge. At half the box it stands
|
|
4734
|
-
* 0.0795 of the box in, against the design's 0.0849 (0.13px at 24px), with the
|
|
4735
|
-
* continuous curvature a squircle is for. So the corner is the circle token
|
|
4736
|
-
* there, and the fallback above is what every other browser draws.
|
|
5190
|
+
* THE CORNER MOVES WITH THE BOX, computed here from the size property every
|
|
5191
|
+
* step and every numeric size sets, so there is ONE ladder: `AVATAR_CORNER`
|
|
5192
|
+
* in the component states the same ratio and clamp for a caller that has to
|
|
5193
|
+
* round something else to match a face (ImageUpload, PresenceStack), and the
|
|
5194
|
+
* suite holds the two equal. No step rule sets a corner.
|
|
4737
5195
|
*/
|
|
4738
|
-
.crewlet-avatar
|
|
4739
|
-
border-radius: calc(var(--crewlet-avatar-size) *
|
|
4740
|
-
font-family: var(--font-family-mono);
|
|
5196
|
+
.crewlet-avatar {
|
|
5197
|
+
border-radius: clamp(var(--radius-xs), calc(var(--crewlet-avatar-size) * 2 / 9), var(--radius-lg));
|
|
4741
5198
|
}
|
|
4742
5199
|
|
|
4743
|
-
|
|
4744
|
-
|
|
4745
|
-
|
|
4746
|
-
|
|
4747
|
-
|
|
5200
|
+
/* ── kinds ─────────────────────────────────────────────────────────────── */
|
|
5201
|
+
|
|
5202
|
+
/*
|
|
5203
|
+
* The kind is said by the monogram's face: an agent's initials are set in the
|
|
5204
|
+
* mono face, the way a handle is written, and a person's in the sans face. A
|
|
5205
|
+
* character or a picture says it on its own.
|
|
5206
|
+
*/
|
|
5207
|
+
.crewlet-avatar--agent {
|
|
5208
|
+
font-family: var(--font-family-mono);
|
|
4748
5209
|
}
|
|
4749
5210
|
|
|
4750
|
-
/* A PERSON IS A CIRCLE, set in the sans face, the round badge every member list
|
|
4751
|
-
a reader has used already speaks. */
|
|
4752
5211
|
.crewlet-avatar--human {
|
|
4753
|
-
border-radius: var(--radius-circle);
|
|
4754
5212
|
font-family: var(--font-family-sans);
|
|
4755
5213
|
}
|
|
4756
5214
|
|
|
@@ -4780,16 +5238,22 @@ a.crewlet-make-row__item:active {
|
|
|
4780
5238
|
|
|
4781
5239
|
/* ── tones ─────────────────────────────────────────────────────────────── */
|
|
4782
5240
|
|
|
5241
|
+
/*
|
|
5242
|
+
* A FACE'S OWN OUTLINE IS THE HAIRLINE (`--color-edge-hairline`), whatever it
|
|
5243
|
+
* holds: the neutral badge, a seeded tint, a character's plate. A row of faces
|
|
5244
|
+
* then reads as faces rather than as a row of framed boxes, where the strong
|
|
5245
|
+
* hairline and a hue's line drew each face as a tile. A reader who asked for
|
|
5246
|
+
* more contrast gets the control edge here, as the edge scale promises.
|
|
5247
|
+
*/
|
|
4783
5248
|
.crewlet-avatar--fallback {
|
|
4784
|
-
border: 1px solid
|
|
5249
|
+
border: 1px solid var(--color-edge-hairline);
|
|
4785
5250
|
}
|
|
4786
5251
|
|
|
4787
|
-
/* The design's badge: the raised rung
|
|
4788
|
-
|
|
4789
|
-
|
|
5252
|
+
/* The design's badge: the raised rung inside the face's hairline and the
|
|
5253
|
+
secondary ink, so a badge on a card reads as a mark standing on it rather
|
|
5254
|
+
than as a hole in it. */
|
|
4790
5255
|
.crewlet-avatar--neutral {
|
|
4791
5256
|
background: var(--color-surface-elevated);
|
|
4792
|
-
border-color: var(--color-border-strong);
|
|
4793
5257
|
color: var(--color-text-secondary);
|
|
4794
5258
|
}
|
|
4795
5259
|
|
|
@@ -4817,7 +5281,7 @@ a.crewlet-make-row__item:active {
|
|
|
4817
5281
|
* plate's sides, a tall one its top and its foot, and none touches the curve.
|
|
4818
5282
|
*/
|
|
4819
5283
|
.crewlet-avatar--character {
|
|
4820
|
-
border: 1px solid
|
|
5284
|
+
border: 1px solid var(--color-edge-hairline);
|
|
4821
5285
|
}
|
|
4822
5286
|
|
|
4823
5287
|
.crewlet-avatar__character {
|
|
@@ -4827,50 +5291,44 @@ a.crewlet-make-row__item:active {
|
|
|
4827
5291
|
height: 74%;
|
|
4828
5292
|
}
|
|
4829
5293
|
|
|
4830
|
-
/* The plate an agent's hue is drawn on: the hue's fill
|
|
4831
|
-
|
|
5294
|
+
/* The plate an agent's hue is drawn on: the hue's fill inside the face's
|
|
5295
|
+
hairline, and the hue itself as the character's ink. The fill is published as
|
|
4832
5296
|
`--crewlet-avatar-plate` and painted from it, because it is a TINT (12% of
|
|
4833
5297
|
the hue over whatever the badge stands on), and a stack has to lay it over
|
|
4834
5298
|
its own ground rather than over the badge behind it (AvatarStack.css). */
|
|
4835
5299
|
.crewlet-avatar--hue-purple {
|
|
4836
5300
|
--crewlet-avatar-plate: var(--color-node-purple-fill);
|
|
4837
5301
|
background: var(--crewlet-avatar-plate);
|
|
4838
|
-
border-color: var(--color-node-purple-line);
|
|
4839
5302
|
color: var(--color-node-purple);
|
|
4840
5303
|
}
|
|
4841
5304
|
|
|
4842
5305
|
.crewlet-avatar--hue-cyan {
|
|
4843
5306
|
--crewlet-avatar-plate: var(--color-node-cyan-fill);
|
|
4844
5307
|
background: var(--crewlet-avatar-plate);
|
|
4845
|
-
border-color: var(--color-node-cyan-line);
|
|
4846
5308
|
color: var(--color-node-cyan);
|
|
4847
5309
|
}
|
|
4848
5310
|
|
|
4849
5311
|
.crewlet-avatar--hue-green {
|
|
4850
5312
|
--crewlet-avatar-plate: var(--color-node-green-fill);
|
|
4851
5313
|
background: var(--crewlet-avatar-plate);
|
|
4852
|
-
border-color: var(--color-node-green-line);
|
|
4853
5314
|
color: var(--color-node-green);
|
|
4854
5315
|
}
|
|
4855
5316
|
|
|
4856
5317
|
.crewlet-avatar--hue-amber {
|
|
4857
5318
|
--crewlet-avatar-plate: var(--color-node-amber-fill);
|
|
4858
5319
|
background: var(--crewlet-avatar-plate);
|
|
4859
|
-
border-color: var(--color-node-amber-line);
|
|
4860
5320
|
color: var(--color-node-amber);
|
|
4861
5321
|
}
|
|
4862
5322
|
|
|
4863
5323
|
.crewlet-avatar--hue-rose {
|
|
4864
5324
|
--crewlet-avatar-plate: var(--color-node-rose-fill);
|
|
4865
5325
|
background: var(--crewlet-avatar-plate);
|
|
4866
|
-
border-color: var(--color-node-rose-line);
|
|
4867
5326
|
color: var(--color-node-rose);
|
|
4868
5327
|
}
|
|
4869
5328
|
|
|
4870
5329
|
.crewlet-avatar--hue-blue {
|
|
4871
5330
|
--crewlet-avatar-plate: var(--color-node-blue-fill);
|
|
4872
5331
|
background: var(--crewlet-avatar-plate);
|
|
4873
|
-
border-color: var(--color-node-blue-line);
|
|
4874
5332
|
color: var(--color-node-blue);
|
|
4875
5333
|
}
|
|
4876
5334
|
|
|
@@ -4884,7 +5342,7 @@ a.crewlet-make-row__item:active {
|
|
|
4884
5342
|
* AN OUTLINE RATHER THAN THAT SHADOW PAIR, for three reasons. The gap is
|
|
4885
5343
|
* TRANSPARENT, so the ring reads on whatever the badge stands on, where the
|
|
4886
5344
|
* design's gap is the card's own fill and cuts a card-coloured band into any
|
|
4887
|
-
* other ground. An outline follows the corner, the
|
|
5345
|
+
* other ground. An outline follows the corner, the face's clamp included, in
|
|
4888
5346
|
* every engine this package supports. And forced-colors mode keeps an outline
|
|
4889
5347
|
* and drops every shadow, so the ring is still drawn for the readers who most
|
|
4890
5348
|
* need a boundary.
|
|
@@ -4905,13 +5363,20 @@ a.crewlet-make-row__item:active {
|
|
|
4905
5363
|
/*
|
|
4906
5364
|
* THE FRAME is the face's own box, so a badge with a status takes exactly the
|
|
4907
5365
|
* room one without takes: the corner badge hangs past it rather than growing
|
|
4908
|
-
* it, and a row lays out the same either way.
|
|
4909
|
-
*
|
|
5366
|
+
* it, and a row lays out the same either way.
|
|
5367
|
+
*
|
|
5368
|
+
* THE BADGE WHERE A READER LOOKS FOR PRESENCE: under a third of the face (0.3
|
|
5369
|
+
* of the box), hanging a twentieth of the box past its bottom-right corner,
|
|
5370
|
+
* with the notch (a gap of the ground round it) kept. At 36px that is an 11px
|
|
5371
|
+
* badge set 2px past the corner, the size and place of a presence dot, where
|
|
5372
|
+
* a badge at 0.42 of the box read as a second face. It never drops under
|
|
5373
|
+
* 10px, where its glyph stops being a shape, and always hangs at least a
|
|
5374
|
+
* pixel past the corner.
|
|
4910
5375
|
*/
|
|
4911
5376
|
.crewlet-avatar-frame {
|
|
4912
|
-
--crewlet-avatar-status-size: max(10px, calc(var(--crewlet-avatar-size) * 0.
|
|
4913
|
-
--crewlet-avatar-status-overhang:
|
|
4914
|
-
--crewlet-avatar-status-gap:
|
|
5377
|
+
--crewlet-avatar-status-size: max(10px, calc(var(--crewlet-avatar-size) * 0.3));
|
|
5378
|
+
--crewlet-avatar-status-overhang: max(1px, calc(var(--crewlet-avatar-size) * 0.05));
|
|
5379
|
+
--crewlet-avatar-status-gap: 2px;
|
|
4915
5380
|
position: relative;
|
|
4916
5381
|
display: inline-flex;
|
|
4917
5382
|
flex: none;
|
|
@@ -5069,7 +5534,7 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
5069
5534
|
}
|
|
5070
5535
|
|
|
5071
5536
|
|
|
5072
|
-
/* AvatarStack-
|
|
5537
|
+
/* AvatarStack-KEHD3GWY.css */
|
|
5073
5538
|
/*
|
|
5074
5539
|
* Several badges as one mark (AvatarStack.tsx).
|
|
5075
5540
|
*
|
|
@@ -5078,7 +5543,8 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
5078
5543
|
* badges standing in front of each other rather than as one blot. The ring is
|
|
5079
5544
|
* a SHADOW rather than a border, because it has to fall outside the badge
|
|
5080
5545
|
* without moving it, and it is decoration: forced-colors mode drops it and the
|
|
5081
|
-
* badges' own
|
|
5546
|
+
* badges' own borders, which that mode paints in the system ink, still
|
|
5547
|
+
* separate them.
|
|
5082
5548
|
*
|
|
5083
5549
|
* THE GROUND IS A VARIABLE because a stack stands on whatever it is put on,
|
|
5084
5550
|
* and a cut-out in the sheet's colour on a card is a band of the wrong grey
|
|
@@ -5108,6 +5574,17 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
5108
5574
|
box-shadow: 0 0 0 2px var(--crewlet-avatar-stack-ground);
|
|
5109
5575
|
}
|
|
5110
5576
|
|
|
5577
|
+
/*
|
|
5578
|
+
* THE RING IS THE ONLY EDGE A STACKED FACE NEEDS. A face's own hairline inside
|
|
5579
|
+
* the ring drew each face as a framed tile, two edges a pixel apart, so a
|
|
5580
|
+
* stacked face (a member, or the face a member wraps) draws its border in no
|
|
5581
|
+
* colour. The border keeps its width, so the face keeps its box.
|
|
5582
|
+
*/
|
|
5583
|
+
.crewlet-avatar-stack > .crewlet-avatar-stack__member.crewlet-avatar,
|
|
5584
|
+
.crewlet-avatar-stack > .crewlet-avatar-stack__member > .crewlet-avatar {
|
|
5585
|
+
border-color: transparent;
|
|
5586
|
+
}
|
|
5587
|
+
|
|
5111
5588
|
/*
|
|
5112
5589
|
* A BADGE IN FRONT HIDES THE ONE BEHIND IT. A hue's plate is a tint, 12% of
|
|
5113
5590
|
* the hue over whatever the badge stands on, and in a stack that is partly
|
|
@@ -5135,9 +5612,9 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
5135
5612
|
}
|
|
5136
5613
|
|
|
5137
5614
|
/*
|
|
5138
|
-
* THE COUNT OF THE REST. A PILL, where every
|
|
5139
|
-
*
|
|
5140
|
-
*
|
|
5615
|
+
* THE COUNT OF THE REST. A PILL, where every face is a rounded square: it is
|
|
5616
|
+
* a number rather than somebody, and drawn in a face's outline it would read
|
|
5617
|
+
* as one more agent or one more person. Otherwise it is the neutral
|
|
5141
5618
|
* badge exactly (the raised rung, the strong hairline, the secondary ink), in
|
|
5142
5619
|
* the sans face with tabular figures so "+9" and "+12" sit alike.
|
|
5143
5620
|
*/
|
|
@@ -5805,7 +6282,7 @@ a.crewlet-breadcrumb__crumb:focus-visible {
|
|
|
5805
6282
|
}
|
|
5806
6283
|
|
|
5807
6284
|
|
|
5808
|
-
/* BriefCard-
|
|
6285
|
+
/* BriefCard-QCL7MVUV.css */
|
|
5809
6286
|
/*
|
|
5810
6287
|
* A brief inside the product's status card: the verdict in the head, then one
|
|
5811
6288
|
* line on what the page is about, the ranked rows that wait on the reader, a
|
|
@@ -5922,6 +6399,32 @@ a.crewlet-breadcrumb__crumb:focus-visible {
|
|
|
5922
6399
|
margin-inline: calc(-1 * var(--spacing-3));
|
|
5923
6400
|
}
|
|
5924
6401
|
|
|
6402
|
+
/*
|
|
6403
|
+
* WHAT WAS SAID (a room's catch up): one point to a row, the sentence and its
|
|
6404
|
+
* citation, the press that opens the message it came from, at the row's end.
|
|
6405
|
+
* A quiet list with no markers, between the needs and the context.
|
|
6406
|
+
*/
|
|
6407
|
+
.crewlet-brief-card__points {
|
|
6408
|
+
display: flex;
|
|
6409
|
+
flex-direction: column;
|
|
6410
|
+
gap: var(--spacing-1);
|
|
6411
|
+
margin: 0;
|
|
6412
|
+
padding: 0;
|
|
6413
|
+
list-style: none;
|
|
6414
|
+
}
|
|
6415
|
+
|
|
6416
|
+
.crewlet-brief-card__point {
|
|
6417
|
+
display: grid;
|
|
6418
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
6419
|
+
align-items: baseline;
|
|
6420
|
+
gap: var(--spacing-3);
|
|
6421
|
+
padding-block: var(--spacing-1);
|
|
6422
|
+
}
|
|
6423
|
+
|
|
6424
|
+
.crewlet-brief-card__point-text {
|
|
6425
|
+
color: var(--color-text-primary);
|
|
6426
|
+
}
|
|
6427
|
+
|
|
5925
6428
|
|
|
5926
6429
|
/* Button-GDEBGBX6.css */
|
|
5927
6430
|
/*
|
|
@@ -9886,7 +10389,557 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
9886
10389
|
}
|
|
9887
10390
|
|
|
9888
10391
|
|
|
9889
|
-
/*
|
|
10392
|
+
/* ChatDay-E3FF5HWF.css */
|
|
10393
|
+
/*
|
|
10394
|
+
* ChatDay: a day of a conversation under its date, set on the conversation's
|
|
10395
|
+
* own scale (ChatScale.css).
|
|
10396
|
+
*/
|
|
10397
|
+
|
|
10398
|
+
/* The day is the pill's range: pinned, the pill stays inside it, so the next
|
|
10399
|
+
day pushes it out from below. */
|
|
10400
|
+
.crewlet-chat-day {
|
|
10401
|
+
position: relative;
|
|
10402
|
+
display: flex;
|
|
10403
|
+
flex-direction: column;
|
|
10404
|
+
}
|
|
10405
|
+
|
|
10406
|
+
/*
|
|
10407
|
+
* THE PILL'S PLACE. A box as tall as the pill, first in the day, set so the
|
|
10408
|
+
* pill's middle is on the rule. Sticky in the day, it holds the pill a little
|
|
10409
|
+
* under the list's top edge for as long as the day is in view, and the day's
|
|
10410
|
+
* end pushes it out, a small gap above the next day's pill.
|
|
10411
|
+
*
|
|
10412
|
+
* ITS OWN MARGINS STAY POSITIVE. A sticky box may travel as far as its margin
|
|
10413
|
+
* box allows, so a negative margin here let the pill run past the end of its
|
|
10414
|
+
* day and sit on the next day's pill. The rule under it takes the overlap
|
|
10415
|
+
* instead, with a negative margin of its own, which moves nothing sticky.
|
|
10416
|
+
*
|
|
10417
|
+
* The box lets the pointer through to the rows beside the pill; the pill
|
|
10418
|
+
* takes it. It stands under a message's hover toolbar (which stands over the
|
|
10419
|
+
* rows and the pill alike) and over the rows and the New line.
|
|
10420
|
+
*/
|
|
10421
|
+
.crewlet-chat-day__label {
|
|
10422
|
+
position: sticky;
|
|
10423
|
+
top: var(--crewlet-chat-day-pin);
|
|
10424
|
+
z-index: var(--z-index-sticky);
|
|
10425
|
+
display: flex;
|
|
10426
|
+
flex: none;
|
|
10427
|
+
justify-content: center;
|
|
10428
|
+
height: var(--crewlet-chat-day-pill);
|
|
10429
|
+
margin-top: calc(var(--crewlet-chat-day-gap) - var(--crewlet-chat-day-pill) / 2);
|
|
10430
|
+
pointer-events: none;
|
|
10431
|
+
/* A host that raises the pin (a banner arriving) moves the pinned pill
|
|
10432
|
+
down with it rather than jumping it. */
|
|
10433
|
+
transition: top var(--motion-duration-fast) var(--motion-easing-default);
|
|
10434
|
+
}
|
|
10435
|
+
|
|
10436
|
+
/*
|
|
10437
|
+
* THE DAY'S RULE: a hairline across the whole list with the day's gap under
|
|
10438
|
+
* it, in the flow like any row. It rises half a pill, so it runs through the
|
|
10439
|
+
* pill's middle.
|
|
10440
|
+
*/
|
|
10441
|
+
.crewlet-chat-day__rule {
|
|
10442
|
+
position: relative;
|
|
10443
|
+
flex: none;
|
|
10444
|
+
height: 1px;
|
|
10445
|
+
margin: calc(var(--crewlet-chat-day-pill) / -2) 0 var(--crewlet-chat-day-gap);
|
|
10446
|
+
background: var(--color-edge-hairline);
|
|
10447
|
+
}
|
|
10448
|
+
|
|
10449
|
+
/* The New line on the day's rule covers the rule, as one line. */
|
|
10450
|
+
.crewlet-chat-day__rule > .crewlet-chat-divider--unread {
|
|
10451
|
+
position: absolute;
|
|
10452
|
+
inset: 0;
|
|
10453
|
+
}
|
|
10454
|
+
|
|
10455
|
+
/*
|
|
10456
|
+
* THE PILL floats over the rows: the transcript's own ground, ringed with the
|
|
10457
|
+
* hairline and a small shadow, so it reads as lifted off the messages it
|
|
10458
|
+
* passes over. The ring is a shadow, which forced colors drops, so a
|
|
10459
|
+
* transparent outline stands in for it there.
|
|
10460
|
+
*/
|
|
10461
|
+
.crewlet-chat-day__pill {
|
|
10462
|
+
display: inline-flex;
|
|
10463
|
+
align-items: center;
|
|
10464
|
+
gap: var(--spacing-1);
|
|
10465
|
+
height: var(--crewlet-chat-day-pill);
|
|
10466
|
+
box-sizing: border-box;
|
|
10467
|
+
padding: 0 var(--spacing-3);
|
|
10468
|
+
border: 0;
|
|
10469
|
+
border-radius: var(--radius-pill);
|
|
10470
|
+
outline: 1px solid transparent;
|
|
10471
|
+
outline-offset: -1px;
|
|
10472
|
+
background-color: var(--crewlet-chat-ground);
|
|
10473
|
+
box-shadow:
|
|
10474
|
+
0 0 0 1px var(--color-edge-hairline),
|
|
10475
|
+
var(--shadow-xs);
|
|
10476
|
+
color: var(--color-text-secondary);
|
|
10477
|
+
font: inherit;
|
|
10478
|
+
font-size: var(--font-size-xs);
|
|
10479
|
+
font-weight: var(--font-weight-medium);
|
|
10480
|
+
line-height: 1;
|
|
10481
|
+
white-space: nowrap;
|
|
10482
|
+
pointer-events: auto;
|
|
10483
|
+
}
|
|
10484
|
+
|
|
10485
|
+
/* A pill that opens a menu: its chevron sits a step closer to its edge. */
|
|
10486
|
+
.crewlet-chat-day__pill--button {
|
|
10487
|
+
padding-inline-end: var(--spacing-2);
|
|
10488
|
+
cursor: pointer;
|
|
10489
|
+
}
|
|
10490
|
+
|
|
10491
|
+
/* Under the pointer, and while its menu is open, the hover overlay laid on
|
|
10492
|
+
the pill's own ground. */
|
|
10493
|
+
.crewlet-chat-day__pill--button:hover,
|
|
10494
|
+
.crewlet-chat-day__pill--button[aria-expanded='true'] {
|
|
10495
|
+
background-image: linear-gradient(var(--color-surface-hover), var(--color-surface-hover));
|
|
10496
|
+
}
|
|
10497
|
+
|
|
10498
|
+
/* The pill draws its own ring, so focus is drawn over it, as one edge. */
|
|
10499
|
+
.crewlet-chat-day__pill--button:focus-visible {
|
|
10500
|
+
outline: 2px solid var(--color-focus);
|
|
10501
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
10502
|
+
}
|
|
10503
|
+
|
|
10504
|
+
@media (prefers-reduced-motion: reduce) {
|
|
10505
|
+
.crewlet-chat-day__label {
|
|
10506
|
+
transition: none;
|
|
10507
|
+
}
|
|
10508
|
+
}
|
|
10509
|
+
|
|
10510
|
+
|
|
10511
|
+
/* ChatDivider-7ZNDL2PZ.css */
|
|
10512
|
+
/*
|
|
10513
|
+
* ChatDivider: a line between the rows of a conversation, set on the
|
|
10514
|
+
* conversation's own scale (ChatScale.css).
|
|
10515
|
+
*/
|
|
10516
|
+
|
|
10517
|
+
/* A quiet labelled rule: the words in the middle, a hairline either side. */
|
|
10518
|
+
.crewlet-chat-divider--date {
|
|
10519
|
+
display: flex;
|
|
10520
|
+
align-items: center;
|
|
10521
|
+
gap: var(--spacing-3);
|
|
10522
|
+
padding: var(--spacing-2) var(--crewlet-chat-pad-x);
|
|
10523
|
+
color: var(--color-text-tertiary);
|
|
10524
|
+
font-size: var(--crewlet-chat-meta);
|
|
10525
|
+
font-weight: var(--font-weight-regular);
|
|
10526
|
+
}
|
|
10527
|
+
|
|
10528
|
+
.crewlet-chat-divider--date::before,
|
|
10529
|
+
.crewlet-chat-divider--date::after {
|
|
10530
|
+
content: '';
|
|
10531
|
+
flex: 1;
|
|
10532
|
+
height: 1px;
|
|
10533
|
+
background: var(--color-border-default);
|
|
10534
|
+
}
|
|
10535
|
+
|
|
10536
|
+
.crewlet-chat-divider--date .crewlet-chat-divider__label {
|
|
10537
|
+
white-space: nowrap;
|
|
10538
|
+
}
|
|
10539
|
+
|
|
10540
|
+
/*
|
|
10541
|
+
* THE NEW LINE TAKES NO HEIGHT. A hairline across the whole list in the
|
|
10542
|
+
* danger hue, laid on the boundary between the last read message and the
|
|
10543
|
+
* first unread one, with "New" at its end on the transcript's ground, so it
|
|
10544
|
+
* reads over the rows it passes. Brought to the top of the view (scrolled to
|
|
10545
|
+
* as a target), it stops under the day's pinned pill rather than behind it.
|
|
10546
|
+
*/
|
|
10547
|
+
.crewlet-chat-divider--unread {
|
|
10548
|
+
position: relative;
|
|
10549
|
+
z-index: var(--z-index-raised);
|
|
10550
|
+
height: 0;
|
|
10551
|
+
pointer-events: none;
|
|
10552
|
+
scroll-margin-top: calc(var(--crewlet-chat-day-pin) + var(--crewlet-chat-day-pill) + var(--spacing-3));
|
|
10553
|
+
}
|
|
10554
|
+
|
|
10555
|
+
.crewlet-chat-divider--unread::before {
|
|
10556
|
+
content: '';
|
|
10557
|
+
position: absolute;
|
|
10558
|
+
inset-inline: 0;
|
|
10559
|
+
top: 0;
|
|
10560
|
+
height: 1px;
|
|
10561
|
+
background: var(--color-feedback-danger);
|
|
10562
|
+
}
|
|
10563
|
+
|
|
10564
|
+
.crewlet-chat-divider--unread .crewlet-chat-divider__label {
|
|
10565
|
+
position: absolute;
|
|
10566
|
+
top: 0;
|
|
10567
|
+
right: var(--crewlet-chat-pad-x);
|
|
10568
|
+
padding: 0 var(--spacing-1);
|
|
10569
|
+
transform: translateY(-50%);
|
|
10570
|
+
background: var(--crewlet-chat-ground);
|
|
10571
|
+
color: var(--color-feedback-danger-ink);
|
|
10572
|
+
font-size: var(--font-size-xs);
|
|
10573
|
+
font-weight: var(--font-weight-medium);
|
|
10574
|
+
line-height: var(--font-line-height-normal);
|
|
10575
|
+
}
|
|
10576
|
+
|
|
10577
|
+
/*
|
|
10578
|
+
* FORCED COLORS drops the line's background, which is the whole line. A
|
|
10579
|
+
* border is the one edge the mode keeps, painted in its own text colour.
|
|
10580
|
+
*/
|
|
10581
|
+
@media (forced-colors: active) {
|
|
10582
|
+
.crewlet-chat-divider--unread::before,
|
|
10583
|
+
.crewlet-chat-divider--date::before,
|
|
10584
|
+
.crewlet-chat-divider--date::after {
|
|
10585
|
+
border-top: 1px solid CanvasText;
|
|
10586
|
+
}
|
|
10587
|
+
}
|
|
10588
|
+
|
|
10589
|
+
|
|
10590
|
+
/* ChatMessage-FH7VRVCH.css */
|
|
10591
|
+
/*
|
|
10592
|
+
* One message in a transcript: a face in a gutter, the head line, the words
|
|
10593
|
+
* and a footer stack. Every size reads the conversation scale
|
|
10594
|
+
* (ChatScale.css); every edge and fill the quiet scale in @crewlethq/tokens.
|
|
10595
|
+
*/
|
|
10596
|
+
|
|
10597
|
+
.crewlet-chat-message {
|
|
10598
|
+
/* Where the row's first line starts: the toolbar rests on it. */
|
|
10599
|
+
--crewlet-chat-row-top: var(--spacing-2);
|
|
10600
|
+
position: relative;
|
|
10601
|
+
display: grid;
|
|
10602
|
+
grid-template-columns: var(--crewlet-chat-avatar) minmax(0, 1fr);
|
|
10603
|
+
column-gap: var(--crewlet-chat-gap);
|
|
10604
|
+
padding: var(--crewlet-chat-row-top) var(--crewlet-chat-pad-x) var(--spacing-1);
|
|
10605
|
+
font-size: var(--crewlet-chat-text);
|
|
10606
|
+
line-height: var(--crewlet-chat-line);
|
|
10607
|
+
transition: background var(--motion-duration-fast) var(--motion-easing-default);
|
|
10608
|
+
/* A message the reader is taken to stops under the day's pinned pill. */
|
|
10609
|
+
scroll-margin-top: calc(var(--crewlet-chat-day-pin) + var(--crewlet-chat-day-pill) + var(--spacing-2));
|
|
10610
|
+
}
|
|
10611
|
+
|
|
10612
|
+
.crewlet-chat-message.is-continuation {
|
|
10613
|
+
--crewlet-chat-row-top: 1px;
|
|
10614
|
+
padding-bottom: 1px;
|
|
10615
|
+
}
|
|
10616
|
+
|
|
10617
|
+
.crewlet-chat-message:hover,
|
|
10618
|
+
.crewlet-chat-message:focus-visible,
|
|
10619
|
+
.crewlet-chat-message:has(:focus-visible),
|
|
10620
|
+
.crewlet-chat-message.is-active {
|
|
10621
|
+
background: var(--color-fill-row);
|
|
10622
|
+
}
|
|
10623
|
+
|
|
10624
|
+
.crewlet-chat-message:focus-visible {
|
|
10625
|
+
outline: 2px solid var(--color-focus);
|
|
10626
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
10627
|
+
}
|
|
10628
|
+
|
|
10629
|
+
/* A row that names the reader: its wash and the warning bar on its edge. It
|
|
10630
|
+
keeps its wash, and only its wash, under the pointer: the toolbar and the
|
|
10631
|
+
gutter's time say which row is pointed at, and a hover step laid over the
|
|
10632
|
+
wash took the row's quiet text under 4.5:1 on the darker palettes. */
|
|
10633
|
+
.crewlet-chat-message.is-mention,
|
|
10634
|
+
.crewlet-chat-message.is-mention:hover,
|
|
10635
|
+
.crewlet-chat-message.is-mention:focus-visible,
|
|
10636
|
+
.crewlet-chat-message.is-mention:has(:focus-visible),
|
|
10637
|
+
.crewlet-chat-message.is-mention.is-active {
|
|
10638
|
+
background: var(--crewlet-chat-mention);
|
|
10639
|
+
box-shadow: inset 2px 0 0 var(--color-feedback-warning);
|
|
10640
|
+
}
|
|
10641
|
+
|
|
10642
|
+
/* The row a link or a search opened at: a wash of the accent that fades back
|
|
10643
|
+
to whatever the row draws of its own (the mention wash included), so there
|
|
10644
|
+
is no last keyframe to name it. */
|
|
10645
|
+
.crewlet-chat-message.is-flash {
|
|
10646
|
+
animation: crewlet-chat-message-flash calc(var(--motion-duration-moderate) * 8) var(--motion-easing-out);
|
|
10647
|
+
}
|
|
10648
|
+
|
|
10649
|
+
@keyframes crewlet-chat-message-flash {
|
|
10650
|
+
0%,
|
|
10651
|
+
40% {
|
|
10652
|
+
background: var(--color-brand-accent-soft-strong);
|
|
10653
|
+
}
|
|
10654
|
+
}
|
|
10655
|
+
|
|
10656
|
+
.crewlet-chat-message.is-sending .crewlet-chat-message__body {
|
|
10657
|
+
color: var(--color-text-tertiary);
|
|
10658
|
+
}
|
|
10659
|
+
|
|
10660
|
+
/* The face starts a hairline under the top of the name's line box, so across
|
|
10661
|
+
the name and the first line of words it sits centred on the pair. It keeps
|
|
10662
|
+
its own height: stretched to the row, the face's button (and its focus
|
|
10663
|
+
ring) ran the full height of a long message. */
|
|
10664
|
+
.crewlet-chat-message__gutter {
|
|
10665
|
+
display: flex;
|
|
10666
|
+
align-items: flex-start;
|
|
10667
|
+
justify-content: center;
|
|
10668
|
+
padding-top: 2px;
|
|
10669
|
+
}
|
|
10670
|
+
|
|
10671
|
+
/* A face that opens the author's profile: the face is the whole control. */
|
|
10672
|
+
.crewlet-chat-message__gutter > button {
|
|
10673
|
+
display: inline-flex;
|
|
10674
|
+
padding: 0;
|
|
10675
|
+
border: 0;
|
|
10676
|
+
border-radius: var(--radius-md);
|
|
10677
|
+
background: transparent;
|
|
10678
|
+
cursor: pointer;
|
|
10679
|
+
}
|
|
10680
|
+
|
|
10681
|
+
.crewlet-chat-message__gutter > button:focus-visible {
|
|
10682
|
+
outline: 2px solid var(--color-focus);
|
|
10683
|
+
outline-offset: 2px;
|
|
10684
|
+
}
|
|
10685
|
+
|
|
10686
|
+
/* A continuation's time sits on the baseline of the first line of its words.
|
|
10687
|
+
The two are in different columns and set at different sizes, so the grid
|
|
10688
|
+
aligns them by baseline rather than by sharing a line height. It ends on
|
|
10689
|
+
the column's edge: a time is wider than a face, and centred it ran into the
|
|
10690
|
+
gap before the words. */
|
|
10691
|
+
.crewlet-chat-message.is-continuation > .crewlet-chat-message__gutter {
|
|
10692
|
+
justify-content: flex-end;
|
|
10693
|
+
padding-top: 0;
|
|
10694
|
+
}
|
|
10695
|
+
|
|
10696
|
+
.crewlet-chat-message.is-continuation > .crewlet-chat-message__gutter,
|
|
10697
|
+
.crewlet-chat-message.is-continuation > .crewlet-chat-message__main {
|
|
10698
|
+
align-self: baseline;
|
|
10699
|
+
}
|
|
10700
|
+
|
|
10701
|
+
.crewlet-chat-message__gutter-time {
|
|
10702
|
+
visibility: hidden;
|
|
10703
|
+
color: var(--color-text-tertiary);
|
|
10704
|
+
font-size: var(--font-size-2xs);
|
|
10705
|
+
font-variant-numeric: tabular-nums;
|
|
10706
|
+
line-height: 1;
|
|
10707
|
+
white-space: nowrap;
|
|
10708
|
+
}
|
|
10709
|
+
|
|
10710
|
+
.crewlet-chat-message:hover .crewlet-chat-message__gutter-time,
|
|
10711
|
+
.crewlet-chat-message:focus-visible .crewlet-chat-message__gutter-time,
|
|
10712
|
+
.crewlet-chat-message:has(:focus-visible) .crewlet-chat-message__gutter-time,
|
|
10713
|
+
.crewlet-chat-message.is-active .crewlet-chat-message__gutter-time {
|
|
10714
|
+
visibility: visible;
|
|
10715
|
+
}
|
|
10716
|
+
|
|
10717
|
+
.crewlet-chat-message__main {
|
|
10718
|
+
display: flex;
|
|
10719
|
+
flex-direction: column;
|
|
10720
|
+
min-width: 0;
|
|
10721
|
+
}
|
|
10722
|
+
|
|
10723
|
+
/* THE HEAD IS SET AS TEXT, not as a flex row. Every line of it, the first or
|
|
10724
|
+
one a narrow pane wraps the time onto, is held to one body line by the
|
|
10725
|
+
block's strut, and the smaller meta stands on the name's baseline inside
|
|
10726
|
+
it. As a wrapping flex row the line grew a pixel to fit the time's own
|
|
10727
|
+
line box, and a time wrapped alone got a short line of its own. */
|
|
10728
|
+
.crewlet-chat-message__head {
|
|
10729
|
+
min-width: 0;
|
|
10730
|
+
line-height: calc(var(--crewlet-chat-text) * var(--crewlet-chat-line));
|
|
10731
|
+
}
|
|
10732
|
+
|
|
10733
|
+
/* The gap follows each part, so a part a narrow pane wraps starts flush. */
|
|
10734
|
+
.crewlet-chat-message__head > * {
|
|
10735
|
+
white-space: nowrap;
|
|
10736
|
+
}
|
|
10737
|
+
|
|
10738
|
+
.crewlet-chat-message__head > :not(:last-child) {
|
|
10739
|
+
margin-inline-end: var(--spacing-2);
|
|
10740
|
+
}
|
|
10741
|
+
|
|
10742
|
+
/* A label beside the name ("Agent") is centred on the lower-case letters, as
|
|
10743
|
+
text sets an inline mark. */
|
|
10744
|
+
.crewlet-chat-message__head > .crewlet-tag {
|
|
10745
|
+
vertical-align: middle;
|
|
10746
|
+
}
|
|
10747
|
+
|
|
10748
|
+
.crewlet-chat-message__author {
|
|
10749
|
+
color: var(--color-text-primary);
|
|
10750
|
+
font-weight: var(--font-weight-medium);
|
|
10751
|
+
}
|
|
10752
|
+
|
|
10753
|
+
/* A name that opens the author's profile reads as the name, not a button. */
|
|
10754
|
+
.crewlet-chat-message__author > button {
|
|
10755
|
+
padding: 0;
|
|
10756
|
+
border: 0;
|
|
10757
|
+
border-radius: var(--radius-xs);
|
|
10758
|
+
background: transparent;
|
|
10759
|
+
color: inherit;
|
|
10760
|
+
font: inherit;
|
|
10761
|
+
cursor: pointer;
|
|
10762
|
+
}
|
|
10763
|
+
|
|
10764
|
+
.crewlet-chat-message__author > button:hover {
|
|
10765
|
+
text-decoration: underline;
|
|
10766
|
+
text-underline-offset: 2px;
|
|
10767
|
+
}
|
|
10768
|
+
|
|
10769
|
+
.crewlet-chat-message__author > button:focus-visible {
|
|
10770
|
+
outline: 2px solid var(--color-focus);
|
|
10771
|
+
outline-offset: 2px;
|
|
10772
|
+
}
|
|
10773
|
+
|
|
10774
|
+
/* Meta on the head shares the name's baseline. A line height of its own
|
|
10775
|
+
would sit its smaller text lower in a box as tall as the name's and grow
|
|
10776
|
+
the line by a pixel, so it takes none. */
|
|
10777
|
+
.crewlet-chat-message__time {
|
|
10778
|
+
color: var(--color-text-tertiary);
|
|
10779
|
+
font-size: var(--crewlet-chat-meta);
|
|
10780
|
+
font-variant-numeric: tabular-nums;
|
|
10781
|
+
line-height: 1;
|
|
10782
|
+
}
|
|
10783
|
+
|
|
10784
|
+
.crewlet-chat-message__body {
|
|
10785
|
+
min-width: 0;
|
|
10786
|
+
color: var(--color-text-primary);
|
|
10787
|
+
overflow-wrap: anywhere;
|
|
10788
|
+
}
|
|
10789
|
+
|
|
10790
|
+
/* Emphasis in a message is the semibold step, as it is everywhere else in
|
|
10791
|
+
the product: the browser's own bold read heavier than the names. */
|
|
10792
|
+
.crewlet-chat-message__body :is(b, strong) {
|
|
10793
|
+
font-weight: var(--font-weight-semibold);
|
|
10794
|
+
}
|
|
10795
|
+
|
|
10796
|
+
/* Previews, reactions and the thread line: one stack, one gap. */
|
|
10797
|
+
.crewlet-chat-message__footer {
|
|
10798
|
+
display: flex;
|
|
10799
|
+
flex-direction: column;
|
|
10800
|
+
align-items: flex-start;
|
|
10801
|
+
gap: var(--crewlet-chat-stack);
|
|
10802
|
+
margin-top: var(--crewlet-chat-stack);
|
|
10803
|
+
}
|
|
10804
|
+
|
|
10805
|
+
/* NO PIECE UNDER A MESSAGE IS WIDER THAN ITS COLUMN. Stacked on the start
|
|
10806
|
+
edge, each piece takes its one-line width, and an agent's working line set
|
|
10807
|
+
it wider than a phone's column: the transcript scrolled sideways. */
|
|
10808
|
+
.crewlet-chat-message__footer > * {
|
|
10809
|
+
max-width: 100%;
|
|
10810
|
+
}
|
|
10811
|
+
|
|
10812
|
+
/* THE TOOLBAR STANDS ON THE ROW'S FIRST LINE, over the row above, and over
|
|
10813
|
+
the day's pinned pill as well as the rows: a toolbar that slid under the
|
|
10814
|
+
pill lost its middle buttons wherever the two crossed. */
|
|
10815
|
+
.crewlet-chat-message__actions {
|
|
10816
|
+
position: absolute;
|
|
10817
|
+
top: calc(var(--crewlet-chat-row-top) - var(--crewlet-chat-toolbar));
|
|
10818
|
+
right: var(--crewlet-chat-pad-x);
|
|
10819
|
+
z-index: calc(var(--z-index-sticky) + var(--z-index-raised));
|
|
10820
|
+
opacity: 0;
|
|
10821
|
+
pointer-events: none;
|
|
10822
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
10823
|
+
}
|
|
10824
|
+
|
|
10825
|
+
.crewlet-chat-message:hover > .crewlet-chat-message__actions,
|
|
10826
|
+
.crewlet-chat-message:focus-visible > .crewlet-chat-message__actions,
|
|
10827
|
+
.crewlet-chat-message:has(:focus-visible) > .crewlet-chat-message__actions,
|
|
10828
|
+
.crewlet-chat-message.is-active > .crewlet-chat-message__actions {
|
|
10829
|
+
opacity: 1;
|
|
10830
|
+
pointer-events: auto;
|
|
10831
|
+
}
|
|
10832
|
+
|
|
10833
|
+
/* With no row above to stand over (see ChatMessage.tsx), or when the host
|
|
10834
|
+
asks, it is drawn inside the row's own head. */
|
|
10835
|
+
.crewlet-chat-message.has-actions-inside > .crewlet-chat-message__actions {
|
|
10836
|
+
top: var(--spacing-1);
|
|
10837
|
+
}
|
|
10838
|
+
|
|
10839
|
+
/* A row's quiet controls, the add-reaction pill among them, show while the
|
|
10840
|
+
row is pointed at or holds keyboard focus, and while their picker is open. */
|
|
10841
|
+
.crewlet-chat-message .crewlet-reaction--add {
|
|
10842
|
+
opacity: 0;
|
|
10843
|
+
}
|
|
10844
|
+
|
|
10845
|
+
.crewlet-chat-message:hover .crewlet-reaction--add,
|
|
10846
|
+
.crewlet-chat-message:has(:focus-visible) .crewlet-reaction--add,
|
|
10847
|
+
.crewlet-chat-message.is-active .crewlet-reaction--add,
|
|
10848
|
+
.crewlet-chat-message .crewlet-reaction--add[aria-expanded='true'] {
|
|
10849
|
+
opacity: 1;
|
|
10850
|
+
}
|
|
10851
|
+
|
|
10852
|
+
/* A TOUCH SCREEN HAS NO HOVER: a tap on the row (which focuses it) shows the
|
|
10853
|
+
toolbar, so replying in a thread, saving and the More menu are reached by
|
|
10854
|
+
touch as well as by pointer and keyboard. The add pill is always shown
|
|
10855
|
+
there, so a reaction is one tap away without finding the toolbar first. */
|
|
10856
|
+
@media (hover: none) {
|
|
10857
|
+
.crewlet-chat-message:focus-within > .crewlet-chat-message__actions {
|
|
10858
|
+
opacity: 1;
|
|
10859
|
+
pointer-events: auto;
|
|
10860
|
+
}
|
|
10861
|
+
|
|
10862
|
+
.crewlet-chat-message .crewlet-reaction--add {
|
|
10863
|
+
opacity: 1;
|
|
10864
|
+
}
|
|
10865
|
+
}
|
|
10866
|
+
|
|
10867
|
+
/* The line under a message that was not sent. */
|
|
10868
|
+
.crewlet-chat-message-failure {
|
|
10869
|
+
display: flex;
|
|
10870
|
+
flex-wrap: wrap;
|
|
10871
|
+
align-items: center;
|
|
10872
|
+
gap: var(--spacing-1);
|
|
10873
|
+
color: var(--color-feedback-danger-ink);
|
|
10874
|
+
font-size: var(--crewlet-chat-meta);
|
|
10875
|
+
line-height: var(--crewlet-chat-line);
|
|
10876
|
+
}
|
|
10877
|
+
|
|
10878
|
+
.crewlet-chat-message-failure__words {
|
|
10879
|
+
margin-inline-end: var(--spacing-1);
|
|
10880
|
+
}
|
|
10881
|
+
|
|
10882
|
+
@media (prefers-reduced-motion: reduce) {
|
|
10883
|
+
.crewlet-chat-message {
|
|
10884
|
+
transition: none;
|
|
10885
|
+
}
|
|
10886
|
+
|
|
10887
|
+
.crewlet-chat-message.is-flash {
|
|
10888
|
+
animation: none;
|
|
10889
|
+
}
|
|
10890
|
+
|
|
10891
|
+
.crewlet-chat-message__actions {
|
|
10892
|
+
transition: none;
|
|
10893
|
+
}
|
|
10894
|
+
}
|
|
10895
|
+
|
|
10896
|
+
|
|
10897
|
+
/* ChatScale-L4SIHSKL.css */
|
|
10898
|
+
/*
|
|
10899
|
+
* ONE SCALE FOR A CONVERSATION. Every part of a transcript reads from these:
|
|
10900
|
+
* the message rows, their toolbar, reactions and thread line, the day's rule
|
|
10901
|
+
* and pill, the New line and the link previews. A name, the words under it
|
|
10902
|
+
* and the box they were typed in are one size, and everything around them
|
|
10903
|
+
* (times, counts, the second lines of previews) is one step down. A surface
|
|
10904
|
+
* that wants a denser or roomier transcript sets them once, on itself.
|
|
10905
|
+
*
|
|
10906
|
+
* A sheet of its own, imported by every part that reads it, so a consumer
|
|
10907
|
+
* that imports one part (`@crewlethq/ui/ChatDay`) still gets the scale.
|
|
10908
|
+
*/
|
|
10909
|
+
:root {
|
|
10910
|
+
/* The words: names, bodies and the message box, on one line height. */
|
|
10911
|
+
--crewlet-chat-text: var(--font-size-sm);
|
|
10912
|
+
--crewlet-chat-line: var(--font-line-height-normal);
|
|
10913
|
+
/* Times, counts, reactions and second lines: one step down. */
|
|
10914
|
+
--crewlet-chat-meta: var(--font-size-xs);
|
|
10915
|
+
/* The row's side inset, the face column, the gap after it, and the space
|
|
10916
|
+
between the pieces stacked under a message's words. */
|
|
10917
|
+
--crewlet-chat-pad-x: var(--spacing-5);
|
|
10918
|
+
--crewlet-chat-avatar: 36px;
|
|
10919
|
+
--crewlet-chat-gap: var(--spacing-3);
|
|
10920
|
+
--crewlet-chat-stack: 6px;
|
|
10921
|
+
/* One width for every link preview, so a stack of them shares both edges. */
|
|
10922
|
+
--crewlet-chat-card: 440px;
|
|
10923
|
+
/* A day: the pill's height, the room above and below its rule, and how far
|
|
10924
|
+
under the list's top edge the pill pins. A host with a bar floating over
|
|
10925
|
+
the list's top (an unread banner) moves the pin down past it. */
|
|
10926
|
+
--crewlet-chat-day-pill: 24px;
|
|
10927
|
+
--crewlet-chat-day-gap: var(--spacing-5);
|
|
10928
|
+
--crewlet-chat-day-pin: var(--spacing-3);
|
|
10929
|
+
/* The hover toolbar: a medium control, big enough to aim at while the
|
|
10930
|
+
pointer is passing, inside its inset and its hairline, twice. */
|
|
10931
|
+
--crewlet-chat-toolbar-inset: var(--spacing-1);
|
|
10932
|
+
--crewlet-chat-toolbar: calc(var(--size-control-md) + (var(--crewlet-chat-toolbar-inset) + 1px) * 2);
|
|
10933
|
+
/* The ground the transcript is set on. A host that sets it on another fill
|
|
10934
|
+
names that fill here, and everything lifted off the rows (the toolbar,
|
|
10935
|
+
the day's pill, the open thread line) is filled with it. */
|
|
10936
|
+
--crewlet-chat-ground: var(--color-surface-background);
|
|
10937
|
+
/* A row that names the reader: a light wash of the warning hue. */
|
|
10938
|
+
--crewlet-chat-mention: var(--color-feedback-warning-soft);
|
|
10939
|
+
}
|
|
10940
|
+
|
|
10941
|
+
|
|
10942
|
+
/* ChatThread-HAECJMP6.css */
|
|
9890
10943
|
/*
|
|
9891
10944
|
* A conversation as it grows: the scroller, the items a spacing step and a
|
|
9892
10945
|
* half apart on the panel's 16px inset, and the Jump to latest pill in a row
|
|
@@ -9942,6 +10995,23 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
9942
10995
|
flex: none;
|
|
9943
10996
|
}
|
|
9944
10997
|
|
|
10998
|
+
/*
|
|
10999
|
+
* A SHORT TRANSCRIPT RESTS ON ITS FOOT (`rest="end"`), against the composer
|
|
11000
|
+
* under it, as a conversation's newest messages always are, rather than
|
|
11001
|
+
* under the top with an empty band between it and the box. The scroller is a
|
|
11002
|
+
* column and the items take the room above them; a conversation's rows set
|
|
11003
|
+
* their own spacing, so the items keep no gap.
|
|
11004
|
+
*/
|
|
11005
|
+
.crewlet-chat-thread--rest-end .crewlet-chat-thread__scroller {
|
|
11006
|
+
display: flex;
|
|
11007
|
+
flex-direction: column;
|
|
11008
|
+
}
|
|
11009
|
+
|
|
11010
|
+
.crewlet-chat-thread--rest-end .crewlet-chat-thread__items {
|
|
11011
|
+
margin-top: auto;
|
|
11012
|
+
gap: 0;
|
|
11013
|
+
}
|
|
11014
|
+
|
|
9945
11015
|
/*
|
|
9946
11016
|
* The pill, centred in a row of its own under the log. IN FLOW, NOT FLOATING:
|
|
9947
11017
|
* laid over the scroller it covered the last lines of whatever was being read,
|
|
@@ -10446,6 +11516,117 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
10446
11516
|
}
|
|
10447
11517
|
|
|
10448
11518
|
|
|
11519
|
+
/* ChipField-D4CW6XFA.css */
|
|
11520
|
+
/*
|
|
11521
|
+
* ChipField: chosen items as chips inside the field, before a bare text box.
|
|
11522
|
+
* The chips and the box wrap as one line of words; the box takes whatever
|
|
11523
|
+
* width the last line leaves, and a line of its own when that is too little.
|
|
11524
|
+
*/
|
|
11525
|
+
.crewlet-chip-field {
|
|
11526
|
+
display: flex;
|
|
11527
|
+
flex-wrap: wrap;
|
|
11528
|
+
align-items: center;
|
|
11529
|
+
gap: var(--spacing-1);
|
|
11530
|
+
box-sizing: border-box;
|
|
11531
|
+
width: 100%;
|
|
11532
|
+
color: var(--color-text-primary);
|
|
11533
|
+
font-size: var(--font-size-sm);
|
|
11534
|
+
cursor: text;
|
|
11535
|
+
}
|
|
11536
|
+
|
|
11537
|
+
/* A field like any other: the field's fill, boundary and corner. */
|
|
11538
|
+
.crewlet-chip-field--boxed {
|
|
11539
|
+
min-height: var(--size-control-lg);
|
|
11540
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
11541
|
+
border: 1px solid var(--color-border-field);
|
|
11542
|
+
border-radius: var(--radius-md);
|
|
11543
|
+
background-color: var(--color-surface-subtle);
|
|
11544
|
+
}
|
|
11545
|
+
|
|
11546
|
+
/*
|
|
11547
|
+
* ONE RING, the one every field in this package draws: an outline over the
|
|
11548
|
+
* boundary, on the field rather than on the box inside it, because the
|
|
11549
|
+
* field is what the reader sees as the control. The selector names the box
|
|
11550
|
+
* rather than asking :focus-within, so tabbing to a chip's Remove control
|
|
11551
|
+
* rings that control alone, not the field round it as well.
|
|
11552
|
+
*/
|
|
11553
|
+
.crewlet-chip-field--boxed:has(.crewlet-chip-field__input:focus-visible) {
|
|
11554
|
+
outline: 2px solid var(--color-focus);
|
|
11555
|
+
outline-offset: -1px;
|
|
11556
|
+
}
|
|
11557
|
+
|
|
11558
|
+
/* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
|
|
11559
|
+
:where(:root[data-crewlet-focus='pointer']) .crewlet-chip-field--boxed:has(.crewlet-chip-field__input:focus-visible) {
|
|
11560
|
+
outline-width: 1px;
|
|
11561
|
+
outline-color: var(--color-border-selected);
|
|
11562
|
+
}
|
|
11563
|
+
|
|
11564
|
+
/*
|
|
11565
|
+
* The address line at the top of a view: full width, a rule under it, and
|
|
11566
|
+
* the view's own side inset (`--crewlet-chip-field-inset`, the chat's row
|
|
11567
|
+
* inset by default). Its focus is a bar along the rule; the transparent
|
|
11568
|
+
* outline is what forced colors, which drops the bar, draws instead.
|
|
11569
|
+
*/
|
|
11570
|
+
.crewlet-chip-field--bare {
|
|
11571
|
+
gap: var(--spacing-2);
|
|
11572
|
+
min-height: var(--size-shell-topbar);
|
|
11573
|
+
padding: var(--spacing-2) var(--crewlet-chip-field-inset, var(--spacing-5));
|
|
11574
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
11575
|
+
}
|
|
11576
|
+
|
|
11577
|
+
.crewlet-chip-field--bare:has(.crewlet-chip-field__input:focus-visible) {
|
|
11578
|
+
outline: 2px solid transparent;
|
|
11579
|
+
outline-offset: -2px;
|
|
11580
|
+
box-shadow: inset 0 -2px 0 var(--color-focus);
|
|
11581
|
+
}
|
|
11582
|
+
|
|
11583
|
+
.crewlet-chip-field__prefix {
|
|
11584
|
+
flex: none;
|
|
11585
|
+
color: var(--color-text-secondary);
|
|
11586
|
+
}
|
|
11587
|
+
|
|
11588
|
+
/* The list lends its chips to the field's own line (ChipField.tsx spells its
|
|
11589
|
+
role out, which a contents box can lose). */
|
|
11590
|
+
.crewlet-chip-field__chips {
|
|
11591
|
+
display: contents;
|
|
11592
|
+
list-style: none;
|
|
11593
|
+
}
|
|
11594
|
+
|
|
11595
|
+
.crewlet-chip-field__chip {
|
|
11596
|
+
display: inline-flex;
|
|
11597
|
+
min-width: 0;
|
|
11598
|
+
max-width: 100%;
|
|
11599
|
+
}
|
|
11600
|
+
|
|
11601
|
+
.crewlet-chip-field__input {
|
|
11602
|
+
flex: 1;
|
|
11603
|
+
min-width: 120px;
|
|
11604
|
+
height: var(--size-control-md);
|
|
11605
|
+
box-sizing: border-box;
|
|
11606
|
+
margin: 0;
|
|
11607
|
+
padding: 0 var(--spacing-1);
|
|
11608
|
+
border: 0;
|
|
11609
|
+
background: transparent;
|
|
11610
|
+
color: inherit;
|
|
11611
|
+
font: inherit;
|
|
11612
|
+
outline: none;
|
|
11613
|
+
}
|
|
11614
|
+
|
|
11615
|
+
.crewlet-chip-field--bare .crewlet-chip-field__input {
|
|
11616
|
+
padding-inline: 0;
|
|
11617
|
+
}
|
|
11618
|
+
|
|
11619
|
+
.crewlet-chip-field__input::placeholder {
|
|
11620
|
+
color: var(--color-text-tertiary);
|
|
11621
|
+
opacity: 1;
|
|
11622
|
+
}
|
|
11623
|
+
|
|
11624
|
+
.crewlet-chip-field.is-disabled {
|
|
11625
|
+
opacity: 0.6;
|
|
11626
|
+
cursor: not-allowed;
|
|
11627
|
+
}
|
|
11628
|
+
|
|
11629
|
+
|
|
10449
11630
|
/* ChoiceButtons-T3GG6VLG.css */
|
|
10450
11631
|
/*
|
|
10451
11632
|
* One answer, sent with one press: a column of buttons as tall as a touch
|
|
@@ -12367,7 +13548,332 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12367
13548
|
}
|
|
12368
13549
|
|
|
12369
13550
|
|
|
12370
|
-
/*
|
|
13551
|
+
/* CompactNav-CU2AQXBC.css */
|
|
13552
|
+
/*
|
|
13553
|
+
* The compact rail: each place its glyph's tile over its name, in one column.
|
|
13554
|
+
*
|
|
13555
|
+
* A PLACE IS 48PX TALL: a 26px tile, its name under it and a breath. Fourteen
|
|
13556
|
+
* places, two rules, and the rail's head and foot stand in a 900px window, so
|
|
13557
|
+
* the column a reader folded the rail to see more of the page never scrolls
|
|
13558
|
+
* on a laptop.
|
|
13559
|
+
*
|
|
13560
|
+
* Tokens only. The tile's sizes are component variables, so a surface that
|
|
13561
|
+
* draws the compact rail at another width changes them in one place.
|
|
13562
|
+
*/
|
|
13563
|
+
|
|
13564
|
+
.crewlet-compact-nav {
|
|
13565
|
+
--crewlet-compact-nav-tile-width: 36px;
|
|
13566
|
+
--crewlet-compact-nav-tile-height: var(--size-control-sm);
|
|
13567
|
+
--crewlet-compact-nav-glyph: 17px;
|
|
13568
|
+
width: 100%;
|
|
13569
|
+
min-width: 0;
|
|
13570
|
+
}
|
|
13571
|
+
|
|
13572
|
+
.crewlet-compact-nav__list {
|
|
13573
|
+
display: flex;
|
|
13574
|
+
flex-direction: column;
|
|
13575
|
+
align-items: stretch;
|
|
13576
|
+
margin: 0;
|
|
13577
|
+
padding: 0 var(--spacing-1);
|
|
13578
|
+
list-style: none;
|
|
13579
|
+
}
|
|
13580
|
+
|
|
13581
|
+
.crewlet-compact-nav__entry {
|
|
13582
|
+
display: flex;
|
|
13583
|
+
min-width: 0;
|
|
13584
|
+
}
|
|
13585
|
+
|
|
13586
|
+
/* A place is a link or a button, and a folded group is a button: one look for
|
|
13587
|
+
all three. The entry itself draws nothing; the tile is what lifts. */
|
|
13588
|
+
.crewlet-compact-nav__item {
|
|
13589
|
+
display: flex;
|
|
13590
|
+
flex-direction: column;
|
|
13591
|
+
align-items: center;
|
|
13592
|
+
gap: calc(var(--spacing-1) / 2);
|
|
13593
|
+
width: 100%;
|
|
13594
|
+
min-width: 0;
|
|
13595
|
+
margin: 0;
|
|
13596
|
+
padding: calc(var(--spacing-1) - 1px) 0 var(--spacing-1);
|
|
13597
|
+
border: 0;
|
|
13598
|
+
border-radius: var(--radius-md);
|
|
13599
|
+
background: transparent;
|
|
13600
|
+
color: var(--color-text-secondary);
|
|
13601
|
+
font: inherit;
|
|
13602
|
+
text-decoration: none;
|
|
13603
|
+
cursor: pointer;
|
|
13604
|
+
}
|
|
13605
|
+
|
|
13606
|
+
/* The ring is drawn on the tile (below), not round the whole entry. The
|
|
13607
|
+
entry's own outline is transparent rather than none, so forced colours,
|
|
13608
|
+
which paint a transparent outline in the system's ink, still draw one. */
|
|
13609
|
+
.crewlet-compact-nav__item:focus {
|
|
13610
|
+
outline: 2px solid transparent;
|
|
13611
|
+
}
|
|
13612
|
+
|
|
13613
|
+
.crewlet-compact-nav__tile {
|
|
13614
|
+
position: relative;
|
|
13615
|
+
display: inline-flex;
|
|
13616
|
+
align-items: center;
|
|
13617
|
+
justify-content: center;
|
|
13618
|
+
flex: none;
|
|
13619
|
+
width: var(--crewlet-compact-nav-tile-width);
|
|
13620
|
+
height: var(--crewlet-compact-nav-tile-height);
|
|
13621
|
+
border-radius: var(--radius-md);
|
|
13622
|
+
transition:
|
|
13623
|
+
background var(--motion-duration-fast) var(--motion-easing-default),
|
|
13624
|
+
color var(--motion-duration-fast) var(--motion-easing-default);
|
|
13625
|
+
}
|
|
13626
|
+
|
|
13627
|
+
/* A step larger than the full rail's 14px glyph: in the compact rail the
|
|
13628
|
+
glyph is the place's name at a glance, and the word under it is the
|
|
13629
|
+
caption. */
|
|
13630
|
+
.crewlet-compact-nav__tile > .crewlet-glyph {
|
|
13631
|
+
width: var(--crewlet-compact-nav-glyph);
|
|
13632
|
+
height: var(--crewlet-compact-nav-glyph);
|
|
13633
|
+
}
|
|
13634
|
+
|
|
13635
|
+
.crewlet-compact-nav__item:hover .crewlet-compact-nav__tile,
|
|
13636
|
+
.crewlet-compact-nav__item[data-open] .crewlet-compact-nav__tile {
|
|
13637
|
+
background: var(--color-surface-hover);
|
|
13638
|
+
color: var(--color-text-primary);
|
|
13639
|
+
}
|
|
13640
|
+
|
|
13641
|
+
.crewlet-compact-nav__item:hover .crewlet-compact-nav__label,
|
|
13642
|
+
.crewlet-compact-nav__item[data-open] .crewlet-compact-nav__label {
|
|
13643
|
+
color: var(--color-text-primary);
|
|
13644
|
+
}
|
|
13645
|
+
|
|
13646
|
+
/*
|
|
13647
|
+
* WHERE THE READER IS: the full rail's own current row, drawn on the tile.
|
|
13648
|
+
* Raised, the plain hairline as an OUTLINE (forced colours keep outlines and
|
|
13649
|
+
* drop backgrounds), and the primary ink. After :hover, so the current tile
|
|
13650
|
+
* shows its lift rather than the overlay. A folded group's tile is current
|
|
13651
|
+
* (`aria-current="true"`) while one of its places is.
|
|
13652
|
+
*/
|
|
13653
|
+
.crewlet-compact-nav__item[aria-current] .crewlet-compact-nav__tile {
|
|
13654
|
+
background: var(--color-surface-elevated);
|
|
13655
|
+
outline: 1px solid var(--color-border-default);
|
|
13656
|
+
outline-offset: -1px;
|
|
13657
|
+
color: var(--color-text-primary);
|
|
13658
|
+
}
|
|
13659
|
+
|
|
13660
|
+
.crewlet-compact-nav__item[aria-current] .crewlet-compact-nav__label {
|
|
13661
|
+
color: var(--color-text-primary);
|
|
13662
|
+
font-weight: var(--font-weight-semibold);
|
|
13663
|
+
}
|
|
13664
|
+
|
|
13665
|
+
/* The ring is the tile's, after the current rule that draws its hairline on
|
|
13666
|
+
the same property, so a focused current tile draws the ring. */
|
|
13667
|
+
.crewlet-compact-nav__item:focus-visible .crewlet-compact-nav__tile {
|
|
13668
|
+
outline: 2px solid var(--color-focus);
|
|
13669
|
+
outline-offset: 0;
|
|
13670
|
+
}
|
|
13671
|
+
|
|
13672
|
+
.crewlet-compact-nav__label {
|
|
13673
|
+
max-width: 100%;
|
|
13674
|
+
box-sizing: border-box;
|
|
13675
|
+
padding: 0 calc(var(--spacing-1) / 2);
|
|
13676
|
+
overflow: hidden;
|
|
13677
|
+
color: var(--color-text-secondary);
|
|
13678
|
+
font-family: var(--font-family-sans);
|
|
13679
|
+
font-size: var(--font-size-2xs);
|
|
13680
|
+
font-weight: var(--font-weight-medium);
|
|
13681
|
+
line-height: var(--font-line-height-tight);
|
|
13682
|
+
text-align: center;
|
|
13683
|
+
text-overflow: ellipsis;
|
|
13684
|
+
white-space: nowrap;
|
|
13685
|
+
}
|
|
13686
|
+
|
|
13687
|
+
/* A place the reader holds no access to keeps its name and its key, in the
|
|
13688
|
+
quiet ink, as a locked group's rows do in the full rail. */
|
|
13689
|
+
.crewlet-compact-nav__item--locked:not([aria-current]):not(:hover) .crewlet-compact-nav__label,
|
|
13690
|
+
.crewlet-compact-nav__item--locked:not([aria-current]):not(:hover) .crewlet-compact-nav__tile {
|
|
13691
|
+
color: var(--color-text-tertiary);
|
|
13692
|
+
}
|
|
13693
|
+
|
|
13694
|
+
/*
|
|
13695
|
+
* THE FIGURE RIDES THE TILE'S TOP END CORNER, cut out of the rail by a ring of
|
|
13696
|
+
* the rail's own ground, so it reads apart from the glyph under it. It is the
|
|
13697
|
+
* one count badge size the whole chrome draws (`--size-badge`), the accent
|
|
13698
|
+
* fill where it is waiting on the reader and the raised ground where it is
|
|
13699
|
+
* only a tally.
|
|
13700
|
+
*/
|
|
13701
|
+
.crewlet-compact-nav__figure {
|
|
13702
|
+
position: absolute;
|
|
13703
|
+
top: calc(var(--spacing-1) * -1 - 1px);
|
|
13704
|
+
right: calc(var(--spacing-2) * -1 + 1px);
|
|
13705
|
+
display: inline-flex;
|
|
13706
|
+
align-items: center;
|
|
13707
|
+
justify-content: center;
|
|
13708
|
+
min-width: var(--size-badge);
|
|
13709
|
+
height: var(--size-badge);
|
|
13710
|
+
box-sizing: border-box;
|
|
13711
|
+
padding: 0 var(--size-badge-pad);
|
|
13712
|
+
border: 2px solid var(--color-surface-frame);
|
|
13713
|
+
border-radius: var(--radius-pill);
|
|
13714
|
+
background: var(--color-surface-elevated);
|
|
13715
|
+
color: var(--color-text-secondary);
|
|
13716
|
+
font-family: var(--font-family-sans);
|
|
13717
|
+
font-size: var(--font-size-badge);
|
|
13718
|
+
font-weight: var(--font-weight-semibold);
|
|
13719
|
+
font-variant-numeric: tabular-nums;
|
|
13720
|
+
line-height: 1;
|
|
13721
|
+
}
|
|
13722
|
+
|
|
13723
|
+
.crewlet-compact-nav__figure--badge {
|
|
13724
|
+
background: var(--color-brand-accent);
|
|
13725
|
+
color: var(--color-text-on-accent);
|
|
13726
|
+
}
|
|
13727
|
+
|
|
13728
|
+
/* A short rule between two runs of tiles, centred in the column. */
|
|
13729
|
+
.crewlet-compact-nav__separator {
|
|
13730
|
+
display: flex;
|
|
13731
|
+
justify-content: center;
|
|
13732
|
+
padding: calc(var(--spacing-1) + var(--spacing-1) / 2) 0;
|
|
13733
|
+
}
|
|
13734
|
+
|
|
13735
|
+
.crewlet-compact-nav__rule {
|
|
13736
|
+
width: var(--spacing-6);
|
|
13737
|
+
height: 1px;
|
|
13738
|
+
background: var(--color-border-default);
|
|
13739
|
+
}
|
|
13740
|
+
|
|
13741
|
+
/*
|
|
13742
|
+
* THE FLYOUT: a folded group's places beside the rail, on the popover's rung.
|
|
13743
|
+
* Its rows are the full rail's rows at the menu's step: the glyph, the name,
|
|
13744
|
+
* and the figure at the end, so the places read as they do unfolded.
|
|
13745
|
+
*/
|
|
13746
|
+
.crewlet-compact-nav__flyout {
|
|
13747
|
+
position: fixed;
|
|
13748
|
+
display: flex;
|
|
13749
|
+
flex-direction: column;
|
|
13750
|
+
gap: 1px;
|
|
13751
|
+
min-width: 208px;
|
|
13752
|
+
max-width: min(320px, calc(100vw - var(--spacing-4)));
|
|
13753
|
+
box-sizing: border-box;
|
|
13754
|
+
padding: var(--spacing-1);
|
|
13755
|
+
border: 1px solid var(--color-border-default);
|
|
13756
|
+
border-radius: var(--radius-lg);
|
|
13757
|
+
background: var(--color-surface-elevated);
|
|
13758
|
+
box-shadow: var(--shadow-lg);
|
|
13759
|
+
font-family: var(--font-family-sans);
|
|
13760
|
+
animation: crewlet-compact-nav-flyout-in var(--motion-duration-fast) var(--motion-easing-out);
|
|
13761
|
+
}
|
|
13762
|
+
|
|
13763
|
+
/* Inside a LayerHost the coordinates are the host's own, so the flyout is
|
|
13764
|
+
absolute within it rather than fixed against the window. */
|
|
13765
|
+
.crewlet-compact-nav__flyout--in-host {
|
|
13766
|
+
position: absolute;
|
|
13767
|
+
}
|
|
13768
|
+
|
|
13769
|
+
@keyframes crewlet-compact-nav-flyout-in {
|
|
13770
|
+
from {
|
|
13771
|
+
opacity: 0;
|
|
13772
|
+
transform: translateX(calc(var(--spacing-1) * -1));
|
|
13773
|
+
}
|
|
13774
|
+
}
|
|
13775
|
+
|
|
13776
|
+
.crewlet-compact-nav__flyout-head {
|
|
13777
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
13778
|
+
color: var(--color-text-secondary);
|
|
13779
|
+
font-size: var(--font-size-xs);
|
|
13780
|
+
font-weight: var(--font-weight-semibold);
|
|
13781
|
+
line-height: var(--font-line-height-tight);
|
|
13782
|
+
}
|
|
13783
|
+
|
|
13784
|
+
/* A router's link is drawn by the caller; its wrapper stays out of the box tree. */
|
|
13785
|
+
.crewlet-compact-nav__link-slot {
|
|
13786
|
+
display: contents;
|
|
13787
|
+
}
|
|
13788
|
+
|
|
13789
|
+
.crewlet-compact-nav__link {
|
|
13790
|
+
display: flex;
|
|
13791
|
+
align-items: center;
|
|
13792
|
+
gap: var(--spacing-2);
|
|
13793
|
+
min-width: 0;
|
|
13794
|
+
height: var(--size-control-md);
|
|
13795
|
+
padding: 0 var(--spacing-2);
|
|
13796
|
+
border-radius: var(--radius-md);
|
|
13797
|
+
color: var(--color-text-secondary);
|
|
13798
|
+
font-size: var(--font-size-sm);
|
|
13799
|
+
text-decoration: none;
|
|
13800
|
+
outline: none;
|
|
13801
|
+
transition:
|
|
13802
|
+
background var(--motion-duration-fast) var(--motion-easing-default),
|
|
13803
|
+
color var(--motion-duration-fast) var(--motion-easing-default);
|
|
13804
|
+
}
|
|
13805
|
+
|
|
13806
|
+
.crewlet-compact-nav__link:hover,
|
|
13807
|
+
.crewlet-compact-nav__link:focus-visible {
|
|
13808
|
+
background: var(--color-surface-hover);
|
|
13809
|
+
color: var(--color-text-primary);
|
|
13810
|
+
}
|
|
13811
|
+
|
|
13812
|
+
/* The place the reader is on: the selected fill, the primary ink, a step
|
|
13813
|
+
heavier. Declared after the hover so the selected fill holds under it. */
|
|
13814
|
+
.crewlet-compact-nav__link[aria-current='page'] {
|
|
13815
|
+
background: var(--color-surface-selected);
|
|
13816
|
+
color: var(--color-text-primary);
|
|
13817
|
+
font-weight: var(--font-weight-semibold);
|
|
13818
|
+
}
|
|
13819
|
+
|
|
13820
|
+
.crewlet-compact-nav__link:focus-visible {
|
|
13821
|
+
outline: 2px solid var(--color-focus);
|
|
13822
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
13823
|
+
}
|
|
13824
|
+
|
|
13825
|
+
.crewlet-compact-nav__link--locked:not([aria-current]):not(:hover):not(:focus-visible) {
|
|
13826
|
+
color: var(--color-text-tertiary);
|
|
13827
|
+
}
|
|
13828
|
+
|
|
13829
|
+
.crewlet-compact-nav__link-icon {
|
|
13830
|
+
display: inline-flex;
|
|
13831
|
+
flex: none;
|
|
13832
|
+
}
|
|
13833
|
+
|
|
13834
|
+
.crewlet-compact-nav__link-label {
|
|
13835
|
+
flex: 1 1 auto;
|
|
13836
|
+
min-width: 0;
|
|
13837
|
+
overflow: hidden;
|
|
13838
|
+
text-overflow: ellipsis;
|
|
13839
|
+
white-space: nowrap;
|
|
13840
|
+
}
|
|
13841
|
+
|
|
13842
|
+
.crewlet-compact-nav__link-figure {
|
|
13843
|
+
display: inline-flex;
|
|
13844
|
+
align-items: center;
|
|
13845
|
+
justify-content: center;
|
|
13846
|
+
flex: none;
|
|
13847
|
+
min-width: var(--size-badge);
|
|
13848
|
+
height: var(--size-badge);
|
|
13849
|
+
box-sizing: border-box;
|
|
13850
|
+
padding: 0 var(--size-badge-pad);
|
|
13851
|
+
border-radius: var(--radius-pill);
|
|
13852
|
+
color: var(--color-text-tertiary);
|
|
13853
|
+
font-size: var(--font-size-badge);
|
|
13854
|
+
font-weight: var(--font-weight-semibold);
|
|
13855
|
+
font-variant-numeric: tabular-nums;
|
|
13856
|
+
line-height: 1;
|
|
13857
|
+
}
|
|
13858
|
+
|
|
13859
|
+
.crewlet-compact-nav__link-figure--badge {
|
|
13860
|
+
background: var(--color-brand-accent);
|
|
13861
|
+
color: var(--color-text-on-accent);
|
|
13862
|
+
}
|
|
13863
|
+
|
|
13864
|
+
@media (prefers-reduced-motion: reduce) {
|
|
13865
|
+
.crewlet-compact-nav__tile,
|
|
13866
|
+
.crewlet-compact-nav__link {
|
|
13867
|
+
transition: none;
|
|
13868
|
+
}
|
|
13869
|
+
|
|
13870
|
+
.crewlet-compact-nav__flyout {
|
|
13871
|
+
animation: none;
|
|
13872
|
+
}
|
|
13873
|
+
}
|
|
13874
|
+
|
|
13875
|
+
|
|
13876
|
+
/* Composer-ZEGHEAFE.css */
|
|
12371
13877
|
/*
|
|
12372
13878
|
* A message written in place: the field and its footer strip in one box. The
|
|
12373
13879
|
* BOX takes the focus ring every field in the package draws (see Input.css):
|
|
@@ -12506,6 +14012,32 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12506
14012
|
padding: var(--spacing-2) var(--spacing-3) 0;
|
|
12507
14013
|
}
|
|
12508
14014
|
|
|
14015
|
+
/*
|
|
14016
|
+
* THE FORMATTING ROW, along the box's top on the field's own inset less the
|
|
14017
|
+
* small tool's own room round its glyph, so the first glyph starts on the
|
|
14018
|
+
* words' line. It belongs to the field rather than to a strip of its own: no
|
|
14019
|
+
* rule under it.
|
|
14020
|
+
*/
|
|
14021
|
+
.crewlet-composer__toolbar {
|
|
14022
|
+
display: flex;
|
|
14023
|
+
align-items: center;
|
|
14024
|
+
min-width: 0;
|
|
14025
|
+
padding: var(--spacing-1) var(--spacing-1) 0 calc(var(--spacing-3) - (var(--size-control-sm) - var(--font-size-xs)) / 2);
|
|
14026
|
+
}
|
|
14027
|
+
|
|
14028
|
+
/*
|
|
14029
|
+
* THE TOOLS AT THE FOOTER'S START, a tight row whose first glyph starts on
|
|
14030
|
+
* the words' line, as the formatting row's does. The spacer after them puts
|
|
14031
|
+
* the actions at the end.
|
|
14032
|
+
*/
|
|
14033
|
+
.crewlet-composer__tools {
|
|
14034
|
+
display: flex;
|
|
14035
|
+
align-items: center;
|
|
14036
|
+
gap: 2px;
|
|
14037
|
+
min-width: 0;
|
|
14038
|
+
margin-inline-start: calc(-1 * (var(--size-control-sm) - var(--font-size-xs)) / 2);
|
|
14039
|
+
}
|
|
14040
|
+
|
|
12509
14041
|
/*
|
|
12510
14042
|
* DISABLED, AS A FIELD IS: the whole box at the disabled field's 0.6 and the
|
|
12511
14043
|
* not-allowed cursor, so it no longer reads as somewhere to type. Faded once:
|
|
@@ -12583,6 +14115,51 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12583
14115
|
}
|
|
12584
14116
|
}
|
|
12585
14117
|
|
|
14118
|
+
/*
|
|
14119
|
+
* A CONVERSATION'S MESSAGE BOX (`appearance="chat"`), on the transcript's own
|
|
14120
|
+
* scale (ChatMessage/ChatScale.css): the large corner on the transcript's
|
|
14121
|
+
* ground with the row wash laid over it, a step lighter than the list, and a
|
|
14122
|
+
* small shadow, so the box sits just above the messages, inside the edge
|
|
14123
|
+
* scale's strong step, the edge a field draws. The words are set at the
|
|
14124
|
+
* transcript's size on one line to start. The footer belongs to the field
|
|
14125
|
+
* rather than standing as a strip under it: no rule and no ground of its own.
|
|
14126
|
+
*/
|
|
14127
|
+
.crewlet-composer--chat {
|
|
14128
|
+
border-color: var(--color-edge-strong);
|
|
14129
|
+
background:
|
|
14130
|
+
linear-gradient(var(--color-fill-row), var(--color-fill-row)),
|
|
14131
|
+
var(--crewlet-chat-ground);
|
|
14132
|
+
box-shadow: var(--shadow-xs);
|
|
14133
|
+
}
|
|
14134
|
+
|
|
14135
|
+
.crewlet-composer--chat .crewlet-composer__field {
|
|
14136
|
+
min-height: 0;
|
|
14137
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
14138
|
+
font-size: var(--crewlet-chat-text);
|
|
14139
|
+
line-height: var(--crewlet-chat-line);
|
|
14140
|
+
}
|
|
14141
|
+
|
|
14142
|
+
.crewlet-composer--chat .crewlet-composer__footer {
|
|
14143
|
+
gap: 2px;
|
|
14144
|
+
padding: var(--spacing-1);
|
|
14145
|
+
padding-inline-start: var(--spacing-3);
|
|
14146
|
+
border-top: 0;
|
|
14147
|
+
background: transparent;
|
|
14148
|
+
}
|
|
14149
|
+
|
|
14150
|
+
/* A tool whose menu or picker is open reads as held down. */
|
|
14151
|
+
.crewlet-composer--chat .crewlet-composer__tools [aria-expanded='true'] {
|
|
14152
|
+
background: var(--color-surface-pressed);
|
|
14153
|
+
color: var(--color-text-primary);
|
|
14154
|
+
}
|
|
14155
|
+
|
|
14156
|
+
/* The formatting row's glyphs rest in the tertiary ink while the box is not
|
|
14157
|
+
in use, so the row reads as part of the field rather than as a toolbar
|
|
14158
|
+
competing with the conversation, and take their own ink once it is. */
|
|
14159
|
+
.crewlet-composer--chat:not(:focus-within) .crewlet-composer__toolbar :is(button, [role='button']):not(:hover) {
|
|
14160
|
+
color: var(--color-text-tertiary);
|
|
14161
|
+
}
|
|
14162
|
+
|
|
12586
14163
|
|
|
12587
14164
|
/* ConflictNote-OP64JJ6T.css */
|
|
12588
14165
|
/* ConflictNote: a refused write's sentence in the danger ink, with its glyph
|
|
@@ -12933,7 +14510,7 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12933
14510
|
}
|
|
12934
14511
|
|
|
12935
14512
|
|
|
12936
|
-
/* Count-
|
|
14513
|
+
/* Count-2HXBBYPO.css */
|
|
12937
14514
|
/*
|
|
12938
14515
|
* The count pill. One neutral look, deliberately: see the component doc for
|
|
12939
14516
|
* why a count is never tinted.
|
|
@@ -12960,6 +14537,25 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12960
14537
|
line-height: round(nearest, calc(var(--font-line-height-body) * 1em), 1px);
|
|
12961
14538
|
}
|
|
12962
14539
|
|
|
14540
|
+
/*
|
|
14541
|
+
* WHAT WAITS ON THE READER (`tone="attention"`): the accent pill every count
|
|
14542
|
+
* of that kind is drawn as, wherever it stands, at the badge's own size: 16px
|
|
14543
|
+
* tall and at least as wide, its figure at the badge step in the semibold
|
|
14544
|
+
* weight. At 18px with an 11px figure such a badge read louder than the name
|
|
14545
|
+
* beside it.
|
|
14546
|
+
*/
|
|
14547
|
+
.crewlet-count--attention {
|
|
14548
|
+
box-sizing: border-box;
|
|
14549
|
+
min-width: var(--size-badge);
|
|
14550
|
+
height: var(--size-badge);
|
|
14551
|
+
padding: 0 var(--size-badge-pad);
|
|
14552
|
+
background: var(--color-brand-accent);
|
|
14553
|
+
color: var(--color-text-on-accent);
|
|
14554
|
+
font-size: var(--font-size-badge);
|
|
14555
|
+
font-weight: var(--font-weight-semibold);
|
|
14556
|
+
line-height: 1;
|
|
14557
|
+
}
|
|
14558
|
+
|
|
12963
14559
|
|
|
12964
14560
|
/* CursorFlag-AJQJBUGY.css */
|
|
12965
14561
|
/*
|
|
@@ -18088,6 +19684,70 @@ svg.crewlet-datetime__chevron {
|
|
|
18088
19684
|
}
|
|
18089
19685
|
|
|
18090
19686
|
|
|
19687
|
+
/* DockColumn-SMJCXHS4.css */
|
|
19688
|
+
/*
|
|
19689
|
+
* A column docked beside the content (DockColumn.tsx).
|
|
19690
|
+
*
|
|
19691
|
+
* THE COLUMN EASES ITS WIDTH between none and its panel's, on the slow step
|
|
19692
|
+
* with the emphasized curve: the motion the application rail folds by,
|
|
19693
|
+
* so a column of the frame and a column of a screen open and close as one
|
|
19694
|
+
* movement. The host gives it an `auto` track, so its width is the track.
|
|
19695
|
+
* Clipped rather than hidden, so it is never a scroll container a focus or a
|
|
19696
|
+
* scrollIntoView could scroll.
|
|
19697
|
+
*
|
|
19698
|
+
* THE PANEL KEEPS ITS WIDTH and is held to the column's edge that faces the
|
|
19699
|
+
* content: before the content (`start`) it is held to the column's end, so
|
|
19700
|
+
* the moving edge uncovers it from the start edge, and after the content
|
|
19701
|
+
* (`end`) the other way round.
|
|
19702
|
+
*
|
|
19703
|
+
* Tokens only. The width is the component's own variable, set from the
|
|
19704
|
+
* `width` prop, so the column and the panel read one value.
|
|
19705
|
+
*/
|
|
19706
|
+
|
|
19707
|
+
.crewlet-dock-column {
|
|
19708
|
+
display: flex;
|
|
19709
|
+
justify-content: flex-end;
|
|
19710
|
+
width: 0;
|
|
19711
|
+
min-width: 0;
|
|
19712
|
+
min-height: 0;
|
|
19713
|
+
overflow: clip;
|
|
19714
|
+
transition: width var(--motion-duration-slow) var(--motion-easing-emphasized);
|
|
19715
|
+
}
|
|
19716
|
+
|
|
19717
|
+
.crewlet-dock-column[data-side='end'] {
|
|
19718
|
+
justify-content: flex-start;
|
|
19719
|
+
}
|
|
19720
|
+
|
|
19721
|
+
.crewlet-dock-column[data-open] {
|
|
19722
|
+
width: var(--crewlet-dock-column-width);
|
|
19723
|
+
}
|
|
19724
|
+
|
|
19725
|
+
.crewlet-dock-column__panel {
|
|
19726
|
+
display: flex;
|
|
19727
|
+
flex: none;
|
|
19728
|
+
flex-direction: column;
|
|
19729
|
+
box-sizing: border-box;
|
|
19730
|
+
width: var(--crewlet-dock-column-width);
|
|
19731
|
+
min-height: 0;
|
|
19732
|
+
background: var(--crewlet-dock-column-ground, transparent);
|
|
19733
|
+
}
|
|
19734
|
+
|
|
19735
|
+
/* The hairline on the panel's edge that faces the content. */
|
|
19736
|
+
.crewlet-dock-column--divider[data-side='start'] > .crewlet-dock-column__panel {
|
|
19737
|
+
border-inline-end: 1px solid var(--color-border-default);
|
|
19738
|
+
}
|
|
19739
|
+
|
|
19740
|
+
.crewlet-dock-column--divider[data-side='end'] > .crewlet-dock-column__panel {
|
|
19741
|
+
border-inline-start: 1px solid var(--color-border-default);
|
|
19742
|
+
}
|
|
19743
|
+
|
|
19744
|
+
@media (prefers-reduced-motion: reduce) {
|
|
19745
|
+
.crewlet-dock-column {
|
|
19746
|
+
transition: none;
|
|
19747
|
+
}
|
|
19748
|
+
}
|
|
19749
|
+
|
|
19750
|
+
|
|
18091
19751
|
/* Document-M6JYGLWV.css */
|
|
18092
19752
|
/*
|
|
18093
19753
|
* Rendered markdown, set as a document (Document.tsx).
|
|
@@ -18663,6 +20323,72 @@ svg.crewlet-datetime__chevron {
|
|
|
18663
20323
|
}
|
|
18664
20324
|
|
|
18665
20325
|
|
|
20326
|
+
/* EmojiPicker-FMWYN2WX.css */
|
|
20327
|
+
/*
|
|
20328
|
+
* A searchable grid of emoji in a popover: the field, then each group under
|
|
20329
|
+
* its quiet heading, eight to a row, in a scroller of its own.
|
|
20330
|
+
*/
|
|
20331
|
+
|
|
20332
|
+
.crewlet-emoji-picker__body {
|
|
20333
|
+
display: flex;
|
|
20334
|
+
flex-direction: column;
|
|
20335
|
+
gap: var(--spacing-2);
|
|
20336
|
+
width: 296px;
|
|
20337
|
+
max-width: 100%;
|
|
20338
|
+
box-sizing: border-box;
|
|
20339
|
+
padding: var(--spacing-2);
|
|
20340
|
+
}
|
|
20341
|
+
|
|
20342
|
+
.crewlet-emoji-picker__scroll {
|
|
20343
|
+
max-height: 240px;
|
|
20344
|
+
overflow-y: auto;
|
|
20345
|
+
overscroll-behavior: contain;
|
|
20346
|
+
}
|
|
20347
|
+
|
|
20348
|
+
/* A group's heading, in the meta register at the regular weight. */
|
|
20349
|
+
.crewlet-emoji-picker__group {
|
|
20350
|
+
padding: var(--spacing-2) var(--spacing-1) var(--spacing-1);
|
|
20351
|
+
color: var(--color-text-tertiary);
|
|
20352
|
+
font-size: var(--font-size-2xs);
|
|
20353
|
+
font-weight: var(--font-weight-regular);
|
|
20354
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
20355
|
+
text-transform: uppercase;
|
|
20356
|
+
}
|
|
20357
|
+
|
|
20358
|
+
.crewlet-emoji-picker__grid {
|
|
20359
|
+
display: grid;
|
|
20360
|
+
grid-template-columns: repeat(var(--crewlet-emoji-picker-columns), minmax(0, 1fr));
|
|
20361
|
+
gap: 2px;
|
|
20362
|
+
}
|
|
20363
|
+
|
|
20364
|
+
.crewlet-emoji-picker__cell {
|
|
20365
|
+
aspect-ratio: 1;
|
|
20366
|
+
padding: 0;
|
|
20367
|
+
border: 0;
|
|
20368
|
+
border-radius: var(--radius-sm);
|
|
20369
|
+
background: transparent;
|
|
20370
|
+
font-size: var(--font-size-lg);
|
|
20371
|
+
line-height: 1;
|
|
20372
|
+
cursor: pointer;
|
|
20373
|
+
}
|
|
20374
|
+
|
|
20375
|
+
.crewlet-emoji-picker__cell:hover {
|
|
20376
|
+
background: var(--color-surface-hover);
|
|
20377
|
+
}
|
|
20378
|
+
|
|
20379
|
+
.crewlet-emoji-picker__cell:focus-visible {
|
|
20380
|
+
background: var(--color-surface-hover);
|
|
20381
|
+
outline: 2px solid var(--color-focus);
|
|
20382
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
20383
|
+
}
|
|
20384
|
+
|
|
20385
|
+
.crewlet-emoji-picker__none {
|
|
20386
|
+
margin: var(--spacing-3) var(--spacing-1);
|
|
20387
|
+
color: var(--color-text-tertiary);
|
|
20388
|
+
font-size: var(--font-size-sm);
|
|
20389
|
+
}
|
|
20390
|
+
|
|
20391
|
+
|
|
18666
20392
|
/* EmptyState-7L4UAQBX.css */
|
|
18667
20393
|
/*
|
|
18668
20394
|
* The empty state.
|
|
@@ -20379,7 +22105,7 @@ a.crewlet-icon-btn {
|
|
|
20379
22105
|
.crewlet-icon-tile--blue { --crewlet-icon-tile-fill: var(--color-node-blue-fill); --crewlet-icon-tile-ink: var(--color-node-blue-ink); }
|
|
20380
22106
|
|
|
20381
22107
|
|
|
20382
|
-
/* ImageUpload-
|
|
22108
|
+
/* ImageUpload-IFXZROFZ.css */
|
|
20383
22109
|
/*
|
|
20384
22110
|
* ImageUpload, the click-to-upload affordance built on Avatar.
|
|
20385
22111
|
*
|
|
@@ -20426,34 +22152,16 @@ a.crewlet-icon-btn {
|
|
|
20426
22152
|
cursor: pointer;
|
|
20427
22153
|
}
|
|
20428
22154
|
|
|
20429
|
-
/* The kind modifiers keep the trigger, the overlay and the Avatar outlines in
|
|
20430
|
-
step. A person's picture is a circle. */
|
|
20431
|
-
.crewlet-image-upload--human .crewlet-image-upload__trigger,
|
|
20432
|
-
.crewlet-image-upload--human .crewlet-image-upload__overlay {
|
|
20433
|
-
border-radius: var(--radius-circle);
|
|
20434
|
-
}
|
|
20435
|
-
|
|
20436
22155
|
/* THE SAME CORNER THE PICTURE INSIDE TAKES, which is why it is a variable
|
|
20437
|
-
rather than a step: Avatar moves
|
|
20438
|
-
|
|
20439
|
-
|
|
20440
|
-
|
|
20441
|
-
.crewlet-image-
|
|
22156
|
+
rather than a step: Avatar moves a face's corner with its box, so a trigger
|
|
22157
|
+
pinned to one step is rounder or squarer than the face under it at every
|
|
22158
|
+
size but one, and the face's corners show through the overlay. Every face
|
|
22159
|
+
is one shape, a person's and an agent's alike, so one rule serves both. */
|
|
22160
|
+
.crewlet-image-upload__trigger,
|
|
22161
|
+
.crewlet-image-upload__overlay {
|
|
20442
22162
|
border-radius: var(--crewlet-image-upload-corner);
|
|
20443
22163
|
}
|
|
20444
22164
|
|
|
20445
|
-
/* AND THE SAME SQUIRCLE, where the browser draws one, for the same reason:
|
|
20446
|
-
Avatar.css states why its squircle is a whole one at the circle token, and
|
|
20447
|
-
this is that rule for the two frames over the picture. The suite holds the
|
|
20448
|
-
two blocks to one declaration list. */
|
|
20449
|
-
@supports (corner-shape: squircle) {
|
|
20450
|
-
.crewlet-image-upload--agent .crewlet-image-upload__trigger,
|
|
20451
|
-
.crewlet-image-upload--agent .crewlet-image-upload__overlay {
|
|
20452
|
-
corner-shape: squircle;
|
|
20453
|
-
border-radius: var(--radius-circle);
|
|
20454
|
-
}
|
|
20455
|
-
}
|
|
20456
|
-
|
|
20457
22165
|
.crewlet-image-upload__trigger:disabled {
|
|
20458
22166
|
cursor: default;
|
|
20459
22167
|
}
|
|
@@ -20552,19 +22260,6 @@ a.crewlet-icon-btn {
|
|
|
20552
22260
|
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
20553
22261
|
}
|
|
20554
22262
|
|
|
20555
|
-
/*
|
|
20556
|
-
* ON A PERSON'S CIRCLE THE BADGE SITS ON THE EDGE, where the circle crosses
|
|
20557
|
-
* its own diagonal: (1 - 1/sqrt(2)) / 2 of the size, 0.1464, in from each
|
|
20558
|
-
* side, less half the 24px badge. The six pixels out above are the agent
|
|
20559
|
-
* tile's, whose squircle corner reaches that far; a circle turns away sooner,
|
|
20560
|
-
* and at the default 80px the badge's middle stood 8px off the picture, so
|
|
20561
|
-
* the badge floated beside it rather than being pinned to it.
|
|
20562
|
-
*/
|
|
20563
|
-
.crewlet-image-upload--human .crewlet-image-upload__remove {
|
|
20564
|
-
top: calc(var(--crewlet-image-upload-size) * 0.1464 - 12px);
|
|
20565
|
-
right: calc(var(--crewlet-image-upload-size) * 0.1464 - 12px);
|
|
20566
|
-
}
|
|
20567
|
-
|
|
20568
22263
|
.crewlet-image-upload:hover .crewlet-image-upload__remove,
|
|
20569
22264
|
.crewlet-image-upload__remove:focus-visible {
|
|
20570
22265
|
opacity: 1;
|
|
@@ -22731,6 +24426,164 @@ a.crewlet-icon-btn {
|
|
|
22731
24426
|
}
|
|
22732
24427
|
|
|
22733
24428
|
|
|
24429
|
+
/* LinkCard-5I4MYU6I.css */
|
|
24430
|
+
/*
|
|
24431
|
+
* LinkCard: what a link points at, unfurled under its message.
|
|
24432
|
+
*
|
|
24433
|
+
* AN UNFURL, NOT A CARD. No box and no fill: a slim bar on the left in the
|
|
24434
|
+
* status's line colour (the medium edge with none), and the lines beside it
|
|
24435
|
+
* in the dashboard's own type (the title in the primary ink, the small meta
|
|
24436
|
+
* under it), so a preview reads as part of its message. One width for every
|
|
24437
|
+
* preview (ChatScale.css), so a stack of them shares both edges.
|
|
24438
|
+
*/
|
|
24439
|
+
.crewlet-link-card {
|
|
24440
|
+
--crewlet-link-card-bar: 3px;
|
|
24441
|
+
--crewlet-link-card-tone: var(--color-edge-medium);
|
|
24442
|
+
--crewlet-link-card-dot: var(--color-text-tertiary);
|
|
24443
|
+
position: relative;
|
|
24444
|
+
display: flex;
|
|
24445
|
+
flex-direction: column;
|
|
24446
|
+
align-items: flex-start;
|
|
24447
|
+
gap: 2px;
|
|
24448
|
+
width: min(100%, var(--crewlet-chat-card));
|
|
24449
|
+
box-sizing: border-box;
|
|
24450
|
+
padding: 2px 0 2px calc(var(--crewlet-link-card-bar) + var(--spacing-3));
|
|
24451
|
+
border-radius: var(--radius-xs);
|
|
24452
|
+
color: var(--color-text-secondary);
|
|
24453
|
+
font-size: var(--font-size-xs);
|
|
24454
|
+
line-height: var(--font-line-height-snug);
|
|
24455
|
+
text-decoration: none;
|
|
24456
|
+
}
|
|
24457
|
+
|
|
24458
|
+
.crewlet-link-card::before {
|
|
24459
|
+
content: '';
|
|
24460
|
+
position: absolute;
|
|
24461
|
+
inset-block: 0;
|
|
24462
|
+
left: 0;
|
|
24463
|
+
width: var(--crewlet-link-card-bar);
|
|
24464
|
+
border-radius: var(--radius-pill);
|
|
24465
|
+
background: var(--crewlet-link-card-tone);
|
|
24466
|
+
}
|
|
24467
|
+
|
|
24468
|
+
/* The bar takes the tone's line colour; the status dot, small enough to
|
|
24469
|
+
carry it, the tone's full colour, so the status reads in both modes. */
|
|
24470
|
+
.crewlet-link-card--info {
|
|
24471
|
+
--crewlet-link-card-tone: var(--color-feedback-info-line);
|
|
24472
|
+
--crewlet-link-card-dot: var(--color-feedback-info);
|
|
24473
|
+
}
|
|
24474
|
+
|
|
24475
|
+
.crewlet-link-card--success {
|
|
24476
|
+
--crewlet-link-card-tone: var(--color-feedback-success-line);
|
|
24477
|
+
--crewlet-link-card-dot: var(--color-feedback-success);
|
|
24478
|
+
}
|
|
24479
|
+
|
|
24480
|
+
.crewlet-link-card--warning {
|
|
24481
|
+
--crewlet-link-card-tone: var(--color-feedback-warning-line);
|
|
24482
|
+
--crewlet-link-card-dot: var(--color-feedback-warning);
|
|
24483
|
+
}
|
|
24484
|
+
|
|
24485
|
+
.crewlet-link-card--danger {
|
|
24486
|
+
--crewlet-link-card-tone: var(--color-feedback-danger-line);
|
|
24487
|
+
--crewlet-link-card-dot: var(--color-feedback-danger);
|
|
24488
|
+
}
|
|
24489
|
+
|
|
24490
|
+
/* No box to ring over: the ring stands off the preview's words. */
|
|
24491
|
+
.crewlet-link-card:focus-visible {
|
|
24492
|
+
outline: 2px solid var(--color-focus);
|
|
24493
|
+
outline-offset: 2px;
|
|
24494
|
+
}
|
|
24495
|
+
|
|
24496
|
+
/* The app it comes from: its mark and its name, small and quiet. */
|
|
24497
|
+
.crewlet-link-card__source {
|
|
24498
|
+
display: inline-flex;
|
|
24499
|
+
align-items: center;
|
|
24500
|
+
gap: var(--spacing-1);
|
|
24501
|
+
}
|
|
24502
|
+
|
|
24503
|
+
.crewlet-link-card__mark,
|
|
24504
|
+
.crewlet-link-card__face {
|
|
24505
|
+
display: inline-flex;
|
|
24506
|
+
flex: none;
|
|
24507
|
+
}
|
|
24508
|
+
|
|
24509
|
+
/* The title in the primary ink at the regular weight, two lines at most;
|
|
24510
|
+
under the pointer it takes the accent ink and an underline. */
|
|
24511
|
+
.crewlet-link-card__title {
|
|
24512
|
+
display: -webkit-box;
|
|
24513
|
+
max-width: 100%;
|
|
24514
|
+
overflow: hidden;
|
|
24515
|
+
-webkit-box-orient: vertical;
|
|
24516
|
+
-webkit-line-clamp: 2;
|
|
24517
|
+
color: var(--color-text-primary);
|
|
24518
|
+
font-size: var(--font-size-compact);
|
|
24519
|
+
font-weight: var(--font-weight-regular);
|
|
24520
|
+
overflow-wrap: anywhere;
|
|
24521
|
+
}
|
|
24522
|
+
|
|
24523
|
+
/* THE TITLE ALONE IS UNDERLINED. The document's base underlines every link
|
|
24524
|
+
under the pointer, and an underline on the link runs through all of its
|
|
24525
|
+
lines (the source, the details, the owner), which no line inside can
|
|
24526
|
+
take off again. */
|
|
24527
|
+
a.crewlet-link-card:hover {
|
|
24528
|
+
text-decoration: none;
|
|
24529
|
+
}
|
|
24530
|
+
|
|
24531
|
+
a.crewlet-link-card:hover .crewlet-link-card__title {
|
|
24532
|
+
color: var(--color-brand-accent-ink);
|
|
24533
|
+
text-decoration: underline;
|
|
24534
|
+
text-underline-offset: 2px;
|
|
24535
|
+
}
|
|
24536
|
+
|
|
24537
|
+
.crewlet-link-card__code {
|
|
24538
|
+
color: var(--color-text-secondary);
|
|
24539
|
+
}
|
|
24540
|
+
|
|
24541
|
+
.crewlet-link-card__meta {
|
|
24542
|
+
max-width: 100%;
|
|
24543
|
+
overflow: hidden;
|
|
24544
|
+
text-overflow: ellipsis;
|
|
24545
|
+
white-space: nowrap;
|
|
24546
|
+
}
|
|
24547
|
+
|
|
24548
|
+
/* Status and owner as words on one line: a dot in the status's colour, and
|
|
24549
|
+
a small face with the owner's name. */
|
|
24550
|
+
.crewlet-link-card__fields {
|
|
24551
|
+
display: flex;
|
|
24552
|
+
flex-wrap: wrap;
|
|
24553
|
+
align-items: center;
|
|
24554
|
+
gap: var(--spacing-1) var(--spacing-3);
|
|
24555
|
+
margin-top: 2px;
|
|
24556
|
+
}
|
|
24557
|
+
|
|
24558
|
+
.crewlet-link-card__status,
|
|
24559
|
+
.crewlet-link-card__owner {
|
|
24560
|
+
display: inline-flex;
|
|
24561
|
+
align-items: center;
|
|
24562
|
+
gap: var(--spacing-1);
|
|
24563
|
+
white-space: nowrap;
|
|
24564
|
+
}
|
|
24565
|
+
|
|
24566
|
+
.crewlet-link-card__dot {
|
|
24567
|
+
width: 6px;
|
|
24568
|
+
height: 6px;
|
|
24569
|
+
flex: none;
|
|
24570
|
+
border-radius: var(--radius-circle);
|
|
24571
|
+
background: var(--crewlet-link-card-dot);
|
|
24572
|
+
}
|
|
24573
|
+
|
|
24574
|
+
/* FORCED COLORS drops the bar's and the dot's backgrounds; a border is the
|
|
24575
|
+
one edge the mode keeps. */
|
|
24576
|
+
@media (forced-colors: active) {
|
|
24577
|
+
.crewlet-link-card::before {
|
|
24578
|
+
border-left: var(--crewlet-link-card-bar) solid CanvasText;
|
|
24579
|
+
}
|
|
24580
|
+
|
|
24581
|
+
.crewlet-link-card__dot {
|
|
24582
|
+
border: 1px solid CanvasText;
|
|
24583
|
+
}
|
|
24584
|
+
}
|
|
24585
|
+
|
|
24586
|
+
|
|
22734
24587
|
/* LinkInterstitial-ET4MSVSV.css */
|
|
22735
24588
|
/*
|
|
22736
24589
|
* The destination, said twice: the host as the claim a reader decides on, in
|
|
@@ -24349,6 +26202,119 @@ a.crewlet-icon-btn {
|
|
|
24349
26202
|
}
|
|
24350
26203
|
|
|
24351
26204
|
|
|
26205
|
+
/* MentionChip-W7MZZVRZ.css */
|
|
26206
|
+
/*
|
|
26207
|
+
* A mention in a message's words: a chip in the line, in the info tone's
|
|
26208
|
+
* light blue, or the warning tone where it names the reader.
|
|
26209
|
+
*/
|
|
26210
|
+
|
|
26211
|
+
.crewlet-mention-chip {
|
|
26212
|
+
display: inline;
|
|
26213
|
+
padding: 0 2px;
|
|
26214
|
+
border: 0;
|
|
26215
|
+
border-radius: var(--radius-xs);
|
|
26216
|
+
background: var(--color-feedback-info-soft);
|
|
26217
|
+
color: var(--color-feedback-info-ink);
|
|
26218
|
+
font: inherit;
|
|
26219
|
+
font-weight: var(--font-weight-regular);
|
|
26220
|
+
-webkit-box-decoration-break: clone;
|
|
26221
|
+
box-decoration-break: clone;
|
|
26222
|
+
}
|
|
26223
|
+
|
|
26224
|
+
.crewlet-mention-chip--self,
|
|
26225
|
+
.crewlet-mention-chip--everyone {
|
|
26226
|
+
background: var(--color-feedback-warning-soft);
|
|
26227
|
+
color: var(--color-feedback-warning-ink);
|
|
26228
|
+
}
|
|
26229
|
+
|
|
26230
|
+
button.crewlet-mention-chip {
|
|
26231
|
+
cursor: pointer;
|
|
26232
|
+
}
|
|
26233
|
+
|
|
26234
|
+
/* Under the pointer the fill takes the tone's next strength, its line step. */
|
|
26235
|
+
button.crewlet-mention-chip:hover {
|
|
26236
|
+
background: var(--color-feedback-info-line);
|
|
26237
|
+
}
|
|
26238
|
+
|
|
26239
|
+
button.crewlet-mention-chip--self:hover,
|
|
26240
|
+
button.crewlet-mention-chip--everyone:hover {
|
|
26241
|
+
background: var(--color-feedback-warning-line);
|
|
26242
|
+
}
|
|
26243
|
+
|
|
26244
|
+
button.crewlet-mention-chip:focus-visible {
|
|
26245
|
+
outline: 2px solid var(--color-focus);
|
|
26246
|
+
outline-offset: 1px;
|
|
26247
|
+
}
|
|
26248
|
+
|
|
26249
|
+
|
|
26250
|
+
/* MentionMenu-4NAQ45S4.css */
|
|
26251
|
+
/*
|
|
26252
|
+
* MentionMenu: the suggestions a composer opens on "@" or "#".
|
|
26253
|
+
*
|
|
26254
|
+
* The popover surface (the fill, hairline, corner and shadow of the emoji
|
|
26255
|
+
* picker that opens from the same composer), as wide as the field but no
|
|
26256
|
+
* wider than a list a reader scans: on a wide room the trailing word
|
|
26257
|
+
* ("Working") stood a screen's width from the name it belongs to; a host
|
|
26258
|
+
* moves that cap with `--crewlet-mention-menu-width` on any box round it.
|
|
26259
|
+
* It is placed against the nearest positioned box round the field, above
|
|
26260
|
+
* it, so it never covers what is being typed.
|
|
26261
|
+
*/
|
|
26262
|
+
.crewlet-mention-menu {
|
|
26263
|
+
position: absolute;
|
|
26264
|
+
bottom: calc(100% + var(--spacing-1));
|
|
26265
|
+
left: 0;
|
|
26266
|
+
z-index: var(--z-index-dropdown);
|
|
26267
|
+
box-sizing: border-box;
|
|
26268
|
+
width: min(100%, var(--crewlet-mention-menu-width, 560px));
|
|
26269
|
+
overflow: hidden;
|
|
26270
|
+
border: 1px solid var(--color-border-default);
|
|
26271
|
+
border-radius: var(--radius-lg);
|
|
26272
|
+
background: var(--color-surface-subtle);
|
|
26273
|
+
box-shadow: var(--shadow-xl);
|
|
26274
|
+
}
|
|
26275
|
+
|
|
26276
|
+
.crewlet-mention-menu__label {
|
|
26277
|
+
padding: var(--spacing-2) var(--spacing-3) var(--spacing-1);
|
|
26278
|
+
color: var(--color-text-tertiary);
|
|
26279
|
+
font-size: var(--font-size-2xs);
|
|
26280
|
+
font-weight: var(--font-weight-regular);
|
|
26281
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
26282
|
+
text-transform: uppercase;
|
|
26283
|
+
}
|
|
26284
|
+
|
|
26285
|
+
.crewlet-mention-menu__list {
|
|
26286
|
+
max-height: 264px;
|
|
26287
|
+
margin: 0;
|
|
26288
|
+
padding: 0 var(--spacing-1) var(--spacing-1);
|
|
26289
|
+
overflow-y: auto;
|
|
26290
|
+
overscroll-behavior: contain;
|
|
26291
|
+
list-style: none;
|
|
26292
|
+
}
|
|
26293
|
+
|
|
26294
|
+
/* The panel's corner less its inset, so each row's curve runs parallel. */
|
|
26295
|
+
.crewlet-mention-menu__list > .crewlet-person-row {
|
|
26296
|
+
--crewlet-person-row-radius: calc(var(--radius-lg) - var(--spacing-1));
|
|
26297
|
+
}
|
|
26298
|
+
|
|
26299
|
+
.crewlet-mention-menu__footer {
|
|
26300
|
+
display: flex;
|
|
26301
|
+
flex-wrap: wrap;
|
|
26302
|
+
align-items: center;
|
|
26303
|
+
gap: var(--spacing-1) var(--spacing-3);
|
|
26304
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
26305
|
+
border-top: 1px solid var(--color-border-default);
|
|
26306
|
+
color: var(--color-text-tertiary);
|
|
26307
|
+
font-size: var(--font-size-xs);
|
|
26308
|
+
}
|
|
26309
|
+
|
|
26310
|
+
/* The foot names keys, and a touch screen has none to press. */
|
|
26311
|
+
@media (hover: none) {
|
|
26312
|
+
.crewlet-mention-menu__footer {
|
|
26313
|
+
display: none;
|
|
26314
|
+
}
|
|
26315
|
+
}
|
|
26316
|
+
|
|
26317
|
+
|
|
24352
26318
|
/* Menu-I4SNXHOT.css */
|
|
24353
26319
|
/*
|
|
24354
26320
|
* The menu button's panel.
|
|
@@ -24743,6 +26709,82 @@ a.crewlet-icon-btn {
|
|
|
24743
26709
|
}
|
|
24744
26710
|
|
|
24745
26711
|
|
|
26712
|
+
/* MessageActions-Q4F5UH3S.css */
|
|
26713
|
+
/*
|
|
26714
|
+
* The tray a message shows on hover: the transcript's own ground ringed with
|
|
26715
|
+
* the hairline and a small shadow, the large corner, and 30px tools inside
|
|
26716
|
+
* the inset, so it reads as a soft tray of tools rather than a framed bar.
|
|
26717
|
+
* Two classes, so the tray's own rules hold over Toolbar's in any bundle
|
|
26718
|
+
* order.
|
|
26719
|
+
*/
|
|
26720
|
+
.crewlet-toolbar.crewlet-message-actions {
|
|
26721
|
+
flex-wrap: nowrap;
|
|
26722
|
+
gap: var(--crewlet-chat-toolbar-inset);
|
|
26723
|
+
height: var(--crewlet-chat-toolbar);
|
|
26724
|
+
box-sizing: border-box;
|
|
26725
|
+
padding: var(--crewlet-chat-toolbar-inset);
|
|
26726
|
+
border: 1px solid var(--color-edge-hairline);
|
|
26727
|
+
border-radius: var(--radius-lg);
|
|
26728
|
+
background: var(--crewlet-chat-ground);
|
|
26729
|
+
box-shadow: var(--shadow-xs);
|
|
26730
|
+
}
|
|
26731
|
+
|
|
26732
|
+
/* A tool whose menu or picker is open reads as held down, which is not the
|
|
26733
|
+
accent fill a toggle that is on (Saved) draws. */
|
|
26734
|
+
.crewlet-message-actions .crewlet-icon-btn[aria-expanded='true'] {
|
|
26735
|
+
background: var(--color-surface-pressed);
|
|
26736
|
+
color: var(--color-text-primary);
|
|
26737
|
+
}
|
|
26738
|
+
|
|
26739
|
+
.crewlet-message-actions__emoji {
|
|
26740
|
+
display: inline-flex;
|
|
26741
|
+
flex: none;
|
|
26742
|
+
align-items: center;
|
|
26743
|
+
justify-content: center;
|
|
26744
|
+
width: var(--size-control-md);
|
|
26745
|
+
height: var(--size-control-md);
|
|
26746
|
+
padding: 0;
|
|
26747
|
+
border: 0;
|
|
26748
|
+
border-radius: var(--radius-md);
|
|
26749
|
+
background: transparent;
|
|
26750
|
+
font-size: var(--font-size-md);
|
|
26751
|
+
line-height: 1;
|
|
26752
|
+
cursor: pointer;
|
|
26753
|
+
}
|
|
26754
|
+
|
|
26755
|
+
.crewlet-message-actions__emoji:hover {
|
|
26756
|
+
background: var(--color-fill-soft);
|
|
26757
|
+
}
|
|
26758
|
+
|
|
26759
|
+
.crewlet-message-actions__emoji:active {
|
|
26760
|
+
background: var(--color-surface-pressed);
|
|
26761
|
+
}
|
|
26762
|
+
|
|
26763
|
+
/* Held, as the tray's icon tools are: faded, no fill under the pointer, and
|
|
26764
|
+
the reason in its hint. */
|
|
26765
|
+
.crewlet-message-actions__emoji[aria-disabled='true'] {
|
|
26766
|
+
opacity: 0.5;
|
|
26767
|
+
cursor: not-allowed;
|
|
26768
|
+
}
|
|
26769
|
+
|
|
26770
|
+
.crewlet-message-actions__emoji[aria-disabled='true']:is(:hover, :active) {
|
|
26771
|
+
background: transparent;
|
|
26772
|
+
}
|
|
26773
|
+
|
|
26774
|
+
.crewlet-message-actions__emoji:focus-visible {
|
|
26775
|
+
outline: 2px solid var(--color-focus);
|
|
26776
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
26777
|
+
}
|
|
26778
|
+
|
|
26779
|
+
.crewlet-message-actions__divider {
|
|
26780
|
+
flex: none;
|
|
26781
|
+
width: 1px;
|
|
26782
|
+
height: var(--spacing-4);
|
|
26783
|
+
margin: 0 var(--spacing-1);
|
|
26784
|
+
background: var(--color-border-default);
|
|
26785
|
+
}
|
|
26786
|
+
|
|
26787
|
+
|
|
24746
26788
|
/* MessageBubble-AHTXBO3X.css */
|
|
24747
26789
|
/*
|
|
24748
26790
|
* One message: the bubble on its writer's side, and what it carried and its
|
|
@@ -24972,7 +27014,7 @@ a.crewlet-icon-btn {
|
|
|
24972
27014
|
}
|
|
24973
27015
|
|
|
24974
27016
|
|
|
24975
|
-
/* Modal-
|
|
27017
|
+
/* Modal-GKUOO7PZ.css */
|
|
24976
27018
|
/*
|
|
24977
27019
|
* The modal surface: the veil, the frame, and the three bands inside it.
|
|
24978
27020
|
*
|
|
@@ -25260,13 +27302,32 @@ a.crewlet-icon-btn {
|
|
|
25260
27302
|
animation: crewlet-modal-sheet-in var(--motion-duration-slow) var(--motion-easing-emphasized);
|
|
25261
27303
|
}
|
|
25262
27304
|
|
|
27305
|
+
/*
|
|
27306
|
+
* A SHEET FROM THE START EDGE (`side="start"`): a navigation panel, pinned to
|
|
27307
|
+
* the inline start and arriving from past it, with its edge and its shadow on
|
|
27308
|
+
* its inline end, into the page it covers. The shadow is the sheet's own,
|
|
27309
|
+
* mirrored by the token build, so a palette's sheet shadow reads the same way
|
|
27310
|
+
* round on either side.
|
|
27311
|
+
*/
|
|
27312
|
+
.crewlet-modal-overlay--sheet.crewlet-modal-overlay--start {
|
|
27313
|
+
justify-content: flex-start;
|
|
27314
|
+
}
|
|
27315
|
+
|
|
27316
|
+
.crewlet-modal--sheet.crewlet-modal--start {
|
|
27317
|
+
--crewlet-modal-sheet-from: -100%;
|
|
27318
|
+
border-inline-start: none;
|
|
27319
|
+
border-inline-end: 1px solid var(--color-border-default);
|
|
27320
|
+
box-shadow: var(--shadow-sheet-start);
|
|
27321
|
+
}
|
|
27322
|
+
|
|
25263
27323
|
/*
|
|
25264
27324
|
* The shell's one breakpoint, strictly under it as the shell switches. Below
|
|
25265
27325
|
* it there is no content beside a sheet to keep in view, so the sheet takes
|
|
25266
27326
|
* the whole width and its edge goes with it.
|
|
25267
27327
|
*/
|
|
25268
27328
|
@media (width < 1024px) {
|
|
25269
|
-
.crewlet-modal--sheet
|
|
27329
|
+
.crewlet-modal--sheet,
|
|
27330
|
+
.crewlet-modal--sheet.crewlet-modal--start {
|
|
25270
27331
|
width: 100%;
|
|
25271
27332
|
border-inline: none;
|
|
25272
27333
|
}
|
|
@@ -25289,6 +27350,11 @@ a.crewlet-icon-btn {
|
|
|
25289
27350
|
--crewlet-modal-glyph-inset: calc((var(--size-control-md) - var(--font-size-sm)) / 2);
|
|
25290
27351
|
|
|
25291
27352
|
display: flex;
|
|
27353
|
+
/* The head and the foot keep their height and the body gives way: in the
|
|
27354
|
+
frame's column a head that could shrink was squeezed under a long body
|
|
27355
|
+
to the bar's height, and a wrapped title and subtitle ran over its
|
|
27356
|
+
edges. */
|
|
27357
|
+
flex-shrink: 0;
|
|
25292
27358
|
align-items: center;
|
|
25293
27359
|
gap: var(--spacing-3);
|
|
25294
27360
|
padding: var(--spacing-4);
|
|
@@ -25509,6 +27575,7 @@ a.crewlet-icon-btn {
|
|
|
25509
27575
|
*/
|
|
25510
27576
|
.crewlet-modal__footer {
|
|
25511
27577
|
display: flex;
|
|
27578
|
+
flex-shrink: 0;
|
|
25512
27579
|
align-items: center;
|
|
25513
27580
|
flex-wrap: wrap;
|
|
25514
27581
|
gap: var(--spacing-2);
|
|
@@ -27418,6 +29485,170 @@ a.crewlet-icon-btn {
|
|
|
27418
29485
|
}
|
|
27419
29486
|
|
|
27420
29487
|
|
|
29488
|
+
/* PersonRow-V5GTPNVP.css */
|
|
29489
|
+
/*
|
|
29490
|
+
* PersonRow: a person or an agent as one row of a list, as a button or as a
|
|
29491
|
+
* listbox option. One design for every list of people.
|
|
29492
|
+
*/
|
|
29493
|
+
.crewlet-person-row {
|
|
29494
|
+
/* The row's corner. A list inside a rounded panel sets it to the panel's
|
|
29495
|
+
corner less the panel's inset, so the two curves run parallel. */
|
|
29496
|
+
--crewlet-person-row-radius: var(--radius-md);
|
|
29497
|
+
display: flex;
|
|
29498
|
+
align-items: center;
|
|
29499
|
+
gap: var(--spacing-3);
|
|
29500
|
+
width: 100%;
|
|
29501
|
+
box-sizing: border-box;
|
|
29502
|
+
margin: 0;
|
|
29503
|
+
padding: var(--spacing-2);
|
|
29504
|
+
border: 0;
|
|
29505
|
+
border-radius: var(--crewlet-person-row-radius);
|
|
29506
|
+
background: transparent;
|
|
29507
|
+
color: var(--color-text-primary);
|
|
29508
|
+
font: inherit;
|
|
29509
|
+
font-size: var(--font-size-sm);
|
|
29510
|
+
line-height: var(--font-line-height-normal);
|
|
29511
|
+
text-align: left;
|
|
29512
|
+
list-style: none;
|
|
29513
|
+
cursor: pointer;
|
|
29514
|
+
}
|
|
29515
|
+
|
|
29516
|
+
/* One line, for a list that opens under a caret: the name, its detail after
|
|
29517
|
+
it, and the trailing words at the end. */
|
|
29518
|
+
.crewlet-person-row--compact {
|
|
29519
|
+
gap: var(--spacing-2);
|
|
29520
|
+
min-height: var(--size-row-md);
|
|
29521
|
+
padding-block: 0;
|
|
29522
|
+
}
|
|
29523
|
+
|
|
29524
|
+
/*
|
|
29525
|
+
* A ROW SHOWS THE HOVER OVERLAY OR THE CHOSEN TINT, NEVER BOTH: they are the
|
|
29526
|
+
* same property on the same element, and the chosen row keeps its tint under
|
|
29527
|
+
* the pointer.
|
|
29528
|
+
*/
|
|
29529
|
+
.crewlet-person-row:hover,
|
|
29530
|
+
.crewlet-person-row.is-highlighted {
|
|
29531
|
+
background: var(--color-surface-hover);
|
|
29532
|
+
}
|
|
29533
|
+
|
|
29534
|
+
.crewlet-person-row.is-selected,
|
|
29535
|
+
.crewlet-person-row.is-selected:hover {
|
|
29536
|
+
background: var(--color-brand-accent-soft);
|
|
29537
|
+
}
|
|
29538
|
+
|
|
29539
|
+
/* The row the arrows are on, in a list a field owns: a bar on its start
|
|
29540
|
+
edge, so it is found in a list whose chosen rows are tinted too. */
|
|
29541
|
+
.crewlet-person-row.is-highlighted {
|
|
29542
|
+
box-shadow: inset 2px 0 0 var(--color-brand-accent);
|
|
29543
|
+
}
|
|
29544
|
+
|
|
29545
|
+
.crewlet-person-row:focus-visible {
|
|
29546
|
+
outline: 2px solid var(--color-focus);
|
|
29547
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
29548
|
+
}
|
|
29549
|
+
|
|
29550
|
+
.crewlet-person-row:disabled,
|
|
29551
|
+
.crewlet-person-row.is-disabled {
|
|
29552
|
+
color: var(--color-text-tertiary);
|
|
29553
|
+
cursor: not-allowed;
|
|
29554
|
+
}
|
|
29555
|
+
|
|
29556
|
+
/*
|
|
29557
|
+
* One column for every face or glyph, so every name starts on one edge: a
|
|
29558
|
+
* room's 16px glyph started its name a step left of the faces beside it.
|
|
29559
|
+
*/
|
|
29560
|
+
.crewlet-person-row__face {
|
|
29561
|
+
display: inline-flex;
|
|
29562
|
+
flex: none;
|
|
29563
|
+
align-items: center;
|
|
29564
|
+
justify-content: center;
|
|
29565
|
+
min-width: var(--size-control-md);
|
|
29566
|
+
color: var(--color-text-secondary);
|
|
29567
|
+
}
|
|
29568
|
+
|
|
29569
|
+
.crewlet-person-row--compact .crewlet-person-row__face {
|
|
29570
|
+
min-width: var(--size-control-sm);
|
|
29571
|
+
}
|
|
29572
|
+
|
|
29573
|
+
.crewlet-person-row__text {
|
|
29574
|
+
display: flex;
|
|
29575
|
+
flex: 1;
|
|
29576
|
+
flex-direction: column;
|
|
29577
|
+
min-width: 0;
|
|
29578
|
+
}
|
|
29579
|
+
|
|
29580
|
+
.crewlet-person-row__name {
|
|
29581
|
+
display: inline-flex;
|
|
29582
|
+
align-items: center;
|
|
29583
|
+
gap: var(--spacing-2);
|
|
29584
|
+
min-width: 0;
|
|
29585
|
+
font-weight: var(--font-weight-regular);
|
|
29586
|
+
white-space: nowrap;
|
|
29587
|
+
}
|
|
29588
|
+
|
|
29589
|
+
.crewlet-person-row__detail {
|
|
29590
|
+
min-width: 0;
|
|
29591
|
+
overflow: hidden;
|
|
29592
|
+
color: var(--color-text-secondary);
|
|
29593
|
+
font-size: var(--font-size-xs);
|
|
29594
|
+
text-overflow: ellipsis;
|
|
29595
|
+
white-space: nowrap;
|
|
29596
|
+
}
|
|
29597
|
+
|
|
29598
|
+
.crewlet-person-row--compact .crewlet-person-row__detail {
|
|
29599
|
+
color: var(--color-text-tertiary);
|
|
29600
|
+
}
|
|
29601
|
+
|
|
29602
|
+
.crewlet-person-row__meta {
|
|
29603
|
+
flex: none;
|
|
29604
|
+
margin-left: auto;
|
|
29605
|
+
color: var(--color-text-tertiary);
|
|
29606
|
+
font-size: var(--font-size-xs);
|
|
29607
|
+
white-space: nowrap;
|
|
29608
|
+
}
|
|
29609
|
+
|
|
29610
|
+
/* The toggle's mark: a plus that is quiet until the row is pointed at, and a
|
|
29611
|
+
check on the accent once the row is chosen. */
|
|
29612
|
+
.crewlet-person-row__mark {
|
|
29613
|
+
display: inline-flex;
|
|
29614
|
+
flex: none;
|
|
29615
|
+
align-items: center;
|
|
29616
|
+
justify-content: center;
|
|
29617
|
+
width: var(--size-control-sm);
|
|
29618
|
+
height: var(--size-control-sm);
|
|
29619
|
+
margin-left: auto;
|
|
29620
|
+
border-radius: var(--radius-md);
|
|
29621
|
+
color: var(--color-text-secondary);
|
|
29622
|
+
}
|
|
29623
|
+
|
|
29624
|
+
.crewlet-person-row__meta + .crewlet-person-row__mark {
|
|
29625
|
+
margin-left: 0;
|
|
29626
|
+
}
|
|
29627
|
+
|
|
29628
|
+
.crewlet-person-row:hover .crewlet-person-row__mark {
|
|
29629
|
+
background: var(--color-surface-elevated);
|
|
29630
|
+
color: var(--color-text-primary);
|
|
29631
|
+
}
|
|
29632
|
+
|
|
29633
|
+
.crewlet-person-row.is-selected .crewlet-person-row__mark {
|
|
29634
|
+
background: var(--color-brand-accent);
|
|
29635
|
+
color: var(--color-text-on-accent);
|
|
29636
|
+
}
|
|
29637
|
+
|
|
29638
|
+
/*
|
|
29639
|
+
* FORCED COLORS repaints every background to Canvas, which took the chosen
|
|
29640
|
+
* tint and the arrows' row with it. An outline is the one mark the mode
|
|
29641
|
+
* keeps, in the system's own colour for exactly this.
|
|
29642
|
+
*/
|
|
29643
|
+
@media (forced-colors: active) {
|
|
29644
|
+
.crewlet-person-row.is-selected,
|
|
29645
|
+
.crewlet-person-row.is-highlighted {
|
|
29646
|
+
outline: 2px solid Highlight;
|
|
29647
|
+
outline-offset: -2px;
|
|
29648
|
+
}
|
|
29649
|
+
}
|
|
29650
|
+
|
|
29651
|
+
|
|
27421
29652
|
/* PinTile-OWS7JTHD.css */
|
|
27422
29653
|
/*
|
|
27423
29654
|
* PinTile: one pinned thing, a link with its facts.
|
|
@@ -27845,7 +30076,7 @@ a.crewlet-icon-btn {
|
|
|
27845
30076
|
}
|
|
27846
30077
|
|
|
27847
30078
|
|
|
27848
|
-
/* PresenceStack-
|
|
30079
|
+
/* PresenceStack-2DTYRADY.css */
|
|
27849
30080
|
/*
|
|
27850
30081
|
* Who is here (PresenceStack.tsx), on the avatar stack's own geometry: the
|
|
27851
30082
|
* overlap and the counted chip are the stack's, the overlap stepped out by
|
|
@@ -27875,12 +30106,10 @@ a.crewlet-icon-btn {
|
|
|
27875
30106
|
font: inherit;
|
|
27876
30107
|
}
|
|
27877
30108
|
|
|
27878
|
-
|
|
27879
|
-
|
|
27880
|
-
|
|
27881
|
-
|
|
27882
|
-
.crewlet-presence-stack > .crewlet-presence-stack__member--agent {
|
|
27883
|
-
border-radius: var(--radius-sm);
|
|
30109
|
+
/* The face's own corner, which the component sets from Avatar's ladder: one
|
|
30110
|
+
shape for people and agents. */
|
|
30111
|
+
.crewlet-presence-stack > .crewlet-presence-stack__member {
|
|
30112
|
+
border-radius: var(--crewlet-presence-stack-corner);
|
|
27884
30113
|
}
|
|
27885
30114
|
|
|
27886
30115
|
button.crewlet-presence-stack__member {
|
|
@@ -28785,6 +31014,102 @@ button.crewlet-presence-stack__member:focus-visible {
|
|
|
28785
31014
|
}
|
|
28786
31015
|
|
|
28787
31016
|
|
|
31017
|
+
/* ReactionBar-XXI4V7XG.css */
|
|
31018
|
+
/*
|
|
31019
|
+
* A message's reactions: one pill to an emoji, then the add pill. A pill at
|
|
31020
|
+
* rest is a fill and no frame; the edge arrives under the pointer.
|
|
31021
|
+
*/
|
|
31022
|
+
|
|
31023
|
+
.crewlet-reaction-bar {
|
|
31024
|
+
display: flex;
|
|
31025
|
+
flex-wrap: wrap;
|
|
31026
|
+
align-items: center;
|
|
31027
|
+
gap: var(--spacing-1);
|
|
31028
|
+
}
|
|
31029
|
+
|
|
31030
|
+
.crewlet-reaction {
|
|
31031
|
+
display: inline-flex;
|
|
31032
|
+
align-items: center;
|
|
31033
|
+
justify-content: center;
|
|
31034
|
+
gap: var(--spacing-1);
|
|
31035
|
+
min-width: 44px;
|
|
31036
|
+
height: 24px;
|
|
31037
|
+
box-sizing: border-box;
|
|
31038
|
+
padding: 0 var(--spacing-2);
|
|
31039
|
+
border: 1px solid transparent;
|
|
31040
|
+
border-radius: var(--radius-pill);
|
|
31041
|
+
background: var(--color-fill-soft);
|
|
31042
|
+
color: var(--color-text-primary);
|
|
31043
|
+
font: inherit;
|
|
31044
|
+
font-size: var(--crewlet-chat-meta);
|
|
31045
|
+
line-height: 1;
|
|
31046
|
+
cursor: pointer;
|
|
31047
|
+
transition:
|
|
31048
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default),
|
|
31049
|
+
background var(--motion-duration-fast) var(--motion-easing-default);
|
|
31050
|
+
}
|
|
31051
|
+
|
|
31052
|
+
/* The emoji is the pill's picture and the count its caption: at the count's
|
|
31053
|
+
size the emoji read smaller than the number beside it. */
|
|
31054
|
+
.crewlet-reaction__emoji {
|
|
31055
|
+
font-size: var(--font-size-md);
|
|
31056
|
+
}
|
|
31057
|
+
|
|
31058
|
+
.crewlet-reaction__count {
|
|
31059
|
+
font-variant-numeric: tabular-nums;
|
|
31060
|
+
font-weight: var(--font-weight-regular);
|
|
31061
|
+
}
|
|
31062
|
+
|
|
31063
|
+
/* The pointed pill drops its fill and takes the strong edge. */
|
|
31064
|
+
.crewlet-reaction:hover {
|
|
31065
|
+
border-color: var(--color-edge-strong);
|
|
31066
|
+
background: transparent;
|
|
31067
|
+
}
|
|
31068
|
+
|
|
31069
|
+
/* Yours: the accent's soft fill, its ink and a heavier count, ringed in the
|
|
31070
|
+
accent, so it differs from the others by more than its hue. */
|
|
31071
|
+
.crewlet-reaction.is-mine {
|
|
31072
|
+
border-color: var(--color-brand-accent);
|
|
31073
|
+
background: var(--color-brand-accent-soft);
|
|
31074
|
+
color: var(--color-brand-accent-ink);
|
|
31075
|
+
}
|
|
31076
|
+
|
|
31077
|
+
.crewlet-reaction.is-mine:hover {
|
|
31078
|
+
background: var(--color-brand-accent-soft-strong);
|
|
31079
|
+
}
|
|
31080
|
+
|
|
31081
|
+
.crewlet-reaction.is-mine .crewlet-reaction__count {
|
|
31082
|
+
font-weight: var(--font-weight-medium);
|
|
31083
|
+
}
|
|
31084
|
+
|
|
31085
|
+
.crewlet-reaction[aria-disabled='true'] {
|
|
31086
|
+
cursor: not-allowed;
|
|
31087
|
+
}
|
|
31088
|
+
|
|
31089
|
+
.crewlet-reaction:focus-visible {
|
|
31090
|
+
outline: 2px solid var(--color-focus);
|
|
31091
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
31092
|
+
}
|
|
31093
|
+
|
|
31094
|
+
/* The add pill: the glyph alone, in the quiet ink. */
|
|
31095
|
+
.crewlet-reaction.crewlet-reaction--add {
|
|
31096
|
+
min-width: 32px;
|
|
31097
|
+
padding: 0;
|
|
31098
|
+
color: var(--color-text-tertiary);
|
|
31099
|
+
}
|
|
31100
|
+
|
|
31101
|
+
.crewlet-reaction.crewlet-reaction--add[aria-expanded='true'] {
|
|
31102
|
+
background: var(--color-surface-pressed);
|
|
31103
|
+
color: var(--color-text-primary);
|
|
31104
|
+
}
|
|
31105
|
+
|
|
31106
|
+
@media (prefers-reduced-motion: reduce) {
|
|
31107
|
+
.crewlet-reaction {
|
|
31108
|
+
transition: none;
|
|
31109
|
+
}
|
|
31110
|
+
}
|
|
31111
|
+
|
|
31112
|
+
|
|
28788
31113
|
/* ReadingPane-VLYOWMCM.css */
|
|
28789
31114
|
/*
|
|
28790
31115
|
* One item read in full, in one column.
|
|
@@ -33567,7 +35892,7 @@ svg.crewlet-select__chevron {
|
|
|
33567
35892
|
}
|
|
33568
35893
|
|
|
33569
35894
|
|
|
33570
|
-
/* SidePanel-
|
|
35895
|
+
/* SidePanel-BKWT6Q6Z.css */
|
|
33571
35896
|
/*
|
|
33572
35897
|
* A side panel and the frame that lays it beside the content or over it
|
|
33573
35898
|
* (`SidePanel`, `SidePanelFrame`, and their artifact presets).
|
|
@@ -33658,6 +35983,42 @@ svg.crewlet-select__chevron {
|
|
|
33658
35983
|
border-bottom: 1px solid var(--color-border-default);
|
|
33659
35984
|
}
|
|
33660
35985
|
|
|
35986
|
+
/* With a subtitle the head holds one or two lines, so its height is a floor
|
|
35987
|
+
rather than a height, and its controls stay on the first line. */
|
|
35988
|
+
.crewlet-side-panel__head--subtitled {
|
|
35989
|
+
align-items: flex-start;
|
|
35990
|
+
height: auto;
|
|
35991
|
+
min-height: var(--crewlet-side-panel-head-height);
|
|
35992
|
+
padding-block: calc((var(--crewlet-side-panel-head-height) - var(--size-control-sm)) / 2);
|
|
35993
|
+
box-sizing: border-box;
|
|
35994
|
+
}
|
|
35995
|
+
|
|
35996
|
+
/* The title and the subtitle on one baseline, the subtitle dropping under
|
|
35997
|
+
the title when the two do not fit; the title shrinks to its own line and
|
|
35998
|
+
is ellipsised there. Centred on the controls' line while it is one line. */
|
|
35999
|
+
.crewlet-side-panel__heading {
|
|
36000
|
+
display: flex;
|
|
36001
|
+
flex: 1 1 auto;
|
|
36002
|
+
flex-wrap: wrap;
|
|
36003
|
+
align-items: baseline;
|
|
36004
|
+
column-gap: var(--spacing-2);
|
|
36005
|
+
min-width: 0;
|
|
36006
|
+
min-height: var(--size-control-sm);
|
|
36007
|
+
align-content: center;
|
|
36008
|
+
}
|
|
36009
|
+
|
|
36010
|
+
.crewlet-side-panel__heading > .crewlet-side-panel__title {
|
|
36011
|
+
flex: 0 1 auto;
|
|
36012
|
+
}
|
|
36013
|
+
|
|
36014
|
+
.crewlet-side-panel__subtitle {
|
|
36015
|
+
min-width: 0;
|
|
36016
|
+
overflow-wrap: anywhere;
|
|
36017
|
+
color: var(--color-text-tertiary);
|
|
36018
|
+
font-size: var(--font-size-sm);
|
|
36019
|
+
line-height: var(--font-line-height-snug);
|
|
36020
|
+
}
|
|
36021
|
+
|
|
33661
36022
|
.crewlet-side-panel__icon {
|
|
33662
36023
|
display: inline-flex;
|
|
33663
36024
|
flex: none;
|
|
@@ -33813,7 +36174,7 @@ svg.crewlet-select__chevron {
|
|
|
33813
36174
|
}
|
|
33814
36175
|
|
|
33815
36176
|
|
|
33816
|
-
/* SidebarNav-
|
|
36177
|
+
/* SidebarNav-E7PZGGA6.css */
|
|
33817
36178
|
/*
|
|
33818
36179
|
* The rail's navigation.
|
|
33819
36180
|
*
|
|
@@ -33903,6 +36264,61 @@ svg.crewlet-select__chevron {
|
|
|
33903
36264
|
color: var(--color-text-tertiary);
|
|
33904
36265
|
}
|
|
33905
36266
|
|
|
36267
|
+
/*
|
|
36268
|
+
* A HEADING THAT FOLDS ITS GROUP (`collapsible`): the button is the heading's
|
|
36269
|
+
* words and a chevron, the chevron centred in the glyph column (a nav glyph's
|
|
36270
|
+
* 14px; the xs chevron is 12px) and the words on the label line, so the
|
|
36271
|
+
* headings and the rows of a folded list stay one grid. It is the target
|
|
36272
|
+
* floor tall, the head's own height, and as wide as its words, so the head's
|
|
36273
|
+
* control keeps its own target at the end.
|
|
36274
|
+
*
|
|
36275
|
+
* THE RING IS DRAWN INSIDE ITS EDGE, because the words ellipsize and the box
|
|
36276
|
+
* that cuts them would cut an outset ring on every side.
|
|
36277
|
+
*/
|
|
36278
|
+
.crewlet-nav-group__toggle {
|
|
36279
|
+
display: inline-flex;
|
|
36280
|
+
flex: 0 1 auto;
|
|
36281
|
+
align-items: center;
|
|
36282
|
+
gap: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
36283
|
+
min-width: 0;
|
|
36284
|
+
min-height: var(--size-target-min);
|
|
36285
|
+
margin: 0;
|
|
36286
|
+
padding: 0 var(--spacing-1) 0 0;
|
|
36287
|
+
border: 0;
|
|
36288
|
+
border-radius: var(--radius-sm);
|
|
36289
|
+
background: transparent;
|
|
36290
|
+
color: var(--color-text-tertiary);
|
|
36291
|
+
font: inherit;
|
|
36292
|
+
cursor: pointer;
|
|
36293
|
+
transition: color var(--motion-duration-fast) var(--motion-easing-default);
|
|
36294
|
+
}
|
|
36295
|
+
|
|
36296
|
+
.crewlet-nav-group__toggle:hover {
|
|
36297
|
+
color: var(--color-text-primary);
|
|
36298
|
+
}
|
|
36299
|
+
|
|
36300
|
+
.crewlet-nav-group__toggle:focus-visible {
|
|
36301
|
+
outline: 2px solid var(--color-focus);
|
|
36302
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
36303
|
+
}
|
|
36304
|
+
|
|
36305
|
+
/* The words take the button's ink, so the heading lifts as one. */
|
|
36306
|
+
.crewlet-nav-group__toggle > .crewlet-nav-group__label {
|
|
36307
|
+
color: inherit;
|
|
36308
|
+
}
|
|
36309
|
+
|
|
36310
|
+
.crewlet-nav-group__chevron {
|
|
36311
|
+
display: inline-flex;
|
|
36312
|
+
flex: none;
|
|
36313
|
+
margin: 0 calc((14px - 12px) / 2);
|
|
36314
|
+
transition: transform var(--motion-duration-fast) var(--motion-easing-default);
|
|
36315
|
+
}
|
|
36316
|
+
|
|
36317
|
+
/* Folded, the chevron points at the words it would open. */
|
|
36318
|
+
.crewlet-nav-group--collapsed .crewlet-nav-group__chevron {
|
|
36319
|
+
transform: rotate(-90deg);
|
|
36320
|
+
}
|
|
36321
|
+
|
|
33906
36322
|
/* The heading's control. Pushed to the end whether or not the heading has
|
|
33907
36323
|
words, and at the floor the heading stands at. */
|
|
33908
36324
|
.crewlet-nav-group__action {
|
|
@@ -34148,13 +36564,16 @@ svg.crewlet-select__chevron {
|
|
|
34148
36564
|
* somebody who cannot separate the hue at all: the filled pill is the signal,
|
|
34149
36565
|
* the figure is the count.
|
|
34150
36566
|
*
|
|
34151
|
-
* The
|
|
34152
|
-
*
|
|
34153
|
-
*
|
|
34154
|
-
*
|
|
36567
|
+
* The chrome's one count badge (`--size-badge`, 16px with a 10px figure), at
|
|
36568
|
+
* least as wide as it is tall so a single digit is a round mark and not a
|
|
36569
|
+
* lozenge, and following the density. The same pill is drawn on the compact
|
|
36570
|
+
* rail's tiles and in its flyouts, so a count waiting for the reader is one
|
|
36571
|
+
* mark wherever it is; at 18px with an 11px figure it read louder than the
|
|
36572
|
+
* names beside it. The label is the on-accent step, the primary action's own
|
|
36573
|
+
* pair, on every row alike, because the fill is opaque.
|
|
34155
36574
|
*/
|
|
34156
36575
|
.crewlet-nav-item__badge {
|
|
34157
|
-
--crewlet-nav-item-badge-size:
|
|
36576
|
+
--crewlet-nav-item-badge-size: var(--size-badge);
|
|
34158
36577
|
display: inline-flex;
|
|
34159
36578
|
align-items: center;
|
|
34160
36579
|
justify-content: center;
|
|
@@ -34163,11 +36582,11 @@ svg.crewlet-select__chevron {
|
|
|
34163
36582
|
min-width: var(--crewlet-nav-item-badge-size);
|
|
34164
36583
|
height: var(--crewlet-nav-item-badge-size);
|
|
34165
36584
|
margin-left: auto;
|
|
34166
|
-
padding: 0
|
|
36585
|
+
padding: 0 var(--size-badge-pad);
|
|
34167
36586
|
border-radius: var(--radius-pill);
|
|
34168
36587
|
background: var(--color-brand-accent);
|
|
34169
36588
|
color: var(--color-text-on-accent);
|
|
34170
|
-
font-size: var(--font-size-
|
|
36589
|
+
font-size: var(--font-size-badge);
|
|
34171
36590
|
font-weight: var(--font-weight-semibold);
|
|
34172
36591
|
font-variant-numeric: tabular-nums;
|
|
34173
36592
|
line-height: 1;
|
|
@@ -34245,8 +36664,75 @@ svg.crewlet-select__chevron {
|
|
|
34245
36664
|
border-left-color: var(--color-border-strong);
|
|
34246
36665
|
}
|
|
34247
36666
|
|
|
36667
|
+
/*
|
|
36668
|
+
* THE DENSE LIST (`dense`): a list read in passing that runs long, a step
|
|
36669
|
+
* denser than the application's navigation.
|
|
36670
|
+
*
|
|
36671
|
+
* Its rows stand at the 24px target floor, the gutter is halved so a row's
|
|
36672
|
+
* highlight runs nearly from edge to edge (a long bar rather than a pill), and
|
|
36673
|
+
* the row's pad grows by exactly what the gutter gave up, so every glyph and
|
|
36674
|
+
* name stays on the line it was on, whatever the surface set the two tokens
|
|
36675
|
+
* to. The glyph column is as wide as a small face (an `Avatar` at `xs`), so a
|
|
36676
|
+
* face, a glyph and a group's count stand in one column and every name starts
|
|
36677
|
+
* on one line. Names are set in the regular weight, a step lighter than the
|
|
36678
|
+
* navigation's, which is what lets an unread row stand out by weight.
|
|
36679
|
+
*/
|
|
36680
|
+
.crewlet-sidebar-nav--dense {
|
|
36681
|
+
--crewlet-nav-dense-pad: calc(var(--size-nav-row-pad) + var(--size-nav-gutter) - var(--spacing-1));
|
|
36682
|
+
--crewlet-nav-dense-slot: 20px;
|
|
36683
|
+
padding-right: var(--spacing-1);
|
|
36684
|
+
padding-left: var(--spacing-1);
|
|
36685
|
+
}
|
|
36686
|
+
|
|
36687
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-item__row {
|
|
36688
|
+
min-height: var(--size-target-min);
|
|
36689
|
+
padding-right: var(--crewlet-nav-dense-pad);
|
|
36690
|
+
padding-left: var(--crewlet-nav-dense-pad);
|
|
36691
|
+
font-weight: var(--font-weight-regular);
|
|
36692
|
+
}
|
|
36693
|
+
|
|
36694
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-group__head {
|
|
36695
|
+
padding-right: calc(var(--crewlet-nav-dense-pad) - (var(--size-target-min) - 14px) / 2);
|
|
36696
|
+
padding-left: var(--crewlet-nav-dense-pad);
|
|
36697
|
+
}
|
|
36698
|
+
|
|
36699
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-item__icon {
|
|
36700
|
+
min-width: var(--crewlet-nav-dense-slot);
|
|
36701
|
+
}
|
|
36702
|
+
|
|
36703
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-group__chevron {
|
|
36704
|
+
margin-right: calc((var(--crewlet-nav-dense-slot) - 12px) / 2);
|
|
36705
|
+
margin-left: calc((var(--crewlet-nav-dense-slot) - 12px) / 2);
|
|
36706
|
+
}
|
|
36707
|
+
|
|
36708
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-item__children {
|
|
36709
|
+
margin-left: var(--crewlet-nav-dense-pad);
|
|
36710
|
+
padding-left: calc(var(--crewlet-nav-dense-slot) + var(--spacing-2) + var(--spacing-1) / 2 - var(--crewlet-nav-dense-pad) - 1px);
|
|
36711
|
+
}
|
|
36712
|
+
|
|
36713
|
+
/*
|
|
36714
|
+
* A ROW WITH NEWS (`unread`): its name a step heavier than its neighbours' and
|
|
36715
|
+
* in the primary ink, which is the whole of the signal in a dense list whose
|
|
36716
|
+
* names are regular. A muted row is never drawn unread (the component drops
|
|
36717
|
+
* the class), so the two rules never meet.
|
|
36718
|
+
*/
|
|
36719
|
+
.crewlet-nav-item--unread > .crewlet-nav-item__head > .crewlet-nav-item__row {
|
|
36720
|
+
color: var(--color-text-primary);
|
|
36721
|
+
font-weight: var(--font-weight-medium);
|
|
36722
|
+
}
|
|
36723
|
+
|
|
36724
|
+
/*
|
|
36725
|
+
* A MUTED ROW rests in the quiet ink, glyph and name together, and lifts as
|
|
36726
|
+
* every row does: under the pointer, and while it is the row the reader is on.
|
|
36727
|
+
*/
|
|
36728
|
+
.crewlet-nav-item--muted > .crewlet-nav-item__head > .crewlet-nav-item__row:not([aria-current]):not(:hover) {
|
|
36729
|
+
color: var(--color-text-tertiary);
|
|
36730
|
+
}
|
|
36731
|
+
|
|
34248
36732
|
@media (prefers-reduced-motion: reduce) {
|
|
34249
36733
|
.crewlet-nav-group__action,
|
|
36734
|
+
.crewlet-nav-group__toggle,
|
|
36735
|
+
.crewlet-nav-group__chevron,
|
|
34250
36736
|
.crewlet-nav-item__row,
|
|
34251
36737
|
.crewlet-nav-item__chevron {
|
|
34252
36738
|
transition: none;
|
|
@@ -34264,7 +36750,7 @@ svg.crewlet-select__chevron {
|
|
|
34264
36750
|
}
|
|
34265
36751
|
|
|
34266
36752
|
|
|
34267
|
-
/* Skeleton-
|
|
36753
|
+
/* Skeleton-GIXV3KK5.css */
|
|
34268
36754
|
/*
|
|
34269
36755
|
* Skeleton, the loading placeholder, in eight shapes:
|
|
34270
36756
|
* box One large rectangle with a sweeping glow, for a hero area.
|
|
@@ -34347,10 +36833,12 @@ svg.crewlet-select__chevron {
|
|
|
34347
36833
|
.crewlet-skeleton__line--label { height: 13px; width: 40%; margin-bottom: var(--spacing-2); }
|
|
34348
36834
|
.crewlet-skeleton__line--value { height: 14px; width: 80%; }
|
|
34349
36835
|
|
|
36836
|
+
/* A face's placeholder takes a face's shape, the rounded square every Avatar
|
|
36837
|
+
is drawn as: at 40px its corner is 8.9px, which the md step rounds to. */
|
|
34350
36838
|
.crewlet-skeleton__avatar {
|
|
34351
36839
|
width: 40px;
|
|
34352
36840
|
height: 40px;
|
|
34353
|
-
border-radius: var(--radius-
|
|
36841
|
+
border-radius: var(--radius-md);
|
|
34354
36842
|
flex-shrink: 0;
|
|
34355
36843
|
}
|
|
34356
36844
|
|
|
@@ -38687,7 +41175,7 @@ b.crewlet-switcher__match {
|
|
|
38687
41175
|
}
|
|
38688
41176
|
|
|
38689
41177
|
|
|
38690
|
-
/* Tag-
|
|
41178
|
+
/* Tag-WLDOROB5.css */
|
|
38691
41179
|
/*
|
|
38692
41180
|
* The tag: a small pill naming a state, a category or a value.
|
|
38693
41181
|
*
|
|
@@ -38992,6 +41480,30 @@ b.crewlet-switcher__match {
|
|
|
38992
41480
|
--crewlet-tag-ink: var(--color-text-tertiary);
|
|
38993
41481
|
}
|
|
38994
41482
|
|
|
41483
|
+
/*
|
|
41484
|
+
* THE QUIET LABEL (`appearance="quiet"`): a seat's kind beside its name
|
|
41485
|
+
* ("Agent"), a small filled mark with no boundary, so it reads as part of the
|
|
41486
|
+
* name line rather than as a control. 16px tall with a step of room each side,
|
|
41487
|
+
* the xs corner rather than a pill's round ends, and the label register at the
|
|
41488
|
+
* regular weight. The neutral label sits on the soft fill under the secondary
|
|
41489
|
+
* ink; a tone keeps its own tint and ink. It takes no size step: these rules
|
|
41490
|
+
* come after the steps, at their specificity, so a step cannot reshape it.
|
|
41491
|
+
*/
|
|
41492
|
+
.crewlet-tag--quiet {
|
|
41493
|
+
--crewlet-tag-height: calc(16px * var(--density, 1));
|
|
41494
|
+
--crewlet-tag-pad: var(--spacing-1);
|
|
41495
|
+
--crewlet-tag-edge: transparent;
|
|
41496
|
+
gap: var(--spacing-1);
|
|
41497
|
+
border-radius: var(--radius-xs);
|
|
41498
|
+
font-size: var(--font-size-2xs);
|
|
41499
|
+
font-weight: var(--font-weight-regular);
|
|
41500
|
+
}
|
|
41501
|
+
|
|
41502
|
+
.crewlet-tag--neutral.crewlet-tag--quiet {
|
|
41503
|
+
--crewlet-tag-fill: var(--color-fill-soft);
|
|
41504
|
+
--crewlet-tag-ink: var(--color-text-secondary);
|
|
41505
|
+
}
|
|
41506
|
+
|
|
38995
41507
|
/* ── the interactive form ──────────────────────────────────────────────── */
|
|
38996
41508
|
|
|
38997
41509
|
.crewlet-tag--actionable {
|
|
@@ -40117,7 +42629,7 @@ b.crewlet-switcher__match {
|
|
|
40117
42629
|
}
|
|
40118
42630
|
|
|
40119
42631
|
|
|
40120
|
-
/* ThinkingIndicator-
|
|
42632
|
+
/* ThinkingIndicator-S7ZL2C77.css */
|
|
40121
42633
|
/*
|
|
40122
42634
|
* Ask Crewlet at work: the Ask Crewlet mark, its spark turning, and a line
|
|
40123
42635
|
* of status under a shimmer. See ThinkingIndicator.tsx for why it replaces a
|
|
@@ -40128,12 +42640,20 @@ b.crewlet-switcher__match {
|
|
|
40128
42640
|
* ONE LINE OF PROSE TALL, at every state: the mark alone, the mark with a
|
|
40129
42641
|
* status line, and the line changing from one step to the next all keep the
|
|
40130
42642
|
* same height, so the thread never moves while the assistant works.
|
|
42643
|
+
*
|
|
42644
|
+
* NEVER WIDER THAN ITS COLUMN. The status never wraps, so where the
|
|
42645
|
+
* indicator is sized by its content (a flex column that starts its items on
|
|
42646
|
+
* the start edge, as a message's footer does) a long status made it as wide
|
|
42647
|
+
* as its words and widened the column with it, and a phone's transcript
|
|
42648
|
+
* scrolled sideways. Held to its container, the status truncates as it was
|
|
42649
|
+
* written to.
|
|
40131
42650
|
*/
|
|
40132
42651
|
.crewlet-thinking {
|
|
40133
42652
|
display: flex;
|
|
40134
42653
|
align-items: center;
|
|
40135
42654
|
gap: var(--spacing-2);
|
|
40136
42655
|
min-width: 0;
|
|
42656
|
+
max-width: 100%;
|
|
40137
42657
|
min-height: calc(var(--font-size-compact) * var(--font-line-height-relaxed));
|
|
40138
42658
|
font-family: var(--font-family-sans);
|
|
40139
42659
|
font-size: var(--font-size-compact);
|
|
@@ -40313,6 +42833,99 @@ b.crewlet-switcher__match {
|
|
|
40313
42833
|
}
|
|
40314
42834
|
|
|
40315
42835
|
|
|
42836
|
+
/* ThreadSummary-AGR4NDMD.css */
|
|
42837
|
+
/*
|
|
42838
|
+
* The line under a message that has replies, and the working line under it.
|
|
42839
|
+
*/
|
|
42840
|
+
|
|
42841
|
+
.crewlet-thread-summary-wrap {
|
|
42842
|
+
display: flex;
|
|
42843
|
+
flex-direction: column;
|
|
42844
|
+
align-items: flex-start;
|
|
42845
|
+
gap: var(--spacing-1);
|
|
42846
|
+
max-width: 100%;
|
|
42847
|
+
}
|
|
42848
|
+
|
|
42849
|
+
/* No piece is wider than the column: a long working line truncates. */
|
|
42850
|
+
.crewlet-thread-summary-wrap > * {
|
|
42851
|
+
max-width: 100%;
|
|
42852
|
+
}
|
|
42853
|
+
|
|
42854
|
+
/* The faces sit on the content edge: the line's 1px edge and its inset are
|
|
42855
|
+
taken back by the same amount outside it. */
|
|
42856
|
+
.crewlet-thread-summary {
|
|
42857
|
+
--crewlet-thread-summary-inset: var(--spacing-1);
|
|
42858
|
+
display: inline-flex;
|
|
42859
|
+
align-items: center;
|
|
42860
|
+
gap: var(--spacing-2);
|
|
42861
|
+
max-width: 100%;
|
|
42862
|
+
height: var(--size-control-md);
|
|
42863
|
+
box-sizing: border-box;
|
|
42864
|
+
margin-inline-start: calc((var(--crewlet-thread-summary-inset) + 1px) * -1);
|
|
42865
|
+
padding: 0 var(--crewlet-thread-summary-inset);
|
|
42866
|
+
border: 1px solid transparent;
|
|
42867
|
+
border-radius: var(--radius-sm);
|
|
42868
|
+
background: transparent;
|
|
42869
|
+
color: var(--color-text-secondary);
|
|
42870
|
+
font: inherit;
|
|
42871
|
+
font-size: var(--font-size-compact);
|
|
42872
|
+
line-height: 1;
|
|
42873
|
+
text-align: start;
|
|
42874
|
+
cursor: pointer;
|
|
42875
|
+
}
|
|
42876
|
+
|
|
42877
|
+
/* Lifted onto the transcript's own ground inside a hairline, under the
|
|
42878
|
+
pointer or the keyboard, and while the thread is open. */
|
|
42879
|
+
.crewlet-thread-summary:is(:hover, :focus-visible, .is-open) {
|
|
42880
|
+
border-color: var(--color-edge-hairline);
|
|
42881
|
+
background: var(--crewlet-chat-ground);
|
|
42882
|
+
}
|
|
42883
|
+
|
|
42884
|
+
.crewlet-thread-summary:focus-visible {
|
|
42885
|
+
outline: 2px solid var(--color-focus);
|
|
42886
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
42887
|
+
}
|
|
42888
|
+
|
|
42889
|
+
.crewlet-thread-summary__count {
|
|
42890
|
+
color: var(--color-brand-accent-ink);
|
|
42891
|
+
font-weight: var(--font-weight-medium);
|
|
42892
|
+
white-space: nowrap;
|
|
42893
|
+
}
|
|
42894
|
+
|
|
42895
|
+
/* "Last reply 1h ago" and "View thread" share one cell, so the line keeps
|
|
42896
|
+
its width when one gives way to the other under the pointer. */
|
|
42897
|
+
.crewlet-thread-summary__tail {
|
|
42898
|
+
display: inline-grid;
|
|
42899
|
+
min-width: 0;
|
|
42900
|
+
padding-inline-end: var(--spacing-1);
|
|
42901
|
+
white-space: nowrap;
|
|
42902
|
+
}
|
|
42903
|
+
|
|
42904
|
+
.crewlet-thread-summary__last,
|
|
42905
|
+
.crewlet-thread-summary__view {
|
|
42906
|
+
grid-area: 1 / 1;
|
|
42907
|
+
}
|
|
42908
|
+
|
|
42909
|
+
.crewlet-thread-summary__last {
|
|
42910
|
+
color: var(--color-text-tertiary);
|
|
42911
|
+
}
|
|
42912
|
+
|
|
42913
|
+
.crewlet-thread-summary__view {
|
|
42914
|
+
justify-self: end;
|
|
42915
|
+
visibility: hidden;
|
|
42916
|
+
color: var(--color-text-secondary);
|
|
42917
|
+
font-weight: var(--font-weight-regular);
|
|
42918
|
+
}
|
|
42919
|
+
|
|
42920
|
+
.crewlet-thread-summary:is(:hover, :focus-visible, .is-open) .crewlet-thread-summary__last {
|
|
42921
|
+
visibility: hidden;
|
|
42922
|
+
}
|
|
42923
|
+
|
|
42924
|
+
.crewlet-thread-summary:is(:hover, :focus-visible, .is-open) .crewlet-thread-summary__view {
|
|
42925
|
+
visibility: visible;
|
|
42926
|
+
}
|
|
42927
|
+
|
|
42928
|
+
|
|
40316
42929
|
/* TileGrid-XOEJ4P52.css */
|
|
40317
42930
|
/*
|
|
40318
42931
|
* TileGrid: tiles on a fixed track count that folds by the grid's own width.
|