@crewlethq/ui 0.81.2 → 0.82.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 +61 -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 +14 -1
- package/dist/AppShell/AppShell.d.ts +52 -3
- package/dist/AppShell/index.d.ts +1 -1
- package/dist/AppShell/index.js +8 -5
- package/dist/AppShell/railShape.d.ts +17 -0
- package/dist/{AppShell-2IBUS4TH.css → AppShell-F7RID4P4.css} +150 -0
- package/dist/ArrangeFrame/index.js +2 -2
- package/dist/ArrangeGroup/index.js +2 -2
- package/dist/ArrangeList/index.js +6 -6
- package/dist/ArtifactBar/index.js +11 -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 +12 -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 +6 -6
- package/dist/CanvasBoard/index.js +9 -9
- package/dist/CanvasToolbar/index.js +8 -8
- package/dist/Card/index.js +2 -2
- package/dist/ChangeList/index.js +5 -5
- package/dist/ChangeMark/index.js +4 -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 +1 -1
- 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 +11 -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 +8 -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 +6 -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 +10 -10
- package/dist/DataView/index.js +17 -17
- package/dist/DatasetSource/index.js +3 -3
- package/dist/DateTimePicker/index.js +5 -5
- package/dist/DeepWorkCard/index.js +10 -10
- package/dist/Disclosure/index.js +3 -3
- package/dist/DocTabsEditor/index.js +8 -8
- package/dist/Document/index.js +2 -2
- package/dist/EditingStatus/index.js +2 -2
- package/dist/{Editor-IMYESOW7.js → Editor-7EQWP3RN.js} +9 -9
- 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 +13 -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 +4 -4
- package/dist/FolderTile/index.js +3 -3
- package/dist/FollowBanner/index.js +4 -4
- package/dist/HuePicker/index.js +8 -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 +6 -6
- package/dist/ListInput/index.js +8 -8
- 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 +9 -9
- 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 +4 -4
- package/dist/MergeConflicts/index.js +8 -8
- package/dist/MessageActions/MessageActions.d.ts +58 -0
- package/dist/MessageActions/index.d.ts +4 -0
- package/dist/MessageActions/index.js +16 -0
- package/dist/MessageActions-Q4F5UH3S.css +73 -0
- package/dist/Modal/Modal.d.ts +12 -0
- package/dist/Modal/index.js +5 -5
- package/dist/{Modal-FYQYEI3N.css → Modal-GKUOO7PZ.css} +26 -1
- package/dist/OpenInAppCard/index.js +7 -7
- package/dist/OrgLabel/index.js +3 -3
- package/dist/OrgNode/index.js +4 -4
- package/dist/OrgTable/index.js +7 -7
- 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 +3 -3
- 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 +15 -0
- package/dist/ReactionBar-XXI4V7XG.css +93 -0
- package/dist/RecordChip/index.js +4 -4
- package/dist/RefusalCard/index.js +6 -6
- package/dist/RelatedRow/index.js +3 -3
- 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 +7 -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 +11 -11
- package/dist/SheetColumnEditor/index.js +16 -16
- package/dist/SheetGrid/index.js +12 -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 +8 -8
- 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 +12 -12
- package/dist/TableCells/index.js +5 -5
- package/dist/Tabs/index.js +6 -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 +8 -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 +12 -12
- package/dist/TimeWindowPicker/index.js +10 -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 +3 -3
- package/dist/TreeCanvas/index.js +7 -7
- package/dist/TreeGrid/index.js +3 -3
- package/dist/ValueField/index.js +9 -9
- package/dist/VersionCompare/index.js +9 -9
- package/dist/VersionTimeline/index.js +4 -4
- package/dist/WidgetFrame/index.js +2 -2
- package/dist/{chunk-WCDPFTJZ.js → chunk-25JQNHTC.js} +92 -28
- package/dist/{chunk-ZKLEAK7M.js → chunk-2H6YDUR5.js} +7 -7
- package/dist/{chunk-7FF6CZW5.js → chunk-2KJCUCVE.js} +36 -8
- package/dist/{chunk-6LXS3X7A.js → chunk-2L4WHYMT.js} +1 -1
- package/dist/{chunk-6G6WHTC7.js → chunk-2O5CMV76.js} +1 -1
- package/dist/chunk-2TOGGCDM.js +50 -0
- 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-I33UIUZD.js → chunk-3QQIGMY3.js} +49 -14
- package/dist/{chunk-NUZHC6MM.js → chunk-4ITETIGZ.js} +12 -1
- package/dist/{chunk-FQI62PIZ.js → chunk-4RYELYWG.js} +2 -2
- package/dist/{chunk-LCZULGMB.js → chunk-57BFL323.js} +2 -2
- package/dist/{chunk-73GUXYYE.js → chunk-5AHNW5CP.js} +1 -1
- package/dist/{chunk-FFGEJUAP.js → chunk-5ILRWUE7.js} +2 -2
- package/dist/{chunk-S5QJZOPL.js → chunk-5K5SZGBI.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-WKKWF277.js → chunk-6IOQWMYJ.js} +2 -2
- package/dist/{chunk-7MGXHCVK.js → chunk-6M2N6ETA.js} +1 -1
- package/dist/{chunk-OWHETZIU.js → chunk-6SFDL4QH.js} +1 -1
- package/dist/{chunk-JD7P2GJP.js → chunk-6YBBQAEM.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-CYYBE2MM.js → chunk-7U6PK242.js} +1 -1
- package/dist/{chunk-VG3SIJ3M.js → chunk-AFLS26AC.js} +2 -2
- package/dist/{chunk-JQEXAH7G.js → chunk-AMUXSJ2A.js} +2 -2
- package/dist/{chunk-4XF7ENQA.js → chunk-AOJ6ZA77.js} +2 -2
- package/dist/{chunk-TJIBTHWJ.js → chunk-B3X4DHRB.js} +2 -2
- package/dist/{chunk-BFM5G2Z6.js → chunk-BSAU7QRW.js} +1 -1
- package/dist/chunk-C4256UXE.js +21 -0
- package/dist/{chunk-4MRFLHJC.js → chunk-C46DDVTK.js} +1 -1
- package/dist/{chunk-5EFLA6BW.js → chunk-C75WZMXG.js} +2 -2
- package/dist/{chunk-YB64PWIN.js → chunk-C7UHDM7Y.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-MLDTLZAO.js → chunk-D2GT3CR4.js} +3 -3
- package/dist/{chunk-57AKYFML.js → chunk-DD7RBNT4.js} +3 -3
- 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-XNNY27SC.js → chunk-ED4A6Q24.js} +1 -1
- package/dist/{chunk-6LN64KGG.js → chunk-F7HZYTZT.js} +6 -3
- package/dist/{chunk-YQDRJZ5J.js → chunk-FKAJBN6G.js} +8 -8
- package/dist/{chunk-RTMNULTL.js → chunk-FLW5U7YS.js} +2 -2
- package/dist/{chunk-JMTBK55P.js → chunk-FVZPSTL2.js} +1 -1
- package/dist/{chunk-GHQG4VZA.js → chunk-G3CACE5L.js} +3 -3
- package/dist/{chunk-SNIPM6K7.js → chunk-G6ZFSUIH.js} +3 -3
- package/dist/chunk-GP5TNTZH.js +386 -0
- package/dist/{chunk-7KBNFFM3.js → chunk-GVPUCEWH.js} +6 -3
- package/dist/{chunk-6R334YT3.js → chunk-GZVAZ3LL.js} +2 -2
- package/dist/{chunk-KL6A7JGH.js → chunk-HA2PL7PA.js} +2 -2
- package/dist/{chunk-2IIHMJMZ.js → chunk-HCUECVZ3.js} +2 -2
- package/dist/{chunk-N2BF272H.js → chunk-HF5L56YQ.js} +1 -1
- package/dist/{chunk-Q2T4L6ML.js → chunk-HFOTRZFU.js} +4 -4
- package/dist/{chunk-2STOSJT3.js → chunk-HQFOZJQ4.js} +7 -7
- package/dist/chunk-HTBTAIH6.js +37 -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-BT3GB7HC.js → chunk-IRONPJB4.js} +3 -3
- package/dist/chunk-ISQANI6Q.js +9 -0
- package/dist/chunk-IUBOLGHG.js +140 -0
- package/dist/{chunk-O222F2IX.js → chunk-IUWP2LSE.js} +6 -6
- package/dist/{chunk-3JXX5S3Z.js → chunk-IYI6HWKN.js} +3 -3
- package/dist/{chunk-R5OATXWU.js → chunk-JHQGNFN3.js} +36 -13
- package/dist/{chunk-CSXJIIO4.js → chunk-JV6JM6W6.js} +1 -1
- package/dist/{chunk-ZQEJSEPS.js → chunk-K6Y6CDEZ.js} +2 -2
- package/dist/chunk-K774LUN3.js +20 -0
- package/dist/{chunk-LOWQK2PB.js → chunk-KJR5X4II.js} +4 -4
- package/dist/{chunk-45M73G5A.js → chunk-KLAVEJIO.js} +4 -4
- package/dist/{chunk-53J2YNQA.js → chunk-L5VU3LZT.js} +1 -1
- 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-LQRN2XZK.js +87 -0
- package/dist/{chunk-HEA6TERQ.js → chunk-LSOR77RZ.js} +1 -1
- 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-MPYRC3GO.js +244 -0
- package/dist/{chunk-37U3Z65B.js → chunk-MVMVMHYI.js} +1 -1
- package/dist/{chunk-6X5PGHEX.js → chunk-N2T7Y5KR.js} +2 -2
- 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-2FMBZCFR.js → chunk-OAHRMR4U.js} +1 -1
- package/dist/chunk-ONHYFU7D.js +25 -0
- package/dist/{chunk-Z2MZTI3H.js → chunk-ONNXUS5Y.js} +1 -1
- package/dist/{chunk-T24HBEU6.js → chunk-OOOVL77Y.js} +1 -1
- package/dist/{chunk-CZQ7UITX.js → chunk-P6F3PE4V.js} +3 -3
- package/dist/{chunk-BLGBD2D2.js → chunk-P7HMY3BQ.js} +4 -4
- package/dist/{chunk-TPIMOGOZ.js → chunk-PEBQMX5X.js} +1 -1
- package/dist/{chunk-4TMBAOXK.js → chunk-PW57R4BN.js} +1 -1
- package/dist/chunk-PX5BOALQ.js +13 -0
- package/dist/{chunk-HQOEAUDJ.js → chunk-PXLS6JKL.js} +2 -2
- package/dist/{chunk-CFTBESST.js → chunk-Q6TCUSQA.js} +2 -2
- package/dist/{chunk-ZWXHTXZO.js → chunk-QGEDXYLB.js} +2 -2
- package/dist/{chunk-WTXCK46H.js → chunk-R2QBQ6NO.js} +1 -1
- package/dist/{chunk-OBPINJNO.js → chunk-SEKO6P3Y.js} +3 -3
- package/dist/{chunk-CLJGFOTV.js → chunk-SKGOKLJD.js} +31 -18
- package/dist/{chunk-KHJIEPZV.js → chunk-SM4P2SHB.js} +2 -2
- package/dist/{chunk-B2YSFWUG.js → chunk-SYVQXMLO.js} +9 -9
- package/dist/{chunk-UY3FWQWG.js → chunk-T4IEESXN.js} +128 -12
- package/dist/{chunk-TPCBPGSB.js → chunk-T7WESRZF.js} +3 -3
- package/dist/chunk-TDFLCUBE.js +6 -0
- package/dist/{chunk-Z6JKZI4E.js → chunk-TGCGLKD4.js} +1 -1
- 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-5CEQ3HLH.js → chunk-VGOWSOUA.js} +6 -6
- package/dist/{chunk-TKUAGWNR.js → chunk-WT3B76MG.js} +1 -1
- 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-HPI5J6AR.js → chunk-XGLMPPDW.js} +2 -2
- package/dist/{chunk-DV5L2GRY.js → chunk-XJMES7AE.js} +1 -1
- package/dist/{chunk-5NJMSYDZ.js → chunk-XNC3M4IN.js} +1 -1
- package/dist/{chunk-C667GCU7.js → chunk-XXDB6KPV.js} +6 -3
- package/dist/{chunk-EAIOXW2W.js → chunk-XY4O2XMR.js} +8 -14
- package/dist/{chunk-KTIQSSME.js → chunk-XZY6S3UC.js} +6 -3
- package/dist/{chunk-7KHM2FZH.js → chunk-YGRTX67J.js} +1 -1
- package/dist/{chunk-RIAPCEB5.js → chunk-YM77TZ7Q.js} +5 -5
- package/dist/{chunk-OQG4P5KU.js → chunk-YOJAGKTS.js} +2 -2
- 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-NHLNHH4J.js → chunk-ZB3E2Z4Y.js} +1 -1
- package/dist/{chunk-IL3XLDW7.js → chunk-ZDWAIVWL.js} +1 -1
- package/dist/{chunk-2PIH6JHJ.js → chunk-ZXTDWTXS.js} +1 -1
- package/dist/generated/index.d.ts +15 -0
- package/dist/generated/index.js +184 -167
- package/dist/index.js +184 -167
- package/dist/styles.css +2564 -136
- package/dist/utils/focusModality.d.ts +14 -0
- package/dist/utils/heldHint.d.ts +6 -0
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +3 -3
- package/dist/ArtifactKinds-O3CALPVX.css +0 -16
- package/dist/{chunk-PLNJEDGI.js → chunk-I4IO56EY.js} +1 -1
- package/dist/{chunk-CDFQ7MQK.js → chunk-KLWWNV25.js} +0 -0
- package/dist/{chunk-624X3RVA.js → chunk-O55JQ7BE.js} +1 -1
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-F7RID4P4.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.
|
|
@@ -890,6 +1080,10 @@
|
|
|
890
1080
|
* run the height of the window parallel to it, eight pixels off.
|
|
891
1081
|
*/
|
|
892
1082
|
.crewlet-app-shell__rail {
|
|
1083
|
+
/* The fold control's containing block. Re-declared as `fixed` by the
|
|
1084
|
+
narrow block below, which comes later at the same weight, so the drawer
|
|
1085
|
+
keeps its layer. */
|
|
1086
|
+
position: relative;
|
|
893
1087
|
display: flex;
|
|
894
1088
|
flex-direction: column;
|
|
895
1089
|
min-height: 0;
|
|
@@ -1475,6 +1669,24 @@
|
|
|
1475
1669
|
height: 100%;
|
|
1476
1670
|
}
|
|
1477
1671
|
|
|
1672
|
+
/*
|
|
1673
|
+
* A FLUSH SCREEN draws its own frame to the sheet's edges: the column gives up
|
|
1674
|
+
* its pad, its measure and its gap, and the scroller reserves no gutter, since
|
|
1675
|
+
* nothing in it scrolls and a strip at its end would cut the screen's own
|
|
1676
|
+
* edge. The column is the containing block for a `LayerHost` the screen
|
|
1677
|
+
* keeps, so its layers fill the screen rather than the window.
|
|
1678
|
+
*/
|
|
1679
|
+
.crewlet-app-shell--fill-flush .crewlet-app-shell__main {
|
|
1680
|
+
scrollbar-gutter: auto;
|
|
1681
|
+
}
|
|
1682
|
+
|
|
1683
|
+
.crewlet-app-shell--fill-flush .crewlet-app-shell__content {
|
|
1684
|
+
position: relative;
|
|
1685
|
+
gap: 0;
|
|
1686
|
+
max-width: none;
|
|
1687
|
+
padding: 0;
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1478
1690
|
/* Hidden by default, revealed by the breakpoint below: the wide layout has the
|
|
1479
1691
|
rail on screen already, so the control that opens it has nothing to do. */
|
|
1480
1692
|
.crewlet-app-shell__toggle {
|
|
@@ -1624,6 +1836,107 @@
|
|
|
1624
1836
|
animation: crewlet-app-shell-aside-slide var(--motion-duration-slow) var(--motion-easing-emphasized);
|
|
1625
1837
|
}
|
|
1626
1838
|
|
|
1839
|
+
/*
|
|
1840
|
+
* THE COMPACT RAIL: the same track, narrowed to the compact column. One
|
|
1841
|
+
* variable is the rail's width for the grid, the aside's cap and the drawer
|
|
1842
|
+
* alike, so folding the rail is this one declaration. The shell writes the
|
|
1843
|
+
* attribute only where the layout is wide: the drawer under the step is
|
|
1844
|
+
* always the full list.
|
|
1845
|
+
*/
|
|
1846
|
+
.crewlet-app-shell[data-rail='compact'] {
|
|
1847
|
+
--crewlet-app-shell-rail: var(--size-shell-rail-compact);
|
|
1848
|
+
}
|
|
1849
|
+
|
|
1850
|
+
/*
|
|
1851
|
+
* THE FOLD CONTROL stands over the compact column's centre, in the row under
|
|
1852
|
+
* the head, in both shapes, so it never moves under the pointer that pressed
|
|
1853
|
+
* it. Quiet until the rail is pointed at: the tertiary ink, which holds 3:1
|
|
1854
|
+
* on the frame, then the secondary, and the ghost's own primary under the
|
|
1855
|
+
* pointer.
|
|
1856
|
+
*/
|
|
1857
|
+
.crewlet-app-shell__fold {
|
|
1858
|
+
position: absolute;
|
|
1859
|
+
top: calc(var(--size-shell-inset) + var(--crewlet-app-shell-topbar));
|
|
1860
|
+
left: calc((var(--size-shell-rail-compact) - var(--size-control-sm)) / 2);
|
|
1861
|
+
z-index: 1;
|
|
1862
|
+
display: inline-flex;
|
|
1863
|
+
}
|
|
1864
|
+
|
|
1865
|
+
.crewlet-app-shell__fold > .crewlet-icon-btn {
|
|
1866
|
+
color: var(--color-text-tertiary);
|
|
1867
|
+
}
|
|
1868
|
+
|
|
1869
|
+
.crewlet-app-shell__rail:hover > .crewlet-app-shell__fold > .crewlet-icon-btn:not(:hover) {
|
|
1870
|
+
color: var(--color-text-secondary);
|
|
1871
|
+
}
|
|
1872
|
+
|
|
1873
|
+
/*
|
|
1874
|
+
* THE MARK STANDS WHERE THE COMPACT RAIL'S DOES, in both shapes: centred over
|
|
1875
|
+
* the compact column, in the head. Full, the name follows it; compact, the
|
|
1876
|
+
* name is not drawn (the link keeps it as its name and title).
|
|
1877
|
+
*/
|
|
1878
|
+
.crewlet-app-shell--foldable .crewlet-app-shell__rail-head > .crewlet-brand,
|
|
1879
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-head > .crewlet-brand {
|
|
1880
|
+
padding-left: calc((var(--size-shell-rail-compact) - var(--crewlet-brand-mark)) / 2);
|
|
1881
|
+
}
|
|
1882
|
+
|
|
1883
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-brand__name,
|
|
1884
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-brand__context {
|
|
1885
|
+
display: none;
|
|
1886
|
+
}
|
|
1887
|
+
|
|
1888
|
+
/*
|
|
1889
|
+
* FULL, THE FIELD STARTS AFTER THE FOLD CONTROL, a step off it, on the row
|
|
1890
|
+
* the control stands in. The field holds its place at the top of the rail's
|
|
1891
|
+
* middle while the rows scroll under it, on the frame's own ground, so the
|
|
1892
|
+
* control beside it is always beside it.
|
|
1893
|
+
*/
|
|
1894
|
+
/* The middle is a stacking context of its own, so the field pinned in it
|
|
1895
|
+
stands over the rows scrolling under it and the whole middle stands under
|
|
1896
|
+
the fold control, which is painted a step above the rail. */
|
|
1897
|
+
.crewlet-app-shell--foldable .crewlet-app-shell__rail-body {
|
|
1898
|
+
isolation: isolate;
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1901
|
+
.crewlet-app-shell--foldable[data-rail='full'] .crewlet-app-shell__rail-search {
|
|
1902
|
+
position: sticky;
|
|
1903
|
+
top: 0;
|
|
1904
|
+
z-index: 1;
|
|
1905
|
+
padding-left: calc((var(--size-shell-rail-compact) + var(--size-control-sm)) / 2 + var(--spacing-2));
|
|
1906
|
+
background: var(--color-surface-frame);
|
|
1907
|
+
}
|
|
1908
|
+
|
|
1909
|
+
/* COMPACT, THE FOLD CONTROL HAS A ROW OF ITS OWN under the mark, which the
|
|
1910
|
+
head leaves room for, and the column of tiles starts under it. */
|
|
1911
|
+
.crewlet-app-shell--foldable[data-rail='compact'] .crewlet-app-shell__rail-head {
|
|
1912
|
+
margin-bottom: var(--size-control-sm);
|
|
1913
|
+
}
|
|
1914
|
+
|
|
1915
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-body {
|
|
1916
|
+
padding: var(--spacing-1) 0;
|
|
1917
|
+
scrollbar-width: thin;
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
/*
|
|
1921
|
+
* The compact foot: what the full foot holds, centred in the column, a step
|
|
1922
|
+
* apart: the status's dot, a Settings tile, the reader's face.
|
|
1923
|
+
*/
|
|
1924
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-foot {
|
|
1925
|
+
align-items: center;
|
|
1926
|
+
gap: var(--spacing-2);
|
|
1927
|
+
padding: var(--spacing-1) 0 var(--spacing-3);
|
|
1928
|
+
}
|
|
1929
|
+
|
|
1930
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-foot > .crewlet-compact-nav {
|
|
1931
|
+
align-self: stretch;
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-foot > .crewlet-app-shell__rail-status {
|
|
1935
|
+
justify-content: center;
|
|
1936
|
+
min-width: 0;
|
|
1937
|
+
margin: 0;
|
|
1938
|
+
}
|
|
1939
|
+
|
|
1627
1940
|
@media (width < 1024px) {
|
|
1628
1941
|
.crewlet-app-shell {
|
|
1629
1942
|
--crewlet-app-shell-beside: 0px;
|
|
@@ -1933,6 +2246,33 @@ button.crewlet-account-row__who:focus-visible {
|
|
|
1933
2246
|
gap: var(--spacing-1);
|
|
1934
2247
|
}
|
|
1935
2248
|
|
|
2249
|
+
/*
|
|
2250
|
+
* THE COMPACT ACCOUNT: the reader's face alone, centred in the compact rail's
|
|
2251
|
+
* foot, the face's own corner carrying the lift, the hover and the ring. It
|
|
2252
|
+
* keeps the row's link and menu rules above (hover, current, ring), with no
|
|
2253
|
+
* pad of its own, so the box is the face.
|
|
2254
|
+
*/
|
|
2255
|
+
.crewlet-account-row--compact {
|
|
2256
|
+
justify-content: center;
|
|
2257
|
+
padding: 0;
|
|
2258
|
+
}
|
|
2259
|
+
|
|
2260
|
+
.crewlet-account-row__who--compact,
|
|
2261
|
+
.crewlet-app-shell__rail-foot .crewlet-account-row__who--compact {
|
|
2262
|
+
flex: none;
|
|
2263
|
+
width: auto;
|
|
2264
|
+
min-height: 0;
|
|
2265
|
+
padding: calc(var(--spacing-1) / 2);
|
|
2266
|
+
border-radius: var(--radius-md);
|
|
2267
|
+
}
|
|
2268
|
+
|
|
2269
|
+
/* The ring stands off the face, outside it: drawn inside, it would cover the
|
|
2270
|
+
face's own edge and status. */
|
|
2271
|
+
.crewlet-account-row__who.crewlet-account-row__who--compact:focus-visible {
|
|
2272
|
+
outline: 2px solid var(--color-focus);
|
|
2273
|
+
outline-offset: 2px;
|
|
2274
|
+
}
|
|
2275
|
+
|
|
1936
2276
|
@media (prefers-reduced-motion: reduce) {
|
|
1937
2277
|
.crewlet-account-row__who {
|
|
1938
2278
|
transition: none;
|
|
@@ -4004,23 +4344,25 @@ a.crewlet-kind-tile:hover .crewlet-kind-tile__frame,
|
|
|
4004
4344
|
}
|
|
4005
4345
|
|
|
4006
4346
|
|
|
4007
|
-
/* ArtifactKinds-
|
|
4347
|
+
/* ArtifactKinds-3EH4KR3F.css */
|
|
4008
4348
|
/*
|
|
4009
4349
|
* 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
|
-
*
|
|
4350
|
+
* (`crewlet-kind--<kind>`): the hue, its Fill and Line steps, the ink a
|
|
4351
|
+
* glyph is drawn in, and the Ground steps a card drawn ON the kind's colour
|
|
4352
|
+
* reads (its ground, the ground under the pointer, the ground at its foot
|
|
4353
|
+
* and the glow behind its drawing; ActionCard). Every surface that tints by
|
|
4354
|
+
* kind reads these, so a kind glyph in a bar, a card's badge and a Make row's tile repaint together with
|
|
4013
4355
|
* the theme, and no surface spells a kind's colour of its own. A sheet of
|
|
4014
4356
|
* its own, imported by each surface that tints, because the glyph's module
|
|
4015
4357
|
* carries no stylesheet (a frame that draws one glyph takes nothing else).
|
|
4016
4358
|
*/
|
|
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); }
|
|
4359
|
+
.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); }
|
|
4360
|
+
.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); }
|
|
4361
|
+
.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); }
|
|
4362
|
+
.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); }
|
|
4363
|
+
.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); }
|
|
4364
|
+
.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); }
|
|
4365
|
+
.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
4366
|
|
|
4025
4367
|
|
|
4026
4368
|
/* ArtifactMakeRow-6UX2LTF7.css */
|
|
@@ -4560,7 +4902,7 @@ a.crewlet-make-row__item:active {
|
|
|
4560
4902
|
}
|
|
4561
4903
|
|
|
4562
4904
|
|
|
4563
|
-
/* Avatar-
|
|
4905
|
+
/* Avatar-MNE3WBZO.css */
|
|
4564
4906
|
/*
|
|
4565
4907
|
* The identity badge.
|
|
4566
4908
|
*
|
|
@@ -4569,9 +4911,10 @@ a.crewlet-make-row__item:active {
|
|
|
4569
4911
|
* same eight families it also spent on phases and event categories, so one
|
|
4570
4912
|
* amber meant "the execute phase", "the decision category" and "the Analyst"
|
|
4571
4913
|
* 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
|
-
*
|
|
4914
|
+
* colour changes, which is the proof it never meant anything. Identity is
|
|
4915
|
+
* what the face holds (a monogram set in the kind's face, a picture, or for an
|
|
4916
|
+
* agent an operator gave one, its character and its hue) and the name beside
|
|
4917
|
+
* it. Every face is ONE SHAPE, people and agents alike (see "the shape").
|
|
4575
4918
|
*
|
|
4576
4919
|
* A STATE IS A CORNER BADGE, NEVER A LINE ROUND THE PLATE. A ring in a state's
|
|
4577
4920
|
* hue round a plate in the agent's own hue put two colours on a 32px mark and
|
|
@@ -4711,46 +5054,40 @@ a.crewlet-make-row__item:active {
|
|
|
4711
5054
|
font-size: var(--font-size-sm);
|
|
4712
5055
|
}
|
|
4713
5056
|
|
|
4714
|
-
/* ──
|
|
5057
|
+
/* ── the shape ────────────────────────────────────────────────────────── */
|
|
4715
5058
|
|
|
4716
5059
|
/*
|
|
4717
|
-
*
|
|
4718
|
-
* the
|
|
4719
|
-
*
|
|
4720
|
-
*
|
|
4721
|
-
*
|
|
4722
|
-
*
|
|
4723
|
-
*
|
|
4724
|
-
*
|
|
4725
|
-
* component, and they disagreed: `size={80}` drew a squarer badge than
|
|
4726
|
-
* `size="lg"` at half its width.
|
|
5060
|
+
* ONE FACE SHAPE FOR PEOPLE AND AGENTS: a square with rounded corners, the
|
|
5061
|
+
* corner two ninths of the side (8px on a 36px face), never under the xs
|
|
5062
|
+
* radius on the smallest faces and never over the lg radius on the largest.
|
|
5063
|
+
* A person was a circle and an agent a squircle, so a row of people and
|
|
5064
|
+
* agents changed shape from face to face, and a list of members read as two
|
|
5065
|
+
* lists. One shape lines every face up on the same square and lets what the
|
|
5066
|
+
* face holds say who it is: a character on its hue, a picture, or initials
|
|
5067
|
+
* set in the kind's own face (below).
|
|
4727
5068
|
*
|
|
4728
|
-
*
|
|
4729
|
-
*
|
|
4730
|
-
*
|
|
4731
|
-
*
|
|
4732
|
-
*
|
|
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.
|
|
5069
|
+
* THE CORNER MOVES WITH THE BOX, computed here from the size property every
|
|
5070
|
+
* step and every numeric size sets, so there is ONE ladder: `AVATAR_CORNER`
|
|
5071
|
+
* in the component states the same ratio and clamp for a caller that has to
|
|
5072
|
+
* round something else to match a face (ImageUpload, PresenceStack), and the
|
|
5073
|
+
* suite holds the two equal. No step rule sets a corner.
|
|
4737
5074
|
*/
|
|
4738
|
-
.crewlet-avatar
|
|
4739
|
-
border-radius: calc(var(--crewlet-avatar-size) *
|
|
4740
|
-
font-family: var(--font-family-mono);
|
|
5075
|
+
.crewlet-avatar {
|
|
5076
|
+
border-radius: clamp(var(--radius-xs), calc(var(--crewlet-avatar-size) * 2 / 9), var(--radius-lg));
|
|
4741
5077
|
}
|
|
4742
5078
|
|
|
4743
|
-
|
|
4744
|
-
|
|
4745
|
-
|
|
4746
|
-
|
|
4747
|
-
|
|
5079
|
+
/* ── kinds ─────────────────────────────────────────────────────────────── */
|
|
5080
|
+
|
|
5081
|
+
/*
|
|
5082
|
+
* The kind is said by the monogram's face: an agent's initials are set in the
|
|
5083
|
+
* mono face, the way a handle is written, and a person's in the sans face. A
|
|
5084
|
+
* character or a picture says it on its own.
|
|
5085
|
+
*/
|
|
5086
|
+
.crewlet-avatar--agent {
|
|
5087
|
+
font-family: var(--font-family-mono);
|
|
4748
5088
|
}
|
|
4749
5089
|
|
|
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
5090
|
.crewlet-avatar--human {
|
|
4753
|
-
border-radius: var(--radius-circle);
|
|
4754
5091
|
font-family: var(--font-family-sans);
|
|
4755
5092
|
}
|
|
4756
5093
|
|
|
@@ -4780,16 +5117,22 @@ a.crewlet-make-row__item:active {
|
|
|
4780
5117
|
|
|
4781
5118
|
/* ── tones ─────────────────────────────────────────────────────────────── */
|
|
4782
5119
|
|
|
5120
|
+
/*
|
|
5121
|
+
* A FACE'S OWN OUTLINE IS THE HAIRLINE (`--color-edge-hairline`), whatever it
|
|
5122
|
+
* holds: the neutral badge, a seeded tint, a character's plate. A row of faces
|
|
5123
|
+
* then reads as faces rather than as a row of framed boxes, where the strong
|
|
5124
|
+
* hairline and a hue's line drew each face as a tile. A reader who asked for
|
|
5125
|
+
* more contrast gets the control edge here, as the edge scale promises.
|
|
5126
|
+
*/
|
|
4783
5127
|
.crewlet-avatar--fallback {
|
|
4784
|
-
border: 1px solid
|
|
5128
|
+
border: 1px solid var(--color-edge-hairline);
|
|
4785
5129
|
}
|
|
4786
5130
|
|
|
4787
|
-
/* The design's badge: the raised rung
|
|
4788
|
-
|
|
4789
|
-
|
|
5131
|
+
/* The design's badge: the raised rung inside the face's hairline and the
|
|
5132
|
+
secondary ink, so a badge on a card reads as a mark standing on it rather
|
|
5133
|
+
than as a hole in it. */
|
|
4790
5134
|
.crewlet-avatar--neutral {
|
|
4791
5135
|
background: var(--color-surface-elevated);
|
|
4792
|
-
border-color: var(--color-border-strong);
|
|
4793
5136
|
color: var(--color-text-secondary);
|
|
4794
5137
|
}
|
|
4795
5138
|
|
|
@@ -4817,7 +5160,7 @@ a.crewlet-make-row__item:active {
|
|
|
4817
5160
|
* plate's sides, a tall one its top and its foot, and none touches the curve.
|
|
4818
5161
|
*/
|
|
4819
5162
|
.crewlet-avatar--character {
|
|
4820
|
-
border: 1px solid
|
|
5163
|
+
border: 1px solid var(--color-edge-hairline);
|
|
4821
5164
|
}
|
|
4822
5165
|
|
|
4823
5166
|
.crewlet-avatar__character {
|
|
@@ -4827,50 +5170,44 @@ a.crewlet-make-row__item:active {
|
|
|
4827
5170
|
height: 74%;
|
|
4828
5171
|
}
|
|
4829
5172
|
|
|
4830
|
-
/* The plate an agent's hue is drawn on: the hue's fill
|
|
4831
|
-
|
|
5173
|
+
/* The plate an agent's hue is drawn on: the hue's fill inside the face's
|
|
5174
|
+
hairline, and the hue itself as the character's ink. The fill is published as
|
|
4832
5175
|
`--crewlet-avatar-plate` and painted from it, because it is a TINT (12% of
|
|
4833
5176
|
the hue over whatever the badge stands on), and a stack has to lay it over
|
|
4834
5177
|
its own ground rather than over the badge behind it (AvatarStack.css). */
|
|
4835
5178
|
.crewlet-avatar--hue-purple {
|
|
4836
5179
|
--crewlet-avatar-plate: var(--color-node-purple-fill);
|
|
4837
5180
|
background: var(--crewlet-avatar-plate);
|
|
4838
|
-
border-color: var(--color-node-purple-line);
|
|
4839
5181
|
color: var(--color-node-purple);
|
|
4840
5182
|
}
|
|
4841
5183
|
|
|
4842
5184
|
.crewlet-avatar--hue-cyan {
|
|
4843
5185
|
--crewlet-avatar-plate: var(--color-node-cyan-fill);
|
|
4844
5186
|
background: var(--crewlet-avatar-plate);
|
|
4845
|
-
border-color: var(--color-node-cyan-line);
|
|
4846
5187
|
color: var(--color-node-cyan);
|
|
4847
5188
|
}
|
|
4848
5189
|
|
|
4849
5190
|
.crewlet-avatar--hue-green {
|
|
4850
5191
|
--crewlet-avatar-plate: var(--color-node-green-fill);
|
|
4851
5192
|
background: var(--crewlet-avatar-plate);
|
|
4852
|
-
border-color: var(--color-node-green-line);
|
|
4853
5193
|
color: var(--color-node-green);
|
|
4854
5194
|
}
|
|
4855
5195
|
|
|
4856
5196
|
.crewlet-avatar--hue-amber {
|
|
4857
5197
|
--crewlet-avatar-plate: var(--color-node-amber-fill);
|
|
4858
5198
|
background: var(--crewlet-avatar-plate);
|
|
4859
|
-
border-color: var(--color-node-amber-line);
|
|
4860
5199
|
color: var(--color-node-amber);
|
|
4861
5200
|
}
|
|
4862
5201
|
|
|
4863
5202
|
.crewlet-avatar--hue-rose {
|
|
4864
5203
|
--crewlet-avatar-plate: var(--color-node-rose-fill);
|
|
4865
5204
|
background: var(--crewlet-avatar-plate);
|
|
4866
|
-
border-color: var(--color-node-rose-line);
|
|
4867
5205
|
color: var(--color-node-rose);
|
|
4868
5206
|
}
|
|
4869
5207
|
|
|
4870
5208
|
.crewlet-avatar--hue-blue {
|
|
4871
5209
|
--crewlet-avatar-plate: var(--color-node-blue-fill);
|
|
4872
5210
|
background: var(--crewlet-avatar-plate);
|
|
4873
|
-
border-color: var(--color-node-blue-line);
|
|
4874
5211
|
color: var(--color-node-blue);
|
|
4875
5212
|
}
|
|
4876
5213
|
|
|
@@ -4884,7 +5221,7 @@ a.crewlet-make-row__item:active {
|
|
|
4884
5221
|
* AN OUTLINE RATHER THAN THAT SHADOW PAIR, for three reasons. The gap is
|
|
4885
5222
|
* TRANSPARENT, so the ring reads on whatever the badge stands on, where the
|
|
4886
5223
|
* 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
|
|
5224
|
+
* other ground. An outline follows the corner, the face's clamp included, in
|
|
4888
5225
|
* every engine this package supports. And forced-colors mode keeps an outline
|
|
4889
5226
|
* and drops every shadow, so the ring is still drawn for the readers who most
|
|
4890
5227
|
* need a boundary.
|
|
@@ -4905,13 +5242,20 @@ a.crewlet-make-row__item:active {
|
|
|
4905
5242
|
/*
|
|
4906
5243
|
* THE FRAME is the face's own box, so a badge with a status takes exactly the
|
|
4907
5244
|
* 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
|
-
*
|
|
5245
|
+
* it, and a row lays out the same either way.
|
|
5246
|
+
*
|
|
5247
|
+
* THE BADGE WHERE A READER LOOKS FOR PRESENCE: under a third of the face (0.3
|
|
5248
|
+
* of the box), hanging a twentieth of the box past its bottom-right corner,
|
|
5249
|
+
* with the notch (a gap of the ground round it) kept. At 36px that is an 11px
|
|
5250
|
+
* badge set 2px past the corner, the size and place of a presence dot, where
|
|
5251
|
+
* a badge at 0.42 of the box read as a second face. It never drops under
|
|
5252
|
+
* 10px, where its glyph stops being a shape, and always hangs at least a
|
|
5253
|
+
* pixel past the corner.
|
|
4910
5254
|
*/
|
|
4911
5255
|
.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:
|
|
5256
|
+
--crewlet-avatar-status-size: max(10px, calc(var(--crewlet-avatar-size) * 0.3));
|
|
5257
|
+
--crewlet-avatar-status-overhang: max(1px, calc(var(--crewlet-avatar-size) * 0.05));
|
|
5258
|
+
--crewlet-avatar-status-gap: 2px;
|
|
4915
5259
|
position: relative;
|
|
4916
5260
|
display: inline-flex;
|
|
4917
5261
|
flex: none;
|
|
@@ -5069,7 +5413,7 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
5069
5413
|
}
|
|
5070
5414
|
|
|
5071
5415
|
|
|
5072
|
-
/* AvatarStack-
|
|
5416
|
+
/* AvatarStack-KEHD3GWY.css */
|
|
5073
5417
|
/*
|
|
5074
5418
|
* Several badges as one mark (AvatarStack.tsx).
|
|
5075
5419
|
*
|
|
@@ -5078,7 +5422,8 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
5078
5422
|
* badges standing in front of each other rather than as one blot. The ring is
|
|
5079
5423
|
* a SHADOW rather than a border, because it has to fall outside the badge
|
|
5080
5424
|
* without moving it, and it is decoration: forced-colors mode drops it and the
|
|
5081
|
-
* badges' own
|
|
5425
|
+
* badges' own borders, which that mode paints in the system ink, still
|
|
5426
|
+
* separate them.
|
|
5082
5427
|
*
|
|
5083
5428
|
* THE GROUND IS A VARIABLE because a stack stands on whatever it is put on,
|
|
5084
5429
|
* and a cut-out in the sheet's colour on a card is a band of the wrong grey
|
|
@@ -5108,6 +5453,17 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
5108
5453
|
box-shadow: 0 0 0 2px var(--crewlet-avatar-stack-ground);
|
|
5109
5454
|
}
|
|
5110
5455
|
|
|
5456
|
+
/*
|
|
5457
|
+
* THE RING IS THE ONLY EDGE A STACKED FACE NEEDS. A face's own hairline inside
|
|
5458
|
+
* the ring drew each face as a framed tile, two edges a pixel apart, so a
|
|
5459
|
+
* stacked face (a member, or the face a member wraps) draws its border in no
|
|
5460
|
+
* colour. The border keeps its width, so the face keeps its box.
|
|
5461
|
+
*/
|
|
5462
|
+
.crewlet-avatar-stack > .crewlet-avatar-stack__member.crewlet-avatar,
|
|
5463
|
+
.crewlet-avatar-stack > .crewlet-avatar-stack__member > .crewlet-avatar {
|
|
5464
|
+
border-color: transparent;
|
|
5465
|
+
}
|
|
5466
|
+
|
|
5111
5467
|
/*
|
|
5112
5468
|
* A BADGE IN FRONT HIDES THE ONE BEHIND IT. A hue's plate is a tint, 12% of
|
|
5113
5469
|
* the hue over whatever the badge stands on, and in a stack that is partly
|
|
@@ -5135,9 +5491,9 @@ button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
|
5135
5491
|
}
|
|
5136
5492
|
|
|
5137
5493
|
/*
|
|
5138
|
-
* THE COUNT OF THE REST. A PILL, where every
|
|
5139
|
-
*
|
|
5140
|
-
*
|
|
5494
|
+
* THE COUNT OF THE REST. A PILL, where every face is a rounded square: it is
|
|
5495
|
+
* a number rather than somebody, and drawn in a face's outline it would read
|
|
5496
|
+
* as one more agent or one more person. Otherwise it is the neutral
|
|
5141
5497
|
* badge exactly (the raised rung, the strong hairline, the secondary ink), in
|
|
5142
5498
|
* the sans face with tabular figures so "+9" and "+12" sit alike.
|
|
5143
5499
|
*/
|
|
@@ -5805,7 +6161,7 @@ a.crewlet-breadcrumb__crumb:focus-visible {
|
|
|
5805
6161
|
}
|
|
5806
6162
|
|
|
5807
6163
|
|
|
5808
|
-
/* BriefCard-
|
|
6164
|
+
/* BriefCard-QCL7MVUV.css */
|
|
5809
6165
|
/*
|
|
5810
6166
|
* A brief inside the product's status card: the verdict in the head, then one
|
|
5811
6167
|
* line on what the page is about, the ranked rows that wait on the reader, a
|
|
@@ -5922,6 +6278,32 @@ a.crewlet-breadcrumb__crumb:focus-visible {
|
|
|
5922
6278
|
margin-inline: calc(-1 * var(--spacing-3));
|
|
5923
6279
|
}
|
|
5924
6280
|
|
|
6281
|
+
/*
|
|
6282
|
+
* WHAT WAS SAID (a room's catch up): one point to a row, the sentence and its
|
|
6283
|
+
* citation, the press that opens the message it came from, at the row's end.
|
|
6284
|
+
* A quiet list with no markers, between the needs and the context.
|
|
6285
|
+
*/
|
|
6286
|
+
.crewlet-brief-card__points {
|
|
6287
|
+
display: flex;
|
|
6288
|
+
flex-direction: column;
|
|
6289
|
+
gap: var(--spacing-1);
|
|
6290
|
+
margin: 0;
|
|
6291
|
+
padding: 0;
|
|
6292
|
+
list-style: none;
|
|
6293
|
+
}
|
|
6294
|
+
|
|
6295
|
+
.crewlet-brief-card__point {
|
|
6296
|
+
display: grid;
|
|
6297
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
6298
|
+
align-items: baseline;
|
|
6299
|
+
gap: var(--spacing-3);
|
|
6300
|
+
padding-block: var(--spacing-1);
|
|
6301
|
+
}
|
|
6302
|
+
|
|
6303
|
+
.crewlet-brief-card__point-text {
|
|
6304
|
+
color: var(--color-text-primary);
|
|
6305
|
+
}
|
|
6306
|
+
|
|
5925
6307
|
|
|
5926
6308
|
/* Button-GDEBGBX6.css */
|
|
5927
6309
|
/*
|
|
@@ -9886,7 +10268,557 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
9886
10268
|
}
|
|
9887
10269
|
|
|
9888
10270
|
|
|
9889
|
-
/*
|
|
10271
|
+
/* ChatDay-E3FF5HWF.css */
|
|
10272
|
+
/*
|
|
10273
|
+
* ChatDay: a day of a conversation under its date, set on the conversation's
|
|
10274
|
+
* own scale (ChatScale.css).
|
|
10275
|
+
*/
|
|
10276
|
+
|
|
10277
|
+
/* The day is the pill's range: pinned, the pill stays inside it, so the next
|
|
10278
|
+
day pushes it out from below. */
|
|
10279
|
+
.crewlet-chat-day {
|
|
10280
|
+
position: relative;
|
|
10281
|
+
display: flex;
|
|
10282
|
+
flex-direction: column;
|
|
10283
|
+
}
|
|
10284
|
+
|
|
10285
|
+
/*
|
|
10286
|
+
* THE PILL'S PLACE. A box as tall as the pill, first in the day, set so the
|
|
10287
|
+
* pill's middle is on the rule. Sticky in the day, it holds the pill a little
|
|
10288
|
+
* under the list's top edge for as long as the day is in view, and the day's
|
|
10289
|
+
* end pushes it out, a small gap above the next day's pill.
|
|
10290
|
+
*
|
|
10291
|
+
* ITS OWN MARGINS STAY POSITIVE. A sticky box may travel as far as its margin
|
|
10292
|
+
* box allows, so a negative margin here let the pill run past the end of its
|
|
10293
|
+
* day and sit on the next day's pill. The rule under it takes the overlap
|
|
10294
|
+
* instead, with a negative margin of its own, which moves nothing sticky.
|
|
10295
|
+
*
|
|
10296
|
+
* The box lets the pointer through to the rows beside the pill; the pill
|
|
10297
|
+
* takes it. It stands under a message's hover toolbar (which stands over the
|
|
10298
|
+
* rows and the pill alike) and over the rows and the New line.
|
|
10299
|
+
*/
|
|
10300
|
+
.crewlet-chat-day__label {
|
|
10301
|
+
position: sticky;
|
|
10302
|
+
top: var(--crewlet-chat-day-pin);
|
|
10303
|
+
z-index: var(--z-index-sticky);
|
|
10304
|
+
display: flex;
|
|
10305
|
+
flex: none;
|
|
10306
|
+
justify-content: center;
|
|
10307
|
+
height: var(--crewlet-chat-day-pill);
|
|
10308
|
+
margin-top: calc(var(--crewlet-chat-day-gap) - var(--crewlet-chat-day-pill) / 2);
|
|
10309
|
+
pointer-events: none;
|
|
10310
|
+
/* A host that raises the pin (a banner arriving) moves the pinned pill
|
|
10311
|
+
down with it rather than jumping it. */
|
|
10312
|
+
transition: top var(--motion-duration-fast) var(--motion-easing-default);
|
|
10313
|
+
}
|
|
10314
|
+
|
|
10315
|
+
/*
|
|
10316
|
+
* THE DAY'S RULE: a hairline across the whole list with the day's gap under
|
|
10317
|
+
* it, in the flow like any row. It rises half a pill, so it runs through the
|
|
10318
|
+
* pill's middle.
|
|
10319
|
+
*/
|
|
10320
|
+
.crewlet-chat-day__rule {
|
|
10321
|
+
position: relative;
|
|
10322
|
+
flex: none;
|
|
10323
|
+
height: 1px;
|
|
10324
|
+
margin: calc(var(--crewlet-chat-day-pill) / -2) 0 var(--crewlet-chat-day-gap);
|
|
10325
|
+
background: var(--color-edge-hairline);
|
|
10326
|
+
}
|
|
10327
|
+
|
|
10328
|
+
/* The New line on the day's rule covers the rule, as one line. */
|
|
10329
|
+
.crewlet-chat-day__rule > .crewlet-chat-divider--unread {
|
|
10330
|
+
position: absolute;
|
|
10331
|
+
inset: 0;
|
|
10332
|
+
}
|
|
10333
|
+
|
|
10334
|
+
/*
|
|
10335
|
+
* THE PILL floats over the rows: the transcript's own ground, ringed with the
|
|
10336
|
+
* hairline and a small shadow, so it reads as lifted off the messages it
|
|
10337
|
+
* passes over. The ring is a shadow, which forced colors drops, so a
|
|
10338
|
+
* transparent outline stands in for it there.
|
|
10339
|
+
*/
|
|
10340
|
+
.crewlet-chat-day__pill {
|
|
10341
|
+
display: inline-flex;
|
|
10342
|
+
align-items: center;
|
|
10343
|
+
gap: var(--spacing-1);
|
|
10344
|
+
height: var(--crewlet-chat-day-pill);
|
|
10345
|
+
box-sizing: border-box;
|
|
10346
|
+
padding: 0 var(--spacing-3);
|
|
10347
|
+
border: 0;
|
|
10348
|
+
border-radius: var(--radius-pill);
|
|
10349
|
+
outline: 1px solid transparent;
|
|
10350
|
+
outline-offset: -1px;
|
|
10351
|
+
background-color: var(--crewlet-chat-ground);
|
|
10352
|
+
box-shadow:
|
|
10353
|
+
0 0 0 1px var(--color-edge-hairline),
|
|
10354
|
+
var(--shadow-xs);
|
|
10355
|
+
color: var(--color-text-secondary);
|
|
10356
|
+
font: inherit;
|
|
10357
|
+
font-size: var(--font-size-xs);
|
|
10358
|
+
font-weight: var(--font-weight-medium);
|
|
10359
|
+
line-height: 1;
|
|
10360
|
+
white-space: nowrap;
|
|
10361
|
+
pointer-events: auto;
|
|
10362
|
+
}
|
|
10363
|
+
|
|
10364
|
+
/* A pill that opens a menu: its chevron sits a step closer to its edge. */
|
|
10365
|
+
.crewlet-chat-day__pill--button {
|
|
10366
|
+
padding-inline-end: var(--spacing-2);
|
|
10367
|
+
cursor: pointer;
|
|
10368
|
+
}
|
|
10369
|
+
|
|
10370
|
+
/* Under the pointer, and while its menu is open, the hover overlay laid on
|
|
10371
|
+
the pill's own ground. */
|
|
10372
|
+
.crewlet-chat-day__pill--button:hover,
|
|
10373
|
+
.crewlet-chat-day__pill--button[aria-expanded='true'] {
|
|
10374
|
+
background-image: linear-gradient(var(--color-surface-hover), var(--color-surface-hover));
|
|
10375
|
+
}
|
|
10376
|
+
|
|
10377
|
+
/* The pill draws its own ring, so focus is drawn over it, as one edge. */
|
|
10378
|
+
.crewlet-chat-day__pill--button:focus-visible {
|
|
10379
|
+
outline: 2px solid var(--color-focus);
|
|
10380
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
10381
|
+
}
|
|
10382
|
+
|
|
10383
|
+
@media (prefers-reduced-motion: reduce) {
|
|
10384
|
+
.crewlet-chat-day__label {
|
|
10385
|
+
transition: none;
|
|
10386
|
+
}
|
|
10387
|
+
}
|
|
10388
|
+
|
|
10389
|
+
|
|
10390
|
+
/* ChatDivider-7ZNDL2PZ.css */
|
|
10391
|
+
/*
|
|
10392
|
+
* ChatDivider: a line between the rows of a conversation, set on the
|
|
10393
|
+
* conversation's own scale (ChatScale.css).
|
|
10394
|
+
*/
|
|
10395
|
+
|
|
10396
|
+
/* A quiet labelled rule: the words in the middle, a hairline either side. */
|
|
10397
|
+
.crewlet-chat-divider--date {
|
|
10398
|
+
display: flex;
|
|
10399
|
+
align-items: center;
|
|
10400
|
+
gap: var(--spacing-3);
|
|
10401
|
+
padding: var(--spacing-2) var(--crewlet-chat-pad-x);
|
|
10402
|
+
color: var(--color-text-tertiary);
|
|
10403
|
+
font-size: var(--crewlet-chat-meta);
|
|
10404
|
+
font-weight: var(--font-weight-regular);
|
|
10405
|
+
}
|
|
10406
|
+
|
|
10407
|
+
.crewlet-chat-divider--date::before,
|
|
10408
|
+
.crewlet-chat-divider--date::after {
|
|
10409
|
+
content: '';
|
|
10410
|
+
flex: 1;
|
|
10411
|
+
height: 1px;
|
|
10412
|
+
background: var(--color-border-default);
|
|
10413
|
+
}
|
|
10414
|
+
|
|
10415
|
+
.crewlet-chat-divider--date .crewlet-chat-divider__label {
|
|
10416
|
+
white-space: nowrap;
|
|
10417
|
+
}
|
|
10418
|
+
|
|
10419
|
+
/*
|
|
10420
|
+
* THE NEW LINE TAKES NO HEIGHT. A hairline across the whole list in the
|
|
10421
|
+
* danger hue, laid on the boundary between the last read message and the
|
|
10422
|
+
* first unread one, with "New" at its end on the transcript's ground, so it
|
|
10423
|
+
* reads over the rows it passes. Brought to the top of the view (scrolled to
|
|
10424
|
+
* as a target), it stops under the day's pinned pill rather than behind it.
|
|
10425
|
+
*/
|
|
10426
|
+
.crewlet-chat-divider--unread {
|
|
10427
|
+
position: relative;
|
|
10428
|
+
z-index: var(--z-index-raised);
|
|
10429
|
+
height: 0;
|
|
10430
|
+
pointer-events: none;
|
|
10431
|
+
scroll-margin-top: calc(var(--crewlet-chat-day-pin) + var(--crewlet-chat-day-pill) + var(--spacing-3));
|
|
10432
|
+
}
|
|
10433
|
+
|
|
10434
|
+
.crewlet-chat-divider--unread::before {
|
|
10435
|
+
content: '';
|
|
10436
|
+
position: absolute;
|
|
10437
|
+
inset-inline: 0;
|
|
10438
|
+
top: 0;
|
|
10439
|
+
height: 1px;
|
|
10440
|
+
background: var(--color-feedback-danger);
|
|
10441
|
+
}
|
|
10442
|
+
|
|
10443
|
+
.crewlet-chat-divider--unread .crewlet-chat-divider__label {
|
|
10444
|
+
position: absolute;
|
|
10445
|
+
top: 0;
|
|
10446
|
+
right: var(--crewlet-chat-pad-x);
|
|
10447
|
+
padding: 0 var(--spacing-1);
|
|
10448
|
+
transform: translateY(-50%);
|
|
10449
|
+
background: var(--crewlet-chat-ground);
|
|
10450
|
+
color: var(--color-feedback-danger-ink);
|
|
10451
|
+
font-size: var(--font-size-xs);
|
|
10452
|
+
font-weight: var(--font-weight-medium);
|
|
10453
|
+
line-height: var(--font-line-height-normal);
|
|
10454
|
+
}
|
|
10455
|
+
|
|
10456
|
+
/*
|
|
10457
|
+
* FORCED COLORS drops the line's background, which is the whole line. A
|
|
10458
|
+
* border is the one edge the mode keeps, painted in its own text colour.
|
|
10459
|
+
*/
|
|
10460
|
+
@media (forced-colors: active) {
|
|
10461
|
+
.crewlet-chat-divider--unread::before,
|
|
10462
|
+
.crewlet-chat-divider--date::before,
|
|
10463
|
+
.crewlet-chat-divider--date::after {
|
|
10464
|
+
border-top: 1px solid CanvasText;
|
|
10465
|
+
}
|
|
10466
|
+
}
|
|
10467
|
+
|
|
10468
|
+
|
|
10469
|
+
/* ChatMessage-FH7VRVCH.css */
|
|
10470
|
+
/*
|
|
10471
|
+
* One message in a transcript: a face in a gutter, the head line, the words
|
|
10472
|
+
* and a footer stack. Every size reads the conversation scale
|
|
10473
|
+
* (ChatScale.css); every edge and fill the quiet scale in @crewlethq/tokens.
|
|
10474
|
+
*/
|
|
10475
|
+
|
|
10476
|
+
.crewlet-chat-message {
|
|
10477
|
+
/* Where the row's first line starts: the toolbar rests on it. */
|
|
10478
|
+
--crewlet-chat-row-top: var(--spacing-2);
|
|
10479
|
+
position: relative;
|
|
10480
|
+
display: grid;
|
|
10481
|
+
grid-template-columns: var(--crewlet-chat-avatar) minmax(0, 1fr);
|
|
10482
|
+
column-gap: var(--crewlet-chat-gap);
|
|
10483
|
+
padding: var(--crewlet-chat-row-top) var(--crewlet-chat-pad-x) var(--spacing-1);
|
|
10484
|
+
font-size: var(--crewlet-chat-text);
|
|
10485
|
+
line-height: var(--crewlet-chat-line);
|
|
10486
|
+
transition: background var(--motion-duration-fast) var(--motion-easing-default);
|
|
10487
|
+
/* A message the reader is taken to stops under the day's pinned pill. */
|
|
10488
|
+
scroll-margin-top: calc(var(--crewlet-chat-day-pin) + var(--crewlet-chat-day-pill) + var(--spacing-2));
|
|
10489
|
+
}
|
|
10490
|
+
|
|
10491
|
+
.crewlet-chat-message.is-continuation {
|
|
10492
|
+
--crewlet-chat-row-top: 1px;
|
|
10493
|
+
padding-bottom: 1px;
|
|
10494
|
+
}
|
|
10495
|
+
|
|
10496
|
+
.crewlet-chat-message:hover,
|
|
10497
|
+
.crewlet-chat-message:focus-visible,
|
|
10498
|
+
.crewlet-chat-message:has(:focus-visible),
|
|
10499
|
+
.crewlet-chat-message.is-active {
|
|
10500
|
+
background: var(--color-fill-row);
|
|
10501
|
+
}
|
|
10502
|
+
|
|
10503
|
+
.crewlet-chat-message:focus-visible {
|
|
10504
|
+
outline: 2px solid var(--color-focus);
|
|
10505
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
10506
|
+
}
|
|
10507
|
+
|
|
10508
|
+
/* A row that names the reader: its wash and the warning bar on its edge. It
|
|
10509
|
+
keeps its wash, and only its wash, under the pointer: the toolbar and the
|
|
10510
|
+
gutter's time say which row is pointed at, and a hover step laid over the
|
|
10511
|
+
wash took the row's quiet text under 4.5:1 on the darker palettes. */
|
|
10512
|
+
.crewlet-chat-message.is-mention,
|
|
10513
|
+
.crewlet-chat-message.is-mention:hover,
|
|
10514
|
+
.crewlet-chat-message.is-mention:focus-visible,
|
|
10515
|
+
.crewlet-chat-message.is-mention:has(:focus-visible),
|
|
10516
|
+
.crewlet-chat-message.is-mention.is-active {
|
|
10517
|
+
background: var(--crewlet-chat-mention);
|
|
10518
|
+
box-shadow: inset 2px 0 0 var(--color-feedback-warning);
|
|
10519
|
+
}
|
|
10520
|
+
|
|
10521
|
+
/* The row a link or a search opened at: a wash of the accent that fades back
|
|
10522
|
+
to whatever the row draws of its own (the mention wash included), so there
|
|
10523
|
+
is no last keyframe to name it. */
|
|
10524
|
+
.crewlet-chat-message.is-flash {
|
|
10525
|
+
animation: crewlet-chat-message-flash calc(var(--motion-duration-moderate) * 8) var(--motion-easing-out);
|
|
10526
|
+
}
|
|
10527
|
+
|
|
10528
|
+
@keyframes crewlet-chat-message-flash {
|
|
10529
|
+
0%,
|
|
10530
|
+
40% {
|
|
10531
|
+
background: var(--color-brand-accent-soft-strong);
|
|
10532
|
+
}
|
|
10533
|
+
}
|
|
10534
|
+
|
|
10535
|
+
.crewlet-chat-message.is-sending .crewlet-chat-message__body {
|
|
10536
|
+
color: var(--color-text-tertiary);
|
|
10537
|
+
}
|
|
10538
|
+
|
|
10539
|
+
/* The face starts a hairline under the top of the name's line box, so across
|
|
10540
|
+
the name and the first line of words it sits centred on the pair. It keeps
|
|
10541
|
+
its own height: stretched to the row, the face's button (and its focus
|
|
10542
|
+
ring) ran the full height of a long message. */
|
|
10543
|
+
.crewlet-chat-message__gutter {
|
|
10544
|
+
display: flex;
|
|
10545
|
+
align-items: flex-start;
|
|
10546
|
+
justify-content: center;
|
|
10547
|
+
padding-top: 2px;
|
|
10548
|
+
}
|
|
10549
|
+
|
|
10550
|
+
/* A face that opens the author's profile: the face is the whole control. */
|
|
10551
|
+
.crewlet-chat-message__gutter > button {
|
|
10552
|
+
display: inline-flex;
|
|
10553
|
+
padding: 0;
|
|
10554
|
+
border: 0;
|
|
10555
|
+
border-radius: var(--radius-md);
|
|
10556
|
+
background: transparent;
|
|
10557
|
+
cursor: pointer;
|
|
10558
|
+
}
|
|
10559
|
+
|
|
10560
|
+
.crewlet-chat-message__gutter > button:focus-visible {
|
|
10561
|
+
outline: 2px solid var(--color-focus);
|
|
10562
|
+
outline-offset: 2px;
|
|
10563
|
+
}
|
|
10564
|
+
|
|
10565
|
+
/* A continuation's time sits on the baseline of the first line of its words.
|
|
10566
|
+
The two are in different columns and set at different sizes, so the grid
|
|
10567
|
+
aligns them by baseline rather than by sharing a line height. It ends on
|
|
10568
|
+
the column's edge: a time is wider than a face, and centred it ran into the
|
|
10569
|
+
gap before the words. */
|
|
10570
|
+
.crewlet-chat-message.is-continuation > .crewlet-chat-message__gutter {
|
|
10571
|
+
justify-content: flex-end;
|
|
10572
|
+
padding-top: 0;
|
|
10573
|
+
}
|
|
10574
|
+
|
|
10575
|
+
.crewlet-chat-message.is-continuation > .crewlet-chat-message__gutter,
|
|
10576
|
+
.crewlet-chat-message.is-continuation > .crewlet-chat-message__main {
|
|
10577
|
+
align-self: baseline;
|
|
10578
|
+
}
|
|
10579
|
+
|
|
10580
|
+
.crewlet-chat-message__gutter-time {
|
|
10581
|
+
visibility: hidden;
|
|
10582
|
+
color: var(--color-text-tertiary);
|
|
10583
|
+
font-size: var(--font-size-2xs);
|
|
10584
|
+
font-variant-numeric: tabular-nums;
|
|
10585
|
+
line-height: 1;
|
|
10586
|
+
white-space: nowrap;
|
|
10587
|
+
}
|
|
10588
|
+
|
|
10589
|
+
.crewlet-chat-message:hover .crewlet-chat-message__gutter-time,
|
|
10590
|
+
.crewlet-chat-message:focus-visible .crewlet-chat-message__gutter-time,
|
|
10591
|
+
.crewlet-chat-message:has(:focus-visible) .crewlet-chat-message__gutter-time,
|
|
10592
|
+
.crewlet-chat-message.is-active .crewlet-chat-message__gutter-time {
|
|
10593
|
+
visibility: visible;
|
|
10594
|
+
}
|
|
10595
|
+
|
|
10596
|
+
.crewlet-chat-message__main {
|
|
10597
|
+
display: flex;
|
|
10598
|
+
flex-direction: column;
|
|
10599
|
+
min-width: 0;
|
|
10600
|
+
}
|
|
10601
|
+
|
|
10602
|
+
/* THE HEAD IS SET AS TEXT, not as a flex row. Every line of it, the first or
|
|
10603
|
+
one a narrow pane wraps the time onto, is held to one body line by the
|
|
10604
|
+
block's strut, and the smaller meta stands on the name's baseline inside
|
|
10605
|
+
it. As a wrapping flex row the line grew a pixel to fit the time's own
|
|
10606
|
+
line box, and a time wrapped alone got a short line of its own. */
|
|
10607
|
+
.crewlet-chat-message__head {
|
|
10608
|
+
min-width: 0;
|
|
10609
|
+
line-height: calc(var(--crewlet-chat-text) * var(--crewlet-chat-line));
|
|
10610
|
+
}
|
|
10611
|
+
|
|
10612
|
+
/* The gap follows each part, so a part a narrow pane wraps starts flush. */
|
|
10613
|
+
.crewlet-chat-message__head > * {
|
|
10614
|
+
white-space: nowrap;
|
|
10615
|
+
}
|
|
10616
|
+
|
|
10617
|
+
.crewlet-chat-message__head > :not(:last-child) {
|
|
10618
|
+
margin-inline-end: var(--spacing-2);
|
|
10619
|
+
}
|
|
10620
|
+
|
|
10621
|
+
/* A label beside the name ("Agent") is centred on the lower-case letters, as
|
|
10622
|
+
text sets an inline mark. */
|
|
10623
|
+
.crewlet-chat-message__head > .crewlet-tag {
|
|
10624
|
+
vertical-align: middle;
|
|
10625
|
+
}
|
|
10626
|
+
|
|
10627
|
+
.crewlet-chat-message__author {
|
|
10628
|
+
color: var(--color-text-primary);
|
|
10629
|
+
font-weight: var(--font-weight-medium);
|
|
10630
|
+
}
|
|
10631
|
+
|
|
10632
|
+
/* A name that opens the author's profile reads as the name, not a button. */
|
|
10633
|
+
.crewlet-chat-message__author > button {
|
|
10634
|
+
padding: 0;
|
|
10635
|
+
border: 0;
|
|
10636
|
+
border-radius: var(--radius-xs);
|
|
10637
|
+
background: transparent;
|
|
10638
|
+
color: inherit;
|
|
10639
|
+
font: inherit;
|
|
10640
|
+
cursor: pointer;
|
|
10641
|
+
}
|
|
10642
|
+
|
|
10643
|
+
.crewlet-chat-message__author > button:hover {
|
|
10644
|
+
text-decoration: underline;
|
|
10645
|
+
text-underline-offset: 2px;
|
|
10646
|
+
}
|
|
10647
|
+
|
|
10648
|
+
.crewlet-chat-message__author > button:focus-visible {
|
|
10649
|
+
outline: 2px solid var(--color-focus);
|
|
10650
|
+
outline-offset: 2px;
|
|
10651
|
+
}
|
|
10652
|
+
|
|
10653
|
+
/* Meta on the head shares the name's baseline. A line height of its own
|
|
10654
|
+
would sit its smaller text lower in a box as tall as the name's and grow
|
|
10655
|
+
the line by a pixel, so it takes none. */
|
|
10656
|
+
.crewlet-chat-message__time {
|
|
10657
|
+
color: var(--color-text-tertiary);
|
|
10658
|
+
font-size: var(--crewlet-chat-meta);
|
|
10659
|
+
font-variant-numeric: tabular-nums;
|
|
10660
|
+
line-height: 1;
|
|
10661
|
+
}
|
|
10662
|
+
|
|
10663
|
+
.crewlet-chat-message__body {
|
|
10664
|
+
min-width: 0;
|
|
10665
|
+
color: var(--color-text-primary);
|
|
10666
|
+
overflow-wrap: anywhere;
|
|
10667
|
+
}
|
|
10668
|
+
|
|
10669
|
+
/* Emphasis in a message is the semibold step, as it is everywhere else in
|
|
10670
|
+
the product: the browser's own bold read heavier than the names. */
|
|
10671
|
+
.crewlet-chat-message__body :is(b, strong) {
|
|
10672
|
+
font-weight: var(--font-weight-semibold);
|
|
10673
|
+
}
|
|
10674
|
+
|
|
10675
|
+
/* Previews, reactions and the thread line: one stack, one gap. */
|
|
10676
|
+
.crewlet-chat-message__footer {
|
|
10677
|
+
display: flex;
|
|
10678
|
+
flex-direction: column;
|
|
10679
|
+
align-items: flex-start;
|
|
10680
|
+
gap: var(--crewlet-chat-stack);
|
|
10681
|
+
margin-top: var(--crewlet-chat-stack);
|
|
10682
|
+
}
|
|
10683
|
+
|
|
10684
|
+
/* NO PIECE UNDER A MESSAGE IS WIDER THAN ITS COLUMN. Stacked on the start
|
|
10685
|
+
edge, each piece takes its one-line width, and an agent's working line set
|
|
10686
|
+
it wider than a phone's column: the transcript scrolled sideways. */
|
|
10687
|
+
.crewlet-chat-message__footer > * {
|
|
10688
|
+
max-width: 100%;
|
|
10689
|
+
}
|
|
10690
|
+
|
|
10691
|
+
/* THE TOOLBAR STANDS ON THE ROW'S FIRST LINE, over the row above, and over
|
|
10692
|
+
the day's pinned pill as well as the rows: a toolbar that slid under the
|
|
10693
|
+
pill lost its middle buttons wherever the two crossed. */
|
|
10694
|
+
.crewlet-chat-message__actions {
|
|
10695
|
+
position: absolute;
|
|
10696
|
+
top: calc(var(--crewlet-chat-row-top) - var(--crewlet-chat-toolbar));
|
|
10697
|
+
right: var(--crewlet-chat-pad-x);
|
|
10698
|
+
z-index: calc(var(--z-index-sticky) + var(--z-index-raised));
|
|
10699
|
+
opacity: 0;
|
|
10700
|
+
pointer-events: none;
|
|
10701
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
10702
|
+
}
|
|
10703
|
+
|
|
10704
|
+
.crewlet-chat-message:hover > .crewlet-chat-message__actions,
|
|
10705
|
+
.crewlet-chat-message:focus-visible > .crewlet-chat-message__actions,
|
|
10706
|
+
.crewlet-chat-message:has(:focus-visible) > .crewlet-chat-message__actions,
|
|
10707
|
+
.crewlet-chat-message.is-active > .crewlet-chat-message__actions {
|
|
10708
|
+
opacity: 1;
|
|
10709
|
+
pointer-events: auto;
|
|
10710
|
+
}
|
|
10711
|
+
|
|
10712
|
+
/* With no row above to stand over (see ChatMessage.tsx), or when the host
|
|
10713
|
+
asks, it is drawn inside the row's own head. */
|
|
10714
|
+
.crewlet-chat-message.has-actions-inside > .crewlet-chat-message__actions {
|
|
10715
|
+
top: var(--spacing-1);
|
|
10716
|
+
}
|
|
10717
|
+
|
|
10718
|
+
/* A row's quiet controls, the add-reaction pill among them, show while the
|
|
10719
|
+
row is pointed at or holds keyboard focus, and while their picker is open. */
|
|
10720
|
+
.crewlet-chat-message .crewlet-reaction--add {
|
|
10721
|
+
opacity: 0;
|
|
10722
|
+
}
|
|
10723
|
+
|
|
10724
|
+
.crewlet-chat-message:hover .crewlet-reaction--add,
|
|
10725
|
+
.crewlet-chat-message:has(:focus-visible) .crewlet-reaction--add,
|
|
10726
|
+
.crewlet-chat-message.is-active .crewlet-reaction--add,
|
|
10727
|
+
.crewlet-chat-message .crewlet-reaction--add[aria-expanded='true'] {
|
|
10728
|
+
opacity: 1;
|
|
10729
|
+
}
|
|
10730
|
+
|
|
10731
|
+
/* A TOUCH SCREEN HAS NO HOVER: a tap on the row (which focuses it) shows the
|
|
10732
|
+
toolbar, so replying in a thread, saving and the More menu are reached by
|
|
10733
|
+
touch as well as by pointer and keyboard. The add pill is always shown
|
|
10734
|
+
there, so a reaction is one tap away without finding the toolbar first. */
|
|
10735
|
+
@media (hover: none) {
|
|
10736
|
+
.crewlet-chat-message:focus-within > .crewlet-chat-message__actions {
|
|
10737
|
+
opacity: 1;
|
|
10738
|
+
pointer-events: auto;
|
|
10739
|
+
}
|
|
10740
|
+
|
|
10741
|
+
.crewlet-chat-message .crewlet-reaction--add {
|
|
10742
|
+
opacity: 1;
|
|
10743
|
+
}
|
|
10744
|
+
}
|
|
10745
|
+
|
|
10746
|
+
/* The line under a message that was not sent. */
|
|
10747
|
+
.crewlet-chat-message-failure {
|
|
10748
|
+
display: flex;
|
|
10749
|
+
flex-wrap: wrap;
|
|
10750
|
+
align-items: center;
|
|
10751
|
+
gap: var(--spacing-1);
|
|
10752
|
+
color: var(--color-feedback-danger-ink);
|
|
10753
|
+
font-size: var(--crewlet-chat-meta);
|
|
10754
|
+
line-height: var(--crewlet-chat-line);
|
|
10755
|
+
}
|
|
10756
|
+
|
|
10757
|
+
.crewlet-chat-message-failure__words {
|
|
10758
|
+
margin-inline-end: var(--spacing-1);
|
|
10759
|
+
}
|
|
10760
|
+
|
|
10761
|
+
@media (prefers-reduced-motion: reduce) {
|
|
10762
|
+
.crewlet-chat-message {
|
|
10763
|
+
transition: none;
|
|
10764
|
+
}
|
|
10765
|
+
|
|
10766
|
+
.crewlet-chat-message.is-flash {
|
|
10767
|
+
animation: none;
|
|
10768
|
+
}
|
|
10769
|
+
|
|
10770
|
+
.crewlet-chat-message__actions {
|
|
10771
|
+
transition: none;
|
|
10772
|
+
}
|
|
10773
|
+
}
|
|
10774
|
+
|
|
10775
|
+
|
|
10776
|
+
/* ChatScale-L4SIHSKL.css */
|
|
10777
|
+
/*
|
|
10778
|
+
* ONE SCALE FOR A CONVERSATION. Every part of a transcript reads from these:
|
|
10779
|
+
* the message rows, their toolbar, reactions and thread line, the day's rule
|
|
10780
|
+
* and pill, the New line and the link previews. A name, the words under it
|
|
10781
|
+
* and the box they were typed in are one size, and everything around them
|
|
10782
|
+
* (times, counts, the second lines of previews) is one step down. A surface
|
|
10783
|
+
* that wants a denser or roomier transcript sets them once, on itself.
|
|
10784
|
+
*
|
|
10785
|
+
* A sheet of its own, imported by every part that reads it, so a consumer
|
|
10786
|
+
* that imports one part (`@crewlethq/ui/ChatDay`) still gets the scale.
|
|
10787
|
+
*/
|
|
10788
|
+
:root {
|
|
10789
|
+
/* The words: names, bodies and the message box, on one line height. */
|
|
10790
|
+
--crewlet-chat-text: var(--font-size-sm);
|
|
10791
|
+
--crewlet-chat-line: var(--font-line-height-normal);
|
|
10792
|
+
/* Times, counts, reactions and second lines: one step down. */
|
|
10793
|
+
--crewlet-chat-meta: var(--font-size-xs);
|
|
10794
|
+
/* The row's side inset, the face column, the gap after it, and the space
|
|
10795
|
+
between the pieces stacked under a message's words. */
|
|
10796
|
+
--crewlet-chat-pad-x: var(--spacing-5);
|
|
10797
|
+
--crewlet-chat-avatar: 36px;
|
|
10798
|
+
--crewlet-chat-gap: var(--spacing-3);
|
|
10799
|
+
--crewlet-chat-stack: 6px;
|
|
10800
|
+
/* One width for every link preview, so a stack of them shares both edges. */
|
|
10801
|
+
--crewlet-chat-card: 440px;
|
|
10802
|
+
/* A day: the pill's height, the room above and below its rule, and how far
|
|
10803
|
+
under the list's top edge the pill pins. A host with a bar floating over
|
|
10804
|
+
the list's top (an unread banner) moves the pin down past it. */
|
|
10805
|
+
--crewlet-chat-day-pill: 24px;
|
|
10806
|
+
--crewlet-chat-day-gap: var(--spacing-5);
|
|
10807
|
+
--crewlet-chat-day-pin: var(--spacing-3);
|
|
10808
|
+
/* The hover toolbar: a medium control, big enough to aim at while the
|
|
10809
|
+
pointer is passing, inside its inset and its hairline, twice. */
|
|
10810
|
+
--crewlet-chat-toolbar-inset: var(--spacing-1);
|
|
10811
|
+
--crewlet-chat-toolbar: calc(var(--size-control-md) + (var(--crewlet-chat-toolbar-inset) + 1px) * 2);
|
|
10812
|
+
/* The ground the transcript is set on. A host that sets it on another fill
|
|
10813
|
+
names that fill here, and everything lifted off the rows (the toolbar,
|
|
10814
|
+
the day's pill, the open thread line) is filled with it. */
|
|
10815
|
+
--crewlet-chat-ground: var(--color-surface-background);
|
|
10816
|
+
/* A row that names the reader: a light wash of the warning hue. */
|
|
10817
|
+
--crewlet-chat-mention: var(--color-feedback-warning-soft);
|
|
10818
|
+
}
|
|
10819
|
+
|
|
10820
|
+
|
|
10821
|
+
/* ChatThread-HAECJMP6.css */
|
|
9890
10822
|
/*
|
|
9891
10823
|
* A conversation as it grows: the scroller, the items a spacing step and a
|
|
9892
10824
|
* half apart on the panel's 16px inset, and the Jump to latest pill in a row
|
|
@@ -9942,6 +10874,23 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
9942
10874
|
flex: none;
|
|
9943
10875
|
}
|
|
9944
10876
|
|
|
10877
|
+
/*
|
|
10878
|
+
* A SHORT TRANSCRIPT RESTS ON ITS FOOT (`rest="end"`), against the composer
|
|
10879
|
+
* under it, as a conversation's newest messages always are, rather than
|
|
10880
|
+
* under the top with an empty band between it and the box. The scroller is a
|
|
10881
|
+
* column and the items take the room above them; a conversation's rows set
|
|
10882
|
+
* their own spacing, so the items keep no gap.
|
|
10883
|
+
*/
|
|
10884
|
+
.crewlet-chat-thread--rest-end .crewlet-chat-thread__scroller {
|
|
10885
|
+
display: flex;
|
|
10886
|
+
flex-direction: column;
|
|
10887
|
+
}
|
|
10888
|
+
|
|
10889
|
+
.crewlet-chat-thread--rest-end .crewlet-chat-thread__items {
|
|
10890
|
+
margin-top: auto;
|
|
10891
|
+
gap: 0;
|
|
10892
|
+
}
|
|
10893
|
+
|
|
9945
10894
|
/*
|
|
9946
10895
|
* The pill, centred in a row of its own under the log. IN FLOW, NOT FLOATING:
|
|
9947
10896
|
* laid over the scroller it covered the last lines of whatever was being read,
|
|
@@ -10446,6 +11395,117 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
10446
11395
|
}
|
|
10447
11396
|
|
|
10448
11397
|
|
|
11398
|
+
/* ChipField-D4CW6XFA.css */
|
|
11399
|
+
/*
|
|
11400
|
+
* ChipField: chosen items as chips inside the field, before a bare text box.
|
|
11401
|
+
* The chips and the box wrap as one line of words; the box takes whatever
|
|
11402
|
+
* width the last line leaves, and a line of its own when that is too little.
|
|
11403
|
+
*/
|
|
11404
|
+
.crewlet-chip-field {
|
|
11405
|
+
display: flex;
|
|
11406
|
+
flex-wrap: wrap;
|
|
11407
|
+
align-items: center;
|
|
11408
|
+
gap: var(--spacing-1);
|
|
11409
|
+
box-sizing: border-box;
|
|
11410
|
+
width: 100%;
|
|
11411
|
+
color: var(--color-text-primary);
|
|
11412
|
+
font-size: var(--font-size-sm);
|
|
11413
|
+
cursor: text;
|
|
11414
|
+
}
|
|
11415
|
+
|
|
11416
|
+
/* A field like any other: the field's fill, boundary and corner. */
|
|
11417
|
+
.crewlet-chip-field--boxed {
|
|
11418
|
+
min-height: var(--size-control-lg);
|
|
11419
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
11420
|
+
border: 1px solid var(--color-border-field);
|
|
11421
|
+
border-radius: var(--radius-md);
|
|
11422
|
+
background-color: var(--color-surface-subtle);
|
|
11423
|
+
}
|
|
11424
|
+
|
|
11425
|
+
/*
|
|
11426
|
+
* ONE RING, the one every field in this package draws: an outline over the
|
|
11427
|
+
* boundary, on the field rather than on the box inside it, because the
|
|
11428
|
+
* field is what the reader sees as the control. The selector names the box
|
|
11429
|
+
* rather than asking :focus-within, so tabbing to a chip's Remove control
|
|
11430
|
+
* rings that control alone, not the field round it as well.
|
|
11431
|
+
*/
|
|
11432
|
+
.crewlet-chip-field--boxed:has(.crewlet-chip-field__input:focus-visible) {
|
|
11433
|
+
outline: 2px solid var(--color-focus);
|
|
11434
|
+
outline-offset: -1px;
|
|
11435
|
+
}
|
|
11436
|
+
|
|
11437
|
+
/* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
|
|
11438
|
+
:where(:root[data-crewlet-focus='pointer']) .crewlet-chip-field--boxed:has(.crewlet-chip-field__input:focus-visible) {
|
|
11439
|
+
outline-width: 1px;
|
|
11440
|
+
outline-color: var(--color-border-selected);
|
|
11441
|
+
}
|
|
11442
|
+
|
|
11443
|
+
/*
|
|
11444
|
+
* The address line at the top of a view: full width, a rule under it, and
|
|
11445
|
+
* the view's own side inset (`--crewlet-chip-field-inset`, the chat's row
|
|
11446
|
+
* inset by default). Its focus is a bar along the rule; the transparent
|
|
11447
|
+
* outline is what forced colors, which drops the bar, draws instead.
|
|
11448
|
+
*/
|
|
11449
|
+
.crewlet-chip-field--bare {
|
|
11450
|
+
gap: var(--spacing-2);
|
|
11451
|
+
min-height: var(--size-shell-topbar);
|
|
11452
|
+
padding: var(--spacing-2) var(--crewlet-chip-field-inset, var(--spacing-5));
|
|
11453
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
11454
|
+
}
|
|
11455
|
+
|
|
11456
|
+
.crewlet-chip-field--bare:has(.crewlet-chip-field__input:focus-visible) {
|
|
11457
|
+
outline: 2px solid transparent;
|
|
11458
|
+
outline-offset: -2px;
|
|
11459
|
+
box-shadow: inset 0 -2px 0 var(--color-focus);
|
|
11460
|
+
}
|
|
11461
|
+
|
|
11462
|
+
.crewlet-chip-field__prefix {
|
|
11463
|
+
flex: none;
|
|
11464
|
+
color: var(--color-text-secondary);
|
|
11465
|
+
}
|
|
11466
|
+
|
|
11467
|
+
/* The list lends its chips to the field's own line (ChipField.tsx spells its
|
|
11468
|
+
role out, which a contents box can lose). */
|
|
11469
|
+
.crewlet-chip-field__chips {
|
|
11470
|
+
display: contents;
|
|
11471
|
+
list-style: none;
|
|
11472
|
+
}
|
|
11473
|
+
|
|
11474
|
+
.crewlet-chip-field__chip {
|
|
11475
|
+
display: inline-flex;
|
|
11476
|
+
min-width: 0;
|
|
11477
|
+
max-width: 100%;
|
|
11478
|
+
}
|
|
11479
|
+
|
|
11480
|
+
.crewlet-chip-field__input {
|
|
11481
|
+
flex: 1;
|
|
11482
|
+
min-width: 120px;
|
|
11483
|
+
height: var(--size-control-md);
|
|
11484
|
+
box-sizing: border-box;
|
|
11485
|
+
margin: 0;
|
|
11486
|
+
padding: 0 var(--spacing-1);
|
|
11487
|
+
border: 0;
|
|
11488
|
+
background: transparent;
|
|
11489
|
+
color: inherit;
|
|
11490
|
+
font: inherit;
|
|
11491
|
+
outline: none;
|
|
11492
|
+
}
|
|
11493
|
+
|
|
11494
|
+
.crewlet-chip-field--bare .crewlet-chip-field__input {
|
|
11495
|
+
padding-inline: 0;
|
|
11496
|
+
}
|
|
11497
|
+
|
|
11498
|
+
.crewlet-chip-field__input::placeholder {
|
|
11499
|
+
color: var(--color-text-tertiary);
|
|
11500
|
+
opacity: 1;
|
|
11501
|
+
}
|
|
11502
|
+
|
|
11503
|
+
.crewlet-chip-field.is-disabled {
|
|
11504
|
+
opacity: 0.6;
|
|
11505
|
+
cursor: not-allowed;
|
|
11506
|
+
}
|
|
11507
|
+
|
|
11508
|
+
|
|
10449
11509
|
/* ChoiceButtons-T3GG6VLG.css */
|
|
10450
11510
|
/*
|
|
10451
11511
|
* One answer, sent with one press: a column of buttons as tall as a touch
|
|
@@ -12367,7 +13427,332 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12367
13427
|
}
|
|
12368
13428
|
|
|
12369
13429
|
|
|
12370
|
-
/*
|
|
13430
|
+
/* CompactNav-CU2AQXBC.css */
|
|
13431
|
+
/*
|
|
13432
|
+
* The compact rail: each place its glyph's tile over its name, in one column.
|
|
13433
|
+
*
|
|
13434
|
+
* A PLACE IS 48PX TALL: a 26px tile, its name under it and a breath. Fourteen
|
|
13435
|
+
* places, two rules, and the rail's head and foot stand in a 900px window, so
|
|
13436
|
+
* the column a reader folded the rail to see more of the page never scrolls
|
|
13437
|
+
* on a laptop.
|
|
13438
|
+
*
|
|
13439
|
+
* Tokens only. The tile's sizes are component variables, so a surface that
|
|
13440
|
+
* draws the compact rail at another width changes them in one place.
|
|
13441
|
+
*/
|
|
13442
|
+
|
|
13443
|
+
.crewlet-compact-nav {
|
|
13444
|
+
--crewlet-compact-nav-tile-width: 36px;
|
|
13445
|
+
--crewlet-compact-nav-tile-height: var(--size-control-sm);
|
|
13446
|
+
--crewlet-compact-nav-glyph: 17px;
|
|
13447
|
+
width: 100%;
|
|
13448
|
+
min-width: 0;
|
|
13449
|
+
}
|
|
13450
|
+
|
|
13451
|
+
.crewlet-compact-nav__list {
|
|
13452
|
+
display: flex;
|
|
13453
|
+
flex-direction: column;
|
|
13454
|
+
align-items: stretch;
|
|
13455
|
+
margin: 0;
|
|
13456
|
+
padding: 0 var(--spacing-1);
|
|
13457
|
+
list-style: none;
|
|
13458
|
+
}
|
|
13459
|
+
|
|
13460
|
+
.crewlet-compact-nav__entry {
|
|
13461
|
+
display: flex;
|
|
13462
|
+
min-width: 0;
|
|
13463
|
+
}
|
|
13464
|
+
|
|
13465
|
+
/* A place is a link or a button, and a folded group is a button: one look for
|
|
13466
|
+
all three. The entry itself draws nothing; the tile is what lifts. */
|
|
13467
|
+
.crewlet-compact-nav__item {
|
|
13468
|
+
display: flex;
|
|
13469
|
+
flex-direction: column;
|
|
13470
|
+
align-items: center;
|
|
13471
|
+
gap: calc(var(--spacing-1) / 2);
|
|
13472
|
+
width: 100%;
|
|
13473
|
+
min-width: 0;
|
|
13474
|
+
margin: 0;
|
|
13475
|
+
padding: calc(var(--spacing-1) - 1px) 0 var(--spacing-1);
|
|
13476
|
+
border: 0;
|
|
13477
|
+
border-radius: var(--radius-md);
|
|
13478
|
+
background: transparent;
|
|
13479
|
+
color: var(--color-text-secondary);
|
|
13480
|
+
font: inherit;
|
|
13481
|
+
text-decoration: none;
|
|
13482
|
+
cursor: pointer;
|
|
13483
|
+
}
|
|
13484
|
+
|
|
13485
|
+
/* The ring is drawn on the tile (below), not round the whole entry. The
|
|
13486
|
+
entry's own outline is transparent rather than none, so forced colours,
|
|
13487
|
+
which paint a transparent outline in the system's ink, still draw one. */
|
|
13488
|
+
.crewlet-compact-nav__item:focus {
|
|
13489
|
+
outline: 2px solid transparent;
|
|
13490
|
+
}
|
|
13491
|
+
|
|
13492
|
+
.crewlet-compact-nav__tile {
|
|
13493
|
+
position: relative;
|
|
13494
|
+
display: inline-flex;
|
|
13495
|
+
align-items: center;
|
|
13496
|
+
justify-content: center;
|
|
13497
|
+
flex: none;
|
|
13498
|
+
width: var(--crewlet-compact-nav-tile-width);
|
|
13499
|
+
height: var(--crewlet-compact-nav-tile-height);
|
|
13500
|
+
border-radius: var(--radius-md);
|
|
13501
|
+
transition:
|
|
13502
|
+
background var(--motion-duration-fast) var(--motion-easing-default),
|
|
13503
|
+
color var(--motion-duration-fast) var(--motion-easing-default);
|
|
13504
|
+
}
|
|
13505
|
+
|
|
13506
|
+
/* A step larger than the full rail's 14px glyph: in the compact rail the
|
|
13507
|
+
glyph is the place's name at a glance, and the word under it is the
|
|
13508
|
+
caption. */
|
|
13509
|
+
.crewlet-compact-nav__tile > .crewlet-glyph {
|
|
13510
|
+
width: var(--crewlet-compact-nav-glyph);
|
|
13511
|
+
height: var(--crewlet-compact-nav-glyph);
|
|
13512
|
+
}
|
|
13513
|
+
|
|
13514
|
+
.crewlet-compact-nav__item:hover .crewlet-compact-nav__tile,
|
|
13515
|
+
.crewlet-compact-nav__item[data-open] .crewlet-compact-nav__tile {
|
|
13516
|
+
background: var(--color-surface-hover);
|
|
13517
|
+
color: var(--color-text-primary);
|
|
13518
|
+
}
|
|
13519
|
+
|
|
13520
|
+
.crewlet-compact-nav__item:hover .crewlet-compact-nav__label,
|
|
13521
|
+
.crewlet-compact-nav__item[data-open] .crewlet-compact-nav__label {
|
|
13522
|
+
color: var(--color-text-primary);
|
|
13523
|
+
}
|
|
13524
|
+
|
|
13525
|
+
/*
|
|
13526
|
+
* WHERE THE READER IS: the full rail's own current row, drawn on the tile.
|
|
13527
|
+
* Raised, the plain hairline as an OUTLINE (forced colours keep outlines and
|
|
13528
|
+
* drop backgrounds), and the primary ink. After :hover, so the current tile
|
|
13529
|
+
* shows its lift rather than the overlay. A folded group's tile is current
|
|
13530
|
+
* (`aria-current="true"`) while one of its places is.
|
|
13531
|
+
*/
|
|
13532
|
+
.crewlet-compact-nav__item[aria-current] .crewlet-compact-nav__tile {
|
|
13533
|
+
background: var(--color-surface-elevated);
|
|
13534
|
+
outline: 1px solid var(--color-border-default);
|
|
13535
|
+
outline-offset: -1px;
|
|
13536
|
+
color: var(--color-text-primary);
|
|
13537
|
+
}
|
|
13538
|
+
|
|
13539
|
+
.crewlet-compact-nav__item[aria-current] .crewlet-compact-nav__label {
|
|
13540
|
+
color: var(--color-text-primary);
|
|
13541
|
+
font-weight: var(--font-weight-semibold);
|
|
13542
|
+
}
|
|
13543
|
+
|
|
13544
|
+
/* The ring is the tile's, after the current rule that draws its hairline on
|
|
13545
|
+
the same property, so a focused current tile draws the ring. */
|
|
13546
|
+
.crewlet-compact-nav__item:focus-visible .crewlet-compact-nav__tile {
|
|
13547
|
+
outline: 2px solid var(--color-focus);
|
|
13548
|
+
outline-offset: 0;
|
|
13549
|
+
}
|
|
13550
|
+
|
|
13551
|
+
.crewlet-compact-nav__label {
|
|
13552
|
+
max-width: 100%;
|
|
13553
|
+
box-sizing: border-box;
|
|
13554
|
+
padding: 0 calc(var(--spacing-1) / 2);
|
|
13555
|
+
overflow: hidden;
|
|
13556
|
+
color: var(--color-text-secondary);
|
|
13557
|
+
font-family: var(--font-family-sans);
|
|
13558
|
+
font-size: var(--font-size-2xs);
|
|
13559
|
+
font-weight: var(--font-weight-medium);
|
|
13560
|
+
line-height: var(--font-line-height-tight);
|
|
13561
|
+
text-align: center;
|
|
13562
|
+
text-overflow: ellipsis;
|
|
13563
|
+
white-space: nowrap;
|
|
13564
|
+
}
|
|
13565
|
+
|
|
13566
|
+
/* A place the reader holds no access to keeps its name and its key, in the
|
|
13567
|
+
quiet ink, as a locked group's rows do in the full rail. */
|
|
13568
|
+
.crewlet-compact-nav__item--locked:not([aria-current]):not(:hover) .crewlet-compact-nav__label,
|
|
13569
|
+
.crewlet-compact-nav__item--locked:not([aria-current]):not(:hover) .crewlet-compact-nav__tile {
|
|
13570
|
+
color: var(--color-text-tertiary);
|
|
13571
|
+
}
|
|
13572
|
+
|
|
13573
|
+
/*
|
|
13574
|
+
* THE FIGURE RIDES THE TILE'S TOP END CORNER, cut out of the rail by a ring of
|
|
13575
|
+
* the rail's own ground, so it reads apart from the glyph under it. It is the
|
|
13576
|
+
* one count badge size the whole chrome draws (`--size-badge`), the accent
|
|
13577
|
+
* fill where it is waiting on the reader and the raised ground where it is
|
|
13578
|
+
* only a tally.
|
|
13579
|
+
*/
|
|
13580
|
+
.crewlet-compact-nav__figure {
|
|
13581
|
+
position: absolute;
|
|
13582
|
+
top: calc(var(--spacing-1) * -1 - 1px);
|
|
13583
|
+
right: calc(var(--spacing-2) * -1 + 1px);
|
|
13584
|
+
display: inline-flex;
|
|
13585
|
+
align-items: center;
|
|
13586
|
+
justify-content: center;
|
|
13587
|
+
min-width: var(--size-badge);
|
|
13588
|
+
height: var(--size-badge);
|
|
13589
|
+
box-sizing: border-box;
|
|
13590
|
+
padding: 0 var(--size-badge-pad);
|
|
13591
|
+
border: 2px solid var(--color-surface-frame);
|
|
13592
|
+
border-radius: var(--radius-pill);
|
|
13593
|
+
background: var(--color-surface-elevated);
|
|
13594
|
+
color: var(--color-text-secondary);
|
|
13595
|
+
font-family: var(--font-family-sans);
|
|
13596
|
+
font-size: var(--font-size-badge);
|
|
13597
|
+
font-weight: var(--font-weight-semibold);
|
|
13598
|
+
font-variant-numeric: tabular-nums;
|
|
13599
|
+
line-height: 1;
|
|
13600
|
+
}
|
|
13601
|
+
|
|
13602
|
+
.crewlet-compact-nav__figure--badge {
|
|
13603
|
+
background: var(--color-brand-accent);
|
|
13604
|
+
color: var(--color-text-on-accent);
|
|
13605
|
+
}
|
|
13606
|
+
|
|
13607
|
+
/* A short rule between two runs of tiles, centred in the column. */
|
|
13608
|
+
.crewlet-compact-nav__separator {
|
|
13609
|
+
display: flex;
|
|
13610
|
+
justify-content: center;
|
|
13611
|
+
padding: calc(var(--spacing-1) + var(--spacing-1) / 2) 0;
|
|
13612
|
+
}
|
|
13613
|
+
|
|
13614
|
+
.crewlet-compact-nav__rule {
|
|
13615
|
+
width: var(--spacing-6);
|
|
13616
|
+
height: 1px;
|
|
13617
|
+
background: var(--color-border-default);
|
|
13618
|
+
}
|
|
13619
|
+
|
|
13620
|
+
/*
|
|
13621
|
+
* THE FLYOUT: a folded group's places beside the rail, on the popover's rung.
|
|
13622
|
+
* Its rows are the full rail's rows at the menu's step: the glyph, the name,
|
|
13623
|
+
* and the figure at the end, so the places read as they do unfolded.
|
|
13624
|
+
*/
|
|
13625
|
+
.crewlet-compact-nav__flyout {
|
|
13626
|
+
position: fixed;
|
|
13627
|
+
display: flex;
|
|
13628
|
+
flex-direction: column;
|
|
13629
|
+
gap: 1px;
|
|
13630
|
+
min-width: 208px;
|
|
13631
|
+
max-width: min(320px, calc(100vw - var(--spacing-4)));
|
|
13632
|
+
box-sizing: border-box;
|
|
13633
|
+
padding: var(--spacing-1);
|
|
13634
|
+
border: 1px solid var(--color-border-default);
|
|
13635
|
+
border-radius: var(--radius-lg);
|
|
13636
|
+
background: var(--color-surface-elevated);
|
|
13637
|
+
box-shadow: var(--shadow-lg);
|
|
13638
|
+
font-family: var(--font-family-sans);
|
|
13639
|
+
animation: crewlet-compact-nav-flyout-in var(--motion-duration-fast) var(--motion-easing-out);
|
|
13640
|
+
}
|
|
13641
|
+
|
|
13642
|
+
/* Inside a LayerHost the coordinates are the host's own, so the flyout is
|
|
13643
|
+
absolute within it rather than fixed against the window. */
|
|
13644
|
+
.crewlet-compact-nav__flyout--in-host {
|
|
13645
|
+
position: absolute;
|
|
13646
|
+
}
|
|
13647
|
+
|
|
13648
|
+
@keyframes crewlet-compact-nav-flyout-in {
|
|
13649
|
+
from {
|
|
13650
|
+
opacity: 0;
|
|
13651
|
+
transform: translateX(calc(var(--spacing-1) * -1));
|
|
13652
|
+
}
|
|
13653
|
+
}
|
|
13654
|
+
|
|
13655
|
+
.crewlet-compact-nav__flyout-head {
|
|
13656
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
13657
|
+
color: var(--color-text-secondary);
|
|
13658
|
+
font-size: var(--font-size-xs);
|
|
13659
|
+
font-weight: var(--font-weight-semibold);
|
|
13660
|
+
line-height: var(--font-line-height-tight);
|
|
13661
|
+
}
|
|
13662
|
+
|
|
13663
|
+
/* A router's link is drawn by the caller; its wrapper stays out of the box tree. */
|
|
13664
|
+
.crewlet-compact-nav__link-slot {
|
|
13665
|
+
display: contents;
|
|
13666
|
+
}
|
|
13667
|
+
|
|
13668
|
+
.crewlet-compact-nav__link {
|
|
13669
|
+
display: flex;
|
|
13670
|
+
align-items: center;
|
|
13671
|
+
gap: var(--spacing-2);
|
|
13672
|
+
min-width: 0;
|
|
13673
|
+
height: var(--size-control-md);
|
|
13674
|
+
padding: 0 var(--spacing-2);
|
|
13675
|
+
border-radius: var(--radius-md);
|
|
13676
|
+
color: var(--color-text-secondary);
|
|
13677
|
+
font-size: var(--font-size-sm);
|
|
13678
|
+
text-decoration: none;
|
|
13679
|
+
outline: none;
|
|
13680
|
+
transition:
|
|
13681
|
+
background var(--motion-duration-fast) var(--motion-easing-default),
|
|
13682
|
+
color var(--motion-duration-fast) var(--motion-easing-default);
|
|
13683
|
+
}
|
|
13684
|
+
|
|
13685
|
+
.crewlet-compact-nav__link:hover,
|
|
13686
|
+
.crewlet-compact-nav__link:focus-visible {
|
|
13687
|
+
background: var(--color-surface-hover);
|
|
13688
|
+
color: var(--color-text-primary);
|
|
13689
|
+
}
|
|
13690
|
+
|
|
13691
|
+
/* The place the reader is on: the selected fill, the primary ink, a step
|
|
13692
|
+
heavier. Declared after the hover so the selected fill holds under it. */
|
|
13693
|
+
.crewlet-compact-nav__link[aria-current='page'] {
|
|
13694
|
+
background: var(--color-surface-selected);
|
|
13695
|
+
color: var(--color-text-primary);
|
|
13696
|
+
font-weight: var(--font-weight-semibold);
|
|
13697
|
+
}
|
|
13698
|
+
|
|
13699
|
+
.crewlet-compact-nav__link:focus-visible {
|
|
13700
|
+
outline: 2px solid var(--color-focus);
|
|
13701
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
13702
|
+
}
|
|
13703
|
+
|
|
13704
|
+
.crewlet-compact-nav__link--locked:not([aria-current]):not(:hover):not(:focus-visible) {
|
|
13705
|
+
color: var(--color-text-tertiary);
|
|
13706
|
+
}
|
|
13707
|
+
|
|
13708
|
+
.crewlet-compact-nav__link-icon {
|
|
13709
|
+
display: inline-flex;
|
|
13710
|
+
flex: none;
|
|
13711
|
+
}
|
|
13712
|
+
|
|
13713
|
+
.crewlet-compact-nav__link-label {
|
|
13714
|
+
flex: 1 1 auto;
|
|
13715
|
+
min-width: 0;
|
|
13716
|
+
overflow: hidden;
|
|
13717
|
+
text-overflow: ellipsis;
|
|
13718
|
+
white-space: nowrap;
|
|
13719
|
+
}
|
|
13720
|
+
|
|
13721
|
+
.crewlet-compact-nav__link-figure {
|
|
13722
|
+
display: inline-flex;
|
|
13723
|
+
align-items: center;
|
|
13724
|
+
justify-content: center;
|
|
13725
|
+
flex: none;
|
|
13726
|
+
min-width: var(--size-badge);
|
|
13727
|
+
height: var(--size-badge);
|
|
13728
|
+
box-sizing: border-box;
|
|
13729
|
+
padding: 0 var(--size-badge-pad);
|
|
13730
|
+
border-radius: var(--radius-pill);
|
|
13731
|
+
color: var(--color-text-tertiary);
|
|
13732
|
+
font-size: var(--font-size-badge);
|
|
13733
|
+
font-weight: var(--font-weight-semibold);
|
|
13734
|
+
font-variant-numeric: tabular-nums;
|
|
13735
|
+
line-height: 1;
|
|
13736
|
+
}
|
|
13737
|
+
|
|
13738
|
+
.crewlet-compact-nav__link-figure--badge {
|
|
13739
|
+
background: var(--color-brand-accent);
|
|
13740
|
+
color: var(--color-text-on-accent);
|
|
13741
|
+
}
|
|
13742
|
+
|
|
13743
|
+
@media (prefers-reduced-motion: reduce) {
|
|
13744
|
+
.crewlet-compact-nav__tile,
|
|
13745
|
+
.crewlet-compact-nav__link {
|
|
13746
|
+
transition: none;
|
|
13747
|
+
}
|
|
13748
|
+
|
|
13749
|
+
.crewlet-compact-nav__flyout {
|
|
13750
|
+
animation: none;
|
|
13751
|
+
}
|
|
13752
|
+
}
|
|
13753
|
+
|
|
13754
|
+
|
|
13755
|
+
/* Composer-ZEGHEAFE.css */
|
|
12371
13756
|
/*
|
|
12372
13757
|
* A message written in place: the field and its footer strip in one box. The
|
|
12373
13758
|
* BOX takes the focus ring every field in the package draws (see Input.css):
|
|
@@ -12506,6 +13891,32 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12506
13891
|
padding: var(--spacing-2) var(--spacing-3) 0;
|
|
12507
13892
|
}
|
|
12508
13893
|
|
|
13894
|
+
/*
|
|
13895
|
+
* THE FORMATTING ROW, along the box's top on the field's own inset less the
|
|
13896
|
+
* small tool's own room round its glyph, so the first glyph starts on the
|
|
13897
|
+
* words' line. It belongs to the field rather than to a strip of its own: no
|
|
13898
|
+
* rule under it.
|
|
13899
|
+
*/
|
|
13900
|
+
.crewlet-composer__toolbar {
|
|
13901
|
+
display: flex;
|
|
13902
|
+
align-items: center;
|
|
13903
|
+
min-width: 0;
|
|
13904
|
+
padding: var(--spacing-1) var(--spacing-1) 0 calc(var(--spacing-3) - (var(--size-control-sm) - var(--font-size-xs)) / 2);
|
|
13905
|
+
}
|
|
13906
|
+
|
|
13907
|
+
/*
|
|
13908
|
+
* THE TOOLS AT THE FOOTER'S START, a tight row whose first glyph starts on
|
|
13909
|
+
* the words' line, as the formatting row's does. The spacer after them puts
|
|
13910
|
+
* the actions at the end.
|
|
13911
|
+
*/
|
|
13912
|
+
.crewlet-composer__tools {
|
|
13913
|
+
display: flex;
|
|
13914
|
+
align-items: center;
|
|
13915
|
+
gap: 2px;
|
|
13916
|
+
min-width: 0;
|
|
13917
|
+
margin-inline-start: calc(-1 * (var(--size-control-sm) - var(--font-size-xs)) / 2);
|
|
13918
|
+
}
|
|
13919
|
+
|
|
12509
13920
|
/*
|
|
12510
13921
|
* DISABLED, AS A FIELD IS: the whole box at the disabled field's 0.6 and the
|
|
12511
13922
|
* not-allowed cursor, so it no longer reads as somewhere to type. Faded once:
|
|
@@ -12583,6 +13994,51 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12583
13994
|
}
|
|
12584
13995
|
}
|
|
12585
13996
|
|
|
13997
|
+
/*
|
|
13998
|
+
* A CONVERSATION'S MESSAGE BOX (`appearance="chat"`), on the transcript's own
|
|
13999
|
+
* scale (ChatMessage/ChatScale.css): the large corner on the transcript's
|
|
14000
|
+
* ground with the row wash laid over it, a step lighter than the list, and a
|
|
14001
|
+
* small shadow, so the box sits just above the messages, inside the edge
|
|
14002
|
+
* scale's strong step, the edge a field draws. The words are set at the
|
|
14003
|
+
* transcript's size on one line to start. The footer belongs to the field
|
|
14004
|
+
* rather than standing as a strip under it: no rule and no ground of its own.
|
|
14005
|
+
*/
|
|
14006
|
+
.crewlet-composer--chat {
|
|
14007
|
+
border-color: var(--color-edge-strong);
|
|
14008
|
+
background:
|
|
14009
|
+
linear-gradient(var(--color-fill-row), var(--color-fill-row)),
|
|
14010
|
+
var(--crewlet-chat-ground);
|
|
14011
|
+
box-shadow: var(--shadow-xs);
|
|
14012
|
+
}
|
|
14013
|
+
|
|
14014
|
+
.crewlet-composer--chat .crewlet-composer__field {
|
|
14015
|
+
min-height: 0;
|
|
14016
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
14017
|
+
font-size: var(--crewlet-chat-text);
|
|
14018
|
+
line-height: var(--crewlet-chat-line);
|
|
14019
|
+
}
|
|
14020
|
+
|
|
14021
|
+
.crewlet-composer--chat .crewlet-composer__footer {
|
|
14022
|
+
gap: 2px;
|
|
14023
|
+
padding: var(--spacing-1);
|
|
14024
|
+
padding-inline-start: var(--spacing-3);
|
|
14025
|
+
border-top: 0;
|
|
14026
|
+
background: transparent;
|
|
14027
|
+
}
|
|
14028
|
+
|
|
14029
|
+
/* A tool whose menu or picker is open reads as held down. */
|
|
14030
|
+
.crewlet-composer--chat .crewlet-composer__tools [aria-expanded='true'] {
|
|
14031
|
+
background: var(--color-surface-pressed);
|
|
14032
|
+
color: var(--color-text-primary);
|
|
14033
|
+
}
|
|
14034
|
+
|
|
14035
|
+
/* The formatting row's glyphs rest in the tertiary ink while the box is not
|
|
14036
|
+
in use, so the row reads as part of the field rather than as a toolbar
|
|
14037
|
+
competing with the conversation, and take their own ink once it is. */
|
|
14038
|
+
.crewlet-composer--chat:not(:focus-within) .crewlet-composer__toolbar :is(button, [role='button']):not(:hover) {
|
|
14039
|
+
color: var(--color-text-tertiary);
|
|
14040
|
+
}
|
|
14041
|
+
|
|
12586
14042
|
|
|
12587
14043
|
/* ConflictNote-OP64JJ6T.css */
|
|
12588
14044
|
/* ConflictNote: a refused write's sentence in the danger ink, with its glyph
|
|
@@ -12933,7 +14389,7 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12933
14389
|
}
|
|
12934
14390
|
|
|
12935
14391
|
|
|
12936
|
-
/* Count-
|
|
14392
|
+
/* Count-2HXBBYPO.css */
|
|
12937
14393
|
/*
|
|
12938
14394
|
* The count pill. One neutral look, deliberately: see the component doc for
|
|
12939
14395
|
* why a count is never tinted.
|
|
@@ -12960,6 +14416,25 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
|
|
|
12960
14416
|
line-height: round(nearest, calc(var(--font-line-height-body) * 1em), 1px);
|
|
12961
14417
|
}
|
|
12962
14418
|
|
|
14419
|
+
/*
|
|
14420
|
+
* WHAT WAITS ON THE READER (`tone="attention"`): the accent pill every count
|
|
14421
|
+
* of that kind is drawn as, wherever it stands, at the badge's own size: 16px
|
|
14422
|
+
* tall and at least as wide, its figure at the badge step in the semibold
|
|
14423
|
+
* weight. At 18px with an 11px figure such a badge read louder than the name
|
|
14424
|
+
* beside it.
|
|
14425
|
+
*/
|
|
14426
|
+
.crewlet-count--attention {
|
|
14427
|
+
box-sizing: border-box;
|
|
14428
|
+
min-width: var(--size-badge);
|
|
14429
|
+
height: var(--size-badge);
|
|
14430
|
+
padding: 0 var(--size-badge-pad);
|
|
14431
|
+
background: var(--color-brand-accent);
|
|
14432
|
+
color: var(--color-text-on-accent);
|
|
14433
|
+
font-size: var(--font-size-badge);
|
|
14434
|
+
font-weight: var(--font-weight-semibold);
|
|
14435
|
+
line-height: 1;
|
|
14436
|
+
}
|
|
14437
|
+
|
|
12963
14438
|
|
|
12964
14439
|
/* CursorFlag-AJQJBUGY.css */
|
|
12965
14440
|
/*
|
|
@@ -18663,6 +20138,72 @@ svg.crewlet-datetime__chevron {
|
|
|
18663
20138
|
}
|
|
18664
20139
|
|
|
18665
20140
|
|
|
20141
|
+
/* EmojiPicker-FMWYN2WX.css */
|
|
20142
|
+
/*
|
|
20143
|
+
* A searchable grid of emoji in a popover: the field, then each group under
|
|
20144
|
+
* its quiet heading, eight to a row, in a scroller of its own.
|
|
20145
|
+
*/
|
|
20146
|
+
|
|
20147
|
+
.crewlet-emoji-picker__body {
|
|
20148
|
+
display: flex;
|
|
20149
|
+
flex-direction: column;
|
|
20150
|
+
gap: var(--spacing-2);
|
|
20151
|
+
width: 296px;
|
|
20152
|
+
max-width: 100%;
|
|
20153
|
+
box-sizing: border-box;
|
|
20154
|
+
padding: var(--spacing-2);
|
|
20155
|
+
}
|
|
20156
|
+
|
|
20157
|
+
.crewlet-emoji-picker__scroll {
|
|
20158
|
+
max-height: 240px;
|
|
20159
|
+
overflow-y: auto;
|
|
20160
|
+
overscroll-behavior: contain;
|
|
20161
|
+
}
|
|
20162
|
+
|
|
20163
|
+
/* A group's heading, in the meta register at the regular weight. */
|
|
20164
|
+
.crewlet-emoji-picker__group {
|
|
20165
|
+
padding: var(--spacing-2) var(--spacing-1) var(--spacing-1);
|
|
20166
|
+
color: var(--color-text-tertiary);
|
|
20167
|
+
font-size: var(--font-size-2xs);
|
|
20168
|
+
font-weight: var(--font-weight-regular);
|
|
20169
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
20170
|
+
text-transform: uppercase;
|
|
20171
|
+
}
|
|
20172
|
+
|
|
20173
|
+
.crewlet-emoji-picker__grid {
|
|
20174
|
+
display: grid;
|
|
20175
|
+
grid-template-columns: repeat(var(--crewlet-emoji-picker-columns), minmax(0, 1fr));
|
|
20176
|
+
gap: 2px;
|
|
20177
|
+
}
|
|
20178
|
+
|
|
20179
|
+
.crewlet-emoji-picker__cell {
|
|
20180
|
+
aspect-ratio: 1;
|
|
20181
|
+
padding: 0;
|
|
20182
|
+
border: 0;
|
|
20183
|
+
border-radius: var(--radius-sm);
|
|
20184
|
+
background: transparent;
|
|
20185
|
+
font-size: var(--font-size-lg);
|
|
20186
|
+
line-height: 1;
|
|
20187
|
+
cursor: pointer;
|
|
20188
|
+
}
|
|
20189
|
+
|
|
20190
|
+
.crewlet-emoji-picker__cell:hover {
|
|
20191
|
+
background: var(--color-surface-hover);
|
|
20192
|
+
}
|
|
20193
|
+
|
|
20194
|
+
.crewlet-emoji-picker__cell:focus-visible {
|
|
20195
|
+
background: var(--color-surface-hover);
|
|
20196
|
+
outline: 2px solid var(--color-focus);
|
|
20197
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
20198
|
+
}
|
|
20199
|
+
|
|
20200
|
+
.crewlet-emoji-picker__none {
|
|
20201
|
+
margin: var(--spacing-3) var(--spacing-1);
|
|
20202
|
+
color: var(--color-text-tertiary);
|
|
20203
|
+
font-size: var(--font-size-sm);
|
|
20204
|
+
}
|
|
20205
|
+
|
|
20206
|
+
|
|
18666
20207
|
/* EmptyState-7L4UAQBX.css */
|
|
18667
20208
|
/*
|
|
18668
20209
|
* The empty state.
|
|
@@ -20379,7 +21920,7 @@ a.crewlet-icon-btn {
|
|
|
20379
21920
|
.crewlet-icon-tile--blue { --crewlet-icon-tile-fill: var(--color-node-blue-fill); --crewlet-icon-tile-ink: var(--color-node-blue-ink); }
|
|
20380
21921
|
|
|
20381
21922
|
|
|
20382
|
-
/* ImageUpload-
|
|
21923
|
+
/* ImageUpload-IFXZROFZ.css */
|
|
20383
21924
|
/*
|
|
20384
21925
|
* ImageUpload, the click-to-upload affordance built on Avatar.
|
|
20385
21926
|
*
|
|
@@ -20426,34 +21967,16 @@ a.crewlet-icon-btn {
|
|
|
20426
21967
|
cursor: pointer;
|
|
20427
21968
|
}
|
|
20428
21969
|
|
|
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
21970
|
/* 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-
|
|
21971
|
+
rather than a step: Avatar moves a face's corner with its box, so a trigger
|
|
21972
|
+
pinned to one step is rounder or squarer than the face under it at every
|
|
21973
|
+
size but one, and the face's corners show through the overlay. Every face
|
|
21974
|
+
is one shape, a person's and an agent's alike, so one rule serves both. */
|
|
21975
|
+
.crewlet-image-upload__trigger,
|
|
21976
|
+
.crewlet-image-upload__overlay {
|
|
20442
21977
|
border-radius: var(--crewlet-image-upload-corner);
|
|
20443
21978
|
}
|
|
20444
21979
|
|
|
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
21980
|
.crewlet-image-upload__trigger:disabled {
|
|
20458
21981
|
cursor: default;
|
|
20459
21982
|
}
|
|
@@ -20552,19 +22075,6 @@ a.crewlet-icon-btn {
|
|
|
20552
22075
|
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
20553
22076
|
}
|
|
20554
22077
|
|
|
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
22078
|
.crewlet-image-upload:hover .crewlet-image-upload__remove,
|
|
20569
22079
|
.crewlet-image-upload__remove:focus-visible {
|
|
20570
22080
|
opacity: 1;
|
|
@@ -22731,6 +24241,164 @@ a.crewlet-icon-btn {
|
|
|
22731
24241
|
}
|
|
22732
24242
|
|
|
22733
24243
|
|
|
24244
|
+
/* LinkCard-5I4MYU6I.css */
|
|
24245
|
+
/*
|
|
24246
|
+
* LinkCard: what a link points at, unfurled under its message.
|
|
24247
|
+
*
|
|
24248
|
+
* AN UNFURL, NOT A CARD. No box and no fill: a slim bar on the left in the
|
|
24249
|
+
* status's line colour (the medium edge with none), and the lines beside it
|
|
24250
|
+
* in the dashboard's own type (the title in the primary ink, the small meta
|
|
24251
|
+
* under it), so a preview reads as part of its message. One width for every
|
|
24252
|
+
* preview (ChatScale.css), so a stack of them shares both edges.
|
|
24253
|
+
*/
|
|
24254
|
+
.crewlet-link-card {
|
|
24255
|
+
--crewlet-link-card-bar: 3px;
|
|
24256
|
+
--crewlet-link-card-tone: var(--color-edge-medium);
|
|
24257
|
+
--crewlet-link-card-dot: var(--color-text-tertiary);
|
|
24258
|
+
position: relative;
|
|
24259
|
+
display: flex;
|
|
24260
|
+
flex-direction: column;
|
|
24261
|
+
align-items: flex-start;
|
|
24262
|
+
gap: 2px;
|
|
24263
|
+
width: min(100%, var(--crewlet-chat-card));
|
|
24264
|
+
box-sizing: border-box;
|
|
24265
|
+
padding: 2px 0 2px calc(var(--crewlet-link-card-bar) + var(--spacing-3));
|
|
24266
|
+
border-radius: var(--radius-xs);
|
|
24267
|
+
color: var(--color-text-secondary);
|
|
24268
|
+
font-size: var(--font-size-xs);
|
|
24269
|
+
line-height: var(--font-line-height-snug);
|
|
24270
|
+
text-decoration: none;
|
|
24271
|
+
}
|
|
24272
|
+
|
|
24273
|
+
.crewlet-link-card::before {
|
|
24274
|
+
content: '';
|
|
24275
|
+
position: absolute;
|
|
24276
|
+
inset-block: 0;
|
|
24277
|
+
left: 0;
|
|
24278
|
+
width: var(--crewlet-link-card-bar);
|
|
24279
|
+
border-radius: var(--radius-pill);
|
|
24280
|
+
background: var(--crewlet-link-card-tone);
|
|
24281
|
+
}
|
|
24282
|
+
|
|
24283
|
+
/* The bar takes the tone's line colour; the status dot, small enough to
|
|
24284
|
+
carry it, the tone's full colour, so the status reads in both modes. */
|
|
24285
|
+
.crewlet-link-card--info {
|
|
24286
|
+
--crewlet-link-card-tone: var(--color-feedback-info-line);
|
|
24287
|
+
--crewlet-link-card-dot: var(--color-feedback-info);
|
|
24288
|
+
}
|
|
24289
|
+
|
|
24290
|
+
.crewlet-link-card--success {
|
|
24291
|
+
--crewlet-link-card-tone: var(--color-feedback-success-line);
|
|
24292
|
+
--crewlet-link-card-dot: var(--color-feedback-success);
|
|
24293
|
+
}
|
|
24294
|
+
|
|
24295
|
+
.crewlet-link-card--warning {
|
|
24296
|
+
--crewlet-link-card-tone: var(--color-feedback-warning-line);
|
|
24297
|
+
--crewlet-link-card-dot: var(--color-feedback-warning);
|
|
24298
|
+
}
|
|
24299
|
+
|
|
24300
|
+
.crewlet-link-card--danger {
|
|
24301
|
+
--crewlet-link-card-tone: var(--color-feedback-danger-line);
|
|
24302
|
+
--crewlet-link-card-dot: var(--color-feedback-danger);
|
|
24303
|
+
}
|
|
24304
|
+
|
|
24305
|
+
/* No box to ring over: the ring stands off the preview's words. */
|
|
24306
|
+
.crewlet-link-card:focus-visible {
|
|
24307
|
+
outline: 2px solid var(--color-focus);
|
|
24308
|
+
outline-offset: 2px;
|
|
24309
|
+
}
|
|
24310
|
+
|
|
24311
|
+
/* The app it comes from: its mark and its name, small and quiet. */
|
|
24312
|
+
.crewlet-link-card__source {
|
|
24313
|
+
display: inline-flex;
|
|
24314
|
+
align-items: center;
|
|
24315
|
+
gap: var(--spacing-1);
|
|
24316
|
+
}
|
|
24317
|
+
|
|
24318
|
+
.crewlet-link-card__mark,
|
|
24319
|
+
.crewlet-link-card__face {
|
|
24320
|
+
display: inline-flex;
|
|
24321
|
+
flex: none;
|
|
24322
|
+
}
|
|
24323
|
+
|
|
24324
|
+
/* The title in the primary ink at the regular weight, two lines at most;
|
|
24325
|
+
under the pointer it takes the accent ink and an underline. */
|
|
24326
|
+
.crewlet-link-card__title {
|
|
24327
|
+
display: -webkit-box;
|
|
24328
|
+
max-width: 100%;
|
|
24329
|
+
overflow: hidden;
|
|
24330
|
+
-webkit-box-orient: vertical;
|
|
24331
|
+
-webkit-line-clamp: 2;
|
|
24332
|
+
color: var(--color-text-primary);
|
|
24333
|
+
font-size: var(--font-size-compact);
|
|
24334
|
+
font-weight: var(--font-weight-regular);
|
|
24335
|
+
overflow-wrap: anywhere;
|
|
24336
|
+
}
|
|
24337
|
+
|
|
24338
|
+
/* THE TITLE ALONE IS UNDERLINED. The document's base underlines every link
|
|
24339
|
+
under the pointer, and an underline on the link runs through all of its
|
|
24340
|
+
lines (the source, the details, the owner), which no line inside can
|
|
24341
|
+
take off again. */
|
|
24342
|
+
a.crewlet-link-card:hover {
|
|
24343
|
+
text-decoration: none;
|
|
24344
|
+
}
|
|
24345
|
+
|
|
24346
|
+
a.crewlet-link-card:hover .crewlet-link-card__title {
|
|
24347
|
+
color: var(--color-brand-accent-ink);
|
|
24348
|
+
text-decoration: underline;
|
|
24349
|
+
text-underline-offset: 2px;
|
|
24350
|
+
}
|
|
24351
|
+
|
|
24352
|
+
.crewlet-link-card__code {
|
|
24353
|
+
color: var(--color-text-secondary);
|
|
24354
|
+
}
|
|
24355
|
+
|
|
24356
|
+
.crewlet-link-card__meta {
|
|
24357
|
+
max-width: 100%;
|
|
24358
|
+
overflow: hidden;
|
|
24359
|
+
text-overflow: ellipsis;
|
|
24360
|
+
white-space: nowrap;
|
|
24361
|
+
}
|
|
24362
|
+
|
|
24363
|
+
/* Status and owner as words on one line: a dot in the status's colour, and
|
|
24364
|
+
a small face with the owner's name. */
|
|
24365
|
+
.crewlet-link-card__fields {
|
|
24366
|
+
display: flex;
|
|
24367
|
+
flex-wrap: wrap;
|
|
24368
|
+
align-items: center;
|
|
24369
|
+
gap: var(--spacing-1) var(--spacing-3);
|
|
24370
|
+
margin-top: 2px;
|
|
24371
|
+
}
|
|
24372
|
+
|
|
24373
|
+
.crewlet-link-card__status,
|
|
24374
|
+
.crewlet-link-card__owner {
|
|
24375
|
+
display: inline-flex;
|
|
24376
|
+
align-items: center;
|
|
24377
|
+
gap: var(--spacing-1);
|
|
24378
|
+
white-space: nowrap;
|
|
24379
|
+
}
|
|
24380
|
+
|
|
24381
|
+
.crewlet-link-card__dot {
|
|
24382
|
+
width: 6px;
|
|
24383
|
+
height: 6px;
|
|
24384
|
+
flex: none;
|
|
24385
|
+
border-radius: var(--radius-circle);
|
|
24386
|
+
background: var(--crewlet-link-card-dot);
|
|
24387
|
+
}
|
|
24388
|
+
|
|
24389
|
+
/* FORCED COLORS drops the bar's and the dot's backgrounds; a border is the
|
|
24390
|
+
one edge the mode keeps. */
|
|
24391
|
+
@media (forced-colors: active) {
|
|
24392
|
+
.crewlet-link-card::before {
|
|
24393
|
+
border-left: var(--crewlet-link-card-bar) solid CanvasText;
|
|
24394
|
+
}
|
|
24395
|
+
|
|
24396
|
+
.crewlet-link-card__dot {
|
|
24397
|
+
border: 1px solid CanvasText;
|
|
24398
|
+
}
|
|
24399
|
+
}
|
|
24400
|
+
|
|
24401
|
+
|
|
22734
24402
|
/* LinkInterstitial-ET4MSVSV.css */
|
|
22735
24403
|
/*
|
|
22736
24404
|
* The destination, said twice: the host as the claim a reader decides on, in
|
|
@@ -24349,6 +26017,119 @@ a.crewlet-icon-btn {
|
|
|
24349
26017
|
}
|
|
24350
26018
|
|
|
24351
26019
|
|
|
26020
|
+
/* MentionChip-W7MZZVRZ.css */
|
|
26021
|
+
/*
|
|
26022
|
+
* A mention in a message's words: a chip in the line, in the info tone's
|
|
26023
|
+
* light blue, or the warning tone where it names the reader.
|
|
26024
|
+
*/
|
|
26025
|
+
|
|
26026
|
+
.crewlet-mention-chip {
|
|
26027
|
+
display: inline;
|
|
26028
|
+
padding: 0 2px;
|
|
26029
|
+
border: 0;
|
|
26030
|
+
border-radius: var(--radius-xs);
|
|
26031
|
+
background: var(--color-feedback-info-soft);
|
|
26032
|
+
color: var(--color-feedback-info-ink);
|
|
26033
|
+
font: inherit;
|
|
26034
|
+
font-weight: var(--font-weight-regular);
|
|
26035
|
+
-webkit-box-decoration-break: clone;
|
|
26036
|
+
box-decoration-break: clone;
|
|
26037
|
+
}
|
|
26038
|
+
|
|
26039
|
+
.crewlet-mention-chip--self,
|
|
26040
|
+
.crewlet-mention-chip--everyone {
|
|
26041
|
+
background: var(--color-feedback-warning-soft);
|
|
26042
|
+
color: var(--color-feedback-warning-ink);
|
|
26043
|
+
}
|
|
26044
|
+
|
|
26045
|
+
button.crewlet-mention-chip {
|
|
26046
|
+
cursor: pointer;
|
|
26047
|
+
}
|
|
26048
|
+
|
|
26049
|
+
/* Under the pointer the fill takes the tone's next strength, its line step. */
|
|
26050
|
+
button.crewlet-mention-chip:hover {
|
|
26051
|
+
background: var(--color-feedback-info-line);
|
|
26052
|
+
}
|
|
26053
|
+
|
|
26054
|
+
button.crewlet-mention-chip--self:hover,
|
|
26055
|
+
button.crewlet-mention-chip--everyone:hover {
|
|
26056
|
+
background: var(--color-feedback-warning-line);
|
|
26057
|
+
}
|
|
26058
|
+
|
|
26059
|
+
button.crewlet-mention-chip:focus-visible {
|
|
26060
|
+
outline: 2px solid var(--color-focus);
|
|
26061
|
+
outline-offset: 1px;
|
|
26062
|
+
}
|
|
26063
|
+
|
|
26064
|
+
|
|
26065
|
+
/* MentionMenu-4NAQ45S4.css */
|
|
26066
|
+
/*
|
|
26067
|
+
* MentionMenu: the suggestions a composer opens on "@" or "#".
|
|
26068
|
+
*
|
|
26069
|
+
* The popover surface (the fill, hairline, corner and shadow of the emoji
|
|
26070
|
+
* picker that opens from the same composer), as wide as the field but no
|
|
26071
|
+
* wider than a list a reader scans: on a wide room the trailing word
|
|
26072
|
+
* ("Working") stood a screen's width from the name it belongs to; a host
|
|
26073
|
+
* moves that cap with `--crewlet-mention-menu-width` on any box round it.
|
|
26074
|
+
* It is placed against the nearest positioned box round the field, above
|
|
26075
|
+
* it, so it never covers what is being typed.
|
|
26076
|
+
*/
|
|
26077
|
+
.crewlet-mention-menu {
|
|
26078
|
+
position: absolute;
|
|
26079
|
+
bottom: calc(100% + var(--spacing-1));
|
|
26080
|
+
left: 0;
|
|
26081
|
+
z-index: var(--z-index-dropdown);
|
|
26082
|
+
box-sizing: border-box;
|
|
26083
|
+
width: min(100%, var(--crewlet-mention-menu-width, 560px));
|
|
26084
|
+
overflow: hidden;
|
|
26085
|
+
border: 1px solid var(--color-border-default);
|
|
26086
|
+
border-radius: var(--radius-lg);
|
|
26087
|
+
background: var(--color-surface-subtle);
|
|
26088
|
+
box-shadow: var(--shadow-xl);
|
|
26089
|
+
}
|
|
26090
|
+
|
|
26091
|
+
.crewlet-mention-menu__label {
|
|
26092
|
+
padding: var(--spacing-2) var(--spacing-3) var(--spacing-1);
|
|
26093
|
+
color: var(--color-text-tertiary);
|
|
26094
|
+
font-size: var(--font-size-2xs);
|
|
26095
|
+
font-weight: var(--font-weight-regular);
|
|
26096
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
26097
|
+
text-transform: uppercase;
|
|
26098
|
+
}
|
|
26099
|
+
|
|
26100
|
+
.crewlet-mention-menu__list {
|
|
26101
|
+
max-height: 264px;
|
|
26102
|
+
margin: 0;
|
|
26103
|
+
padding: 0 var(--spacing-1) var(--spacing-1);
|
|
26104
|
+
overflow-y: auto;
|
|
26105
|
+
overscroll-behavior: contain;
|
|
26106
|
+
list-style: none;
|
|
26107
|
+
}
|
|
26108
|
+
|
|
26109
|
+
/* The panel's corner less its inset, so each row's curve runs parallel. */
|
|
26110
|
+
.crewlet-mention-menu__list > .crewlet-person-row {
|
|
26111
|
+
--crewlet-person-row-radius: calc(var(--radius-lg) - var(--spacing-1));
|
|
26112
|
+
}
|
|
26113
|
+
|
|
26114
|
+
.crewlet-mention-menu__footer {
|
|
26115
|
+
display: flex;
|
|
26116
|
+
flex-wrap: wrap;
|
|
26117
|
+
align-items: center;
|
|
26118
|
+
gap: var(--spacing-1) var(--spacing-3);
|
|
26119
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
26120
|
+
border-top: 1px solid var(--color-border-default);
|
|
26121
|
+
color: var(--color-text-tertiary);
|
|
26122
|
+
font-size: var(--font-size-xs);
|
|
26123
|
+
}
|
|
26124
|
+
|
|
26125
|
+
/* The foot names keys, and a touch screen has none to press. */
|
|
26126
|
+
@media (hover: none) {
|
|
26127
|
+
.crewlet-mention-menu__footer {
|
|
26128
|
+
display: none;
|
|
26129
|
+
}
|
|
26130
|
+
}
|
|
26131
|
+
|
|
26132
|
+
|
|
24352
26133
|
/* Menu-I4SNXHOT.css */
|
|
24353
26134
|
/*
|
|
24354
26135
|
* The menu button's panel.
|
|
@@ -24743,6 +26524,82 @@ a.crewlet-icon-btn {
|
|
|
24743
26524
|
}
|
|
24744
26525
|
|
|
24745
26526
|
|
|
26527
|
+
/* MessageActions-Q4F5UH3S.css */
|
|
26528
|
+
/*
|
|
26529
|
+
* The tray a message shows on hover: the transcript's own ground ringed with
|
|
26530
|
+
* the hairline and a small shadow, the large corner, and 30px tools inside
|
|
26531
|
+
* the inset, so it reads as a soft tray of tools rather than a framed bar.
|
|
26532
|
+
* Two classes, so the tray's own rules hold over Toolbar's in any bundle
|
|
26533
|
+
* order.
|
|
26534
|
+
*/
|
|
26535
|
+
.crewlet-toolbar.crewlet-message-actions {
|
|
26536
|
+
flex-wrap: nowrap;
|
|
26537
|
+
gap: var(--crewlet-chat-toolbar-inset);
|
|
26538
|
+
height: var(--crewlet-chat-toolbar);
|
|
26539
|
+
box-sizing: border-box;
|
|
26540
|
+
padding: var(--crewlet-chat-toolbar-inset);
|
|
26541
|
+
border: 1px solid var(--color-edge-hairline);
|
|
26542
|
+
border-radius: var(--radius-lg);
|
|
26543
|
+
background: var(--crewlet-chat-ground);
|
|
26544
|
+
box-shadow: var(--shadow-xs);
|
|
26545
|
+
}
|
|
26546
|
+
|
|
26547
|
+
/* A tool whose menu or picker is open reads as held down, which is not the
|
|
26548
|
+
accent fill a toggle that is on (Saved) draws. */
|
|
26549
|
+
.crewlet-message-actions .crewlet-icon-btn[aria-expanded='true'] {
|
|
26550
|
+
background: var(--color-surface-pressed);
|
|
26551
|
+
color: var(--color-text-primary);
|
|
26552
|
+
}
|
|
26553
|
+
|
|
26554
|
+
.crewlet-message-actions__emoji {
|
|
26555
|
+
display: inline-flex;
|
|
26556
|
+
flex: none;
|
|
26557
|
+
align-items: center;
|
|
26558
|
+
justify-content: center;
|
|
26559
|
+
width: var(--size-control-md);
|
|
26560
|
+
height: var(--size-control-md);
|
|
26561
|
+
padding: 0;
|
|
26562
|
+
border: 0;
|
|
26563
|
+
border-radius: var(--radius-md);
|
|
26564
|
+
background: transparent;
|
|
26565
|
+
font-size: var(--font-size-md);
|
|
26566
|
+
line-height: 1;
|
|
26567
|
+
cursor: pointer;
|
|
26568
|
+
}
|
|
26569
|
+
|
|
26570
|
+
.crewlet-message-actions__emoji:hover {
|
|
26571
|
+
background: var(--color-fill-soft);
|
|
26572
|
+
}
|
|
26573
|
+
|
|
26574
|
+
.crewlet-message-actions__emoji:active {
|
|
26575
|
+
background: var(--color-surface-pressed);
|
|
26576
|
+
}
|
|
26577
|
+
|
|
26578
|
+
/* Held, as the tray's icon tools are: faded, no fill under the pointer, and
|
|
26579
|
+
the reason in its hint. */
|
|
26580
|
+
.crewlet-message-actions__emoji[aria-disabled='true'] {
|
|
26581
|
+
opacity: 0.5;
|
|
26582
|
+
cursor: not-allowed;
|
|
26583
|
+
}
|
|
26584
|
+
|
|
26585
|
+
.crewlet-message-actions__emoji[aria-disabled='true']:is(:hover, :active) {
|
|
26586
|
+
background: transparent;
|
|
26587
|
+
}
|
|
26588
|
+
|
|
26589
|
+
.crewlet-message-actions__emoji:focus-visible {
|
|
26590
|
+
outline: 2px solid var(--color-focus);
|
|
26591
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
26592
|
+
}
|
|
26593
|
+
|
|
26594
|
+
.crewlet-message-actions__divider {
|
|
26595
|
+
flex: none;
|
|
26596
|
+
width: 1px;
|
|
26597
|
+
height: var(--spacing-4);
|
|
26598
|
+
margin: 0 var(--spacing-1);
|
|
26599
|
+
background: var(--color-border-default);
|
|
26600
|
+
}
|
|
26601
|
+
|
|
26602
|
+
|
|
24746
26603
|
/* MessageBubble-AHTXBO3X.css */
|
|
24747
26604
|
/*
|
|
24748
26605
|
* One message: the bubble on its writer's side, and what it carried and its
|
|
@@ -24972,7 +26829,7 @@ a.crewlet-icon-btn {
|
|
|
24972
26829
|
}
|
|
24973
26830
|
|
|
24974
26831
|
|
|
24975
|
-
/* Modal-
|
|
26832
|
+
/* Modal-GKUOO7PZ.css */
|
|
24976
26833
|
/*
|
|
24977
26834
|
* The modal surface: the veil, the frame, and the three bands inside it.
|
|
24978
26835
|
*
|
|
@@ -25260,13 +27117,32 @@ a.crewlet-icon-btn {
|
|
|
25260
27117
|
animation: crewlet-modal-sheet-in var(--motion-duration-slow) var(--motion-easing-emphasized);
|
|
25261
27118
|
}
|
|
25262
27119
|
|
|
27120
|
+
/*
|
|
27121
|
+
* A SHEET FROM THE START EDGE (`side="start"`): a navigation panel, pinned to
|
|
27122
|
+
* the inline start and arriving from past it, with its edge and its shadow on
|
|
27123
|
+
* its inline end, into the page it covers. The shadow is the sheet's own,
|
|
27124
|
+
* mirrored by the token build, so a palette's sheet shadow reads the same way
|
|
27125
|
+
* round on either side.
|
|
27126
|
+
*/
|
|
27127
|
+
.crewlet-modal-overlay--sheet.crewlet-modal-overlay--start {
|
|
27128
|
+
justify-content: flex-start;
|
|
27129
|
+
}
|
|
27130
|
+
|
|
27131
|
+
.crewlet-modal--sheet.crewlet-modal--start {
|
|
27132
|
+
--crewlet-modal-sheet-from: -100%;
|
|
27133
|
+
border-inline-start: none;
|
|
27134
|
+
border-inline-end: 1px solid var(--color-border-default);
|
|
27135
|
+
box-shadow: var(--shadow-sheet-start);
|
|
27136
|
+
}
|
|
27137
|
+
|
|
25263
27138
|
/*
|
|
25264
27139
|
* The shell's one breakpoint, strictly under it as the shell switches. Below
|
|
25265
27140
|
* it there is no content beside a sheet to keep in view, so the sheet takes
|
|
25266
27141
|
* the whole width and its edge goes with it.
|
|
25267
27142
|
*/
|
|
25268
27143
|
@media (width < 1024px) {
|
|
25269
|
-
.crewlet-modal--sheet
|
|
27144
|
+
.crewlet-modal--sheet,
|
|
27145
|
+
.crewlet-modal--sheet.crewlet-modal--start {
|
|
25270
27146
|
width: 100%;
|
|
25271
27147
|
border-inline: none;
|
|
25272
27148
|
}
|
|
@@ -25289,6 +27165,11 @@ a.crewlet-icon-btn {
|
|
|
25289
27165
|
--crewlet-modal-glyph-inset: calc((var(--size-control-md) - var(--font-size-sm)) / 2);
|
|
25290
27166
|
|
|
25291
27167
|
display: flex;
|
|
27168
|
+
/* The head and the foot keep their height and the body gives way: in the
|
|
27169
|
+
frame's column a head that could shrink was squeezed under a long body
|
|
27170
|
+
to the bar's height, and a wrapped title and subtitle ran over its
|
|
27171
|
+
edges. */
|
|
27172
|
+
flex-shrink: 0;
|
|
25292
27173
|
align-items: center;
|
|
25293
27174
|
gap: var(--spacing-3);
|
|
25294
27175
|
padding: var(--spacing-4);
|
|
@@ -25509,6 +27390,7 @@ a.crewlet-icon-btn {
|
|
|
25509
27390
|
*/
|
|
25510
27391
|
.crewlet-modal__footer {
|
|
25511
27392
|
display: flex;
|
|
27393
|
+
flex-shrink: 0;
|
|
25512
27394
|
align-items: center;
|
|
25513
27395
|
flex-wrap: wrap;
|
|
25514
27396
|
gap: var(--spacing-2);
|
|
@@ -27418,6 +29300,170 @@ a.crewlet-icon-btn {
|
|
|
27418
29300
|
}
|
|
27419
29301
|
|
|
27420
29302
|
|
|
29303
|
+
/* PersonRow-V5GTPNVP.css */
|
|
29304
|
+
/*
|
|
29305
|
+
* PersonRow: a person or an agent as one row of a list, as a button or as a
|
|
29306
|
+
* listbox option. One design for every list of people.
|
|
29307
|
+
*/
|
|
29308
|
+
.crewlet-person-row {
|
|
29309
|
+
/* The row's corner. A list inside a rounded panel sets it to the panel's
|
|
29310
|
+
corner less the panel's inset, so the two curves run parallel. */
|
|
29311
|
+
--crewlet-person-row-radius: var(--radius-md);
|
|
29312
|
+
display: flex;
|
|
29313
|
+
align-items: center;
|
|
29314
|
+
gap: var(--spacing-3);
|
|
29315
|
+
width: 100%;
|
|
29316
|
+
box-sizing: border-box;
|
|
29317
|
+
margin: 0;
|
|
29318
|
+
padding: var(--spacing-2);
|
|
29319
|
+
border: 0;
|
|
29320
|
+
border-radius: var(--crewlet-person-row-radius);
|
|
29321
|
+
background: transparent;
|
|
29322
|
+
color: var(--color-text-primary);
|
|
29323
|
+
font: inherit;
|
|
29324
|
+
font-size: var(--font-size-sm);
|
|
29325
|
+
line-height: var(--font-line-height-normal);
|
|
29326
|
+
text-align: left;
|
|
29327
|
+
list-style: none;
|
|
29328
|
+
cursor: pointer;
|
|
29329
|
+
}
|
|
29330
|
+
|
|
29331
|
+
/* One line, for a list that opens under a caret: the name, its detail after
|
|
29332
|
+
it, and the trailing words at the end. */
|
|
29333
|
+
.crewlet-person-row--compact {
|
|
29334
|
+
gap: var(--spacing-2);
|
|
29335
|
+
min-height: var(--size-row-md);
|
|
29336
|
+
padding-block: 0;
|
|
29337
|
+
}
|
|
29338
|
+
|
|
29339
|
+
/*
|
|
29340
|
+
* A ROW SHOWS THE HOVER OVERLAY OR THE CHOSEN TINT, NEVER BOTH: they are the
|
|
29341
|
+
* same property on the same element, and the chosen row keeps its tint under
|
|
29342
|
+
* the pointer.
|
|
29343
|
+
*/
|
|
29344
|
+
.crewlet-person-row:hover,
|
|
29345
|
+
.crewlet-person-row.is-highlighted {
|
|
29346
|
+
background: var(--color-surface-hover);
|
|
29347
|
+
}
|
|
29348
|
+
|
|
29349
|
+
.crewlet-person-row.is-selected,
|
|
29350
|
+
.crewlet-person-row.is-selected:hover {
|
|
29351
|
+
background: var(--color-brand-accent-soft);
|
|
29352
|
+
}
|
|
29353
|
+
|
|
29354
|
+
/* The row the arrows are on, in a list a field owns: a bar on its start
|
|
29355
|
+
edge, so it is found in a list whose chosen rows are tinted too. */
|
|
29356
|
+
.crewlet-person-row.is-highlighted {
|
|
29357
|
+
box-shadow: inset 2px 0 0 var(--color-brand-accent);
|
|
29358
|
+
}
|
|
29359
|
+
|
|
29360
|
+
.crewlet-person-row:focus-visible {
|
|
29361
|
+
outline: 2px solid var(--color-focus);
|
|
29362
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
29363
|
+
}
|
|
29364
|
+
|
|
29365
|
+
.crewlet-person-row:disabled,
|
|
29366
|
+
.crewlet-person-row.is-disabled {
|
|
29367
|
+
color: var(--color-text-tertiary);
|
|
29368
|
+
cursor: not-allowed;
|
|
29369
|
+
}
|
|
29370
|
+
|
|
29371
|
+
/*
|
|
29372
|
+
* One column for every face or glyph, so every name starts on one edge: a
|
|
29373
|
+
* room's 16px glyph started its name a step left of the faces beside it.
|
|
29374
|
+
*/
|
|
29375
|
+
.crewlet-person-row__face {
|
|
29376
|
+
display: inline-flex;
|
|
29377
|
+
flex: none;
|
|
29378
|
+
align-items: center;
|
|
29379
|
+
justify-content: center;
|
|
29380
|
+
min-width: var(--size-control-md);
|
|
29381
|
+
color: var(--color-text-secondary);
|
|
29382
|
+
}
|
|
29383
|
+
|
|
29384
|
+
.crewlet-person-row--compact .crewlet-person-row__face {
|
|
29385
|
+
min-width: var(--size-control-sm);
|
|
29386
|
+
}
|
|
29387
|
+
|
|
29388
|
+
.crewlet-person-row__text {
|
|
29389
|
+
display: flex;
|
|
29390
|
+
flex: 1;
|
|
29391
|
+
flex-direction: column;
|
|
29392
|
+
min-width: 0;
|
|
29393
|
+
}
|
|
29394
|
+
|
|
29395
|
+
.crewlet-person-row__name {
|
|
29396
|
+
display: inline-flex;
|
|
29397
|
+
align-items: center;
|
|
29398
|
+
gap: var(--spacing-2);
|
|
29399
|
+
min-width: 0;
|
|
29400
|
+
font-weight: var(--font-weight-regular);
|
|
29401
|
+
white-space: nowrap;
|
|
29402
|
+
}
|
|
29403
|
+
|
|
29404
|
+
.crewlet-person-row__detail {
|
|
29405
|
+
min-width: 0;
|
|
29406
|
+
overflow: hidden;
|
|
29407
|
+
color: var(--color-text-secondary);
|
|
29408
|
+
font-size: var(--font-size-xs);
|
|
29409
|
+
text-overflow: ellipsis;
|
|
29410
|
+
white-space: nowrap;
|
|
29411
|
+
}
|
|
29412
|
+
|
|
29413
|
+
.crewlet-person-row--compact .crewlet-person-row__detail {
|
|
29414
|
+
color: var(--color-text-tertiary);
|
|
29415
|
+
}
|
|
29416
|
+
|
|
29417
|
+
.crewlet-person-row__meta {
|
|
29418
|
+
flex: none;
|
|
29419
|
+
margin-left: auto;
|
|
29420
|
+
color: var(--color-text-tertiary);
|
|
29421
|
+
font-size: var(--font-size-xs);
|
|
29422
|
+
white-space: nowrap;
|
|
29423
|
+
}
|
|
29424
|
+
|
|
29425
|
+
/* The toggle's mark: a plus that is quiet until the row is pointed at, and a
|
|
29426
|
+
check on the accent once the row is chosen. */
|
|
29427
|
+
.crewlet-person-row__mark {
|
|
29428
|
+
display: inline-flex;
|
|
29429
|
+
flex: none;
|
|
29430
|
+
align-items: center;
|
|
29431
|
+
justify-content: center;
|
|
29432
|
+
width: var(--size-control-sm);
|
|
29433
|
+
height: var(--size-control-sm);
|
|
29434
|
+
margin-left: auto;
|
|
29435
|
+
border-radius: var(--radius-md);
|
|
29436
|
+
color: var(--color-text-secondary);
|
|
29437
|
+
}
|
|
29438
|
+
|
|
29439
|
+
.crewlet-person-row__meta + .crewlet-person-row__mark {
|
|
29440
|
+
margin-left: 0;
|
|
29441
|
+
}
|
|
29442
|
+
|
|
29443
|
+
.crewlet-person-row:hover .crewlet-person-row__mark {
|
|
29444
|
+
background: var(--color-surface-elevated);
|
|
29445
|
+
color: var(--color-text-primary);
|
|
29446
|
+
}
|
|
29447
|
+
|
|
29448
|
+
.crewlet-person-row.is-selected .crewlet-person-row__mark {
|
|
29449
|
+
background: var(--color-brand-accent);
|
|
29450
|
+
color: var(--color-text-on-accent);
|
|
29451
|
+
}
|
|
29452
|
+
|
|
29453
|
+
/*
|
|
29454
|
+
* FORCED COLORS repaints every background to Canvas, which took the chosen
|
|
29455
|
+
* tint and the arrows' row with it. An outline is the one mark the mode
|
|
29456
|
+
* keeps, in the system's own colour for exactly this.
|
|
29457
|
+
*/
|
|
29458
|
+
@media (forced-colors: active) {
|
|
29459
|
+
.crewlet-person-row.is-selected,
|
|
29460
|
+
.crewlet-person-row.is-highlighted {
|
|
29461
|
+
outline: 2px solid Highlight;
|
|
29462
|
+
outline-offset: -2px;
|
|
29463
|
+
}
|
|
29464
|
+
}
|
|
29465
|
+
|
|
29466
|
+
|
|
27421
29467
|
/* PinTile-OWS7JTHD.css */
|
|
27422
29468
|
/*
|
|
27423
29469
|
* PinTile: one pinned thing, a link with its facts.
|
|
@@ -27845,7 +29891,7 @@ a.crewlet-icon-btn {
|
|
|
27845
29891
|
}
|
|
27846
29892
|
|
|
27847
29893
|
|
|
27848
|
-
/* PresenceStack-
|
|
29894
|
+
/* PresenceStack-2DTYRADY.css */
|
|
27849
29895
|
/*
|
|
27850
29896
|
* Who is here (PresenceStack.tsx), on the avatar stack's own geometry: the
|
|
27851
29897
|
* overlap and the counted chip are the stack's, the overlap stepped out by
|
|
@@ -27875,12 +29921,10 @@ a.crewlet-icon-btn {
|
|
|
27875
29921
|
font: inherit;
|
|
27876
29922
|
}
|
|
27877
29923
|
|
|
27878
|
-
|
|
27879
|
-
|
|
27880
|
-
|
|
27881
|
-
|
|
27882
|
-
.crewlet-presence-stack > .crewlet-presence-stack__member--agent {
|
|
27883
|
-
border-radius: var(--radius-sm);
|
|
29924
|
+
/* The face's own corner, which the component sets from Avatar's ladder: one
|
|
29925
|
+
shape for people and agents. */
|
|
29926
|
+
.crewlet-presence-stack > .crewlet-presence-stack__member {
|
|
29927
|
+
border-radius: var(--crewlet-presence-stack-corner);
|
|
27884
29928
|
}
|
|
27885
29929
|
|
|
27886
29930
|
button.crewlet-presence-stack__member {
|
|
@@ -28785,6 +30829,102 @@ button.crewlet-presence-stack__member:focus-visible {
|
|
|
28785
30829
|
}
|
|
28786
30830
|
|
|
28787
30831
|
|
|
30832
|
+
/* ReactionBar-XXI4V7XG.css */
|
|
30833
|
+
/*
|
|
30834
|
+
* A message's reactions: one pill to an emoji, then the add pill. A pill at
|
|
30835
|
+
* rest is a fill and no frame; the edge arrives under the pointer.
|
|
30836
|
+
*/
|
|
30837
|
+
|
|
30838
|
+
.crewlet-reaction-bar {
|
|
30839
|
+
display: flex;
|
|
30840
|
+
flex-wrap: wrap;
|
|
30841
|
+
align-items: center;
|
|
30842
|
+
gap: var(--spacing-1);
|
|
30843
|
+
}
|
|
30844
|
+
|
|
30845
|
+
.crewlet-reaction {
|
|
30846
|
+
display: inline-flex;
|
|
30847
|
+
align-items: center;
|
|
30848
|
+
justify-content: center;
|
|
30849
|
+
gap: var(--spacing-1);
|
|
30850
|
+
min-width: 44px;
|
|
30851
|
+
height: 24px;
|
|
30852
|
+
box-sizing: border-box;
|
|
30853
|
+
padding: 0 var(--spacing-2);
|
|
30854
|
+
border: 1px solid transparent;
|
|
30855
|
+
border-radius: var(--radius-pill);
|
|
30856
|
+
background: var(--color-fill-soft);
|
|
30857
|
+
color: var(--color-text-primary);
|
|
30858
|
+
font: inherit;
|
|
30859
|
+
font-size: var(--crewlet-chat-meta);
|
|
30860
|
+
line-height: 1;
|
|
30861
|
+
cursor: pointer;
|
|
30862
|
+
transition:
|
|
30863
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default),
|
|
30864
|
+
background var(--motion-duration-fast) var(--motion-easing-default);
|
|
30865
|
+
}
|
|
30866
|
+
|
|
30867
|
+
/* The emoji is the pill's picture and the count its caption: at the count's
|
|
30868
|
+
size the emoji read smaller than the number beside it. */
|
|
30869
|
+
.crewlet-reaction__emoji {
|
|
30870
|
+
font-size: var(--font-size-md);
|
|
30871
|
+
}
|
|
30872
|
+
|
|
30873
|
+
.crewlet-reaction__count {
|
|
30874
|
+
font-variant-numeric: tabular-nums;
|
|
30875
|
+
font-weight: var(--font-weight-regular);
|
|
30876
|
+
}
|
|
30877
|
+
|
|
30878
|
+
/* The pointed pill drops its fill and takes the strong edge. */
|
|
30879
|
+
.crewlet-reaction:hover {
|
|
30880
|
+
border-color: var(--color-edge-strong);
|
|
30881
|
+
background: transparent;
|
|
30882
|
+
}
|
|
30883
|
+
|
|
30884
|
+
/* Yours: the accent's soft fill, its ink and a heavier count, ringed in the
|
|
30885
|
+
accent, so it differs from the others by more than its hue. */
|
|
30886
|
+
.crewlet-reaction.is-mine {
|
|
30887
|
+
border-color: var(--color-brand-accent);
|
|
30888
|
+
background: var(--color-brand-accent-soft);
|
|
30889
|
+
color: var(--color-brand-accent-ink);
|
|
30890
|
+
}
|
|
30891
|
+
|
|
30892
|
+
.crewlet-reaction.is-mine:hover {
|
|
30893
|
+
background: var(--color-brand-accent-soft-strong);
|
|
30894
|
+
}
|
|
30895
|
+
|
|
30896
|
+
.crewlet-reaction.is-mine .crewlet-reaction__count {
|
|
30897
|
+
font-weight: var(--font-weight-medium);
|
|
30898
|
+
}
|
|
30899
|
+
|
|
30900
|
+
.crewlet-reaction[aria-disabled='true'] {
|
|
30901
|
+
cursor: not-allowed;
|
|
30902
|
+
}
|
|
30903
|
+
|
|
30904
|
+
.crewlet-reaction:focus-visible {
|
|
30905
|
+
outline: 2px solid var(--color-focus);
|
|
30906
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
30907
|
+
}
|
|
30908
|
+
|
|
30909
|
+
/* The add pill: the glyph alone, in the quiet ink. */
|
|
30910
|
+
.crewlet-reaction.crewlet-reaction--add {
|
|
30911
|
+
min-width: 32px;
|
|
30912
|
+
padding: 0;
|
|
30913
|
+
color: var(--color-text-tertiary);
|
|
30914
|
+
}
|
|
30915
|
+
|
|
30916
|
+
.crewlet-reaction.crewlet-reaction--add[aria-expanded='true'] {
|
|
30917
|
+
background: var(--color-surface-pressed);
|
|
30918
|
+
color: var(--color-text-primary);
|
|
30919
|
+
}
|
|
30920
|
+
|
|
30921
|
+
@media (prefers-reduced-motion: reduce) {
|
|
30922
|
+
.crewlet-reaction {
|
|
30923
|
+
transition: none;
|
|
30924
|
+
}
|
|
30925
|
+
}
|
|
30926
|
+
|
|
30927
|
+
|
|
28788
30928
|
/* ReadingPane-VLYOWMCM.css */
|
|
28789
30929
|
/*
|
|
28790
30930
|
* One item read in full, in one column.
|
|
@@ -33567,7 +35707,7 @@ svg.crewlet-select__chevron {
|
|
|
33567
35707
|
}
|
|
33568
35708
|
|
|
33569
35709
|
|
|
33570
|
-
/* SidePanel-
|
|
35710
|
+
/* SidePanel-BKWT6Q6Z.css */
|
|
33571
35711
|
/*
|
|
33572
35712
|
* A side panel and the frame that lays it beside the content or over it
|
|
33573
35713
|
* (`SidePanel`, `SidePanelFrame`, and their artifact presets).
|
|
@@ -33658,6 +35798,42 @@ svg.crewlet-select__chevron {
|
|
|
33658
35798
|
border-bottom: 1px solid var(--color-border-default);
|
|
33659
35799
|
}
|
|
33660
35800
|
|
|
35801
|
+
/* With a subtitle the head holds one or two lines, so its height is a floor
|
|
35802
|
+
rather than a height, and its controls stay on the first line. */
|
|
35803
|
+
.crewlet-side-panel__head--subtitled {
|
|
35804
|
+
align-items: flex-start;
|
|
35805
|
+
height: auto;
|
|
35806
|
+
min-height: var(--crewlet-side-panel-head-height);
|
|
35807
|
+
padding-block: calc((var(--crewlet-side-panel-head-height) - var(--size-control-sm)) / 2);
|
|
35808
|
+
box-sizing: border-box;
|
|
35809
|
+
}
|
|
35810
|
+
|
|
35811
|
+
/* The title and the subtitle on one baseline, the subtitle dropping under
|
|
35812
|
+
the title when the two do not fit; the title shrinks to its own line and
|
|
35813
|
+
is ellipsised there. Centred on the controls' line while it is one line. */
|
|
35814
|
+
.crewlet-side-panel__heading {
|
|
35815
|
+
display: flex;
|
|
35816
|
+
flex: 1 1 auto;
|
|
35817
|
+
flex-wrap: wrap;
|
|
35818
|
+
align-items: baseline;
|
|
35819
|
+
column-gap: var(--spacing-2);
|
|
35820
|
+
min-width: 0;
|
|
35821
|
+
min-height: var(--size-control-sm);
|
|
35822
|
+
align-content: center;
|
|
35823
|
+
}
|
|
35824
|
+
|
|
35825
|
+
.crewlet-side-panel__heading > .crewlet-side-panel__title {
|
|
35826
|
+
flex: 0 1 auto;
|
|
35827
|
+
}
|
|
35828
|
+
|
|
35829
|
+
.crewlet-side-panel__subtitle {
|
|
35830
|
+
min-width: 0;
|
|
35831
|
+
overflow-wrap: anywhere;
|
|
35832
|
+
color: var(--color-text-tertiary);
|
|
35833
|
+
font-size: var(--font-size-sm);
|
|
35834
|
+
line-height: var(--font-line-height-snug);
|
|
35835
|
+
}
|
|
35836
|
+
|
|
33661
35837
|
.crewlet-side-panel__icon {
|
|
33662
35838
|
display: inline-flex;
|
|
33663
35839
|
flex: none;
|
|
@@ -33813,7 +35989,7 @@ svg.crewlet-select__chevron {
|
|
|
33813
35989
|
}
|
|
33814
35990
|
|
|
33815
35991
|
|
|
33816
|
-
/* SidebarNav-
|
|
35992
|
+
/* SidebarNav-E7PZGGA6.css */
|
|
33817
35993
|
/*
|
|
33818
35994
|
* The rail's navigation.
|
|
33819
35995
|
*
|
|
@@ -33903,6 +36079,61 @@ svg.crewlet-select__chevron {
|
|
|
33903
36079
|
color: var(--color-text-tertiary);
|
|
33904
36080
|
}
|
|
33905
36081
|
|
|
36082
|
+
/*
|
|
36083
|
+
* A HEADING THAT FOLDS ITS GROUP (`collapsible`): the button is the heading's
|
|
36084
|
+
* words and a chevron, the chevron centred in the glyph column (a nav glyph's
|
|
36085
|
+
* 14px; the xs chevron is 12px) and the words on the label line, so the
|
|
36086
|
+
* headings and the rows of a folded list stay one grid. It is the target
|
|
36087
|
+
* floor tall, the head's own height, and as wide as its words, so the head's
|
|
36088
|
+
* control keeps its own target at the end.
|
|
36089
|
+
*
|
|
36090
|
+
* THE RING IS DRAWN INSIDE ITS EDGE, because the words ellipsize and the box
|
|
36091
|
+
* that cuts them would cut an outset ring on every side.
|
|
36092
|
+
*/
|
|
36093
|
+
.crewlet-nav-group__toggle {
|
|
36094
|
+
display: inline-flex;
|
|
36095
|
+
flex: 0 1 auto;
|
|
36096
|
+
align-items: center;
|
|
36097
|
+
gap: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
36098
|
+
min-width: 0;
|
|
36099
|
+
min-height: var(--size-target-min);
|
|
36100
|
+
margin: 0;
|
|
36101
|
+
padding: 0 var(--spacing-1) 0 0;
|
|
36102
|
+
border: 0;
|
|
36103
|
+
border-radius: var(--radius-sm);
|
|
36104
|
+
background: transparent;
|
|
36105
|
+
color: var(--color-text-tertiary);
|
|
36106
|
+
font: inherit;
|
|
36107
|
+
cursor: pointer;
|
|
36108
|
+
transition: color var(--motion-duration-fast) var(--motion-easing-default);
|
|
36109
|
+
}
|
|
36110
|
+
|
|
36111
|
+
.crewlet-nav-group__toggle:hover {
|
|
36112
|
+
color: var(--color-text-primary);
|
|
36113
|
+
}
|
|
36114
|
+
|
|
36115
|
+
.crewlet-nav-group__toggle:focus-visible {
|
|
36116
|
+
outline: 2px solid var(--color-focus);
|
|
36117
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
36118
|
+
}
|
|
36119
|
+
|
|
36120
|
+
/* The words take the button's ink, so the heading lifts as one. */
|
|
36121
|
+
.crewlet-nav-group__toggle > .crewlet-nav-group__label {
|
|
36122
|
+
color: inherit;
|
|
36123
|
+
}
|
|
36124
|
+
|
|
36125
|
+
.crewlet-nav-group__chevron {
|
|
36126
|
+
display: inline-flex;
|
|
36127
|
+
flex: none;
|
|
36128
|
+
margin: 0 calc((14px - 12px) / 2);
|
|
36129
|
+
transition: transform var(--motion-duration-fast) var(--motion-easing-default);
|
|
36130
|
+
}
|
|
36131
|
+
|
|
36132
|
+
/* Folded, the chevron points at the words it would open. */
|
|
36133
|
+
.crewlet-nav-group--collapsed .crewlet-nav-group__chevron {
|
|
36134
|
+
transform: rotate(-90deg);
|
|
36135
|
+
}
|
|
36136
|
+
|
|
33906
36137
|
/* The heading's control. Pushed to the end whether or not the heading has
|
|
33907
36138
|
words, and at the floor the heading stands at. */
|
|
33908
36139
|
.crewlet-nav-group__action {
|
|
@@ -34148,13 +36379,16 @@ svg.crewlet-select__chevron {
|
|
|
34148
36379
|
* somebody who cannot separate the hue at all: the filled pill is the signal,
|
|
34149
36380
|
* the figure is the count.
|
|
34150
36381
|
*
|
|
34151
|
-
* The
|
|
34152
|
-
*
|
|
34153
|
-
*
|
|
34154
|
-
*
|
|
36382
|
+
* The chrome's one count badge (`--size-badge`, 16px with a 10px figure), at
|
|
36383
|
+
* least as wide as it is tall so a single digit is a round mark and not a
|
|
36384
|
+
* lozenge, and following the density. The same pill is drawn on the compact
|
|
36385
|
+
* rail's tiles and in its flyouts, so a count waiting for the reader is one
|
|
36386
|
+
* mark wherever it is; at 18px with an 11px figure it read louder than the
|
|
36387
|
+
* names beside it. The label is the on-accent step, the primary action's own
|
|
36388
|
+
* pair, on every row alike, because the fill is opaque.
|
|
34155
36389
|
*/
|
|
34156
36390
|
.crewlet-nav-item__badge {
|
|
34157
|
-
--crewlet-nav-item-badge-size:
|
|
36391
|
+
--crewlet-nav-item-badge-size: var(--size-badge);
|
|
34158
36392
|
display: inline-flex;
|
|
34159
36393
|
align-items: center;
|
|
34160
36394
|
justify-content: center;
|
|
@@ -34163,11 +36397,11 @@ svg.crewlet-select__chevron {
|
|
|
34163
36397
|
min-width: var(--crewlet-nav-item-badge-size);
|
|
34164
36398
|
height: var(--crewlet-nav-item-badge-size);
|
|
34165
36399
|
margin-left: auto;
|
|
34166
|
-
padding: 0
|
|
36400
|
+
padding: 0 var(--size-badge-pad);
|
|
34167
36401
|
border-radius: var(--radius-pill);
|
|
34168
36402
|
background: var(--color-brand-accent);
|
|
34169
36403
|
color: var(--color-text-on-accent);
|
|
34170
|
-
font-size: var(--font-size-
|
|
36404
|
+
font-size: var(--font-size-badge);
|
|
34171
36405
|
font-weight: var(--font-weight-semibold);
|
|
34172
36406
|
font-variant-numeric: tabular-nums;
|
|
34173
36407
|
line-height: 1;
|
|
@@ -34245,8 +36479,75 @@ svg.crewlet-select__chevron {
|
|
|
34245
36479
|
border-left-color: var(--color-border-strong);
|
|
34246
36480
|
}
|
|
34247
36481
|
|
|
36482
|
+
/*
|
|
36483
|
+
* THE DENSE LIST (`dense`): a list read in passing that runs long, a step
|
|
36484
|
+
* denser than the application's navigation.
|
|
36485
|
+
*
|
|
36486
|
+
* Its rows stand at the 24px target floor, the gutter is halved so a row's
|
|
36487
|
+
* highlight runs nearly from edge to edge (a long bar rather than a pill), and
|
|
36488
|
+
* the row's pad grows by exactly what the gutter gave up, so every glyph and
|
|
36489
|
+
* name stays on the line it was on, whatever the surface set the two tokens
|
|
36490
|
+
* to. The glyph column is as wide as a small face (an `Avatar` at `xs`), so a
|
|
36491
|
+
* face, a glyph and a group's count stand in one column and every name starts
|
|
36492
|
+
* on one line. Names are set in the regular weight, a step lighter than the
|
|
36493
|
+
* navigation's, which is what lets an unread row stand out by weight.
|
|
36494
|
+
*/
|
|
36495
|
+
.crewlet-sidebar-nav--dense {
|
|
36496
|
+
--crewlet-nav-dense-pad: calc(var(--size-nav-row-pad) + var(--size-nav-gutter) - var(--spacing-1));
|
|
36497
|
+
--crewlet-nav-dense-slot: 20px;
|
|
36498
|
+
padding-right: var(--spacing-1);
|
|
36499
|
+
padding-left: var(--spacing-1);
|
|
36500
|
+
}
|
|
36501
|
+
|
|
36502
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-item__row {
|
|
36503
|
+
min-height: var(--size-target-min);
|
|
36504
|
+
padding-right: var(--crewlet-nav-dense-pad);
|
|
36505
|
+
padding-left: var(--crewlet-nav-dense-pad);
|
|
36506
|
+
font-weight: var(--font-weight-regular);
|
|
36507
|
+
}
|
|
36508
|
+
|
|
36509
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-group__head {
|
|
36510
|
+
padding-right: calc(var(--crewlet-nav-dense-pad) - (var(--size-target-min) - 14px) / 2);
|
|
36511
|
+
padding-left: var(--crewlet-nav-dense-pad);
|
|
36512
|
+
}
|
|
36513
|
+
|
|
36514
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-item__icon {
|
|
36515
|
+
min-width: var(--crewlet-nav-dense-slot);
|
|
36516
|
+
}
|
|
36517
|
+
|
|
36518
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-group__chevron {
|
|
36519
|
+
margin-right: calc((var(--crewlet-nav-dense-slot) - 12px) / 2);
|
|
36520
|
+
margin-left: calc((var(--crewlet-nav-dense-slot) - 12px) / 2);
|
|
36521
|
+
}
|
|
36522
|
+
|
|
36523
|
+
.crewlet-sidebar-nav--dense .crewlet-nav-item__children {
|
|
36524
|
+
margin-left: var(--crewlet-nav-dense-pad);
|
|
36525
|
+
padding-left: calc(var(--crewlet-nav-dense-slot) + var(--spacing-2) + var(--spacing-1) / 2 - var(--crewlet-nav-dense-pad) - 1px);
|
|
36526
|
+
}
|
|
36527
|
+
|
|
36528
|
+
/*
|
|
36529
|
+
* A ROW WITH NEWS (`unread`): its name a step heavier than its neighbours' and
|
|
36530
|
+
* in the primary ink, which is the whole of the signal in a dense list whose
|
|
36531
|
+
* names are regular. A muted row is never drawn unread (the component drops
|
|
36532
|
+
* the class), so the two rules never meet.
|
|
36533
|
+
*/
|
|
36534
|
+
.crewlet-nav-item--unread > .crewlet-nav-item__head > .crewlet-nav-item__row {
|
|
36535
|
+
color: var(--color-text-primary);
|
|
36536
|
+
font-weight: var(--font-weight-medium);
|
|
36537
|
+
}
|
|
36538
|
+
|
|
36539
|
+
/*
|
|
36540
|
+
* A MUTED ROW rests in the quiet ink, glyph and name together, and lifts as
|
|
36541
|
+
* every row does: under the pointer, and while it is the row the reader is on.
|
|
36542
|
+
*/
|
|
36543
|
+
.crewlet-nav-item--muted > .crewlet-nav-item__head > .crewlet-nav-item__row:not([aria-current]):not(:hover) {
|
|
36544
|
+
color: var(--color-text-tertiary);
|
|
36545
|
+
}
|
|
36546
|
+
|
|
34248
36547
|
@media (prefers-reduced-motion: reduce) {
|
|
34249
36548
|
.crewlet-nav-group__action,
|
|
36549
|
+
.crewlet-nav-group__toggle,
|
|
36550
|
+
.crewlet-nav-group__chevron,
|
|
34250
36551
|
.crewlet-nav-item__row,
|
|
34251
36552
|
.crewlet-nav-item__chevron {
|
|
34252
36553
|
transition: none;
|
|
@@ -34264,7 +36565,7 @@ svg.crewlet-select__chevron {
|
|
|
34264
36565
|
}
|
|
34265
36566
|
|
|
34266
36567
|
|
|
34267
|
-
/* Skeleton-
|
|
36568
|
+
/* Skeleton-GIXV3KK5.css */
|
|
34268
36569
|
/*
|
|
34269
36570
|
* Skeleton, the loading placeholder, in eight shapes:
|
|
34270
36571
|
* box One large rectangle with a sweeping glow, for a hero area.
|
|
@@ -34347,10 +36648,12 @@ svg.crewlet-select__chevron {
|
|
|
34347
36648
|
.crewlet-skeleton__line--label { height: 13px; width: 40%; margin-bottom: var(--spacing-2); }
|
|
34348
36649
|
.crewlet-skeleton__line--value { height: 14px; width: 80%; }
|
|
34349
36650
|
|
|
36651
|
+
/* A face's placeholder takes a face's shape, the rounded square every Avatar
|
|
36652
|
+
is drawn as: at 40px its corner is 8.9px, which the md step rounds to. */
|
|
34350
36653
|
.crewlet-skeleton__avatar {
|
|
34351
36654
|
width: 40px;
|
|
34352
36655
|
height: 40px;
|
|
34353
|
-
border-radius: var(--radius-
|
|
36656
|
+
border-radius: var(--radius-md);
|
|
34354
36657
|
flex-shrink: 0;
|
|
34355
36658
|
}
|
|
34356
36659
|
|
|
@@ -38687,7 +40990,7 @@ b.crewlet-switcher__match {
|
|
|
38687
40990
|
}
|
|
38688
40991
|
|
|
38689
40992
|
|
|
38690
|
-
/* Tag-
|
|
40993
|
+
/* Tag-WLDOROB5.css */
|
|
38691
40994
|
/*
|
|
38692
40995
|
* The tag: a small pill naming a state, a category or a value.
|
|
38693
40996
|
*
|
|
@@ -38992,6 +41295,30 @@ b.crewlet-switcher__match {
|
|
|
38992
41295
|
--crewlet-tag-ink: var(--color-text-tertiary);
|
|
38993
41296
|
}
|
|
38994
41297
|
|
|
41298
|
+
/*
|
|
41299
|
+
* THE QUIET LABEL (`appearance="quiet"`): a seat's kind beside its name
|
|
41300
|
+
* ("Agent"), a small filled mark with no boundary, so it reads as part of the
|
|
41301
|
+
* name line rather than as a control. 16px tall with a step of room each side,
|
|
41302
|
+
* the xs corner rather than a pill's round ends, and the label register at the
|
|
41303
|
+
* regular weight. The neutral label sits on the soft fill under the secondary
|
|
41304
|
+
* ink; a tone keeps its own tint and ink. It takes no size step: these rules
|
|
41305
|
+
* come after the steps, at their specificity, so a step cannot reshape it.
|
|
41306
|
+
*/
|
|
41307
|
+
.crewlet-tag--quiet {
|
|
41308
|
+
--crewlet-tag-height: calc(16px * var(--density, 1));
|
|
41309
|
+
--crewlet-tag-pad: var(--spacing-1);
|
|
41310
|
+
--crewlet-tag-edge: transparent;
|
|
41311
|
+
gap: var(--spacing-1);
|
|
41312
|
+
border-radius: var(--radius-xs);
|
|
41313
|
+
font-size: var(--font-size-2xs);
|
|
41314
|
+
font-weight: var(--font-weight-regular);
|
|
41315
|
+
}
|
|
41316
|
+
|
|
41317
|
+
.crewlet-tag--neutral.crewlet-tag--quiet {
|
|
41318
|
+
--crewlet-tag-fill: var(--color-fill-soft);
|
|
41319
|
+
--crewlet-tag-ink: var(--color-text-secondary);
|
|
41320
|
+
}
|
|
41321
|
+
|
|
38995
41322
|
/* ── the interactive form ──────────────────────────────────────────────── */
|
|
38996
41323
|
|
|
38997
41324
|
.crewlet-tag--actionable {
|
|
@@ -40117,7 +42444,7 @@ b.crewlet-switcher__match {
|
|
|
40117
42444
|
}
|
|
40118
42445
|
|
|
40119
42446
|
|
|
40120
|
-
/* ThinkingIndicator-
|
|
42447
|
+
/* ThinkingIndicator-S7ZL2C77.css */
|
|
40121
42448
|
/*
|
|
40122
42449
|
* Ask Crewlet at work: the Ask Crewlet mark, its spark turning, and a line
|
|
40123
42450
|
* of status under a shimmer. See ThinkingIndicator.tsx for why it replaces a
|
|
@@ -40128,12 +42455,20 @@ b.crewlet-switcher__match {
|
|
|
40128
42455
|
* ONE LINE OF PROSE TALL, at every state: the mark alone, the mark with a
|
|
40129
42456
|
* status line, and the line changing from one step to the next all keep the
|
|
40130
42457
|
* same height, so the thread never moves while the assistant works.
|
|
42458
|
+
*
|
|
42459
|
+
* NEVER WIDER THAN ITS COLUMN. The status never wraps, so where the
|
|
42460
|
+
* indicator is sized by its content (a flex column that starts its items on
|
|
42461
|
+
* the start edge, as a message's footer does) a long status made it as wide
|
|
42462
|
+
* as its words and widened the column with it, and a phone's transcript
|
|
42463
|
+
* scrolled sideways. Held to its container, the status truncates as it was
|
|
42464
|
+
* written to.
|
|
40131
42465
|
*/
|
|
40132
42466
|
.crewlet-thinking {
|
|
40133
42467
|
display: flex;
|
|
40134
42468
|
align-items: center;
|
|
40135
42469
|
gap: var(--spacing-2);
|
|
40136
42470
|
min-width: 0;
|
|
42471
|
+
max-width: 100%;
|
|
40137
42472
|
min-height: calc(var(--font-size-compact) * var(--font-line-height-relaxed));
|
|
40138
42473
|
font-family: var(--font-family-sans);
|
|
40139
42474
|
font-size: var(--font-size-compact);
|
|
@@ -40313,6 +42648,99 @@ b.crewlet-switcher__match {
|
|
|
40313
42648
|
}
|
|
40314
42649
|
|
|
40315
42650
|
|
|
42651
|
+
/* ThreadSummary-AGR4NDMD.css */
|
|
42652
|
+
/*
|
|
42653
|
+
* The line under a message that has replies, and the working line under it.
|
|
42654
|
+
*/
|
|
42655
|
+
|
|
42656
|
+
.crewlet-thread-summary-wrap {
|
|
42657
|
+
display: flex;
|
|
42658
|
+
flex-direction: column;
|
|
42659
|
+
align-items: flex-start;
|
|
42660
|
+
gap: var(--spacing-1);
|
|
42661
|
+
max-width: 100%;
|
|
42662
|
+
}
|
|
42663
|
+
|
|
42664
|
+
/* No piece is wider than the column: a long working line truncates. */
|
|
42665
|
+
.crewlet-thread-summary-wrap > * {
|
|
42666
|
+
max-width: 100%;
|
|
42667
|
+
}
|
|
42668
|
+
|
|
42669
|
+
/* The faces sit on the content edge: the line's 1px edge and its inset are
|
|
42670
|
+
taken back by the same amount outside it. */
|
|
42671
|
+
.crewlet-thread-summary {
|
|
42672
|
+
--crewlet-thread-summary-inset: var(--spacing-1);
|
|
42673
|
+
display: inline-flex;
|
|
42674
|
+
align-items: center;
|
|
42675
|
+
gap: var(--spacing-2);
|
|
42676
|
+
max-width: 100%;
|
|
42677
|
+
height: var(--size-control-md);
|
|
42678
|
+
box-sizing: border-box;
|
|
42679
|
+
margin-inline-start: calc((var(--crewlet-thread-summary-inset) + 1px) * -1);
|
|
42680
|
+
padding: 0 var(--crewlet-thread-summary-inset);
|
|
42681
|
+
border: 1px solid transparent;
|
|
42682
|
+
border-radius: var(--radius-sm);
|
|
42683
|
+
background: transparent;
|
|
42684
|
+
color: var(--color-text-secondary);
|
|
42685
|
+
font: inherit;
|
|
42686
|
+
font-size: var(--font-size-compact);
|
|
42687
|
+
line-height: 1;
|
|
42688
|
+
text-align: start;
|
|
42689
|
+
cursor: pointer;
|
|
42690
|
+
}
|
|
42691
|
+
|
|
42692
|
+
/* Lifted onto the transcript's own ground inside a hairline, under the
|
|
42693
|
+
pointer or the keyboard, and while the thread is open. */
|
|
42694
|
+
.crewlet-thread-summary:is(:hover, :focus-visible, .is-open) {
|
|
42695
|
+
border-color: var(--color-edge-hairline);
|
|
42696
|
+
background: var(--crewlet-chat-ground);
|
|
42697
|
+
}
|
|
42698
|
+
|
|
42699
|
+
.crewlet-thread-summary:focus-visible {
|
|
42700
|
+
outline: 2px solid var(--color-focus);
|
|
42701
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
42702
|
+
}
|
|
42703
|
+
|
|
42704
|
+
.crewlet-thread-summary__count {
|
|
42705
|
+
color: var(--color-brand-accent-ink);
|
|
42706
|
+
font-weight: var(--font-weight-medium);
|
|
42707
|
+
white-space: nowrap;
|
|
42708
|
+
}
|
|
42709
|
+
|
|
42710
|
+
/* "Last reply 1h ago" and "View thread" share one cell, so the line keeps
|
|
42711
|
+
its width when one gives way to the other under the pointer. */
|
|
42712
|
+
.crewlet-thread-summary__tail {
|
|
42713
|
+
display: inline-grid;
|
|
42714
|
+
min-width: 0;
|
|
42715
|
+
padding-inline-end: var(--spacing-1);
|
|
42716
|
+
white-space: nowrap;
|
|
42717
|
+
}
|
|
42718
|
+
|
|
42719
|
+
.crewlet-thread-summary__last,
|
|
42720
|
+
.crewlet-thread-summary__view {
|
|
42721
|
+
grid-area: 1 / 1;
|
|
42722
|
+
}
|
|
42723
|
+
|
|
42724
|
+
.crewlet-thread-summary__last {
|
|
42725
|
+
color: var(--color-text-tertiary);
|
|
42726
|
+
}
|
|
42727
|
+
|
|
42728
|
+
.crewlet-thread-summary__view {
|
|
42729
|
+
justify-self: end;
|
|
42730
|
+
visibility: hidden;
|
|
42731
|
+
color: var(--color-text-secondary);
|
|
42732
|
+
font-weight: var(--font-weight-regular);
|
|
42733
|
+
}
|
|
42734
|
+
|
|
42735
|
+
.crewlet-thread-summary:is(:hover, :focus-visible, .is-open) .crewlet-thread-summary__last {
|
|
42736
|
+
visibility: hidden;
|
|
42737
|
+
}
|
|
42738
|
+
|
|
42739
|
+
.crewlet-thread-summary:is(:hover, :focus-visible, .is-open) .crewlet-thread-summary__view {
|
|
42740
|
+
visibility: visible;
|
|
42741
|
+
}
|
|
42742
|
+
|
|
42743
|
+
|
|
40316
42744
|
/* TileGrid-XOEJ4P52.css */
|
|
40317
42745
|
/*
|
|
40318
42746
|
* TileGrid: tiles on a fixed track count that folds by the grid's own width.
|