@liveblocks/react-ui 3.6.0 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,10 @@ var Duration = require('./primitives/Duration.cjs');
9
9
  var pluralize = require('./utils/pluralize.cjs');
10
10
 
11
11
 
12
+ const MINIMUM_VISIBLE_DURATION = 3 * 1e3;
13
+ function isDurationVisible(from, to) {
14
+ return Duration.getDuration(from, to ?? Date.now()) >= MINIMUM_VISIBLE_DURATION;
15
+ }
12
16
  const defaultOverrides = {
13
17
  locale: "en",
14
18
  dir: "ltr",
@@ -132,13 +136,19 @@ const defaultOverrides = {
132
136
  children: "Reasoning\u2026"
133
137
  }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
134
138
  children: [
135
- "Reasoned for",
136
- " ",
137
- /* @__PURE__ */ jsxRuntime.jsx(Duration.Duration, {
138
- className: "lb-duration lb-ai-chat-message-reasoning-duration",
139
- from: part.startedAt,
140
- to: part.endedAt
141
- })
139
+ "Reasoned",
140
+ isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
141
+ children: [
142
+ " ",
143
+ "for",
144
+ " ",
145
+ /* @__PURE__ */ jsxRuntime.jsx(Duration.Duration, {
146
+ className: "lb-duration lb-ai-chat-message-reasoning-duration",
147
+ from: part.startedAt,
148
+ to: part.endedAt
149
+ })
150
+ ]
151
+ }) : null
142
152
  ]
143
153
  }),
144
154
  AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming, part) => isStreaming ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -159,14 +169,18 @@ const defaultOverrides = {
159
169
  className: "lb-ai-chat-message-retrieval-query",
160
170
  children: part.query
161
171
  }),
162
- " ",
163
- "for",
164
- " ",
165
- /* @__PURE__ */ jsxRuntime.jsx(Duration.Duration, {
166
- className: "lb-duration lb-ai-chat-message-retrieval-duration",
167
- from: part.startedAt,
168
- to: part.endedAt
169
- })
172
+ isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
173
+ children: [
174
+ " ",
175
+ "for",
176
+ " ",
177
+ /* @__PURE__ */ jsxRuntime.jsx(Duration.Duration, {
178
+ className: "lb-duration lb-ai-chat-message-retrieval-duration",
179
+ from: part.startedAt,
180
+ to: part.endedAt
181
+ })
182
+ ]
183
+ }) : null
170
184
  ]
171
185
  }),
172
186
  AI_CHAT_MESSAGES_ERROR: () => "There was an error while getting the messages.",
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.cjs","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type AiReasoningPart,\n type AiRetrievalPart,\n assertNever,\n} from \"@liveblocks/core\";\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport { Duration } from \"./primitives/Duration\";\nimport type { ComposerBodyMark, Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\n// TODO: Move overrides to single-argument-as-object with Liveblocks 4.0,\n// it didn't make the cut for 3.0 but we should do it next time.\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n EMOJI_PICKER_CHANGE_SKIN_TONE: string;\n ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;\n ATTACHMENT_ERROR: (error: Error) => string;\n COPY_TO_CLIPBOARD: string;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_DELETE_ATTACHMENT: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_ATTACH_FILES: string;\n COMPOSER_REMOVE_ATTACHMENT: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n COMPOSER_TOGGLE_MARK: (mark: ComposerBodyMark) => string;\n}\n\nexport interface AiToolConfirmationOverrides {\n AI_TOOL_CONFIRMATION_CONFIRM: string;\n AI_TOOL_CONFIRMATION_CANCEL: string;\n}\n\nexport interface AiComposerOverrides {\n AI_COMPOSER_PLACEHOLDER: string;\n AI_COMPOSER_SEND: string;\n AI_COMPOSER_ABORT: string;\n}\n\nexport interface AiChatMessageOverrides {\n AI_CHAT_MESSAGE_DELETED: string;\n AI_CHAT_MESSAGE_THINKING: ReactNode;\n AI_CHAT_MESSAGE_REASONING: (\n isStreaming: boolean,\n part: AiReasoningPart\n ) => ReactNode;\n AI_CHAT_MESSAGE_RETRIEVAL: (\n isStreaming: boolean,\n part: AiRetrievalPart\n ) => ReactNode;\n}\n\nexport interface AiChatOverrides {\n AI_CHAT_MESSAGES_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_SUBSCRIBE: string;\n THREAD_UNSUBSCRIBE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_SHOW_MORE_COMMENTS: (count: number) => string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_DELETE: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n INBOX_NOTIFICATION_TEXT_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;\n HISTORY_VERSION_PREVIEW_RESTORE: string;\n HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;\n HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides &\n HistoryVersionPreviewOverrides &\n AiComposerOverrides &\n AiChatMessageOverrides &\n AiChatOverrides &\n AiToolConfirmationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n COPY_TO_CLIPBOARD: \"Copy\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n EMOJI_PICKER_CHANGE_SKIN_TONE: \"Change skin tone\",\n ATTACHMENT_TOO_LARGE: (maxSize) =>\n maxSize ? `The file is larger than ${maxSize}` : \"The file is too large\",\n ATTACHMENT_ERROR: () => \"The file couldn’t be uploaded.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_ATTACH_FILES: \"Attach files\",\n COMPOSER_REMOVE_ATTACHMENT: \"Remove attachment\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMPOSER_TOGGLE_MARK: (format) => {\n switch (format) {\n case \"bold\":\n return \"Bold\";\n case \"italic\":\n return \"Italic\";\n case \"strikethrough\":\n return \"Strikethrough\";\n case \"code\":\n return \"Inline code\";\n default:\n return assertNever(format, \"Unexpected mark\");\n }\n },\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_DELETE_ATTACHMENT: \"Delete attachment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_SUBSCRIBE: \"Subscribe to thread\",\n THREAD_UNSUBSCRIBE: \"Unsubscribe from thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_SHOW_MORE_COMMENTS: (count) =>\n `Show ${count} more ${pluralize(count, \"reply\", \"replies\")}`,\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_DELETE: \"Delete notification\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => (\n <>Edits from {list}</>\n ),\n HISTORY_VERSION_PREVIEW_RESTORE: \"Restore\",\n HISTORY_VERSION_PREVIEW_EMPTY: \"No content.\",\n HISTORY_VERSION_PREVIEW_ERROR: () =>\n \"There was an error while getting this version.\",\n AI_COMPOSER_PLACEHOLDER: \"Ask anything…\",\n AI_COMPOSER_SEND: \"Send\",\n AI_COMPOSER_ABORT: \"Abort response\",\n AI_CHAT_MESSAGE_DELETED: \"This message has been deleted.\",\n AI_CHAT_MESSAGE_THINKING: \"Thinking…\",\n AI_CHAT_MESSAGE_REASONING: (isStreaming: boolean, part: AiReasoningPart) =>\n isStreaming ? (\n <>Reasoning…</>\n ) : (\n <>\n Reasoned for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-reasoning-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ),\n AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming: boolean, part: AiRetrievalPart) =>\n isStreaming ? (\n <>\n Searching{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n …\n </>\n ) : (\n <>\n Searched{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>{\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ),\n AI_CHAT_MESSAGES_ERROR: () =>\n \"There was an error while getting the messages.\",\n AI_TOOL_CONFIRMATION_CONFIRM: \"Confirm\",\n AI_TOOL_CONFIRMATION_CANCEL: \"Cancel\",\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAqJO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACW;AACuC;AAExB;AACZ;AACb;AAElB;AAC6B;AAEoB;AAC3B;AACC;AACF;AACA;AACK;AACN;AACP;AAEb;AAAgB;AAEZ;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAA4C;AAChD;AACF;AACgB;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACW;AACL;AAEpB;AACG;AAAA;AAAK;AAAe;AAAM;AAAc;AAAA;AAC3C;AAGwD;AAC1C;AACE;AACA;AACE;AACE;AACY;AAEyB;AAC9B;AACP;AACG;AACQ;AACN;AAKzB;AACG;AAAA;AAAK;AACE;AAAE;AAAA;AAAK;AAAA;AAAW;AAAE;AAAY;AAAA;AAC1C;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AAAE;AAAA;AAAY;AAAA;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAGtB;AAAE;AAEF;AAAE;AAAA;AACa;AACZ;AACW;AACC;AACF;AACX;AAAA;AACF;AAIA;AAAE;AAAA;AACU;AACT;AAAe;AAA2C;AAAM;AAAO;AAAA;AAI1E;AAAE;AAAA;AACS;AACR;AAAe;AAA2C;AAAM;AAAQ;AAAI;AACzE;AACH;AACW;AACC;AACF;AACX;AAAA;AACF;AAGF;AAC4B;AAEhC;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAC/B;AAGP;;;;;"}
1
+ {"version":3,"file":"overrides.cjs","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type AiReasoningPart,\n type AiRetrievalPart,\n assertNever,\n} from \"@liveblocks/core\";\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport { Duration, getDuration } from \"./primitives/Duration\";\nimport type { ComposerBodyMark, Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\nconst MINIMUM_VISIBLE_DURATION = 3 * 1000;\n\n// TODO: Move overrides to single-argument-as-object with Liveblocks 4.0,\n// it didn't make the cut for 3.0 but we should do it next time.\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n EMOJI_PICKER_CHANGE_SKIN_TONE: string;\n ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;\n ATTACHMENT_ERROR: (error: Error) => string;\n COPY_TO_CLIPBOARD: string;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_DELETE_ATTACHMENT: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_ATTACH_FILES: string;\n COMPOSER_REMOVE_ATTACHMENT: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n COMPOSER_TOGGLE_MARK: (mark: ComposerBodyMark) => string;\n}\n\nexport interface AiToolConfirmationOverrides {\n AI_TOOL_CONFIRMATION_CONFIRM: string;\n AI_TOOL_CONFIRMATION_CANCEL: string;\n}\n\nexport interface AiComposerOverrides {\n AI_COMPOSER_PLACEHOLDER: string;\n AI_COMPOSER_SEND: string;\n AI_COMPOSER_ABORT: string;\n}\n\nexport interface AiChatMessageOverrides {\n AI_CHAT_MESSAGE_DELETED: string;\n AI_CHAT_MESSAGE_THINKING: ReactNode;\n AI_CHAT_MESSAGE_REASONING: (\n isStreaming: boolean,\n part: AiReasoningPart\n ) => ReactNode;\n AI_CHAT_MESSAGE_RETRIEVAL: (\n isStreaming: boolean,\n part: AiRetrievalPart\n ) => ReactNode;\n}\n\nexport interface AiChatOverrides {\n AI_CHAT_MESSAGES_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_SUBSCRIBE: string;\n THREAD_UNSUBSCRIBE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_SHOW_MORE_COMMENTS: (count: number) => string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_DELETE: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n INBOX_NOTIFICATION_TEXT_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;\n HISTORY_VERSION_PREVIEW_RESTORE: string;\n HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;\n HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides &\n HistoryVersionPreviewOverrides &\n AiComposerOverrides &\n AiChatMessageOverrides &\n AiChatOverrides &\n AiToolConfirmationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nfunction isDurationVisible(\n from: Date | string | number,\n to: Date | string | number | undefined\n) {\n return getDuration(from, to ?? Date.now()) >= MINIMUM_VISIBLE_DURATION;\n}\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n COPY_TO_CLIPBOARD: \"Copy\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n EMOJI_PICKER_CHANGE_SKIN_TONE: \"Change skin tone\",\n ATTACHMENT_TOO_LARGE: (maxSize) =>\n maxSize ? `The file is larger than ${maxSize}` : \"The file is too large\",\n ATTACHMENT_ERROR: () => \"The file couldn’t be uploaded.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_ATTACH_FILES: \"Attach files\",\n COMPOSER_REMOVE_ATTACHMENT: \"Remove attachment\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMPOSER_TOGGLE_MARK: (format) => {\n switch (format) {\n case \"bold\":\n return \"Bold\";\n case \"italic\":\n return \"Italic\";\n case \"strikethrough\":\n return \"Strikethrough\";\n case \"code\":\n return \"Inline code\";\n default:\n return assertNever(format, \"Unexpected mark\");\n }\n },\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_DELETE_ATTACHMENT: \"Delete attachment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_SUBSCRIBE: \"Subscribe to thread\",\n THREAD_UNSUBSCRIBE: \"Unsubscribe from thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_SHOW_MORE_COMMENTS: (count) =>\n `Show ${count} more ${pluralize(count, \"reply\", \"replies\")}`,\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_DELETE: \"Delete notification\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => (\n <>Edits from {list}</>\n ),\n HISTORY_VERSION_PREVIEW_RESTORE: \"Restore\",\n HISTORY_VERSION_PREVIEW_EMPTY: \"No content.\",\n HISTORY_VERSION_PREVIEW_ERROR: () =>\n \"There was an error while getting this version.\",\n AI_COMPOSER_PLACEHOLDER: \"Ask anything…\",\n AI_COMPOSER_SEND: \"Send\",\n AI_COMPOSER_ABORT: \"Abort response\",\n AI_CHAT_MESSAGE_DELETED: \"This message has been deleted.\",\n AI_CHAT_MESSAGE_THINKING: \"Thinking…\",\n AI_CHAT_MESSAGE_REASONING: (isStreaming: boolean, part: AiReasoningPart) =>\n isStreaming ? (\n <>Reasoning…</>\n ) : (\n <>\n Reasoned\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-reasoning-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming: boolean, part: AiRetrievalPart) =>\n isStreaming ? (\n <>\n Searching{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n …\n </>\n ) : (\n <>\n Searched{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGES_ERROR: () =>\n \"There was an error while getting the messages.\",\n AI_TOOL_CONFIRMATION_CONFIRM: \"Confirm\",\n AI_TOOL_CONFIRMATION_CANCEL: \"Cancel\",\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAeA;AAwIA;AAIE;AACF;AAEO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACW;AACuC;AAExB;AACZ;AACb;AAElB;AAC6B;AAEoB;AAC3B;AACC;AACF;AACA;AACK;AACN;AACP;AAEb;AAAgB;AAEZ;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAA4C;AAChD;AACF;AACgB;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACW;AACL;AAEpB;AACG;AAAA;AAAK;AAAe;AAAM;AAAc;AAAA;AAC3C;AAGwD;AAC1C;AACE;AACA;AACE;AACE;AACY;AAEyB;AAC9B;AACP;AACG;AACQ;AACN;AAKzB;AACG;AAAA;AAAK;AACE;AAAE;AAAA;AAAK;AAAA;AAAW;AAAE;AAAY;AAAA;AAC1C;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AAAE;AAAA;AAAY;AAAA;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAGtB;AAAE;AAEF;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAIA;AAAE;AAAA;AACU;AACT;AAAe;AAA2C;AAAM;AAAO;AAAA;AAI1E;AAAE;AAAA;AACS;AACR;AAAe;AAA2C;AAAM;AAE/D;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AAC4B;AAEhC;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAC/B;AAGP;;;;;"}
package/dist/overrides.js CHANGED
@@ -3,10 +3,14 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
3
  import { assertNever } from '@liveblocks/core';
4
4
  import { createContext, useContext, useMemo } from 'react';
5
5
  import { Emoji } from './components/internal/Emoji.js';
6
- import { Duration } from './primitives/Duration.js';
6
+ import { getDuration, Duration } from './primitives/Duration.js';
7
7
  import { pluralize } from './utils/pluralize.js';
8
8
 
9
9
 
10
+ const MINIMUM_VISIBLE_DURATION = 3 * 1e3;
11
+ function isDurationVisible(from, to) {
12
+ return getDuration(from, to ?? Date.now()) >= MINIMUM_VISIBLE_DURATION;
13
+ }
10
14
  const defaultOverrides = {
11
15
  locale: "en",
12
16
  dir: "ltr",
@@ -130,13 +134,19 @@ const defaultOverrides = {
130
134
  children: "Reasoning\u2026"
131
135
  }) : /* @__PURE__ */ jsxs(Fragment, {
132
136
  children: [
133
- "Reasoned for",
134
- " ",
135
- /* @__PURE__ */ jsx(Duration, {
136
- className: "lb-duration lb-ai-chat-message-reasoning-duration",
137
- from: part.startedAt,
138
- to: part.endedAt
139
- })
137
+ "Reasoned",
138
+ isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxs(Fragment, {
139
+ children: [
140
+ " ",
141
+ "for",
142
+ " ",
143
+ /* @__PURE__ */ jsx(Duration, {
144
+ className: "lb-duration lb-ai-chat-message-reasoning-duration",
145
+ from: part.startedAt,
146
+ to: part.endedAt
147
+ })
148
+ ]
149
+ }) : null
140
150
  ]
141
151
  }),
142
152
  AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming, part) => isStreaming ? /* @__PURE__ */ jsxs(Fragment, {
@@ -157,14 +167,18 @@ const defaultOverrides = {
157
167
  className: "lb-ai-chat-message-retrieval-query",
158
168
  children: part.query
159
169
  }),
160
- " ",
161
- "for",
162
- " ",
163
- /* @__PURE__ */ jsx(Duration, {
164
- className: "lb-duration lb-ai-chat-message-retrieval-duration",
165
- from: part.startedAt,
166
- to: part.endedAt
167
- })
170
+ isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxs(Fragment, {
171
+ children: [
172
+ " ",
173
+ "for",
174
+ " ",
175
+ /* @__PURE__ */ jsx(Duration, {
176
+ className: "lb-duration lb-ai-chat-message-retrieval-duration",
177
+ from: part.startedAt,
178
+ to: part.endedAt
179
+ })
180
+ ]
181
+ }) : null
168
182
  ]
169
183
  }),
170
184
  AI_CHAT_MESSAGES_ERROR: () => "There was an error while getting the messages.",
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.js","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type AiReasoningPart,\n type AiRetrievalPart,\n assertNever,\n} from \"@liveblocks/core\";\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport { Duration } from \"./primitives/Duration\";\nimport type { ComposerBodyMark, Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\n// TODO: Move overrides to single-argument-as-object with Liveblocks 4.0,\n// it didn't make the cut for 3.0 but we should do it next time.\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n EMOJI_PICKER_CHANGE_SKIN_TONE: string;\n ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;\n ATTACHMENT_ERROR: (error: Error) => string;\n COPY_TO_CLIPBOARD: string;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_DELETE_ATTACHMENT: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_ATTACH_FILES: string;\n COMPOSER_REMOVE_ATTACHMENT: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n COMPOSER_TOGGLE_MARK: (mark: ComposerBodyMark) => string;\n}\n\nexport interface AiToolConfirmationOverrides {\n AI_TOOL_CONFIRMATION_CONFIRM: string;\n AI_TOOL_CONFIRMATION_CANCEL: string;\n}\n\nexport interface AiComposerOverrides {\n AI_COMPOSER_PLACEHOLDER: string;\n AI_COMPOSER_SEND: string;\n AI_COMPOSER_ABORT: string;\n}\n\nexport interface AiChatMessageOverrides {\n AI_CHAT_MESSAGE_DELETED: string;\n AI_CHAT_MESSAGE_THINKING: ReactNode;\n AI_CHAT_MESSAGE_REASONING: (\n isStreaming: boolean,\n part: AiReasoningPart\n ) => ReactNode;\n AI_CHAT_MESSAGE_RETRIEVAL: (\n isStreaming: boolean,\n part: AiRetrievalPart\n ) => ReactNode;\n}\n\nexport interface AiChatOverrides {\n AI_CHAT_MESSAGES_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_SUBSCRIBE: string;\n THREAD_UNSUBSCRIBE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_SHOW_MORE_COMMENTS: (count: number) => string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_DELETE: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n INBOX_NOTIFICATION_TEXT_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;\n HISTORY_VERSION_PREVIEW_RESTORE: string;\n HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;\n HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides &\n HistoryVersionPreviewOverrides &\n AiComposerOverrides &\n AiChatMessageOverrides &\n AiChatOverrides &\n AiToolConfirmationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n COPY_TO_CLIPBOARD: \"Copy\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n EMOJI_PICKER_CHANGE_SKIN_TONE: \"Change skin tone\",\n ATTACHMENT_TOO_LARGE: (maxSize) =>\n maxSize ? `The file is larger than ${maxSize}` : \"The file is too large\",\n ATTACHMENT_ERROR: () => \"The file couldn’t be uploaded.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_ATTACH_FILES: \"Attach files\",\n COMPOSER_REMOVE_ATTACHMENT: \"Remove attachment\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMPOSER_TOGGLE_MARK: (format) => {\n switch (format) {\n case \"bold\":\n return \"Bold\";\n case \"italic\":\n return \"Italic\";\n case \"strikethrough\":\n return \"Strikethrough\";\n case \"code\":\n return \"Inline code\";\n default:\n return assertNever(format, \"Unexpected mark\");\n }\n },\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_DELETE_ATTACHMENT: \"Delete attachment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_SUBSCRIBE: \"Subscribe to thread\",\n THREAD_UNSUBSCRIBE: \"Unsubscribe from thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_SHOW_MORE_COMMENTS: (count) =>\n `Show ${count} more ${pluralize(count, \"reply\", \"replies\")}`,\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_DELETE: \"Delete notification\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => (\n <>Edits from {list}</>\n ),\n HISTORY_VERSION_PREVIEW_RESTORE: \"Restore\",\n HISTORY_VERSION_PREVIEW_EMPTY: \"No content.\",\n HISTORY_VERSION_PREVIEW_ERROR: () =>\n \"There was an error while getting this version.\",\n AI_COMPOSER_PLACEHOLDER: \"Ask anything…\",\n AI_COMPOSER_SEND: \"Send\",\n AI_COMPOSER_ABORT: \"Abort response\",\n AI_CHAT_MESSAGE_DELETED: \"This message has been deleted.\",\n AI_CHAT_MESSAGE_THINKING: \"Thinking…\",\n AI_CHAT_MESSAGE_REASONING: (isStreaming: boolean, part: AiReasoningPart) =>\n isStreaming ? (\n <>Reasoning…</>\n ) : (\n <>\n Reasoned for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-reasoning-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ),\n AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming: boolean, part: AiRetrievalPart) =>\n isStreaming ? (\n <>\n Searching{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n …\n </>\n ) : (\n <>\n Searched{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>{\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ),\n AI_CHAT_MESSAGES_ERROR: () =>\n \"There was an error while getting the messages.\",\n AI_TOOL_CONFIRMATION_CONFIRM: \"Confirm\",\n AI_TOOL_CONFIRMATION_CANCEL: \"Cancel\",\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAqJO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACW;AACuC;AAExB;AACZ;AACb;AAElB;AAC6B;AAEoB;AAC3B;AACC;AACF;AACA;AACK;AACN;AACP;AAEb;AAAgB;AAEZ;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAA4C;AAChD;AACF;AACgB;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACW;AACL;AAEpB;AACG;AAAA;AAAK;AAAe;AAAM;AAAc;AAAA;AAC3C;AAGwD;AAC1C;AACE;AACA;AACE;AACE;AACY;AAEyB;AAC9B;AACP;AACG;AACQ;AACN;AAKzB;AACG;AAAA;AAAK;AACE;AAAE;AAAA;AAAK;AAAA;AAAW;AAAE;AAAY;AAAA;AAC1C;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AAAE;AAAA;AAAY;AAAA;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAGtB;AAAE;AAEF;AAAE;AAAA;AACa;AACZ;AACW;AACC;AACF;AACX;AAAA;AACF;AAIA;AAAE;AAAA;AACU;AACT;AAAe;AAA2C;AAAM;AAAO;AAAA;AAI1E;AAAE;AAAA;AACS;AACR;AAAe;AAA2C;AAAM;AAAQ;AAAI;AACzE;AACH;AACW;AACC;AACF;AACX;AAAA;AACF;AAGF;AAC4B;AAEhC;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAC/B;AAGP;;"}
1
+ {"version":3,"file":"overrides.js","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type AiReasoningPart,\n type AiRetrievalPart,\n assertNever,\n} from \"@liveblocks/core\";\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport { Duration, getDuration } from \"./primitives/Duration\";\nimport type { ComposerBodyMark, Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\nconst MINIMUM_VISIBLE_DURATION = 3 * 1000;\n\n// TODO: Move overrides to single-argument-as-object with Liveblocks 4.0,\n// it didn't make the cut for 3.0 but we should do it next time.\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n EMOJI_PICKER_CHANGE_SKIN_TONE: string;\n ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;\n ATTACHMENT_ERROR: (error: Error) => string;\n COPY_TO_CLIPBOARD: string;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_DELETE_ATTACHMENT: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_ATTACH_FILES: string;\n COMPOSER_REMOVE_ATTACHMENT: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n COMPOSER_TOGGLE_MARK: (mark: ComposerBodyMark) => string;\n}\n\nexport interface AiToolConfirmationOverrides {\n AI_TOOL_CONFIRMATION_CONFIRM: string;\n AI_TOOL_CONFIRMATION_CANCEL: string;\n}\n\nexport interface AiComposerOverrides {\n AI_COMPOSER_PLACEHOLDER: string;\n AI_COMPOSER_SEND: string;\n AI_COMPOSER_ABORT: string;\n}\n\nexport interface AiChatMessageOverrides {\n AI_CHAT_MESSAGE_DELETED: string;\n AI_CHAT_MESSAGE_THINKING: ReactNode;\n AI_CHAT_MESSAGE_REASONING: (\n isStreaming: boolean,\n part: AiReasoningPart\n ) => ReactNode;\n AI_CHAT_MESSAGE_RETRIEVAL: (\n isStreaming: boolean,\n part: AiRetrievalPart\n ) => ReactNode;\n}\n\nexport interface AiChatOverrides {\n AI_CHAT_MESSAGES_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_SUBSCRIBE: string;\n THREAD_UNSUBSCRIBE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_SHOW_MORE_COMMENTS: (count: number) => string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_DELETE: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n INBOX_NOTIFICATION_TEXT_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;\n HISTORY_VERSION_PREVIEW_RESTORE: string;\n HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;\n HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides &\n HistoryVersionPreviewOverrides &\n AiComposerOverrides &\n AiChatMessageOverrides &\n AiChatOverrides &\n AiToolConfirmationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nfunction isDurationVisible(\n from: Date | string | number,\n to: Date | string | number | undefined\n) {\n return getDuration(from, to ?? Date.now()) >= MINIMUM_VISIBLE_DURATION;\n}\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n COPY_TO_CLIPBOARD: \"Copy\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n EMOJI_PICKER_CHANGE_SKIN_TONE: \"Change skin tone\",\n ATTACHMENT_TOO_LARGE: (maxSize) =>\n maxSize ? `The file is larger than ${maxSize}` : \"The file is too large\",\n ATTACHMENT_ERROR: () => \"The file couldn’t be uploaded.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_ATTACH_FILES: \"Attach files\",\n COMPOSER_REMOVE_ATTACHMENT: \"Remove attachment\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMPOSER_TOGGLE_MARK: (format) => {\n switch (format) {\n case \"bold\":\n return \"Bold\";\n case \"italic\":\n return \"Italic\";\n case \"strikethrough\":\n return \"Strikethrough\";\n case \"code\":\n return \"Inline code\";\n default:\n return assertNever(format, \"Unexpected mark\");\n }\n },\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_DELETE_ATTACHMENT: \"Delete attachment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_SUBSCRIBE: \"Subscribe to thread\",\n THREAD_UNSUBSCRIBE: \"Unsubscribe from thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_SHOW_MORE_COMMENTS: (count) =>\n `Show ${count} more ${pluralize(count, \"reply\", \"replies\")}`,\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_DELETE: \"Delete notification\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => (\n <>Edits from {list}</>\n ),\n HISTORY_VERSION_PREVIEW_RESTORE: \"Restore\",\n HISTORY_VERSION_PREVIEW_EMPTY: \"No content.\",\n HISTORY_VERSION_PREVIEW_ERROR: () =>\n \"There was an error while getting this version.\",\n AI_COMPOSER_PLACEHOLDER: \"Ask anything…\",\n AI_COMPOSER_SEND: \"Send\",\n AI_COMPOSER_ABORT: \"Abort response\",\n AI_CHAT_MESSAGE_DELETED: \"This message has been deleted.\",\n AI_CHAT_MESSAGE_THINKING: \"Thinking…\",\n AI_CHAT_MESSAGE_REASONING: (isStreaming: boolean, part: AiReasoningPart) =>\n isStreaming ? (\n <>Reasoning…</>\n ) : (\n <>\n Reasoned\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-reasoning-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming: boolean, part: AiRetrievalPart) =>\n isStreaming ? (\n <>\n Searching{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n …\n </>\n ) : (\n <>\n Searched{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGES_ERROR: () =>\n \"There was an error while getting the messages.\",\n AI_TOOL_CONFIRMATION_CONFIRM: \"Confirm\",\n AI_TOOL_CONFIRMATION_CANCEL: \"Cancel\",\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAeA;AAwIA;AAIE;AACF;AAEO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACW;AACuC;AAExB;AACZ;AACb;AAElB;AAC6B;AAEoB;AAC3B;AACC;AACF;AACA;AACK;AACN;AACP;AAEb;AAAgB;AAEZ;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAA4C;AAChD;AACF;AACgB;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACW;AACL;AAEpB;AACG;AAAA;AAAK;AAAe;AAAM;AAAc;AAAA;AAC3C;AAGwD;AAC1C;AACE;AACA;AACE;AACE;AACY;AAEyB;AAC9B;AACP;AACG;AACQ;AACN;AAKzB;AACG;AAAA;AAAK;AACE;AAAE;AAAA;AAAK;AAAA;AAAW;AAAE;AAAY;AAAA;AAC1C;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AAAE;AAAA;AAAY;AAAA;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAGtB;AAAE;AAEF;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAIA;AAAE;AAAA;AACU;AACT;AAAe;AAA2C;AAAM;AAAO;AAAA;AAI1E;AAAE;AAAA;AACS;AACR;AAAe;AAA2C;AAAM;AAE/D;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AAC4B;AAEhC;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAC/B;AAGP;;"}
@@ -192,4 +192,5 @@ if (process.env.NODE_ENV !== "production") {
192
192
 
193
193
  exports.Duration = Duration;
194
194
  exports.formatIso8601Duration = formatIso8601Duration;
195
+ exports.getDuration = getDuration;
195
196
  //# sourceMappingURL=Duration.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Duration.cjs","sources":["../../src/primitives/Duration.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Relax } from \"@liveblocks/core\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, type ReactNode, useMemo } from \"react\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\nimport { numberFormat } from \"../utils/intl\";\nimport { useInterval } from \"../utils/use-interval\";\nimport { useRerender } from \"../utils/use-rerender\";\n\nconst RENDER_INTERVAL = 0.5 * 1000; // 0.5 second\n\nconst DURATION_NAME = \"Duration\";\n\nexport type DurationProps = Omit<\n ComponentPropsWithSlot<\"time\">,\n \"children\" | \"title\"\n> &\n Relax<\n | {\n /**\n * The duration in milliseconds.\n * If provided, `from` and `to` will be ignored.\n */\n duration: number;\n }\n | {\n /**\n * The date at which the duration starts.\n * If provided, `duration` will be ignored.\n * If provided without `to` it means that the duration is in progress,\n * and the component will re-render at an interval, customizable with\n * the `interval` prop.\n */\n from: Date | string | number;\n\n /**\n * The date at which the duration ends.\n * If `from` is provided without `to`, `Date.now()` will be used.\n */\n to?: Date | string | number;\n }\n > & {\n /**\n * A function to format the displayed duration.\n */\n children?: (duration: number, locale?: string) => ReactNode;\n\n /**\n * The `title` attribute's value or a function to format it.\n */\n title?: string | ((duration: number, locale?: string) => string);\n\n /**\n * The interval in milliseconds at which the component will re-render if\n * `from` is provided without `to`, meaning that the duration is in progress.\n * Can be set to `false` to disable re-rendering.\n */\n interval?: number | false;\n\n /**\n * The locale used when formatting the duration.\n */\n locale?: string;\n };\n\ninterface DurationParts {\n weeks: number;\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n milliseconds: number;\n}\n\nfunction getDurationParts(duration: number): DurationParts {\n let remaining = Math.max(duration, 0);\n\n const milliseconds = remaining % 1000;\n remaining = Math.floor(remaining / 1000);\n\n const seconds = remaining % 60;\n remaining = Math.floor(remaining / 60);\n\n const minutes = remaining % 60;\n remaining = Math.floor(remaining / 60);\n\n const hours = remaining % 24;\n remaining = Math.floor(remaining / 24);\n\n const days = remaining % 7;\n const weeks = Math.floor(remaining / 7);\n\n return { weeks, days, hours, minutes, seconds, milliseconds };\n}\n\nconst durationPartsToNumberFormatOptions: Record<\n keyof DurationParts,\n Intl.NumberFormatOptions[\"unit\"]\n> = {\n weeks: \"week\",\n days: \"day\",\n hours: \"hour\",\n minutes: \"minute\",\n seconds: \"second\",\n milliseconds: \"millisecond\",\n};\n\n/**\n * Formats a duration in a short format.\n * TODO: Use `Intl.DurationFormat` when it's better supported.\n */\nfunction formatShortDuration(duration: number, locale?: string) {\n let resolvedLocale: string;\n\n if (locale) {\n resolvedLocale = locale;\n } else {\n const formatter = numberFormat();\n\n resolvedLocale = formatter.resolvedOptions().locale;\n }\n\n const parts = getDurationParts(duration);\n const formattedParts: string[] = [];\n\n for (const [unit, value] of Object.entries(parts) as [\n keyof DurationParts,\n number,\n ][]) {\n if (value === 0 || unit === \"milliseconds\") {\n continue;\n }\n\n const formatter = numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: durationPartsToNumberFormatOptions[unit],\n unitDisplay: \"narrow\",\n });\n\n formattedParts.push(formatter.format(value));\n }\n\n if (!formattedParts.length) {\n formattedParts.push(\n numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: \"second\",\n unitDisplay: \"narrow\",\n }).format(0)\n );\n }\n\n return formattedParts.join(\" \");\n}\n\n/**\n * Formats a duration in a longer format.\n * TODO: Use `Intl.DurationFormat` when it's better supported.\n */\nfunction formatVerboseDuration(duration: number, locale?: string) {\n let resolvedLocale: string;\n\n if (locale) {\n resolvedLocale = locale;\n } else {\n const formatter = numberFormat();\n\n resolvedLocale = formatter.resolvedOptions().locale;\n }\n\n const parts = getDurationParts(duration);\n const formattedParts: string[] = [];\n\n for (const [unit, value] of Object.entries(parts) as [\n keyof DurationParts,\n number,\n ][]) {\n if (value === 0 || unit === \"milliseconds\") {\n continue;\n }\n\n const formatter = numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: durationPartsToNumberFormatOptions[unit],\n unitDisplay: \"long\",\n });\n\n formattedParts.push(formatter.format(value));\n }\n\n if (!formattedParts.length) {\n formattedParts.push(\n numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: \"second\",\n unitDisplay: \"long\",\n }).format(0)\n );\n }\n\n return formattedParts.join(\" \");\n}\n\n/**\n * Formats a duration as ISO 8601.\n * TODO: Use `Temporal.Duration` when it's better supported.\n */\nexport function formatIso8601Duration(duration: number) {\n const normalizedDuration = Math.max(duration, 0);\n\n if (normalizedDuration === 0) {\n return \"PT0S\";\n }\n\n const { weeks, days, hours, minutes, seconds, milliseconds } =\n getDurationParts(normalizedDuration);\n\n let isoDuration = \"P\";\n\n // 1. Weeks\n if (weeks > 0) {\n isoDuration += `${weeks}W`;\n }\n\n // 2. Days\n if (days > 0) {\n isoDuration += `${days}D`;\n }\n\n if (hours > 0 || minutes > 0 || seconds > 0 || milliseconds > 0) {\n isoDuration += \"T\";\n\n // 3. Hours\n if (hours > 0) {\n isoDuration += `${hours}H`;\n }\n\n // 4. Minutes\n if (minutes > 0) {\n isoDuration += `${minutes}M`;\n }\n\n // 5. Seconds and milliseconds\n if (seconds > 0 || milliseconds > 0) {\n if (milliseconds > 0) {\n isoDuration += `${seconds}.${milliseconds.toString().padStart(3, \"0\").replace(/0+$/, \"\")}S`;\n } else {\n isoDuration += `${seconds}S`;\n }\n }\n }\n\n return isoDuration;\n}\n\n/**\n * Converts a Date or Date-like value to a timestamp in milliseconds.\n */\nfunction getDateTime(date: Date | string | number) {\n if (date instanceof Date) {\n return date.getTime();\n }\n\n return new Date(date).getTime();\n}\n\n/**\n * Get a duration between two Date or Date-like values.\n */\nfunction getDuration(from: Date | string | number, to: Date | string | number) {\n return getDateTime(to) - getDateTime(from);\n}\n\n/**\n * Displays a formatted duration, and automatically re-renders to if the\n * duration is in progress.\n *\n * @example\n * <Duration duration={3 * 60 * 1000} />\n *\n * @example\n * <Duration from={fiveHoursAgoDate} />\n *\n * @example\n * <Duration from={fiveHoursAgoDate} to={oneHourAgoDate} />\n */\nexport const Duration = forwardRef<HTMLTimeElement, DurationProps>(\n (\n {\n duration,\n from,\n to,\n locale,\n dateTime,\n title: renderTitle = formatVerboseDuration,\n children: renderChildren = formatShortDuration,\n interval = RENDER_INTERVAL,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"time\";\n const [rerender, key] = useRerender();\n const resolvedDuration = useMemo(() => {\n if (duration !== undefined) {\n return duration;\n }\n\n if (from !== undefined) {\n return getDuration(from, to ?? Date.now());\n }\n\n return 0;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [duration, from, to, key]);\n const normalizedDuration = useMemo(\n () => formatIso8601Duration(resolvedDuration),\n [resolvedDuration]\n );\n const title = useMemo(\n () =>\n typeof renderTitle === \"function\"\n ? renderTitle(resolvedDuration, locale)\n : renderTitle,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [renderTitle, resolvedDuration, locale]\n );\n const children = useMemo(\n () =>\n typeof renderChildren === \"function\"\n ? renderChildren(resolvedDuration, locale)\n : renderChildren,\n\n [renderChildren, resolvedDuration, locale]\n );\n\n // Only re-render if the duration is in progress.\n useInterval(\n rerender,\n from !== undefined && to === undefined ? interval : false\n );\n\n return (\n <Component\n {...props}\n ref={forwardedRef}\n dateTime={dateTime ?? normalizedDuration}\n title={title}\n >\n {children}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n Duration.displayName = DURATION_NAME;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAWA;AAEA;AA+DA;AACE;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACF;AAEA;AAGI;AACK;AACD;AACC;AACE;AACA;AAEX;AAMA;AACE;AAEA;AACE;AAAiB;AAEjB;AAEA;AAA6C;AAG/C;AACA;AAEA;AAIE;AACE;AAAA;AAGF;AAA+C;AACtC;AACkC;AAC5B;AAGf;AAA2C;AAG7C;AACE;AAAe;AACgB;AACpB;AACD;AACO;AACJ;AACb;AAGF;AACF;AAMA;AACE;AAEA;AACE;AAAiB;AAEjB;AAEA;AAA6C;AAG/C;AACA;AAEA;AAIE;AACE;AAAA;AAGF;AAA+C;AACtC;AACkC;AAC5B;AAGf;AAA2C;AAG7C;AACE;AAAe;AACgB;AACpB;AACD;AACO;AACJ;AACb;AAGF;AACF;AAMO;AACL;AAEA;AACE;AAAO;AAGT;AAGA;AAGA;AACE;AAAkB;AAIpB;AACE;AAAkB;AAGpB;AACE;AAGA;AACE;AAAkB;AAIpB;AACE;AAAkB;AAIpB;AACE;AACE;AAAuF;AAEvF;AAAkB;AACpB;AACF;AAGF;AACF;AAKA;AACE;AACE;AAAoB;AAGtB;AACF;AAKA;AACE;AACF;AAeO;AAAiB;AAEpB;AACE;AACA;AACA;AACA;AACA;AACqB;AACM;AAChB;AACX;AACG;AAIL;AACA;AACA;AACE;AACE;AAAO;AAGT;AACE;AAAyC;AAG3C;AAAO;AAGT;AAA2B;AACmB;AAC3B;AAEnB;AAAc;AAIN;AAEgC;AAExC;AAAiB;AAIT;AAEmC;AAI3C;AAAA;AACE;AACoD;AAGtD;AACG;AACK;AACC;AACiB;AACtB;AAEC;AACH;AAGN;AAEA;AACE;AACF;;;"}
1
+ {"version":3,"file":"Duration.cjs","sources":["../../src/primitives/Duration.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Relax } from \"@liveblocks/core\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, type ReactNode, useMemo } from \"react\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\nimport { numberFormat } from \"../utils/intl\";\nimport { useInterval } from \"../utils/use-interval\";\nimport { useRerender } from \"../utils/use-rerender\";\n\nconst RENDER_INTERVAL = 0.5 * 1000; // 0.5 second\n\nconst DURATION_NAME = \"Duration\";\n\nexport type DurationProps = Omit<\n ComponentPropsWithSlot<\"time\">,\n \"children\" | \"title\"\n> &\n Relax<\n | {\n /**\n * The duration in milliseconds.\n * If provided, `from` and `to` will be ignored.\n */\n duration: number;\n }\n | {\n /**\n * The date at which the duration starts.\n * If provided, `duration` will be ignored.\n * If provided without `to` it means that the duration is in progress,\n * and the component will re-render at an interval, customizable with\n * the `interval` prop.\n */\n from: Date | string | number;\n\n /**\n * The date at which the duration ends.\n * If `from` is provided without `to`, `Date.now()` will be used.\n */\n to?: Date | string | number;\n }\n > & {\n /**\n * A function to format the displayed duration.\n */\n children?: (duration: number, locale?: string) => ReactNode;\n\n /**\n * The `title` attribute's value or a function to format it.\n */\n title?: string | ((duration: number, locale?: string) => string);\n\n /**\n * The interval in milliseconds at which the component will re-render if\n * `from` is provided without `to`, meaning that the duration is in progress.\n * Can be set to `false` to disable re-rendering.\n */\n interval?: number | false;\n\n /**\n * The locale used when formatting the duration.\n */\n locale?: string;\n };\n\ninterface DurationParts {\n weeks: number;\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n milliseconds: number;\n}\n\nfunction getDurationParts(duration: number): DurationParts {\n let remaining = Math.max(duration, 0);\n\n const milliseconds = remaining % 1000;\n remaining = Math.floor(remaining / 1000);\n\n const seconds = remaining % 60;\n remaining = Math.floor(remaining / 60);\n\n const minutes = remaining % 60;\n remaining = Math.floor(remaining / 60);\n\n const hours = remaining % 24;\n remaining = Math.floor(remaining / 24);\n\n const days = remaining % 7;\n const weeks = Math.floor(remaining / 7);\n\n return { weeks, days, hours, minutes, seconds, milliseconds };\n}\n\nconst durationPartsToNumberFormatOptions: Record<\n keyof DurationParts,\n Intl.NumberFormatOptions[\"unit\"]\n> = {\n weeks: \"week\",\n days: \"day\",\n hours: \"hour\",\n minutes: \"minute\",\n seconds: \"second\",\n milliseconds: \"millisecond\",\n};\n\n/**\n * Formats a duration in a short format.\n * TODO: Use `Intl.DurationFormat` when it's better supported.\n */\nfunction formatShortDuration(duration: number, locale?: string) {\n let resolvedLocale: string;\n\n if (locale) {\n resolvedLocale = locale;\n } else {\n const formatter = numberFormat();\n\n resolvedLocale = formatter.resolvedOptions().locale;\n }\n\n const parts = getDurationParts(duration);\n const formattedParts: string[] = [];\n\n for (const [unit, value] of Object.entries(parts) as [\n keyof DurationParts,\n number,\n ][]) {\n if (value === 0 || unit === \"milliseconds\") {\n continue;\n }\n\n const formatter = numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: durationPartsToNumberFormatOptions[unit],\n unitDisplay: \"narrow\",\n });\n\n formattedParts.push(formatter.format(value));\n }\n\n if (!formattedParts.length) {\n formattedParts.push(\n numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: \"second\",\n unitDisplay: \"narrow\",\n }).format(0)\n );\n }\n\n return formattedParts.join(\" \");\n}\n\n/**\n * Formats a duration in a longer format.\n * TODO: Use `Intl.DurationFormat` when it's better supported.\n */\nfunction formatVerboseDuration(duration: number, locale?: string) {\n let resolvedLocale: string;\n\n if (locale) {\n resolvedLocale = locale;\n } else {\n const formatter = numberFormat();\n\n resolvedLocale = formatter.resolvedOptions().locale;\n }\n\n const parts = getDurationParts(duration);\n const formattedParts: string[] = [];\n\n for (const [unit, value] of Object.entries(parts) as [\n keyof DurationParts,\n number,\n ][]) {\n if (value === 0 || unit === \"milliseconds\") {\n continue;\n }\n\n const formatter = numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: durationPartsToNumberFormatOptions[unit],\n unitDisplay: \"long\",\n });\n\n formattedParts.push(formatter.format(value));\n }\n\n if (!formattedParts.length) {\n formattedParts.push(\n numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: \"second\",\n unitDisplay: \"long\",\n }).format(0)\n );\n }\n\n return formattedParts.join(\" \");\n}\n\n/**\n * Formats a duration as ISO 8601.\n * TODO: Use `Temporal.Duration` when it's better supported.\n */\nexport function formatIso8601Duration(duration: number) {\n const normalizedDuration = Math.max(duration, 0);\n\n if (normalizedDuration === 0) {\n return \"PT0S\";\n }\n\n const { weeks, days, hours, minutes, seconds, milliseconds } =\n getDurationParts(normalizedDuration);\n\n let isoDuration = \"P\";\n\n // 1. Weeks\n if (weeks > 0) {\n isoDuration += `${weeks}W`;\n }\n\n // 2. Days\n if (days > 0) {\n isoDuration += `${days}D`;\n }\n\n if (hours > 0 || minutes > 0 || seconds > 0 || milliseconds > 0) {\n isoDuration += \"T\";\n\n // 3. Hours\n if (hours > 0) {\n isoDuration += `${hours}H`;\n }\n\n // 4. Minutes\n if (minutes > 0) {\n isoDuration += `${minutes}M`;\n }\n\n // 5. Seconds and milliseconds\n if (seconds > 0 || milliseconds > 0) {\n if (milliseconds > 0) {\n isoDuration += `${seconds}.${milliseconds.toString().padStart(3, \"0\").replace(/0+$/, \"\")}S`;\n } else {\n isoDuration += `${seconds}S`;\n }\n }\n }\n\n return isoDuration;\n}\n\n/**\n * Converts a Date or Date-like value to a timestamp in milliseconds.\n */\nfunction getDateTime(date: Date | string | number) {\n if (date instanceof Date) {\n return date.getTime();\n }\n\n return new Date(date).getTime();\n}\n\n/**\n * Get a duration between two Date or Date-like values.\n */\nexport function getDuration(\n from: Date | string | number,\n to: Date | string | number\n) {\n return getDateTime(to) - getDateTime(from);\n}\n\n/**\n * Displays a formatted duration, and automatically re-renders to if the\n * duration is in progress.\n *\n * @example\n * <Duration duration={3 * 60 * 1000} />\n *\n * @example\n * <Duration from={fiveHoursAgoDate} />\n *\n * @example\n * <Duration from={fiveHoursAgoDate} to={oneHourAgoDate} />\n */\nexport const Duration = forwardRef<HTMLTimeElement, DurationProps>(\n (\n {\n duration,\n from,\n to,\n locale,\n dateTime,\n title: renderTitle = formatVerboseDuration,\n children: renderChildren = formatShortDuration,\n interval = RENDER_INTERVAL,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"time\";\n const [rerender, key] = useRerender();\n const resolvedDuration = useMemo(() => {\n if (duration !== undefined) {\n return duration;\n }\n\n if (from !== undefined) {\n return getDuration(from, to ?? Date.now());\n }\n\n return 0;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [duration, from, to, key]);\n const normalizedDuration = useMemo(\n () => formatIso8601Duration(resolvedDuration),\n [resolvedDuration]\n );\n const title = useMemo(\n () =>\n typeof renderTitle === \"function\"\n ? renderTitle(resolvedDuration, locale)\n : renderTitle,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [renderTitle, resolvedDuration, locale]\n );\n const children = useMemo(\n () =>\n typeof renderChildren === \"function\"\n ? renderChildren(resolvedDuration, locale)\n : renderChildren,\n\n [renderChildren, resolvedDuration, locale]\n );\n\n // Only re-render if the duration is in progress.\n useInterval(\n rerender,\n from !== undefined && to === undefined ? interval : false\n );\n\n return (\n <Component\n {...props}\n ref={forwardedRef}\n dateTime={dateTime ?? normalizedDuration}\n title={title}\n >\n {children}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n Duration.displayName = DURATION_NAME;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAWA;AAEA;AA+DA;AACE;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACF;AAEA;AAGI;AACK;AACD;AACC;AACE;AACA;AAEX;AAMA;AACE;AAEA;AACE;AAAiB;AAEjB;AAEA;AAA6C;AAG/C;AACA;AAEA;AAIE;AACE;AAAA;AAGF;AAA+C;AACtC;AACkC;AAC5B;AAGf;AAA2C;AAG7C;AACE;AAAe;AACgB;AACpB;AACD;AACO;AACJ;AACb;AAGF;AACF;AAMA;AACE;AAEA;AACE;AAAiB;AAEjB;AAEA;AAA6C;AAG/C;AACA;AAEA;AAIE;AACE;AAAA;AAGF;AAA+C;AACtC;AACkC;AAC5B;AAGf;AAA2C;AAG7C;AACE;AAAe;AACgB;AACpB;AACD;AACO;AACJ;AACb;AAGF;AACF;AAMO;AACL;AAEA;AACE;AAAO;AAGT;AAGA;AAGA;AACE;AAAkB;AAIpB;AACE;AAAkB;AAGpB;AACE;AAGA;AACE;AAAkB;AAIpB;AACE;AAAkB;AAIpB;AACE;AACE;AAAuF;AAEvF;AAAkB;AACpB;AACF;AAGF;AACF;AAKA;AACE;AACE;AAAoB;AAGtB;AACF;AAKgB;AAId;AACF;AAeO;AAAiB;AAEpB;AACE;AACA;AACA;AACA;AACA;AACqB;AACM;AAChB;AACX;AACG;AAIL;AACA;AACA;AACE;AACE;AAAO;AAGT;AACE;AAAyC;AAG3C;AAAO;AAGT;AAA2B;AACmB;AAC3B;AAEnB;AAAc;AAIN;AAEgC;AAExC;AAAiB;AAIT;AAEmC;AAI3C;AAAA;AACE;AACoD;AAGtD;AACG;AACK;AACC;AACiB;AACtB;AAEC;AACH;AAGN;AAEA;AACE;AACF;;;;"}
@@ -188,5 +188,5 @@ if (process.env.NODE_ENV !== "production") {
188
188
  Duration.displayName = DURATION_NAME;
189
189
  }
190
190
 
191
- export { Duration, formatIso8601Duration };
191
+ export { Duration, formatIso8601Duration, getDuration };
192
192
  //# sourceMappingURL=Duration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Duration.js","sources":["../../src/primitives/Duration.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Relax } from \"@liveblocks/core\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, type ReactNode, useMemo } from \"react\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\nimport { numberFormat } from \"../utils/intl\";\nimport { useInterval } from \"../utils/use-interval\";\nimport { useRerender } from \"../utils/use-rerender\";\n\nconst RENDER_INTERVAL = 0.5 * 1000; // 0.5 second\n\nconst DURATION_NAME = \"Duration\";\n\nexport type DurationProps = Omit<\n ComponentPropsWithSlot<\"time\">,\n \"children\" | \"title\"\n> &\n Relax<\n | {\n /**\n * The duration in milliseconds.\n * If provided, `from` and `to` will be ignored.\n */\n duration: number;\n }\n | {\n /**\n * The date at which the duration starts.\n * If provided, `duration` will be ignored.\n * If provided without `to` it means that the duration is in progress,\n * and the component will re-render at an interval, customizable with\n * the `interval` prop.\n */\n from: Date | string | number;\n\n /**\n * The date at which the duration ends.\n * If `from` is provided without `to`, `Date.now()` will be used.\n */\n to?: Date | string | number;\n }\n > & {\n /**\n * A function to format the displayed duration.\n */\n children?: (duration: number, locale?: string) => ReactNode;\n\n /**\n * The `title` attribute's value or a function to format it.\n */\n title?: string | ((duration: number, locale?: string) => string);\n\n /**\n * The interval in milliseconds at which the component will re-render if\n * `from` is provided without `to`, meaning that the duration is in progress.\n * Can be set to `false` to disable re-rendering.\n */\n interval?: number | false;\n\n /**\n * The locale used when formatting the duration.\n */\n locale?: string;\n };\n\ninterface DurationParts {\n weeks: number;\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n milliseconds: number;\n}\n\nfunction getDurationParts(duration: number): DurationParts {\n let remaining = Math.max(duration, 0);\n\n const milliseconds = remaining % 1000;\n remaining = Math.floor(remaining / 1000);\n\n const seconds = remaining % 60;\n remaining = Math.floor(remaining / 60);\n\n const minutes = remaining % 60;\n remaining = Math.floor(remaining / 60);\n\n const hours = remaining % 24;\n remaining = Math.floor(remaining / 24);\n\n const days = remaining % 7;\n const weeks = Math.floor(remaining / 7);\n\n return { weeks, days, hours, minutes, seconds, milliseconds };\n}\n\nconst durationPartsToNumberFormatOptions: Record<\n keyof DurationParts,\n Intl.NumberFormatOptions[\"unit\"]\n> = {\n weeks: \"week\",\n days: \"day\",\n hours: \"hour\",\n minutes: \"minute\",\n seconds: \"second\",\n milliseconds: \"millisecond\",\n};\n\n/**\n * Formats a duration in a short format.\n * TODO: Use `Intl.DurationFormat` when it's better supported.\n */\nfunction formatShortDuration(duration: number, locale?: string) {\n let resolvedLocale: string;\n\n if (locale) {\n resolvedLocale = locale;\n } else {\n const formatter = numberFormat();\n\n resolvedLocale = formatter.resolvedOptions().locale;\n }\n\n const parts = getDurationParts(duration);\n const formattedParts: string[] = [];\n\n for (const [unit, value] of Object.entries(parts) as [\n keyof DurationParts,\n number,\n ][]) {\n if (value === 0 || unit === \"milliseconds\") {\n continue;\n }\n\n const formatter = numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: durationPartsToNumberFormatOptions[unit],\n unitDisplay: \"narrow\",\n });\n\n formattedParts.push(formatter.format(value));\n }\n\n if (!formattedParts.length) {\n formattedParts.push(\n numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: \"second\",\n unitDisplay: \"narrow\",\n }).format(0)\n );\n }\n\n return formattedParts.join(\" \");\n}\n\n/**\n * Formats a duration in a longer format.\n * TODO: Use `Intl.DurationFormat` when it's better supported.\n */\nfunction formatVerboseDuration(duration: number, locale?: string) {\n let resolvedLocale: string;\n\n if (locale) {\n resolvedLocale = locale;\n } else {\n const formatter = numberFormat();\n\n resolvedLocale = formatter.resolvedOptions().locale;\n }\n\n const parts = getDurationParts(duration);\n const formattedParts: string[] = [];\n\n for (const [unit, value] of Object.entries(parts) as [\n keyof DurationParts,\n number,\n ][]) {\n if (value === 0 || unit === \"milliseconds\") {\n continue;\n }\n\n const formatter = numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: durationPartsToNumberFormatOptions[unit],\n unitDisplay: \"long\",\n });\n\n formattedParts.push(formatter.format(value));\n }\n\n if (!formattedParts.length) {\n formattedParts.push(\n numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: \"second\",\n unitDisplay: \"long\",\n }).format(0)\n );\n }\n\n return formattedParts.join(\" \");\n}\n\n/**\n * Formats a duration as ISO 8601.\n * TODO: Use `Temporal.Duration` when it's better supported.\n */\nexport function formatIso8601Duration(duration: number) {\n const normalizedDuration = Math.max(duration, 0);\n\n if (normalizedDuration === 0) {\n return \"PT0S\";\n }\n\n const { weeks, days, hours, minutes, seconds, milliseconds } =\n getDurationParts(normalizedDuration);\n\n let isoDuration = \"P\";\n\n // 1. Weeks\n if (weeks > 0) {\n isoDuration += `${weeks}W`;\n }\n\n // 2. Days\n if (days > 0) {\n isoDuration += `${days}D`;\n }\n\n if (hours > 0 || minutes > 0 || seconds > 0 || milliseconds > 0) {\n isoDuration += \"T\";\n\n // 3. Hours\n if (hours > 0) {\n isoDuration += `${hours}H`;\n }\n\n // 4. Minutes\n if (minutes > 0) {\n isoDuration += `${minutes}M`;\n }\n\n // 5. Seconds and milliseconds\n if (seconds > 0 || milliseconds > 0) {\n if (milliseconds > 0) {\n isoDuration += `${seconds}.${milliseconds.toString().padStart(3, \"0\").replace(/0+$/, \"\")}S`;\n } else {\n isoDuration += `${seconds}S`;\n }\n }\n }\n\n return isoDuration;\n}\n\n/**\n * Converts a Date or Date-like value to a timestamp in milliseconds.\n */\nfunction getDateTime(date: Date | string | number) {\n if (date instanceof Date) {\n return date.getTime();\n }\n\n return new Date(date).getTime();\n}\n\n/**\n * Get a duration between two Date or Date-like values.\n */\nfunction getDuration(from: Date | string | number, to: Date | string | number) {\n return getDateTime(to) - getDateTime(from);\n}\n\n/**\n * Displays a formatted duration, and automatically re-renders to if the\n * duration is in progress.\n *\n * @example\n * <Duration duration={3 * 60 * 1000} />\n *\n * @example\n * <Duration from={fiveHoursAgoDate} />\n *\n * @example\n * <Duration from={fiveHoursAgoDate} to={oneHourAgoDate} />\n */\nexport const Duration = forwardRef<HTMLTimeElement, DurationProps>(\n (\n {\n duration,\n from,\n to,\n locale,\n dateTime,\n title: renderTitle = formatVerboseDuration,\n children: renderChildren = formatShortDuration,\n interval = RENDER_INTERVAL,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"time\";\n const [rerender, key] = useRerender();\n const resolvedDuration = useMemo(() => {\n if (duration !== undefined) {\n return duration;\n }\n\n if (from !== undefined) {\n return getDuration(from, to ?? Date.now());\n }\n\n return 0;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [duration, from, to, key]);\n const normalizedDuration = useMemo(\n () => formatIso8601Duration(resolvedDuration),\n [resolvedDuration]\n );\n const title = useMemo(\n () =>\n typeof renderTitle === \"function\"\n ? renderTitle(resolvedDuration, locale)\n : renderTitle,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [renderTitle, resolvedDuration, locale]\n );\n const children = useMemo(\n () =>\n typeof renderChildren === \"function\"\n ? renderChildren(resolvedDuration, locale)\n : renderChildren,\n\n [renderChildren, resolvedDuration, locale]\n );\n\n // Only re-render if the duration is in progress.\n useInterval(\n rerender,\n from !== undefined && to === undefined ? interval : false\n );\n\n return (\n <Component\n {...props}\n ref={forwardedRef}\n dateTime={dateTime ?? normalizedDuration}\n title={title}\n >\n {children}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n Duration.displayName = DURATION_NAME;\n}\n"],"names":[],"mappings":";;;;;;;;;AAWA;AAEA;AA+DA;AACE;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACF;AAEA;AAGI;AACK;AACD;AACC;AACE;AACA;AAEX;AAMA;AACE;AAEA;AACE;AAAiB;AAEjB;AAEA;AAA6C;AAG/C;AACA;AAEA;AAIE;AACE;AAAA;AAGF;AAA+C;AACtC;AACkC;AAC5B;AAGf;AAA2C;AAG7C;AACE;AAAe;AACgB;AACpB;AACD;AACO;AACJ;AACb;AAGF;AACF;AAMA;AACE;AAEA;AACE;AAAiB;AAEjB;AAEA;AAA6C;AAG/C;AACA;AAEA;AAIE;AACE;AAAA;AAGF;AAA+C;AACtC;AACkC;AAC5B;AAGf;AAA2C;AAG7C;AACE;AAAe;AACgB;AACpB;AACD;AACO;AACJ;AACb;AAGF;AACF;AAMO;AACL;AAEA;AACE;AAAO;AAGT;AAGA;AAGA;AACE;AAAkB;AAIpB;AACE;AAAkB;AAGpB;AACE;AAGA;AACE;AAAkB;AAIpB;AACE;AAAkB;AAIpB;AACE;AACE;AAAuF;AAEvF;AAAkB;AACpB;AACF;AAGF;AACF;AAKA;AACE;AACE;AAAoB;AAGtB;AACF;AAKA;AACE;AACF;AAeO;AAAiB;AAEpB;AACE;AACA;AACA;AACA;AACA;AACqB;AACM;AAChB;AACX;AACG;AAIL;AACA;AACA;AACE;AACE;AAAO;AAGT;AACE;AAAyC;AAG3C;AAAO;AAGT;AAA2B;AACmB;AAC3B;AAEnB;AAAc;AAIN;AAEgC;AAExC;AAAiB;AAIT;AAEmC;AAI3C;AAAA;AACE;AACoD;AAGtD;AACG;AACK;AACC;AACiB;AACtB;AAEC;AACH;AAGN;AAEA;AACE;AACF;;"}
1
+ {"version":3,"file":"Duration.js","sources":["../../src/primitives/Duration.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Relax } from \"@liveblocks/core\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, type ReactNode, useMemo } from \"react\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\nimport { numberFormat } from \"../utils/intl\";\nimport { useInterval } from \"../utils/use-interval\";\nimport { useRerender } from \"../utils/use-rerender\";\n\nconst RENDER_INTERVAL = 0.5 * 1000; // 0.5 second\n\nconst DURATION_NAME = \"Duration\";\n\nexport type DurationProps = Omit<\n ComponentPropsWithSlot<\"time\">,\n \"children\" | \"title\"\n> &\n Relax<\n | {\n /**\n * The duration in milliseconds.\n * If provided, `from` and `to` will be ignored.\n */\n duration: number;\n }\n | {\n /**\n * The date at which the duration starts.\n * If provided, `duration` will be ignored.\n * If provided without `to` it means that the duration is in progress,\n * and the component will re-render at an interval, customizable with\n * the `interval` prop.\n */\n from: Date | string | number;\n\n /**\n * The date at which the duration ends.\n * If `from` is provided without `to`, `Date.now()` will be used.\n */\n to?: Date | string | number;\n }\n > & {\n /**\n * A function to format the displayed duration.\n */\n children?: (duration: number, locale?: string) => ReactNode;\n\n /**\n * The `title` attribute's value or a function to format it.\n */\n title?: string | ((duration: number, locale?: string) => string);\n\n /**\n * The interval in milliseconds at which the component will re-render if\n * `from` is provided without `to`, meaning that the duration is in progress.\n * Can be set to `false` to disable re-rendering.\n */\n interval?: number | false;\n\n /**\n * The locale used when formatting the duration.\n */\n locale?: string;\n };\n\ninterface DurationParts {\n weeks: number;\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n milliseconds: number;\n}\n\nfunction getDurationParts(duration: number): DurationParts {\n let remaining = Math.max(duration, 0);\n\n const milliseconds = remaining % 1000;\n remaining = Math.floor(remaining / 1000);\n\n const seconds = remaining % 60;\n remaining = Math.floor(remaining / 60);\n\n const minutes = remaining % 60;\n remaining = Math.floor(remaining / 60);\n\n const hours = remaining % 24;\n remaining = Math.floor(remaining / 24);\n\n const days = remaining % 7;\n const weeks = Math.floor(remaining / 7);\n\n return { weeks, days, hours, minutes, seconds, milliseconds };\n}\n\nconst durationPartsToNumberFormatOptions: Record<\n keyof DurationParts,\n Intl.NumberFormatOptions[\"unit\"]\n> = {\n weeks: \"week\",\n days: \"day\",\n hours: \"hour\",\n minutes: \"minute\",\n seconds: \"second\",\n milliseconds: \"millisecond\",\n};\n\n/**\n * Formats a duration in a short format.\n * TODO: Use `Intl.DurationFormat` when it's better supported.\n */\nfunction formatShortDuration(duration: number, locale?: string) {\n let resolvedLocale: string;\n\n if (locale) {\n resolvedLocale = locale;\n } else {\n const formatter = numberFormat();\n\n resolvedLocale = formatter.resolvedOptions().locale;\n }\n\n const parts = getDurationParts(duration);\n const formattedParts: string[] = [];\n\n for (const [unit, value] of Object.entries(parts) as [\n keyof DurationParts,\n number,\n ][]) {\n if (value === 0 || unit === \"milliseconds\") {\n continue;\n }\n\n const formatter = numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: durationPartsToNumberFormatOptions[unit],\n unitDisplay: \"narrow\",\n });\n\n formattedParts.push(formatter.format(value));\n }\n\n if (!formattedParts.length) {\n formattedParts.push(\n numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: \"second\",\n unitDisplay: \"narrow\",\n }).format(0)\n );\n }\n\n return formattedParts.join(\" \");\n}\n\n/**\n * Formats a duration in a longer format.\n * TODO: Use `Intl.DurationFormat` when it's better supported.\n */\nfunction formatVerboseDuration(duration: number, locale?: string) {\n let resolvedLocale: string;\n\n if (locale) {\n resolvedLocale = locale;\n } else {\n const formatter = numberFormat();\n\n resolvedLocale = formatter.resolvedOptions().locale;\n }\n\n const parts = getDurationParts(duration);\n const formattedParts: string[] = [];\n\n for (const [unit, value] of Object.entries(parts) as [\n keyof DurationParts,\n number,\n ][]) {\n if (value === 0 || unit === \"milliseconds\") {\n continue;\n }\n\n const formatter = numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: durationPartsToNumberFormatOptions[unit],\n unitDisplay: \"long\",\n });\n\n formattedParts.push(formatter.format(value));\n }\n\n if (!formattedParts.length) {\n formattedParts.push(\n numberFormat(resolvedLocale, {\n style: \"unit\",\n unit: \"second\",\n unitDisplay: \"long\",\n }).format(0)\n );\n }\n\n return formattedParts.join(\" \");\n}\n\n/**\n * Formats a duration as ISO 8601.\n * TODO: Use `Temporal.Duration` when it's better supported.\n */\nexport function formatIso8601Duration(duration: number) {\n const normalizedDuration = Math.max(duration, 0);\n\n if (normalizedDuration === 0) {\n return \"PT0S\";\n }\n\n const { weeks, days, hours, minutes, seconds, milliseconds } =\n getDurationParts(normalizedDuration);\n\n let isoDuration = \"P\";\n\n // 1. Weeks\n if (weeks > 0) {\n isoDuration += `${weeks}W`;\n }\n\n // 2. Days\n if (days > 0) {\n isoDuration += `${days}D`;\n }\n\n if (hours > 0 || minutes > 0 || seconds > 0 || milliseconds > 0) {\n isoDuration += \"T\";\n\n // 3. Hours\n if (hours > 0) {\n isoDuration += `${hours}H`;\n }\n\n // 4. Minutes\n if (minutes > 0) {\n isoDuration += `${minutes}M`;\n }\n\n // 5. Seconds and milliseconds\n if (seconds > 0 || milliseconds > 0) {\n if (milliseconds > 0) {\n isoDuration += `${seconds}.${milliseconds.toString().padStart(3, \"0\").replace(/0+$/, \"\")}S`;\n } else {\n isoDuration += `${seconds}S`;\n }\n }\n }\n\n return isoDuration;\n}\n\n/**\n * Converts a Date or Date-like value to a timestamp in milliseconds.\n */\nfunction getDateTime(date: Date | string | number) {\n if (date instanceof Date) {\n return date.getTime();\n }\n\n return new Date(date).getTime();\n}\n\n/**\n * Get a duration between two Date or Date-like values.\n */\nexport function getDuration(\n from: Date | string | number,\n to: Date | string | number\n) {\n return getDateTime(to) - getDateTime(from);\n}\n\n/**\n * Displays a formatted duration, and automatically re-renders to if the\n * duration is in progress.\n *\n * @example\n * <Duration duration={3 * 60 * 1000} />\n *\n * @example\n * <Duration from={fiveHoursAgoDate} />\n *\n * @example\n * <Duration from={fiveHoursAgoDate} to={oneHourAgoDate} />\n */\nexport const Duration = forwardRef<HTMLTimeElement, DurationProps>(\n (\n {\n duration,\n from,\n to,\n locale,\n dateTime,\n title: renderTitle = formatVerboseDuration,\n children: renderChildren = formatShortDuration,\n interval = RENDER_INTERVAL,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"time\";\n const [rerender, key] = useRerender();\n const resolvedDuration = useMemo(() => {\n if (duration !== undefined) {\n return duration;\n }\n\n if (from !== undefined) {\n return getDuration(from, to ?? Date.now());\n }\n\n return 0;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [duration, from, to, key]);\n const normalizedDuration = useMemo(\n () => formatIso8601Duration(resolvedDuration),\n [resolvedDuration]\n );\n const title = useMemo(\n () =>\n typeof renderTitle === \"function\"\n ? renderTitle(resolvedDuration, locale)\n : renderTitle,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [renderTitle, resolvedDuration, locale]\n );\n const children = useMemo(\n () =>\n typeof renderChildren === \"function\"\n ? renderChildren(resolvedDuration, locale)\n : renderChildren,\n\n [renderChildren, resolvedDuration, locale]\n );\n\n // Only re-render if the duration is in progress.\n useInterval(\n rerender,\n from !== undefined && to === undefined ? interval : false\n );\n\n return (\n <Component\n {...props}\n ref={forwardedRef}\n dateTime={dateTime ?? normalizedDuration}\n title={title}\n >\n {children}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n Duration.displayName = DURATION_NAME;\n}\n"],"names":[],"mappings":";;;;;;;;;AAWA;AAEA;AA+DA;AACE;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACF;AAEA;AAGI;AACK;AACD;AACC;AACE;AACA;AAEX;AAMA;AACE;AAEA;AACE;AAAiB;AAEjB;AAEA;AAA6C;AAG/C;AACA;AAEA;AAIE;AACE;AAAA;AAGF;AAA+C;AACtC;AACkC;AAC5B;AAGf;AAA2C;AAG7C;AACE;AAAe;AACgB;AACpB;AACD;AACO;AACJ;AACb;AAGF;AACF;AAMA;AACE;AAEA;AACE;AAAiB;AAEjB;AAEA;AAA6C;AAG/C;AACA;AAEA;AAIE;AACE;AAAA;AAGF;AAA+C;AACtC;AACkC;AAC5B;AAGf;AAA2C;AAG7C;AACE;AAAe;AACgB;AACpB;AACD;AACO;AACJ;AACb;AAGF;AACF;AAMO;AACL;AAEA;AACE;AAAO;AAGT;AAGA;AAGA;AACE;AAAkB;AAIpB;AACE;AAAkB;AAGpB;AACE;AAGA;AACE;AAAkB;AAIpB;AACE;AAAkB;AAIpB;AACE;AACE;AAAuF;AAEvF;AAAkB;AACpB;AACF;AAGF;AACF;AAKA;AACE;AACE;AAAoB;AAGtB;AACF;AAKgB;AAId;AACF;AAeO;AAAiB;AAEpB;AACE;AACA;AACA;AACA;AACA;AACqB;AACM;AAChB;AACX;AACG;AAIL;AACA;AACA;AACE;AACE;AAAO;AAGT;AACE;AAAyC;AAG3C;AAAO;AAGT;AAA2B;AACmB;AAC3B;AAEnB;AAAc;AAIN;AAEgC;AAExC;AAAiB;AAIT;AAEmC;AAI3C;AAAA;AACE;AACoD;AAGtD;AACG;AACK;AACC;AACiB;AACtB;AAEC;AACH;AAGN;AAEA;AACE;AACF;;"}
package/dist/version.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const PKG_NAME = "@liveblocks/react-ui";
4
- const PKG_VERSION = typeof "3.6.0" === "string" && "3.6.0";
4
+ const PKG_VERSION = typeof "3.6.1" === "string" && "3.6.1";
5
5
  const PKG_FORMAT = typeof "cjs" === "string" && "cjs";
6
6
 
7
7
  exports.PKG_FORMAT = PKG_FORMAT;
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const PKG_NAME = "@liveblocks/react-ui";
2
- const PKG_VERSION = typeof "3.6.0" === "string" && "3.6.0";
2
+ const PKG_VERSION = typeof "3.6.1" === "string" && "3.6.1";
3
3
  const PKG_FORMAT = typeof "esm" === "string" && "esm";
4
4
 
5
5
  export { PKG_FORMAT, PKG_NAME, PKG_VERSION };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liveblocks/react-ui",
3
- "version": "3.6.0",
3
+ "version": "3.6.1",
4
4
  "description": "A set of React pre-built components for the Liveblocks products. Liveblocks is the all-in-one toolkit to build collaborative products like Figma, Notion, and more.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -76,9 +76,9 @@
76
76
  },
77
77
  "dependencies": {
78
78
  "@floating-ui/react-dom": "^2.1.2",
79
- "@liveblocks/client": "3.6.0",
80
- "@liveblocks/core": "3.6.0",
81
- "@liveblocks/react": "3.6.0",
79
+ "@liveblocks/client": "3.6.1",
80
+ "@liveblocks/core": "3.6.1",
81
+ "@liveblocks/react": "3.6.1",
82
82
  "@radix-ui/react-dropdown-menu": "^2.1.2",
83
83
  "@radix-ui/react-popover": "^1.1.2",
84
84
  "@radix-ui/react-slot": "^1.1.0",
@@ -2949,6 +2949,8 @@
2949
2949
 
2950
2950
  .lb-ai-tool-header-title {
2951
2951
  @include truncate;
2952
+
2953
+ user-select: auto;
2952
2954
  }
2953
2955
 
2954
2956
  .lb-ai-tool-header-status {
package/styles.css CHANGED
@@ -1 +1 @@
1
- .lb-root{--lb-radius:.5em;--lb-spacing:1em;--lb-accent:#17f;--lb-accent-foreground:#fff;--lb-destructive:#f45;--lb-destructive-foreground:#fff;--lb-background:#fff;--lb-foreground:#111;--lb-line-height:1.5;--lb-icon-size:20px;--lb-icon-weight:1.5px;--lb-avatar-radius:50%;--lb-button-radius:calc(.75*var(--lb-radius));--lb-transition-duration:.1s;--lb-transition-easing:cubic-bezier(.4,0,.2,1);--lb-highlight-shadow:inset 0 0 0 1px #0000001a;--lb-elevation-shadow:0 0 0 1px #0000000a,0 2px 6px #00000014,0 8px 26px #0000001f;--lb-elevation-shadow-moderate:0 0 0 1px #0000000a,0 2px 6px #0000000d,0 8px 26px #0000000f;--lb-tooltip-shadow:0 2px 4px #00000014,0 4px 12px #0000001f;--lb-accent-contrast:8%;--lb-destructive-contrast:8%;--lb-foreground-contrast:8%;--lb-background-foreground-faint:color-mix(in srgb,var(--lb-foreground),var(--lb-background)calc(100% - var(--lb-foreground-contrast) + ((100% - var(--lb-foreground-contrast))/9)/2));--lb-background-foreground-subtle:color-mix(in srgb,var(--lb-foreground),var(--lb-background)calc(100% - var(--lb-foreground-contrast)));--lb-background-accent-faint:color-mix(in srgb,var(--lb-accent),var(--lb-background)calc(100% - var(--lb-accent-contrast) + ((100% - var(--lb-accent-contrast))/9)/2));--lb-background-accent-subtle:color-mix(in srgb,var(--lb-accent),var(--lb-background)calc(100% - var(--lb-accent-contrast)));--lb-background-destructive-faint:color-mix(in srgb,var(--lb-destructive),var(--lb-background)calc(100% - var(--lb-destructive-contrast) + ((100% - var(--lb-destructive-contrast))/9)/2));--lb-background-destructive-subtle:color-mix(in srgb,var(--lb-destructive),var(--lb-background)calc(100% - var(--lb-destructive-contrast)));--lb-accent-subtle:color-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background)calc(100% - var(--lb-accent-contrast)));--lb-accent-moderate:color-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background)calc(100% - (var(--lb-accent-contrast) + 3*((100% - var(--lb-accent-contrast))/9))));--lb-accent-tertiary:color-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background)calc(100% - (var(--lb-accent-contrast) + 5*((100% - var(--lb-accent-contrast))/9))));--lb-accent-secondary:color-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background)calc(100% - (var(--lb-accent-contrast) + 7*((100% - var(--lb-accent-contrast))/9))));--lb-destructive-subtle:color-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background)calc(100% - var(--lb-destructive-contrast)));--lb-destructive-moderate:color-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background)calc(100% - (var(--lb-destructive-contrast) + 3*((100% - var(--lb-destructive-contrast))/9))));--lb-destructive-tertiary:color-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background)calc(100% - (var(--lb-destructive-contrast) + 5*((100% - var(--lb-destructive-contrast))/9))));--lb-destructive-secondary:color-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background)calc(100% - (var(--lb-destructive-contrast) + 7*((100% - var(--lb-destructive-contrast))/9))));--lb-foreground-subtle:color-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background)calc(100% - var(--lb-foreground-contrast)));--lb-foreground-moderate:color-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background)calc(100% - (var(--lb-foreground-contrast) + 3*((100% - var(--lb-foreground-contrast))/9))));--lb-foreground-tertiary:color-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background)calc(100% - (var(--lb-foreground-contrast) + 5*((100% - var(--lb-foreground-contrast))/9))));--lb-foreground-secondary:color-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background)calc(100% - (var(--lb-foreground-contrast) + 7*((100% - var(--lb-foreground-contrast))/9))));--lb-selection:color-mix(in srgb,var(--lb-accent)40%,transparent);overflow-wrap:break-word;accent-color:var(--lb-accent);-webkit-text-size-adjust:none;text-size-adjust:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lb-root,.lb-root *,.lb-root :before,.lb-root :after{box-sizing:border-box;transition:none var(--lb-transition-duration)var(--lb-transition-easing)}.lb-root:where(:not(.lb-root .lb-root)){--lb-dynamic-background:var(--lb-background)}.lb-loading,.lb-empty,.lb-error{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.lb-loading{color:var(--lb-foreground-moderate)}.lb-empty,.lb-error{padding:var(--lb-spacing);color:var(--lb-foreground-tertiary);text-align:center;text-wrap:balance;font-size:.875em}.lb-icon-container,.lb-icon{inline-size:var(--lb-icon-size);block-size:var(--lb-icon-size)}.lb-icon-container{justify-content:center;align-items:center;display:flex}.lb-icon{--lb-icon-background:var(--lb-dynamic-background)}.lb-icon *{stroke-width:var(--lb-icon-weight);vector-effect:non-scaling-stroke}.lb-icon-spinner{transform-origin:50%;animation:.75s linear infinite lb-animation-spin}.lb-button{--lb-button-background:var(--lb-dynamic-background);all:unset;box-sizing:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;transition-timing-function:var(--lb-transition-easing);transition-duration:var(--lb-transition-duration);-webkit-tap-highlight-color:transparent;padding:calc(.25*var(--lb-spacing));border-radius:var(--lb-button-radius);background:var(--lb-button-background);color:var(--lb-foreground-moderate);outline:none;justify-content:center;align-items:center;transition-property:background,color,opacity;display:flex;position:relative}.lb-button:after{content:"";border-radius:inherit;pointer-events:none;transition-property:box-shadow;position:absolute;inset:0}.lb-button:where(:focus-visible){z-index:1}.lb-button:where(:focus-visible):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-accent)0 0 0 4px}.lb-button:where(.lb-button\:non-disableable:disabled){cursor:default}.lb-button:where(:not(.lb-button\:non-disableable):disabled){opacity:.5;cursor:not-allowed}.lb-button:where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary)}.lb-button:where([data-variant=default]:not(:is(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true],[aria-pressed]))){background:0 0}.lb-button:where([data-variant=primary]){--lb-button-background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-button:where([data-variant=primary]):where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){--lb-button-background:var(--lb-accent-secondary);color:var(--lb-accent-foreground)}.lb-button:where([data-variant=destructive]){--lb-button-background:var(--lb-destructive);color:var(--lb-destructive-foreground)}.lb-button:where([data-variant=destructive]):where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){--lb-button-background:var(--lb-destructive-secondary);color:var(--lb-destructive-foreground)}.lb-button:where([data-variant=outline]){box-shadow:inset 0 0 0 1px var(--lb-foreground-subtle);transition-property:background,color,opacity,box-shadow}.lb-button:where([data-variant=ghost]){background:0 0}.lb-button:where(:has(.lb-button-label)){gap:calc(.175*var(--lb-spacing));padding-inline:calc(.55*var(--lb-spacing))}.lb-button:where(:has(.lb-button-label)):where(:has(.lb-icon-container)){padding-inline-start:calc(.4*var(--lb-spacing))}.lb-button:where([data-variant=toolbar]){color:var(--lb-foreground-tertiary)}.lb-button:where([data-variant=toolbar]):where([aria-pressed=true]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-secondary)}.lb-button:where([data-variant=toolbar]):where([aria-pressed=true]) :where(.lb-icon *){stroke-width:calc(1.25*var(--lb-icon-weight))}.lb-button:where([data-variant=secondary]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary)}.lb-button:where([data-variant=secondary]):where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){--lb-button-background:var(--lb-foreground);color:var(--lb-dynamic-background)}.lb-button:where([data-size=large]){padding:calc(.5*var(--lb-spacing))}.lb-button:where([data-size=large]):where(:has(.lb-button-label)){gap:calc(.35*var(--lb-spacing));padding-inline:calc(.7*var(--lb-spacing))}.lb-button:where([data-size=large]):where(:has(.lb-button-label)):where(:has(.lb-icon-container)){padding-inline-start:calc(.6*var(--lb-spacing))}.lb-button :where(.lb-icon-container){flex:none}.lb-button :where(.lb-icon){--lb-icon-background:var(--lb-button-background)}.lb-button-label{block-size:var(--lb-icon-size);font-weight:500;font-size:calc(.7*var(--lb-icon-size));flex:none;align-items:center;line-height:1;display:inline-flex}.lb-dropdown{min-inline-size:160px}.lb-dropdown-label{padding:calc(.875*var(--lb-spacing))calc(.625*var(--lb-spacing))calc(.125*var(--lb-spacing));color:var(--lb-foreground-tertiary);text-transform:uppercase;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:.675em;font-weight:600}.lb-dropdown-label:where(:first-child){padding-block-start:var(--lb-spacing)}.lb-dropdown-separator{background:var(--lb-foreground-subtle);block-size:1px;margin:4px -4px}.lb-dropdown-item :where(.lb-icon-container){color:var(--lb-foreground-moderate);margin-inline-start:calc(-.125*var(--lb-spacing));margin-inline-end:calc(.375*var(--lb-spacing));transition-property:color}.lb-dropdown-item:where(:is([data-highlighted]:not([data-highlighted=false]),[data-selected]:not([data-selected=false]),[data-active]:not([data-active=false]))) :where(.lb-icon-container){color:var(--lb-foreground-tertiary)}.lb-dropdown-item:where(:has(.lb-dropdown-item-accessory)) :where(.lb-dropdown-item-label){margin-inline-end:calc(.375*var(--lb-spacing))}.lb-dropdown-item-accessory{margin-inline-start:auto;margin-inline-end:calc(-.25*var(--lb-spacing))}.lb-dropdown:where(:has(.lb-dropdown-item-icon)) :where(.lb-dropdown-item:not(:has(.lb-dropdown-item-icon))) :where(.lb-dropdown-item-label){margin-inline-start:calc(var(--lb-icon-size) + (.375 - .125)*var(--lb-spacing))}.lb-select-button{min-inline-size:0}.lb-select-button :where(.lb-button-label){text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.lb-select-button-chevron{opacity:.75;flex:none;margin-inline-end:calc(-.25*var(--lb-spacing))}.lb-collapsible-trigger{all:unset;box-sizing:inherit;-webkit-user-select:none;user-select:none;transition-timing-function:var(--lb-transition-easing);transition-duration:var(--lb-transition-duration);-webkit-tap-highlight-color:transparent;transition-property:color,background,opacity;position:relative}.lb-collapsible-trigger:where(:not([data-disabled])){cursor:pointer}.lb-collapsible-chevron{inline-size:calc(.8*var(--lb-icon-size));block-size:calc(.8*var(--lb-icon-size));opacity:.65;margin-block-start:1px;margin-inline-start:-1px}.lb-collapsible-content:where([hidden]:not([hidden=until-found])){display:none!important}.lb-prose,.lb-prose *{line-height:var(--lb-line-height)}.lb-prose :where(p){margin-block:.75em}.lb-prose :where(p,li){text-wrap:pretty}.lb-prose :where(h1,h2,h3,h4,h5,h6){text-wrap:balance;margin-block:1.5em .375em;font-weight:600}.lb-prose :where(h1){font-size:1.75em;line-height:calc(.8*var(--lb-line-height))}.lb-prose :where(h2){font-size:1.5em;line-height:calc(.86*var(--lb-line-height))}.lb-prose :where(h3){font-size:1.25em;line-height:calc(.92*var(--lb-line-height))}.lb-prose :where(h4){font-size:1.125em;line-height:calc(.98*var(--lb-line-height))}.lb-prose :where(h5){font-size:1em}.lb-prose :where(h6){font-size:.875em}.lb-prose :where(hr){border:none;border-block-start:1px solid var(--lb-foreground-subtle);margin-block:1.5em}.lb-prose :where(ol,ul){flex-direction:column;gap:.25em;margin-block:.75em;padding-inline-start:1.125em;list-style-position:outside;display:flex}.lb-prose :where(ol,ul) :where(ol,ul){margin-block:0}.lb-prose :where(ul){list-style-type:disc}.lb-prose :where(ol){list-style-type:decimal}.lb-prose :where(li){margin-block:0}.lb-prose :where(li)>:where(ol,ul){margin-block-start:.25em}.lb-prose :where(li)>:where(p){margin-block:.25em}.lb-prose :where(li)>:where(p:first-child){margin-block-start:0}.lb-prose :where(li)>:where(p:last-child){margin-block-end:0}.lb-prose :where(a){color:var(--lb-foreground);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-foreground-moderate);text-decoration-color:var(--lb-foreground-moderate);text-underline-offset:2px;outline:none;font-weight:500;transition-property:color,text-decoration-color}.lb-prose :where(a):where([href]):where(:hover,:focus-visible){color:var(--lb-accent);-webkit-text-decoration-color:var(--lb-accent-moderate);text-decoration-color:var(--lb-accent-moderate)}.lb-prose :where(strong){font-weight:600}.lb-prose :where(table){border-collapse:collapse;table-layout:auto;word-break:break-word;inline-size:100%;min-inline-size:0;margin-block:1em}.lb-prose :where(thead){border-block-end:2px solid var(--lb-foreground-subtle)}.lb-prose :where(thead) :where(th){vertical-align:bottom}.lb-prose :where(tbody) :where(td){vertical-align:baseline}.lb-prose :where(tbody) :where(tr:not(:last-child)){border-block-end:1px solid var(--lb-foreground-subtle)}.lb-prose :where(tfoot){border-block-start:2px solid var(--lb-foreground-subtle)}.lb-prose :where(tfoot) :where(td){vertical-align:top}.lb-prose :where(th,td){text-align:start;padding-block:.5em;padding-inline:.75em}.lb-prose :where(th,td):where(:first-child){padding-inline-start:0}.lb-prose :where(th,td):where(:last-child){padding-inline-end:0}.lb-prose :where(.lb-code-block){margin-block:1em}.lb-prose :where(blockquote){margin-block:.75em;margin-inline:0;padding:0;padding-inline-start:1.25em;position:relative}.lb-prose :where(blockquote):after{content:"";border-radius:calc(.5*var(--lb-radius));background:var(--lb-foreground-subtle);block-size:100%;inline-size:4px;position:absolute;inset-block-start:0;inset-inline-start:0}.lb-prose :where(blockquote):where(:is(.lb-prose :where(blockquote))+:is(.lb-prose :where(blockquote))){margin-block-start:1em}.lb-prose :where(blockquote)>:where(:first-child){margin-block-start:0}.lb-prose :where(blockquote)>:where(:last-child){margin-block-end:0}.lb-prose>:where(:first-child){margin-block-start:0}.lb-prose>:where(:last-child){margin-block-end:0}.lb-composer-suggestions-list{margin:0;padding:0;list-style:none}.lb-composer-suggestions-list-item{scroll-margin-block:4px}.lb-composer-mention-suggestions{--lb-composer-mention-suggestion-avatar-size:1.25rem}.lb-composer-mention-suggestion{padding:calc(.375*var(--lb-spacing))calc(.625*var(--lb-spacing))}.lb-composer-mention-suggestion-avatar{inline-size:var(--lb-composer-mention-suggestion-avatar-size);margin-inline-start:calc(-.125*var(--lb-spacing));margin-inline-end:calc(.5*var(--lb-spacing));margin-block:calc(.125*var(--lb-spacing));background:var(--lb-foreground-subtle);color:var(--lb-foreground-moderate)}.lb-list{display:contents}.lb-list :where(:first-child):first-letter,.lb-date:first-letter{text-transform:capitalize}.lb-emoji{white-space:nowrap;justify-content:center;align-items:center;inline-size:1em;display:inline-flex}@supports (background:-webkit-named-image(i)){.lb-emoji{will-change:transform;transform:scale(.825)}}.lb-emoji-picker{--lb-emoji-picker-padding:6px;--lb-emoji-picker-offset-padding:calc(6px + .375*var(--lb-spacing));inline-size:100%;max-inline-size:var(--frimousse-viewport-width);block-size:374px;color:var(--lb-foreground);flex-direction:column;display:flex}.lb-emoji-picker-header{border-block-end:1px solid var(--lb-foreground-subtle);flex:none}.lb-emoji-picker-footer{gap:calc(.5*var(--lb-spacing));inline-size:100%;padding:calc(.5*var(--lb-spacing));border-block-start:1px solid var(--lb-foreground-subtle);flex:none;align-items:center;display:flex}.lb-emoji-picker-active-emoji{flex:none;justify-content:center;align-items:center;block-size:1.25em;inline-size:1.25em;font-size:1.25em;display:flex}.lb-emoji-picker-active-emoji-label{text-overflow:ellipsis;white-space:nowrap;color:var(--lb-foreground-secondary);flex:1;font-size:.8125em;font-weight:500;overflow:hidden}.lb-emoji-picker-active-emoji-label-placeholder{color:var(--lb-foreground-moderate);margin-inline-start:calc(.5*var(--lb-spacing))}.lb-emoji-picker-skin-tone-selector{inline-size:calc(1.75*var(--lb-spacing));block-size:calc(1.75*var(--lb-spacing));flex:none;justify-content:center;align-items:center;margin-inline-start:auto;display:flex}.lb-emoji-picker-search-container{align-items:center;display:flex;position:relative}.lb-emoji-picker-search-container :where(.lb-icon){color:var(--lb-foreground-moderate);pointer-events:none;position:absolute;inset-inline-start:var(--lb-emoji-picker-offset-padding)}.lb-emoji-picker-search{all:unset;box-sizing:inherit;inline-size:100%;padding:var(--lb-emoji-picker-offset-padding);appearance:textfield;background:0 0;outline:none;padding-inline-start:calc(var(--lb-icon-size) + var(--lb-emoji-picker-offset-padding) + .375*var(--lb-spacing))}.lb-emoji-picker-search::placeholder{color:var(--lb-foreground-moderate)}.lb-emoji-picker-search::-webkit-search-cancel-button{display:none}.lb-emoji-picker-content{outline:none;flex:1;position:relative}.lb-emoji-picker-category-header{padding:var(--lb-emoji-picker-padding)var(--lb-emoji-picker-offset-padding);background:var(--lb-dynamic-background)}.lb-emoji-picker-category-header-title{color:var(--lb-foreground-tertiary);text-transform:uppercase;font-size:.675em;font-weight:600}.lb-emoji-picker-list{animation:lb-animation-appear var(--lb-transition-duration)var(--lb-transition-easing)both;padding-block-end:var(--lb-emoji-picker-padding)}.lb-emoji-picker-row{padding-inline:var(--lb-emoji-picker-padding);scroll-margin-block-end:var(--lb-emoji-picker-padding);display:flex}.lb-emoji-picker-emoji{all:unset;box-sizing:inherit;aspect-ratio:1;padding:calc(.375*var(--lb-spacing));border-radius:calc(var(--lb-radius) - .75*6px);text-align:center;justify-content:center;align-items:center;display:flex;overflow:hidden}.lb-tooltip{--lb-background:#222;--lb-foreground:#fff;--lb-foreground-contrast:10%;--lb-dynamic-background:var(--lb-background);max-inline-size:300px;min-block-size:calc(calc(1em + 2*.25*var(--lb-spacing)) + 2*5px);padding-inline:calc(.75*var(--lb-spacing));border-radius:var(--lb-radius);background:var(--lb-dynamic-background);color:var(--lb-foreground);box-shadow:var(--lb-tooltip-shadow);overflow-wrap:anywhere;pointer-events:none;align-items:center;font-size:.75rem;line-height:1;display:flex;position:relative}.lb-tooltip:after{content:"";z-index:1;border-radius:inherit;box-shadow:var(--lb-inset-shadow);pointer-events:none;position:absolute;inset:0}.lb-tooltip\:multiline{padding-block:calc(calc(.625*var(--lb-spacing))*(1/1.5));text-align:center;justify-content:center;line-height:1.5}.lb-tooltip-shortcut{gap:calc(.125*var(--lb-spacing));block-size:calc(1em + 2*.25*var(--lb-spacing));padding-inline:calc(.25*var(--lb-spacing));border-radius:calc(var(--lb-radius) - .625*5px);background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary);text-transform:uppercase;justify-content:center;align-items:center;margin-inline-start:calc(.75*var(--lb-spacing));margin-inline-end:calc(-1*calc(.75*var(--lb-spacing)) + 5px);font-family:inherit;line-height:1;display:flex}.lb-tooltip-shortcut :where(abbr){all:unset}.lb-avatar{aspect-ratio:1;border-radius:var(--lb-avatar-radius);background:var(--lb-foreground-subtle);color:var(--lb-foreground-moderate);justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden;container-type:inline-size}.lb-avatar:where([data-loading]){background:var(--lb-foreground);opacity:.12}.lb-avatar-image{object-fit:cover;block-size:100%;inline-size:100%;position:absolute;inset:0}.lb-avatar-fallback{white-space:nowrap;font-size:35cqi;font-weight:500}@supports not (container-type:inline-size){.lb-avatar-fallback{display:none}}.lb-name{display:inline-block}.lb-name:where([data-loading]):before{content:"";vertical-align:middle;border-radius:calc(.5*var(--lb-radius));opacity:.12;-webkit-user-select:none;user-select:none;background:currentColor;block-size:1.75ex;inline-size:8ch;display:inline-block}:is(.lb-avatar,.lb-name):where([data-loading]){animation:8s linear infinite lb-animation-shimmer-skeleton}:is(.lb-comment-body,.lb-composer-editor){color:var(--lb-foreground-secondary)}:is(.lb-comment-body,.lb-composer-editor),:is(.lb-comment-body,.lb-composer-editor) *{line-height:var(--lb-line-height)}:is(.lb-comment-body,.lb-composer-editor) :where(p){--lb-line-height-crop:calc(1lh - 1em)/-2;margin-block:.25em}:is(.lb-comment-body,.lb-composer-editor) :where(p):where(:first-of-type){margin-block-start:calc(.125em + var(--lb-line-height-crop))}:is(.lb-comment-body,.lb-composer-editor) :where(p):where(:last-of-type){margin-block-end:calc(.125em + var(--lb-line-height-crop))}:is(.lb-comment-body,.lb-composer-editor) :where(strong){font-weight:600}.lb-comment-mention,.lb-composer-mention{color:var(--lb-accent);-webkit-box-decoration-break:clone;box-decoration-break:clone;font-weight:500}:is(.lb-comment-link,.lb-composer-link){color:var(--lb-foreground);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-foreground-moderate);text-decoration-color:var(--lb-foreground-moderate);text-underline-offset:2px;outline:none;font-weight:500;transition-property:color,text-decoration-color}:is(.lb-comment-link,.lb-composer-link):where([href]):where(:hover,:focus-visible){color:var(--lb-accent);-webkit-text-decoration-color:var(--lb-accent-moderate);text-decoration-color:var(--lb-accent-moderate)}.lb-comment-mention:where([data-self]),.lb-composer-mention{border-radius:calc(.675*var(--lb-radius));background:var(--lb-accent-subtle);padding:.1em .3em}.lb-mention-symbol{display:contents}.lb-composer{background:var(--lb-dynamic-background);color:var(--lb-foreground);transition-property:background;position:relative}.lb-composer-form{margin:0}.lb-composer:where(:has(.lb-composer-editor:not(:focus-visible))) :where(.lb-button[data-variant=primary]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary)}.lb-composer:where(:has(.lb-composer-editor:not(:focus-visible))) :where(.lb-button[data-variant=primary]):where(:enabled:hover,:enabled:focus-visible){--lb-button-background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-composer-editor{padding:var(--lb-spacing);outline:none}.lb-composer-editor:where([data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}:where(.lb-composer-editor-container:has(.lb-composer-attachments)) .lb-composer-editor{padding-block-end:calc(.25*var(--lb-spacing))}.lb-composer-editor :where([data-placeholder]){color:var(--lb-foreground-moderate)}.lb-composer-mention::selection{background:0 0}.lb-composer-mention ::selection{background:0 0}.lb-composer-mention:where([data-selected]:not([data-selected=false])){background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-composer-footer{gap:calc(.75*var(--lb-spacing));block-size:calc(calc(2*.25*var(--lb-spacing) + var(--lb-icon-size)) + var(--lb-spacing));padding:0 var(--lb-spacing)var(--lb-spacing);align-items:center;margin-block-start:calc(-.125*var(--lb-spacing));display:flex}.lb-composer-actions,.lb-composer-editor-actions{gap:calc(.125*var(--lb-spacing));align-items:center;display:flex}.lb-composer-editor-actions{margin-inline-end:auto}.lb-composer-attribution{color:var(--lb-foreground-moderate);outline:none;transition-property:color}.lb-composer-attribution:where(:hover,:focus-visible){color:var(--lb-foreground-tertiary)}.lb-composer-attribution :where(svg){block-size:calc(.75*calc(2*.25*var(--lb-spacing) + var(--lb-icon-size)))}.lb-composer-attachments{padding-inline:var(--lb-spacing);padding-block-start:calc(.75*var(--lb-spacing));padding-block-end:var(--lb-spacing)}.lb-composer-editor-container:where([data-drop]) *{pointer-events:none}.lb-composer-attachments-drop-area{color:var(--lb-accent);place-content:center;place-items:center;display:flex;position:absolute;inset:0}.lb-composer-attachments-drop-area:before,.lb-composer-attachments-drop-area:after{content:"";inset:calc(.5*var(--lb-spacing));z-index:0;border-radius:calc(.75*var(--lb-radius));position:absolute}.lb-composer-attachments-drop-area:before{opacity:calc(1*var(--lb-accent-contrast));background:currentColor}.lb-composer-attachments-drop-area:after{opacity:calc(2*var(--lb-accent-contrast));border:2px dashed}.lb-composer-attachments-drop-area-label{gap:calc(.25*var(--lb-spacing));padding:calc(.375*var(--lb-spacing))calc(.5*var(--lb-spacing));border-radius:calc(.75*var(--lb-radius));background:var(--lb-accent);color:var(--lb-accent-foreground);pointer-events:none;place-items:center;font-weight:500;display:flex;position:relative}.lb-composer-floating-toolbar{-webkit-user-select:none;user-select:none;flex-direction:row;gap:4px;padding:4px;display:flex}.lb-composer-floating-toolbar :where(.lb-button):before{content:"";z-index:-1;border-radius:inherit;position:absolute;inset:-4px}.lb-composer-floating-toolbar :where(.lb-button):where(:not(:first-of-type)):before{inset-inline-start:-2px}.lb-composer-floating-toolbar :where(.lb-button):where(:not(:last-of-type)):before{inset-inline-end:-2px}.lb-comment{--lb-comment-avatar-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));padding:var(--lb-spacing);background:var(--lb-dynamic-background);color:var(--lb-foreground);scroll-margin:var(--lb-spacing);font-weight:400;position:relative}.lb-comment:where(:target,[data-target]){--lb-dynamic-background:var(--lb-background-accent-faint)}.lb-comment:where([data-editing]){--lb-dynamic-background:var(--lb-background-foreground-faint)}.lb-comment-header{gap:calc(.75*var(--lb-spacing));block-size:var(--lb-comment-avatar-size);align-items:center;margin-block-end:calc(.75*var(--lb-spacing));display:flex;position:relative}.lb-comment-details{gap:calc(.75*var(--lb-spacing));align-items:center;min-inline-size:0;display:flex}.lb-comment-avatar{inline-size:var(--lb-comment-avatar-size);flex:none}.lb-comment-details-labels{gap:calc(.5*var(--lb-spacing));align-items:baseline;min-inline-size:0;display:flex}.lb-comment-author,.lb-comment-date{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lb-comment-author:first-letter,.lb-comment-date:first-letter{text-transform:capitalize}.lb-comment-author{font-weight:500}.lb-comment-date{color:var(--lb-foreground-tertiary);font-size:.875em}.lb-comment-date-created,.lb-comment-date-edited{display:contents}.lb-comment-actions{gap:calc(.125*var(--lb-spacing));margin-inline-start:auto;display:flex}.lb-comment-composer{margin:calc(-1*var(--lb-spacing));background:unset}.lb-comment-body :where(p span:only-child:empty):before{content:"";-webkit-user-select:none;user-select:none}.lb-comment-attachments{margin-block-start:calc(.75*var(--lb-spacing))}.lb-comment-reactions{gap:calc(.375*var(--lb-spacing));flex-wrap:wrap;margin-block-start:calc(.75*var(--lb-spacing));display:flex}.lb-comment-reaction{gap:calc(.375*var(--lb-spacing));block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));padding-inline:calc(.575*var(--lb-spacing));border-radius:9999px}.lb-comment-reaction:where([data-self]){background:var(--lb-accent-subtle);color:var(--lb-accent-secondary);box-shadow:inset 0 0 0 1px var(--lb-accent-moderate)}.lb-comment-reaction:where([data-self]):where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){color:var(--lb-accent)}.lb-comment-reaction-count{font-variant-numeric:tabular-nums;font-size:.75em;font-weight:500}.lb-comment-reaction-tooltip{max-inline-size:200px}.lb-comment-deleted{color:var(--lb-foreground-tertiary);font-size:.875em}.lb-comment\:indent-content{min-block-size:calc(var(--lb-comment-avatar-size) + 2*var(--lb-spacing))}.lb-comment\:indent-content :where(.lb-comment-header){block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));margin-block-end:calc(.25*var(--lb-spacing))}.lb-comment\:indent-content :where(.lb-comment-avatar){position:absolute;inset-block-start:0;inset-inline-start:0}.lb-comment\:indent-content :where(.lb-comment-details-labels){margin-inline-start:calc(var(--lb-comment-avatar-size) + .75*var(--lb-spacing))}.lb-comment\:indent-content :where(.lb-comment-content){padding-inline-start:calc(var(--lb-comment-avatar-size) + .75*var(--lb-spacing))}.lb-thread{background:var(--lb-dynamic-background);color:var(--lb-foreground);transition-property:background}.lb-thread-comments{z-index:0;flex-direction:column;display:flex;position:relative}.lb-thread-comment{z-index:0;padding-block:calc(.6*var(--lb-spacing));transition-property:background}.lb-thread-comment:where(.lb-comment\:indent-content){min-block-size:calc(var(--lb-comment-avatar-size) + var(--lb-spacing))}.lb-thread-comment:where(:first-of-type,[data-editing]){padding-block-start:var(--lb-spacing)}.lb-thread-comment:where(:first-of-type,[data-editing]):where(.lb-comment\:indent-content){min-block-size:calc(var(--lb-comment-avatar-size) + 1.5*var(--lb-spacing))}.lb-thread-comment:where(:last-of-type,[data-editing]){padding-block-end:var(--lb-spacing)}.lb-thread-comment:where(:last-of-type,[data-editing]):where(.lb-comment\:indent-content){min-block-size:calc(var(--lb-comment-avatar-size) + 1.75*var(--lb-spacing))}.lb-thread-show-more{z-index:1;gap:calc(.5*var(--lb-spacing));justify-content:center;align-items:center;display:flex;position:relative}.lb-thread-show-more:before,.lb-thread-show-more:after{content:"";z-index:0;min-inline-size:var(--lb-spacing);border-block-start:1px dashed var(--lb-foreground-subtle);flex:1 0 auto;block-size:0;transition-property:border}:where(.lb-thread-show-more+.lb-thread-new-indicator){margin-block-start:calc(.5*var(--lb-spacing))}.lb-thread-new-indicator{z-index:1;justify-content:center;align-items:center;block-size:0;display:flex;position:relative}.lb-thread-new-indicator:before,.lb-thread-new-indicator:after{content:"";z-index:0;border-block-start:1px solid var(--lb-foreground-subtle);flex:1;block-size:0;transition-property:border}.lb-thread-new-indicator-label{z-index:1;gap:calc(.325*var(--lb-spacing));padding:calc(.25*var(--lb-spacing))var(--lb-spacing);color:var(--lb-accent);text-transform:uppercase;flex:none;align-items:center;font-size:.675em;font-weight:600;display:flex}.lb-thread-new-indicator-label-icon{inline-size:calc(.6*var(--lb-icon-size));block-size:calc(.6*var(--lb-icon-size))}.lb-thread-composer{position:relative}.lb-thread-composer:after{content:"";border-block-start:1px solid var(--lb-foreground-subtle);pointer-events:none;block-size:100%;inline-size:100%;transition-property:border;position:absolute;inset:0}.lb-comment-attachments,.lb-composer-attachments{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-attachments{gap:calc(.75*var(--lb-spacing));grid-template-columns:repeat(auto-fill,minmax(min(100%,200px),1fr));display:grid}.lb-attachment,.lb-attachment-delete{all:unset;box-sizing:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;transition-timing-function:var(--lb-transition-easing);transition-duration:var(--lb-transition-duration);-webkit-tap-highlight-color:transparent;outline:none;transition-property:background,color,opacity;position:relative}.lb-attachment:after,.lb-attachment-delete:after{content:"";border-radius:inherit;pointer-events:none;transition-property:box-shadow;position:absolute;inset:0}.lb-attachment:where(:focus-visible),.lb-attachment-delete:where(:focus-visible){z-index:1}.lb-attachment:where(:focus-visible):after,.lb-attachment-delete:where(:focus-visible):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-accent)0 0 0 4px}.lb-attachment{border-radius:var(--lb-radius);background:var(--lb-dynamic-background);inline-size:100%;min-inline-size:0;box-shadow:inset 0 0 0 1px var(--lb-foreground-subtle);display:flex;position:relative}.lb-attachment:where([tabindex="-1"]){cursor:default}.lb-attachment:where(:not([tabindex="-1"])):where(:hover,:focus-visible){background:var(--lb-foreground-subtle)}.lb-attachment-delete{z-index:2;background:var(--lb-foreground-subtle);block-size:1.1rem;inline-size:1.1rem;color:var(--lb-foreground-secondary);box-shadow:0 0 0 2px var(--lb-dynamic-background);opacity:0;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute;inset-block-start:-.35rem;inset-inline-end:-.35rem}.lb-attachment-delete:before{content:"";z-index:-1;border-radius:inherit;position:absolute;inset:-4px}.lb-attachment-delete:where(:hover,:focus-visible){background:var(--lb-foreground-secondary);color:var(--lb-dynamic-background)}:where(.lb-attachment:focus-within,.lb-attachment:hover) .lb-attachment-delete{opacity:1}.lb-attachment-delete :where(.lb-icon){inline-size:.75rem}.lb-attachment-details{gap:calc(.25*var(--lb-spacing));flex-direction:column;justify-content:center;min-inline-size:0;font-size:.875em;display:flex;position:relative}.lb-attachment-name{font-weight:500;display:flex}.lb-attachment-name-base,.lb-attachment-description{text-overflow:ellipsis;white-space:nowrap;transition-property:color;overflow:hidden}.lb-attachment-preview{background:color-mix(in srgb,transparent,var(--lb-foreground)var(--lb-foreground-contrast));color:var(--lb-foreground-tertiary);flex:none;justify-content:center;align-items:center;transition-property:background,color;display:flex;position:relative;overflow:hidden}.lb-attachment-preview-media{border-radius:inherit;transition-property:opacity}.lb-attachment-preview-media,.lb-attachment-preview-media:after,.lb-attachment-preview-media img,.lb-attachment-preview-media video{block-size:100%;inline-size:100%;position:absolute;inset:0}.lb-attachment-preview-media img,.lb-attachment-preview-media video{object-fit:cover;pointer-events:none}.lb-attachment-preview-media:after{content:"";border-radius:inherit;box-shadow:var(--lb-highlight-shadow);pointer-events:none}.lb-attachment-preview-media:where([data-hidden]){opacity:0}.lb-attachment-icon{color:var(--lb-foreground);flex:none;overflow:visible}.lb-attachment-icon-glyph{fill:var(--lb-foreground-moderate)}.lb-attachment-icon-background{fill:var(--lb-background)}.lb-attachment-icon-fold{fill-opacity:calc(.75*var(--lb-foreground-contrast))}.lb-attachment-icon-shadow{filter:blur(6px);fill-opacity:var(--lb-foreground-contrast)}.lb-file-attachment{gap:calc(.5*var(--lb-spacing));padding:calc(.5*var(--lb-spacing));padding-inline-end:calc(.65*var(--lb-spacing))}.lb-file-attachment :where(.lb-attachment-preview){aspect-ratio:1;border-radius:calc(.5*var(--lb-radius));inline-size:2.5rem}.lb-file-attachment :where(.lb-attachment-name){color:var(--lb-foreground-secondary)}.lb-file-attachment :where(.lb-attachment-description){color:var(--lb-foreground-tertiary)}.lb-file-attachment:where(:not([tabindex="-1"])):where(:hover,:focus-visible,:focus-within) :where(.lb-attachment-name){color:var(--lb-foreground)}.lb-file-attachment:where(:not([tabindex="-1"])):where(:hover,:focus-visible,:focus-within) :where(.lb-attachment-description){color:var(--lb-foreground-secondary)}.lb-media-attachment{aspect-ratio:16/10}.lb-media-attachment :where(.lb-attachment-preview){border-radius:inherit;position:absolute;inset:0}.lb-media-attachment :where(.lb-attachment-details){padding:calc(.75*var(--lb-spacing));text-shadow:0 0 2px #0006;opacity:0;background:linear-gradient(#0000,#000c);border-end-end-radius:inherit;border-end-start-radius:inherit;transition-property:opacity;position:absolute;inset-block-end:0;inset-inline:0}.lb-media-attachment :where(.lb-attachment-name){color:#fff}.lb-media-attachment :where(.lb-attachment-description){color:#fffc}.lb-media-attachment:where(:not([tabindex="-1"])):where(:hover,:focus-visible,:focus-within) :where(.lb-attachment-details){opacity:1}.lb-attachment:where([data-error]) :where(.lb-attachment-preview){background:var(--lb-destructive);color:var(--lb-destructive-foreground)}.lb-inbox-notification{--lb-inbox-notification-aside-size:36px;gap:calc(.75*var(--lb-spacing));padding:var(--lb-spacing);background:var(--lb-dynamic-background);color:var(--lb-foreground);-webkit-text-decoration:inherit;text-decoration:inherit;font-weight:400;transition-property:background;display:flex;position:relative;overflow:hidden}.lb-inbox-notification:where([data-missing]){--lb-dynamic-background:var(--lb-background-accent-faint);--lb-accent:var(--lb-destructive)!important;--lb-accent-foreground:var(--lb-destructive-foreground)!important;--lb-accent-contrast:var(--lb-destructive-contrast)!important}.lb-inbox-notification:where([data-unread]){--lb-dynamic-background:var(--lb-background-accent-faint)}.lb-inbox-notification:where([href]){cursor:pointer}.lb-inbox-notification:where([href]):where(:hover,:focus-visible,:focus-within){--lb-dynamic-background:var(--lb-background-foreground-faint)}.lb-inbox-notification:where([href]):where([data-unread]):where(:hover,:focus-visible,:focus-within){--lb-dynamic-background:var(--lb-background-accent-subtle)}.lb-inbox-notification-aside{inline-size:var(--lb-inbox-notification-aside-size);flex:none}.lb-inbox-notification-icon{aspect-ratio:1;background:var(--lb-foreground-subtle);border-radius:50%;justify-content:center;place-items:center;display:flex}.lb-inbox-notification:where([data-missing]) :where(.lb-inbox-notification-icon){background:var(--lb-accent-subtle);color:var(--lb-accent)}.lb-inbox-notification-content{flex:1}.lb-inbox-notification-content,.lb-inbox-notification-body{min-inline-size:0;max-inline-size:100%}.lb-inbox-notification-header{gap:calc(.75*var(--lb-spacing));align-items:center;margin-block-start:calc(.25*var(--lb-spacing));margin-block-end:calc(.5*var(--lb-spacing));display:flex}.lb-inbox-notification-title{min-block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size))}:where(.lb-inbox-notification:not([data-inspector])) .lb-inbox-notification-title:first-letter{text-transform:capitalize}.lb-inbox-notification-title :where(strong,.lb-list,.lb-name){font-weight:500}.lb-inbox-notification-details{min-inline-size:0;block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));flex:none;align-self:start;margin-inline-start:auto}.lb-inbox-notification-details-labels{align-items:baseline;min-inline-size:0;display:flex}.lb-inbox-notification-details-labels:before{content:""}.lb-inbox-notification-actions{gap:calc(.125*var(--lb-spacing));grid-area:actions;align-self:start;display:flex}.lb-inbox-notification-comments{gap:var(--lb-spacing);flex-direction:column;display:flex}.lb-inbox-notification-comment{background:0 0;padding:0}.lb-inbox-notification-comment :where(.lb-comment-header){block-size:auto;color:var(--lb-foreground-tertiary);font-size:.875rem}.lb-inbox-notification-comment :where(.lb-comment-reaction),.lb-inbox-notification-comment :where(.lb-comment-attachment){pointer-events:none}.lb-inbox-notification-date{color:var(--lb-foreground-tertiary);font-size:.875em}.lb-inbox-notification-unread-indicator{block-size:10px;inline-size:10px;background:var(--lb-accent);border-radius:50%;align-self:center;margin-inline-start:calc(.5*var(--lb-spacing))}.lb-history-version-summary{gap:calc(.25*var(--lb-spacing));inline-size:100%;min-inline-size:0;padding:var(--lb-spacing);background:var(--lb-dynamic-background);flex-direction:column;justify-content:center;transition-property:background;display:flex;position:relative}.lb-history-version-summary:where(:hover,:focus-visible,:focus-within,[data-selected]:not([data-selected=false])){--lb-dynamic-background:var(--lb-background-foreground-faint)}.lb-history-version-summary-date,.lb-history-version-summary-authors{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;max-inline-size:100%;overflow:hidden}.lb-history-version-summary-date:first-letter,.lb-history-version-summary-authors:first-letter{text-transform:capitalize}.lb-history-version-summary-date{color:var(--lb-foreground-secondary);font-weight:500}.lb-history-version-summary-authors{color:var(--lb-foreground-tertiary)}.lb-history-version-preview{background:var(--lb-dynamic-background);flex-direction:column;display:flex;position:relative;overflow-y:auto}.lb-history-version-preview-content{padding:var(--lb-spacing);flex:1 0 auto}.lb-history-version-preview-footer{gap:var(--lb-spacing);padding:var(--lb-spacing);border-block-start:1px solid var(--lb-foreground-subtle);background:var(--lb-dynamic-background);flex:none;align-items:center;margin-block-start:auto;display:flex;position:sticky;inset-block-end:0}.lb-history-version-preview-authors{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;color:var(--lb-foreground-tertiary);flex:auto;overflow:hidden}.lb-history-version-preview-actions{gap:calc(.35*var(--lb-spacing));flex:none;align-items:center;margin-inline-start:auto;display:flex}.lb-inbox-notification-list,.lb-history-version-summary-list{margin:0;padding:0;list-style:none}.lb-inbox-notification-list-item:where(:not(:last-of-type)),.lb-history-version-summary-list-item:where(:not(:last-of-type)){border-block-end:1px solid var(--lb-foreground-subtle)}.lb-root :where(code:not(pre>code)){border-radius:calc(.75*var(--lb-radius));background:var(--lb-foreground-subtle);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:.2em .4em;font-size:85%;line-height:1}.lb-root :where(span:has(code)+span code){border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:0}.lb-root :where(span:has(code):has(+span code) code){border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:0}:where(.lb-root code){font-family:ui-monospace,Menlo,Monaco,Roboto Mono,Cascadia Code,Source Code Pro,Consolas,DejaVu Sans Mono,monospace}.lb-elevation{--lb-dynamic-background:var(--lb-background);border-radius:var(--lb-radius);background:var(--lb-dynamic-background);box-shadow:var(--lb-elevation-shadow);position:relative;overflow:hidden}.lb-elevation:after{content:"";z-index:1;border-radius:inherit;box-shadow:var(--lb-inset-shadow);pointer-events:none;position:absolute;inset:0}.lb-elevation:where(.lb-elevation-moderate){box-shadow:var(--lb-elevation-shadow-moderate)}.lb-dropdown,.lb-composer-suggestions{padding:4px;overflow-y:auto}.lb-dropdown:where([data-hidden]),.lb-composer-suggestions:where([data-hidden]){opacity:0}.lb-dropdown-item,.lb-composer-suggestions-list-item{padding:calc(.25*var(--lb-spacing))calc(.5*var(--lb-spacing));align-items:center;font-size:.875rem;display:flex}.lb-dropdown-item,.lb-composer-suggestions-list-item,.lb-emoji-picker-emoji{border-radius:calc(var(--lb-radius) - .75*4px);color:var(--lb-foreground-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;transition-property:background,color,opacity}:is(.lb-dropdown-item,.lb-composer-suggestions-list-item,.lb-emoji-picker-emoji):where([data-highlighted]:not([data-highlighted=false]),[data-selected]:not([data-selected=false]),[data-active]:not([data-active=false])){background:var(--lb-foreground-subtle);transition-duration:calc(var(--lb-transition-duration)/2)}:is(.lb-dropdown-item,.lb-composer-suggestions-list-item,.lb-emoji-picker-emoji):where(:disabled,[data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}.lb-dropdown,.lb-composer-suggestions,.lb-composer-floating-toolbar,.lb-tooltip,.lb-emoji-picker{animation-duration:var(--lb-transition-duration);animation-timing-function:var(--lb-transition-easing);will-change:transform,opacity}:is(.lb-dropdown,.lb-emoji-picker,.lb-tooltip:where([data-state=delayed-open]),.lb-composer-suggestions,.lb-composer-floating-toolbar):where([data-side=top]){animation-name:lb-animation-slide-up}:is(.lb-dropdown,.lb-emoji-picker,.lb-tooltip:where([data-state=delayed-open]),.lb-composer-suggestions,.lb-composer-floating-toolbar):where([data-side=bottom]){animation-name:lb-animation-slide-down}:is(.lb-dropdown,.lb-emoji-picker,.lb-tooltip,.lb-composer-suggestions,.lb-composer-floating-toolbar):where([data-state=closed]){animation-name:lb-animation-disappear}.lb-code-block{border:1px solid var(--lb-foreground-subtle);border-radius:var(--lb-radius);isolation:isolate;min-inline-size:0;position:relative}.lb-code-block :where(.lb-code-block-header){padding:calc(.5*var(--lb-spacing));align-items:center;display:flex}.lb-code-block :where(.lb-code-block-title){color:var(--lb-foreground-tertiary);text-transform:uppercase;margin-inline-start:calc(.5*var(--lb-spacing));font-size:.675em;font-weight:600}.lb-code-block :where(.lb-code-block-header-actions){margin-inline-start:auto}.lb-code-block :where(.lb-code-block-content){min-inline-size:0;padding:0 var(--lb-spacing)calc(.875*var(--lb-spacing));font-size:85%;line-height:var(--lb-line-height);margin:0;overflow-x:auto}.lb-ai-composer{inline-size:100%;color:var(--lb-foreground);position:relative}.lb-ai-composer-form:where(:has(.lb-ai-composer-editor:not(:focus-visible))) :where(.lb-button[data-variant=primary]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary)}.lb-ai-composer-form:where(:has(.lb-ai-composer-editor:not(:focus-visible))) :where(.lb-button[data-variant=primary]):where(:enabled:hover,:enabled:focus-visible){--lb-button-background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-ai-composer-editor{max-block-size:15rem;padding:var(--lb-spacing)var(--lb-spacing)0;color:var(--lb-foreground-secondary);resize:none;outline:none;overflow-y:auto}.lb-ai-composer-editor,.lb-ai-composer-editor *{line-height:var(--lb-line-height)}.lb-ai-composer-editor :where(p){--lb-line-height-crop:calc(1lh - 1em)/-2;margin-block:.25em}.lb-ai-composer-editor :where(p):where(:first-of-type){margin-block-start:calc(.125em + var(--lb-line-height-crop))}.lb-ai-composer-editor :where(p):where(:last-of-type){margin-block-end:calc(.125em + var(--lb-line-height-crop))}.lb-ai-composer-editor:where([data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}.lb-ai-composer-editor :where([data-placeholder]){color:var(--lb-foreground-moderate)}.lb-ai-composer-footer{gap:calc(.75*var(--lb-spacing));padding:var(--lb-spacing);align-items:center;margin-block-start:calc(-.125*var(--lb-spacing));display:flex}.lb-ai-composer-actions,.lb-ai-composer-editor-actions{gap:calc(.125*var(--lb-spacing));align-items:center;display:flex}.lb-ai-composer-editor-actions{margin-inline-end:auto}.lb-ai-chat-message{gap:var(--lb-spacing);color:var(--lb-foreground);flex-direction:column;scroll-margin-block-start:calc(1.5*var(--lb-spacing));display:flex}.lb-ai-chat-user-message :where(.lb-ai-chat-message-content){--lb-dynamic-background:var(--lb-background-foreground-faint);--lb-ai-chat-message-content-horizontal-padding:calc(.9375*var(--lb-spacing));--lb-ai-chat-message-content-vertical-padding:calc(.5625*var(--lb-spacing));min-block-size:calc(1lh + 2*var(--lb-ai-chat-message-content-vertical-padding));padding:var(--lb-ai-chat-message-content-vertical-padding)var(--lb-ai-chat-message-content-horizontal-padding);border-radius:calc((1lh + 2*var(--lb-ai-chat-message-content-vertical-padding))/2);background:var(--lb-dynamic-background);color:var(--lb-foreground);line-height:var(--lb-line-height)}.lb-ai-chat-user-message :where(.lb-ai-chat-message-content):where(:has(h1,h2,h3,h4,h5,h6,ul,ol,blockquote,table,.lb-code-block)){--lb-ai-chat-message-content-horizontal-padding:calc(1.375*var(--lb-spacing));--lb-ai-chat-message-content-vertical-padding:calc(1.125*var(--lb-spacing))}.lb-ai-chat-user-message :where(.lb-ai-chat-message-content) :where(.lb-code-block){--lb-dynamic-background:var(--lb-background-foreground-subtle);background:var(--lb-dynamic-background);border:none}.lb-ai-chat-message-deleted{inline-size:100%;color:var(--lb-foreground-moderate);text-wrap:pretty;align-items:center;font-size:.875em;position:relative}.lb-ai-chat-message-error{gap:calc(.5*var(--lb-spacing));inline-size:100%;color:var(--lb-destructive);font-size:.875em;line-height:var(--lb-line-height);text-wrap:pretty;word-break:break-word;align-items:flex-start;display:flex}.lb-ai-chat-message-error :where(.lb-icon-container){block-size:1lh;color:var(--lb-destructive-secondary)}.lb-ai-chat-message-error :where(code:not(pre>code)){background:var(--lb-destructive-subtle)}.lb-ai-chat-message-content{white-space:break-spaces;inline-size:100%}.lb-ai-chat-message-content:where(:empty){display:contents}.lb-ai-chat-message-content>:where(.lb-ai-chat-message-text),.lb-ai-chat-message-content>:where(.lb-ai-chat-message-tool-invocation){margin-block:var(--lb-spacing)}.lb-ai-chat-message-content>:where(:first-child){margin-block-start:0}.lb-ai-chat-message-content>:where(:last-child){margin-block-end:0}.lb-ai-chat-messages{gap:calc(1.5*var(--lb-spacing));inline-size:100%;max-inline-size:min(calc(var(--lb-ai-chat-container-width) - var(--lb-spacing)),calc(100% - 3*var(--lb-spacing)));flex-direction:column;margin-inline:auto;padding-block-start:calc(1.5*var(--lb-spacing));padding-block-end:calc(3*var(--lb-spacing));display:flex}.lb-ai-chat-messages :where(.lb-ai-chat-user-message){max-inline-size:80%;margin-inline-start:auto}.lb-ai-chat-footer{gap:calc(.75*var(--lb-spacing));flex-direction:column;inline-size:100%;display:flex;position:relative}.lb-ai-chat{--lb-ai-chat-container-width:100%;background:var(--lb-background);isolation:isolate;flex-direction:column;block-size:100%;inline-size:100%;display:flex;overflow-y:auto}.lb-ai-chat :where(.lb-ai-chat-footer){z-index:1;margin-block-start:auto;position:sticky;inset-block-end:0}.lb-ai-chat :where(.lb-ai-chat-composer){margin-inline:auto}.lb-ai-chat:where(.lb-ai-chat\:layout-compact) :where(.lb-ai-chat-footer){background:var(--lb-dynamic-background)}.lb-ai-chat:where(.lb-ai-chat\:layout-compact) :where(.lb-ai-chat-footer):after{content:"";border-block-start:1px solid var(--lb-foreground-subtle);pointer-events:none;position:absolute;inset:0}.lb-ai-chat:where(.lb-ai-chat\:layout-compact) :where(.lb-ai-chat-composer){max-inline-size:min(100%,calc(var(--lb-ai-chat-container-width) + var(--lb-spacing)))}.lb-ai-chat:where(.lb-ai-chat\:layout-inset) :where(.lb-ai-chat-footer){padding:var(--lb-spacing);padding-block-start:0}.lb-ai-chat:where(.lb-ai-chat\:layout-inset) :where(.lb-ai-chat-footer):before{content:"";background:linear-gradient(to bottom,transparent 0%,var(--lb-background)calc(3.5*var(--lb-spacing)));pointer-events:none;position:absolute;inset:0;inset-block-start:calc(-3*var(--lb-spacing))}.lb-ai-chat:where(.lb-ai-chat\:layout-inset) :where(.lb-ai-chat-composer){max-inline-size:var(--lb-ai-chat-container-width);border-radius:calc(2*var(--lb-radius))}.lb-ai-chat-content{flex:1 0 auto;position:relative}.lb-ai-chat-footer-actions{pointer-events:none;justify-content:center;display:flex;position:absolute;inset-block-start:calc(-1*var(--lb-spacing));inset-inline:0;transform:translateY(-100%)}.lb-ai-chat-scroll-indicator{color:var(--lb-foreground-moderate);opacity:0;pointer-events:none;transform-origin:bottom;border-radius:9999px;transition-property:transform,opacity,background;transform:scale(.8)}.lb-ai-chat-scroll-indicator:where([data-visible]){opacity:1;pointer-events:all;transform:scale(1)}.lb-ai-chat-scroll-indicator-button{all:unset;box-sizing:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;transition-timing-function:var(--lb-transition-easing);transition-duration:var(--lb-transition-duration);-webkit-tap-highlight-color:transparent;padding:calc(.375*var(--lb-spacing));color:var(--lb-foreground-moderate);border-radius:9999px;outline:none;transition-property:opacity,color;position:relative}.lb-ai-chat-scroll-indicator-button:where(:hover,:focus-visible){color:var(--lb-foreground-secondary)}.lb-ai-chat-scroll-indicator-button:after{content:"";border-radius:inherit;pointer-events:none;transition-property:box-shadow;position:absolute;inset:0}.lb-ai-chat-scroll-indicator-button:where(:focus-visible):after{box-shadow:inset var(--lb-accent)0 0 0 2px}.lb-ai-chat-pending{-webkit-user-select:none;user-select:none;animation:2s cubic-bezier(.1,0,.9,1) infinite lb-animation-shimmer-text}.lb-ai-chat-message-thinking,.lb-ai-chat-message-retrieval,.lb-ai-chat-message-reasoning{margin-block-end:calc(.75*var(--lb-spacing))}.lb-ai-chat-message-thinking,.lb-ai-chat-message-retrieval{inline-size:fit-content;max-inline-size:100%;color:var(--lb-foreground-tertiary);transition-property:color}.lb-ai-chat-message-thinking:where(.lb-ai-chat-pending),.lb-ai-chat-message-retrieval:where(.lb-ai-chat-pending){color:var(--lb-foreground)}.lb-ai-chat-message-reasoning{position:relative}.lb-ai-chat-message-reasoning:after{content:"";inset:calc(-.375*var(--lb-spacing));border-radius:calc(.75*var(--lb-radius));pointer-events:none;transition-property:box-shadow;position:absolute}.lb-ai-chat-message-reasoning:where(:has(.lb-collapsible-trigger:focus-visible)){z-index:1}.lb-ai-chat-message-reasoning:where(:has(.lb-collapsible-trigger:focus-visible)):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-accent)0 0 0 4px}.lb-ai-chat-message-reasoning :where(.lb-collapsible-trigger){gap:calc(.25*var(--lb-spacing));color:var(--lb-foreground-tertiary);align-items:center;transition-property:color;display:flex}.lb-ai-chat-message-reasoning :where(.lb-collapsible-trigger):where(.lb-ai-chat-pending){color:var(--lb-foreground)}.lb-ai-chat-message-reasoning :where(.lb-collapsible-content){gap:calc(.5*var(--lb-spacing));line-height:var(--lb-line-height);flex-direction:column;display:flex}:where(.lb-ai-chat-message-reasoning :where(.lb-collapsible-content)>:first-child){margin-block-start:calc(.5*var(--lb-spacing))}.lb-ai-chat-message-reasoning :where(.lb-prose){color:var(--lb-foreground);opacity:.75;font-size:.875em}.lb-ai-chat-message-retrieval-query{font-weight:500}.lb-ai-chat-message-retrieval-query:before{content:"“"}.lb-ai-chat-message-retrieval-query:after{content:"”"}.lb-ai-tool{position:relative}.lb-ai-tool:after{content:"";border-radius:inherit;pointer-events:none;transition-property:box-shadow;position:absolute;inset:0}.lb-ai-tool:where(:has(.lb-ai-tool-header:focus-visible)){z-index:1}.lb-ai-tool:where(:has(.lb-ai-tool-header:focus-visible)):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-accent)0 0 0 4px}.lb-ai-tool-header{gap:calc(.25*var(--lb-spacing));align-items:center;inline-size:100%;display:flex}.lb-ai-tool-header-icon-container,.lb-ai-tool-icon{inline-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));flex:none;justify-content:center;align-items:center;display:flex}.lb-ai-tool-header-icon-container{color:var(--lb-foreground-moderate)}.lb-ai-tool-header-icon-container:where(:has(.lb-ai-tool-icon)){margin-inline-end:calc(.25*var(--lb-spacing))}.lb-ai-tool-icon{border-radius:calc(.75*var(--lb-radius));background:var(--lb-foreground-subtle);font-size:.875em}.lb-ai-tool-header-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lb-ai-tool-header-status{color:var(--lb-foreground-moderate);flex:none}.lb-ai-tool:where(.lb-ai-tool\:variant-block){border-radius:var(--lb-radius);box-shadow:inset 0 0 0 1px var(--lb-foreground-subtle)}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-header){block-size:calc(calc(2*.25*var(--lb-spacing) + var(--lb-icon-size)) + var(--lb-spacing));padding-inline:calc(.5*var(--lb-spacing));color:var(--lb-foreground-secondary)}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-header-title){font-size:.9375em}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-header-title):where(:first-child){margin-inline-start:calc(.3125*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-header-status){margin-inline-start:auto;margin-inline-end:calc(.1875*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-content:not(:empty)){padding:0 calc(.75*var(--lb-spacing))calc(.75*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-block):where([data-result=error]){box-shadow:inset 0 0 0 1px var(--lb-destructive-moderate)}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal):after{inset:calc(-.375*var(--lb-spacing));border-radius:calc(.75*var(--lb-radius))}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header){inline-size:fit-content;max-inline-size:100%;block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));color:var(--lb-foreground-tertiary);transition-property:color;position:relative}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header):where(.lb-ai-chat-pending),.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header) :where(.lb-ai-chat-pending){color:var(--lb-foreground)}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header):before{content:"";inset:calc(-.375*var(--lb-spacing));z-index:-1;position:absolute}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header-icon-container){margin-inline-start:calc(-.125*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header-title):where(:not(:first-child)){margin-inline-start:calc(-.0625*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-content:not(:empty)){padding-block-start:calc(.5*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal):where([data-result=cancelled]) :where(.lb-ai-tool-header){color:var(--lb-foreground-moderate)}.lb-ai-tool:where([data-result=error]):where(:has(.lb-ai-tool-header:focus-visible)):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-destructive)0 0 0 4px}.lb-ai-tool:where([data-result=error]) :where(.lb-ai-tool-header),.lb-ai-tool:where([data-result=error]) :where(.lb-ai-tool-header-status){color:var(--lb-destructive)}.lb-ai-tool:where([data-result=error]) :where(.lb-ai-tool-icon){background:var(--lb-destructive-subtle)}.lb-ai-tool:where([data-result=error]) :where(.lb-ai-tool-header-icon-container){color:var(--lb-destructive-secondary)}.lb-ai-tool-inspector{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-ai-tool-confirmation-footer{align-items:center;margin-block-start:calc(.75*var(--lb-spacing));display:flex}.lb-ai-tool-confirmation-actions{gap:calc(.75*var(--lb-spacing));justify-content:flex-end;align-items:center;margin-inline-start:auto;display:flex}@keyframes lb-animation-slide-down{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes lb-animation-slide-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes lb-animation-appear{0%{opacity:0}to{opacity:1}}@keyframes lb-animation-disappear{0%{opacity:1}to{opacity:0}}@keyframes lb-animation-shimmer-skeleton{0%,to{-webkit-mask-image:linear-gradient(90deg,#00000080,#000,#000,#00000080);mask-image:linear-gradient(90deg,#00000080,#000,#000,#00000080);-webkit-mask-size:400% 100%;mask-size:400% 100%}0%{-webkit-mask-position:200% 0;mask-position:200% 0}to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}@keyframes lb-animation-shimmer-text{0%,to{-webkit-mask-image:linear-gradient(90deg,#000000bf 36%,#0003 48% 52%,#000000bf 64%);mask-image:linear-gradient(90deg,#000000bf 36%,#0003 48% 52%,#000000bf 64%);-webkit-mask-size:300% 100%;mask-size:300% 100%}0%{-webkit-mask-position:100% 0;mask-position:100% 0}to{-webkit-mask-position:0 0;mask-position:0 0}}@keyframes lb-animation-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (hover:hover){.lb-comment:where(.lb-comment\:show-actions-hover) :where(.lb-comment-actions){opacity:0;transition-property:opacity;position:absolute;inset-inline-end:0}.lb-comment:where(.lb-comment\:show-actions-hover):where(:is(:hover,:focus-within,.lb-comment\:action-open)) :where(.lb-comment-actions){opacity:1;position:relative}.lb-thread:where(.lb-thread\:show-actions-hover :is(:hover,:focus-within)) :where(.lb-thread-actions){opacity:1}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-header){grid-template:"title secondary"/1fr max-content;display:grid}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-details){opacity:1;transition-property:opacity}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-actions){opacity:0;transition-property:opacity}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover):where(:is(:hover,:focus-within,.lb-inbox-notification\:action-open)) :where(.lb-inbox-notification-details){opacity:0}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover):where(:is(:hover,:focus-within,.lb-inbox-notification\:action-open)) :where(.lb-inbox-notification-actions){opacity:1}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-details),.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-actions){grid-area:secondary;justify-self:end}}@media (prefers-reduced-motion:no-preference){@supports (interpolate-size:allow-keywords){.lb-collapsible-content{opacity:0;block-size:0;transition-duration:calc(3*var(--lb-transition-duration));interpolate-size:allow-keywords;transition-behavior:allow-discrete;transition-property:block-size,opacity,content-visibility;overflow-y:clip}.lb-collapsible-content:where([data-state=open]){opacity:1;block-size:auto;overflow-y:auto}}.lb-collapsible-chevron{transition-property:transform}.lb-collapsible:where([data-state=open]) :where(.lb-collapsible-chevron){transform:rotate(90deg)}}@media (prefers-reduced-motion){.lb-dropdown:where(:not([data-state=closed])),.lb-emoji-picker:where(:not([data-state=closed])),.lb-tooltip:where([data-state=delayed-open]:not([data-state=closed])),.lb-composer-suggestions:where(:not([data-state=closed])){animation-name:lb-animation-appear}}
1
+ .lb-root{--lb-radius:.5em;--lb-spacing:1em;--lb-accent:#17f;--lb-accent-foreground:#fff;--lb-destructive:#f45;--lb-destructive-foreground:#fff;--lb-background:#fff;--lb-foreground:#111;--lb-line-height:1.5;--lb-icon-size:20px;--lb-icon-weight:1.5px;--lb-avatar-radius:50%;--lb-button-radius:calc(.75*var(--lb-radius));--lb-transition-duration:.1s;--lb-transition-easing:cubic-bezier(.4,0,.2,1);--lb-highlight-shadow:inset 0 0 0 1px #0000001a;--lb-elevation-shadow:0 0 0 1px #0000000a,0 2px 6px #00000014,0 8px 26px #0000001f;--lb-elevation-shadow-moderate:0 0 0 1px #0000000a,0 2px 6px #0000000d,0 8px 26px #0000000f;--lb-tooltip-shadow:0 2px 4px #00000014,0 4px 12px #0000001f;--lb-accent-contrast:8%;--lb-destructive-contrast:8%;--lb-foreground-contrast:8%;--lb-background-foreground-faint:color-mix(in srgb,var(--lb-foreground),var(--lb-background)calc(100% - var(--lb-foreground-contrast) + ((100% - var(--lb-foreground-contrast))/9)/2));--lb-background-foreground-subtle:color-mix(in srgb,var(--lb-foreground),var(--lb-background)calc(100% - var(--lb-foreground-contrast)));--lb-background-accent-faint:color-mix(in srgb,var(--lb-accent),var(--lb-background)calc(100% - var(--lb-accent-contrast) + ((100% - var(--lb-accent-contrast))/9)/2));--lb-background-accent-subtle:color-mix(in srgb,var(--lb-accent),var(--lb-background)calc(100% - var(--lb-accent-contrast)));--lb-background-destructive-faint:color-mix(in srgb,var(--lb-destructive),var(--lb-background)calc(100% - var(--lb-destructive-contrast) + ((100% - var(--lb-destructive-contrast))/9)/2));--lb-background-destructive-subtle:color-mix(in srgb,var(--lb-destructive),var(--lb-background)calc(100% - var(--lb-destructive-contrast)));--lb-accent-subtle:color-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background)calc(100% - var(--lb-accent-contrast)));--lb-accent-moderate:color-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background)calc(100% - (var(--lb-accent-contrast) + 3*((100% - var(--lb-accent-contrast))/9))));--lb-accent-tertiary:color-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background)calc(100% - (var(--lb-accent-contrast) + 5*((100% - var(--lb-accent-contrast))/9))));--lb-accent-secondary:color-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background)calc(100% - (var(--lb-accent-contrast) + 7*((100% - var(--lb-accent-contrast))/9))));--lb-destructive-subtle:color-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background)calc(100% - var(--lb-destructive-contrast)));--lb-destructive-moderate:color-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background)calc(100% - (var(--lb-destructive-contrast) + 3*((100% - var(--lb-destructive-contrast))/9))));--lb-destructive-tertiary:color-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background)calc(100% - (var(--lb-destructive-contrast) + 5*((100% - var(--lb-destructive-contrast))/9))));--lb-destructive-secondary:color-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background)calc(100% - (var(--lb-destructive-contrast) + 7*((100% - var(--lb-destructive-contrast))/9))));--lb-foreground-subtle:color-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background)calc(100% - var(--lb-foreground-contrast)));--lb-foreground-moderate:color-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background)calc(100% - (var(--lb-foreground-contrast) + 3*((100% - var(--lb-foreground-contrast))/9))));--lb-foreground-tertiary:color-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background)calc(100% - (var(--lb-foreground-contrast) + 5*((100% - var(--lb-foreground-contrast))/9))));--lb-foreground-secondary:color-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background)calc(100% - (var(--lb-foreground-contrast) + 7*((100% - var(--lb-foreground-contrast))/9))));--lb-selection:color-mix(in srgb,var(--lb-accent)40%,transparent);overflow-wrap:break-word;accent-color:var(--lb-accent);-webkit-text-size-adjust:none;text-size-adjust:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lb-root,.lb-root *,.lb-root :before,.lb-root :after{box-sizing:border-box;transition:none var(--lb-transition-duration)var(--lb-transition-easing)}.lb-root:where(:not(.lb-root .lb-root)){--lb-dynamic-background:var(--lb-background)}.lb-loading,.lb-empty,.lb-error{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.lb-loading{color:var(--lb-foreground-moderate)}.lb-empty,.lb-error{padding:var(--lb-spacing);color:var(--lb-foreground-tertiary);text-align:center;text-wrap:balance;font-size:.875em}.lb-icon-container,.lb-icon{inline-size:var(--lb-icon-size);block-size:var(--lb-icon-size)}.lb-icon-container{justify-content:center;align-items:center;display:flex}.lb-icon{--lb-icon-background:var(--lb-dynamic-background)}.lb-icon *{stroke-width:var(--lb-icon-weight);vector-effect:non-scaling-stroke}.lb-icon-spinner{transform-origin:50%;animation:.75s linear infinite lb-animation-spin}.lb-button{--lb-button-background:var(--lb-dynamic-background);all:unset;box-sizing:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;transition-timing-function:var(--lb-transition-easing);transition-duration:var(--lb-transition-duration);-webkit-tap-highlight-color:transparent;padding:calc(.25*var(--lb-spacing));border-radius:var(--lb-button-radius);background:var(--lb-button-background);color:var(--lb-foreground-moderate);outline:none;justify-content:center;align-items:center;transition-property:background,color,opacity;display:flex;position:relative}.lb-button:after{content:"";border-radius:inherit;pointer-events:none;transition-property:box-shadow;position:absolute;inset:0}.lb-button:where(:focus-visible){z-index:1}.lb-button:where(:focus-visible):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-accent)0 0 0 4px}.lb-button:where(.lb-button\:non-disableable:disabled){cursor:default}.lb-button:where(:not(.lb-button\:non-disableable):disabled){opacity:.5;cursor:not-allowed}.lb-button:where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary)}.lb-button:where([data-variant=default]:not(:is(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true],[aria-pressed]))){background:0 0}.lb-button:where([data-variant=primary]){--lb-button-background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-button:where([data-variant=primary]):where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){--lb-button-background:var(--lb-accent-secondary);color:var(--lb-accent-foreground)}.lb-button:where([data-variant=destructive]){--lb-button-background:var(--lb-destructive);color:var(--lb-destructive-foreground)}.lb-button:where([data-variant=destructive]):where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){--lb-button-background:var(--lb-destructive-secondary);color:var(--lb-destructive-foreground)}.lb-button:where([data-variant=outline]){box-shadow:inset 0 0 0 1px var(--lb-foreground-subtle);transition-property:background,color,opacity,box-shadow}.lb-button:where([data-variant=ghost]){background:0 0}.lb-button:where(:has(.lb-button-label)){gap:calc(.175*var(--lb-spacing));padding-inline:calc(.55*var(--lb-spacing))}.lb-button:where(:has(.lb-button-label)):where(:has(.lb-icon-container)){padding-inline-start:calc(.4*var(--lb-spacing))}.lb-button:where([data-variant=toolbar]){color:var(--lb-foreground-tertiary)}.lb-button:where([data-variant=toolbar]):where([aria-pressed=true]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-secondary)}.lb-button:where([data-variant=toolbar]):where([aria-pressed=true]) :where(.lb-icon *){stroke-width:calc(1.25*var(--lb-icon-weight))}.lb-button:where([data-variant=secondary]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary)}.lb-button:where([data-variant=secondary]):where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){--lb-button-background:var(--lb-foreground);color:var(--lb-dynamic-background)}.lb-button:where([data-size=large]){padding:calc(.5*var(--lb-spacing))}.lb-button:where([data-size=large]):where(:has(.lb-button-label)){gap:calc(.35*var(--lb-spacing));padding-inline:calc(.7*var(--lb-spacing))}.lb-button:where([data-size=large]):where(:has(.lb-button-label)):where(:has(.lb-icon-container)){padding-inline-start:calc(.6*var(--lb-spacing))}.lb-button :where(.lb-icon-container){flex:none}.lb-button :where(.lb-icon){--lb-icon-background:var(--lb-button-background)}.lb-button-label{block-size:var(--lb-icon-size);font-weight:500;font-size:calc(.7*var(--lb-icon-size));flex:none;align-items:center;line-height:1;display:inline-flex}.lb-dropdown{min-inline-size:160px}.lb-dropdown-label{padding:calc(.875*var(--lb-spacing))calc(.625*var(--lb-spacing))calc(.125*var(--lb-spacing));color:var(--lb-foreground-tertiary);text-transform:uppercase;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:.675em;font-weight:600}.lb-dropdown-label:where(:first-child){padding-block-start:var(--lb-spacing)}.lb-dropdown-separator{background:var(--lb-foreground-subtle);block-size:1px;margin:4px -4px}.lb-dropdown-item :where(.lb-icon-container){color:var(--lb-foreground-moderate);margin-inline-start:calc(-.125*var(--lb-spacing));margin-inline-end:calc(.375*var(--lb-spacing));transition-property:color}.lb-dropdown-item:where(:is([data-highlighted]:not([data-highlighted=false]),[data-selected]:not([data-selected=false]),[data-active]:not([data-active=false]))) :where(.lb-icon-container){color:var(--lb-foreground-tertiary)}.lb-dropdown-item:where(:has(.lb-dropdown-item-accessory)) :where(.lb-dropdown-item-label){margin-inline-end:calc(.375*var(--lb-spacing))}.lb-dropdown-item-accessory{margin-inline-start:auto;margin-inline-end:calc(-.25*var(--lb-spacing))}.lb-dropdown:where(:has(.lb-dropdown-item-icon)) :where(.lb-dropdown-item:not(:has(.lb-dropdown-item-icon))) :where(.lb-dropdown-item-label){margin-inline-start:calc(var(--lb-icon-size) + (.375 - .125)*var(--lb-spacing))}.lb-select-button{min-inline-size:0}.lb-select-button :where(.lb-button-label){text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.lb-select-button-chevron{opacity:.75;flex:none;margin-inline-end:calc(-.25*var(--lb-spacing))}.lb-collapsible-trigger{all:unset;box-sizing:inherit;-webkit-user-select:none;user-select:none;transition-timing-function:var(--lb-transition-easing);transition-duration:var(--lb-transition-duration);-webkit-tap-highlight-color:transparent;transition-property:color,background,opacity;position:relative}.lb-collapsible-trigger:where(:not([data-disabled])){cursor:pointer}.lb-collapsible-chevron{inline-size:calc(.8*var(--lb-icon-size));block-size:calc(.8*var(--lb-icon-size));opacity:.65;margin-block-start:1px;margin-inline-start:-1px}.lb-collapsible-content:where([hidden]:not([hidden=until-found])){display:none!important}.lb-prose,.lb-prose *{line-height:var(--lb-line-height)}.lb-prose :where(p){margin-block:.75em}.lb-prose :where(p,li){text-wrap:pretty}.lb-prose :where(h1,h2,h3,h4,h5,h6){text-wrap:balance;margin-block:1.5em .375em;font-weight:600}.lb-prose :where(h1){font-size:1.75em;line-height:calc(.8*var(--lb-line-height))}.lb-prose :where(h2){font-size:1.5em;line-height:calc(.86*var(--lb-line-height))}.lb-prose :where(h3){font-size:1.25em;line-height:calc(.92*var(--lb-line-height))}.lb-prose :where(h4){font-size:1.125em;line-height:calc(.98*var(--lb-line-height))}.lb-prose :where(h5){font-size:1em}.lb-prose :where(h6){font-size:.875em}.lb-prose :where(hr){border:none;border-block-start:1px solid var(--lb-foreground-subtle);margin-block:1.5em}.lb-prose :where(ol,ul){flex-direction:column;gap:.25em;margin-block:.75em;padding-inline-start:1.125em;list-style-position:outside;display:flex}.lb-prose :where(ol,ul) :where(ol,ul){margin-block:0}.lb-prose :where(ul){list-style-type:disc}.lb-prose :where(ol){list-style-type:decimal}.lb-prose :where(li){margin-block:0}.lb-prose :where(li)>:where(ol,ul){margin-block-start:.25em}.lb-prose :where(li)>:where(p){margin-block:.25em}.lb-prose :where(li)>:where(p:first-child){margin-block-start:0}.lb-prose :where(li)>:where(p:last-child){margin-block-end:0}.lb-prose :where(a){color:var(--lb-foreground);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-foreground-moderate);text-decoration-color:var(--lb-foreground-moderate);text-underline-offset:2px;outline:none;font-weight:500;transition-property:color,text-decoration-color}.lb-prose :where(a):where([href]):where(:hover,:focus-visible){color:var(--lb-accent);-webkit-text-decoration-color:var(--lb-accent-moderate);text-decoration-color:var(--lb-accent-moderate)}.lb-prose :where(strong){font-weight:600}.lb-prose :where(table){border-collapse:collapse;table-layout:auto;word-break:break-word;inline-size:100%;min-inline-size:0;margin-block:1em}.lb-prose :where(thead){border-block-end:2px solid var(--lb-foreground-subtle)}.lb-prose :where(thead) :where(th){vertical-align:bottom}.lb-prose :where(tbody) :where(td){vertical-align:baseline}.lb-prose :where(tbody) :where(tr:not(:last-child)){border-block-end:1px solid var(--lb-foreground-subtle)}.lb-prose :where(tfoot){border-block-start:2px solid var(--lb-foreground-subtle)}.lb-prose :where(tfoot) :where(td){vertical-align:top}.lb-prose :where(th,td){text-align:start;padding-block:.5em;padding-inline:.75em}.lb-prose :where(th,td):where(:first-child){padding-inline-start:0}.lb-prose :where(th,td):where(:last-child){padding-inline-end:0}.lb-prose :where(.lb-code-block){margin-block:1em}.lb-prose :where(blockquote){margin-block:.75em;margin-inline:0;padding:0;padding-inline-start:1.25em;position:relative}.lb-prose :where(blockquote):after{content:"";border-radius:calc(.5*var(--lb-radius));background:var(--lb-foreground-subtle);block-size:100%;inline-size:4px;position:absolute;inset-block-start:0;inset-inline-start:0}.lb-prose :where(blockquote):where(:is(.lb-prose :where(blockquote))+:is(.lb-prose :where(blockquote))){margin-block-start:1em}.lb-prose :where(blockquote)>:where(:first-child){margin-block-start:0}.lb-prose :where(blockquote)>:where(:last-child){margin-block-end:0}.lb-prose>:where(:first-child){margin-block-start:0}.lb-prose>:where(:last-child){margin-block-end:0}.lb-composer-suggestions-list{margin:0;padding:0;list-style:none}.lb-composer-suggestions-list-item{scroll-margin-block:4px}.lb-composer-mention-suggestions{--lb-composer-mention-suggestion-avatar-size:1.25rem}.lb-composer-mention-suggestion{padding:calc(.375*var(--lb-spacing))calc(.625*var(--lb-spacing))}.lb-composer-mention-suggestion-avatar{inline-size:var(--lb-composer-mention-suggestion-avatar-size);margin-inline-start:calc(-.125*var(--lb-spacing));margin-inline-end:calc(.5*var(--lb-spacing));margin-block:calc(.125*var(--lb-spacing));background:var(--lb-foreground-subtle);color:var(--lb-foreground-moderate)}.lb-list{display:contents}.lb-list :where(:first-child):first-letter,.lb-date:first-letter{text-transform:capitalize}.lb-emoji{white-space:nowrap;justify-content:center;align-items:center;inline-size:1em;display:inline-flex}@supports (background:-webkit-named-image(i)){.lb-emoji{will-change:transform;transform:scale(.825)}}.lb-emoji-picker{--lb-emoji-picker-padding:6px;--lb-emoji-picker-offset-padding:calc(6px + .375*var(--lb-spacing));inline-size:100%;max-inline-size:var(--frimousse-viewport-width);block-size:374px;color:var(--lb-foreground);flex-direction:column;display:flex}.lb-emoji-picker-header{border-block-end:1px solid var(--lb-foreground-subtle);flex:none}.lb-emoji-picker-footer{gap:calc(.5*var(--lb-spacing));inline-size:100%;padding:calc(.5*var(--lb-spacing));border-block-start:1px solid var(--lb-foreground-subtle);flex:none;align-items:center;display:flex}.lb-emoji-picker-active-emoji{flex:none;justify-content:center;align-items:center;block-size:1.25em;inline-size:1.25em;font-size:1.25em;display:flex}.lb-emoji-picker-active-emoji-label{text-overflow:ellipsis;white-space:nowrap;color:var(--lb-foreground-secondary);flex:1;font-size:.8125em;font-weight:500;overflow:hidden}.lb-emoji-picker-active-emoji-label-placeholder{color:var(--lb-foreground-moderate);margin-inline-start:calc(.5*var(--lb-spacing))}.lb-emoji-picker-skin-tone-selector{inline-size:calc(1.75*var(--lb-spacing));block-size:calc(1.75*var(--lb-spacing));flex:none;justify-content:center;align-items:center;margin-inline-start:auto;display:flex}.lb-emoji-picker-search-container{align-items:center;display:flex;position:relative}.lb-emoji-picker-search-container :where(.lb-icon){color:var(--lb-foreground-moderate);pointer-events:none;position:absolute;inset-inline-start:var(--lb-emoji-picker-offset-padding)}.lb-emoji-picker-search{all:unset;box-sizing:inherit;inline-size:100%;padding:var(--lb-emoji-picker-offset-padding);appearance:textfield;background:0 0;outline:none;padding-inline-start:calc(var(--lb-icon-size) + var(--lb-emoji-picker-offset-padding) + .375*var(--lb-spacing))}.lb-emoji-picker-search::placeholder{color:var(--lb-foreground-moderate)}.lb-emoji-picker-search::-webkit-search-cancel-button{display:none}.lb-emoji-picker-content{outline:none;flex:1;position:relative}.lb-emoji-picker-category-header{padding:var(--lb-emoji-picker-padding)var(--lb-emoji-picker-offset-padding);background:var(--lb-dynamic-background)}.lb-emoji-picker-category-header-title{color:var(--lb-foreground-tertiary);text-transform:uppercase;font-size:.675em;font-weight:600}.lb-emoji-picker-list{animation:lb-animation-appear var(--lb-transition-duration)var(--lb-transition-easing)both;padding-block-end:var(--lb-emoji-picker-padding)}.lb-emoji-picker-row{padding-inline:var(--lb-emoji-picker-padding);scroll-margin-block-end:var(--lb-emoji-picker-padding);display:flex}.lb-emoji-picker-emoji{all:unset;box-sizing:inherit;aspect-ratio:1;padding:calc(.375*var(--lb-spacing));border-radius:calc(var(--lb-radius) - .75*6px);text-align:center;justify-content:center;align-items:center;display:flex;overflow:hidden}.lb-tooltip{--lb-background:#222;--lb-foreground:#fff;--lb-foreground-contrast:10%;--lb-dynamic-background:var(--lb-background);max-inline-size:300px;min-block-size:calc(calc(1em + 2*.25*var(--lb-spacing)) + 2*5px);padding-inline:calc(.75*var(--lb-spacing));border-radius:var(--lb-radius);background:var(--lb-dynamic-background);color:var(--lb-foreground);box-shadow:var(--lb-tooltip-shadow);overflow-wrap:anywhere;pointer-events:none;align-items:center;font-size:.75rem;line-height:1;display:flex;position:relative}.lb-tooltip:after{content:"";z-index:1;border-radius:inherit;box-shadow:var(--lb-inset-shadow);pointer-events:none;position:absolute;inset:0}.lb-tooltip\:multiline{padding-block:calc(calc(.625*var(--lb-spacing))*(1/1.5));text-align:center;justify-content:center;line-height:1.5}.lb-tooltip-shortcut{gap:calc(.125*var(--lb-spacing));block-size:calc(1em + 2*.25*var(--lb-spacing));padding-inline:calc(.25*var(--lb-spacing));border-radius:calc(var(--lb-radius) - .625*5px);background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary);text-transform:uppercase;justify-content:center;align-items:center;margin-inline-start:calc(.75*var(--lb-spacing));margin-inline-end:calc(-1*calc(.75*var(--lb-spacing)) + 5px);font-family:inherit;line-height:1;display:flex}.lb-tooltip-shortcut :where(abbr){all:unset}.lb-avatar{aspect-ratio:1;border-radius:var(--lb-avatar-radius);background:var(--lb-foreground-subtle);color:var(--lb-foreground-moderate);justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden;container-type:inline-size}.lb-avatar:where([data-loading]){background:var(--lb-foreground);opacity:.12}.lb-avatar-image{object-fit:cover;block-size:100%;inline-size:100%;position:absolute;inset:0}.lb-avatar-fallback{white-space:nowrap;font-size:35cqi;font-weight:500}@supports not (container-type:inline-size){.lb-avatar-fallback{display:none}}.lb-name{display:inline-block}.lb-name:where([data-loading]):before{content:"";vertical-align:middle;border-radius:calc(.5*var(--lb-radius));opacity:.12;-webkit-user-select:none;user-select:none;background:currentColor;block-size:1.75ex;inline-size:8ch;display:inline-block}:is(.lb-avatar,.lb-name):where([data-loading]){animation:8s linear infinite lb-animation-shimmer-skeleton}:is(.lb-comment-body,.lb-composer-editor){color:var(--lb-foreground-secondary)}:is(.lb-comment-body,.lb-composer-editor),:is(.lb-comment-body,.lb-composer-editor) *{line-height:var(--lb-line-height)}:is(.lb-comment-body,.lb-composer-editor) :where(p){--lb-line-height-crop:calc(1lh - 1em)/-2;margin-block:.25em}:is(.lb-comment-body,.lb-composer-editor) :where(p):where(:first-of-type){margin-block-start:calc(.125em + var(--lb-line-height-crop))}:is(.lb-comment-body,.lb-composer-editor) :where(p):where(:last-of-type){margin-block-end:calc(.125em + var(--lb-line-height-crop))}:is(.lb-comment-body,.lb-composer-editor) :where(strong){font-weight:600}.lb-comment-mention,.lb-composer-mention{color:var(--lb-accent);-webkit-box-decoration-break:clone;box-decoration-break:clone;font-weight:500}:is(.lb-comment-link,.lb-composer-link){color:var(--lb-foreground);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-foreground-moderate);text-decoration-color:var(--lb-foreground-moderate);text-underline-offset:2px;outline:none;font-weight:500;transition-property:color,text-decoration-color}:is(.lb-comment-link,.lb-composer-link):where([href]):where(:hover,:focus-visible){color:var(--lb-accent);-webkit-text-decoration-color:var(--lb-accent-moderate);text-decoration-color:var(--lb-accent-moderate)}.lb-comment-mention:where([data-self]),.lb-composer-mention{border-radius:calc(.675*var(--lb-radius));background:var(--lb-accent-subtle);padding:.1em .3em}.lb-mention-symbol{display:contents}.lb-composer{background:var(--lb-dynamic-background);color:var(--lb-foreground);transition-property:background;position:relative}.lb-composer-form{margin:0}.lb-composer:where(:has(.lb-composer-editor:not(:focus-visible))) :where(.lb-button[data-variant=primary]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary)}.lb-composer:where(:has(.lb-composer-editor:not(:focus-visible))) :where(.lb-button[data-variant=primary]):where(:enabled:hover,:enabled:focus-visible){--lb-button-background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-composer-editor{padding:var(--lb-spacing);outline:none}.lb-composer-editor:where([data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}:where(.lb-composer-editor-container:has(.lb-composer-attachments)) .lb-composer-editor{padding-block-end:calc(.25*var(--lb-spacing))}.lb-composer-editor :where([data-placeholder]){color:var(--lb-foreground-moderate)}.lb-composer-mention::selection{background:0 0}.lb-composer-mention ::selection{background:0 0}.lb-composer-mention:where([data-selected]:not([data-selected=false])){background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-composer-footer{gap:calc(.75*var(--lb-spacing));block-size:calc(calc(2*.25*var(--lb-spacing) + var(--lb-icon-size)) + var(--lb-spacing));padding:0 var(--lb-spacing)var(--lb-spacing);align-items:center;margin-block-start:calc(-.125*var(--lb-spacing));display:flex}.lb-composer-actions,.lb-composer-editor-actions{gap:calc(.125*var(--lb-spacing));align-items:center;display:flex}.lb-composer-editor-actions{margin-inline-end:auto}.lb-composer-attribution{color:var(--lb-foreground-moderate);outline:none;transition-property:color}.lb-composer-attribution:where(:hover,:focus-visible){color:var(--lb-foreground-tertiary)}.lb-composer-attribution :where(svg){block-size:calc(.75*calc(2*.25*var(--lb-spacing) + var(--lb-icon-size)))}.lb-composer-attachments{padding-inline:var(--lb-spacing);padding-block-start:calc(.75*var(--lb-spacing));padding-block-end:var(--lb-spacing)}.lb-composer-editor-container:where([data-drop]) *{pointer-events:none}.lb-composer-attachments-drop-area{color:var(--lb-accent);place-content:center;place-items:center;display:flex;position:absolute;inset:0}.lb-composer-attachments-drop-area:before,.lb-composer-attachments-drop-area:after{content:"";inset:calc(.5*var(--lb-spacing));z-index:0;border-radius:calc(.75*var(--lb-radius));position:absolute}.lb-composer-attachments-drop-area:before{opacity:calc(1*var(--lb-accent-contrast));background:currentColor}.lb-composer-attachments-drop-area:after{opacity:calc(2*var(--lb-accent-contrast));border:2px dashed}.lb-composer-attachments-drop-area-label{gap:calc(.25*var(--lb-spacing));padding:calc(.375*var(--lb-spacing))calc(.5*var(--lb-spacing));border-radius:calc(.75*var(--lb-radius));background:var(--lb-accent);color:var(--lb-accent-foreground);pointer-events:none;place-items:center;font-weight:500;display:flex;position:relative}.lb-composer-floating-toolbar{-webkit-user-select:none;user-select:none;flex-direction:row;gap:4px;padding:4px;display:flex}.lb-composer-floating-toolbar :where(.lb-button):before{content:"";z-index:-1;border-radius:inherit;position:absolute;inset:-4px}.lb-composer-floating-toolbar :where(.lb-button):where(:not(:first-of-type)):before{inset-inline-start:-2px}.lb-composer-floating-toolbar :where(.lb-button):where(:not(:last-of-type)):before{inset-inline-end:-2px}.lb-comment{--lb-comment-avatar-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));padding:var(--lb-spacing);background:var(--lb-dynamic-background);color:var(--lb-foreground);scroll-margin:var(--lb-spacing);font-weight:400;position:relative}.lb-comment:where(:target,[data-target]){--lb-dynamic-background:var(--lb-background-accent-faint)}.lb-comment:where([data-editing]){--lb-dynamic-background:var(--lb-background-foreground-faint)}.lb-comment-header{gap:calc(.75*var(--lb-spacing));block-size:var(--lb-comment-avatar-size);align-items:center;margin-block-end:calc(.75*var(--lb-spacing));display:flex;position:relative}.lb-comment-details{gap:calc(.75*var(--lb-spacing));align-items:center;min-inline-size:0;display:flex}.lb-comment-avatar{inline-size:var(--lb-comment-avatar-size);flex:none}.lb-comment-details-labels{gap:calc(.5*var(--lb-spacing));align-items:baseline;min-inline-size:0;display:flex}.lb-comment-author,.lb-comment-date{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lb-comment-author:first-letter,.lb-comment-date:first-letter{text-transform:capitalize}.lb-comment-author{font-weight:500}.lb-comment-date{color:var(--lb-foreground-tertiary);font-size:.875em}.lb-comment-date-created,.lb-comment-date-edited{display:contents}.lb-comment-actions{gap:calc(.125*var(--lb-spacing));margin-inline-start:auto;display:flex}.lb-comment-composer{margin:calc(-1*var(--lb-spacing));background:unset}.lb-comment-body :where(p span:only-child:empty):before{content:"";-webkit-user-select:none;user-select:none}.lb-comment-attachments{margin-block-start:calc(.75*var(--lb-spacing))}.lb-comment-reactions{gap:calc(.375*var(--lb-spacing));flex-wrap:wrap;margin-block-start:calc(.75*var(--lb-spacing));display:flex}.lb-comment-reaction{gap:calc(.375*var(--lb-spacing));block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));padding-inline:calc(.575*var(--lb-spacing));border-radius:9999px}.lb-comment-reaction:where([data-self]){background:var(--lb-accent-subtle);color:var(--lb-accent-secondary);box-shadow:inset 0 0 0 1px var(--lb-accent-moderate)}.lb-comment-reaction:where([data-self]):where(:enabled:hover,:enabled:focus-visible,[aria-expanded=true],[aria-selected=true]){color:var(--lb-accent)}.lb-comment-reaction-count{font-variant-numeric:tabular-nums;font-size:.75em;font-weight:500}.lb-comment-reaction-tooltip{max-inline-size:200px}.lb-comment-deleted{color:var(--lb-foreground-tertiary);font-size:.875em}.lb-comment\:indent-content{min-block-size:calc(var(--lb-comment-avatar-size) + 2*var(--lb-spacing))}.lb-comment\:indent-content :where(.lb-comment-header){block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));margin-block-end:calc(.25*var(--lb-spacing))}.lb-comment\:indent-content :where(.lb-comment-avatar){position:absolute;inset-block-start:0;inset-inline-start:0}.lb-comment\:indent-content :where(.lb-comment-details-labels){margin-inline-start:calc(var(--lb-comment-avatar-size) + .75*var(--lb-spacing))}.lb-comment\:indent-content :where(.lb-comment-content){padding-inline-start:calc(var(--lb-comment-avatar-size) + .75*var(--lb-spacing))}.lb-thread{background:var(--lb-dynamic-background);color:var(--lb-foreground);transition-property:background}.lb-thread-comments{z-index:0;flex-direction:column;display:flex;position:relative}.lb-thread-comment{z-index:0;padding-block:calc(.6*var(--lb-spacing));transition-property:background}.lb-thread-comment:where(.lb-comment\:indent-content){min-block-size:calc(var(--lb-comment-avatar-size) + var(--lb-spacing))}.lb-thread-comment:where(:first-of-type,[data-editing]){padding-block-start:var(--lb-spacing)}.lb-thread-comment:where(:first-of-type,[data-editing]):where(.lb-comment\:indent-content){min-block-size:calc(var(--lb-comment-avatar-size) + 1.5*var(--lb-spacing))}.lb-thread-comment:where(:last-of-type,[data-editing]){padding-block-end:var(--lb-spacing)}.lb-thread-comment:where(:last-of-type,[data-editing]):where(.lb-comment\:indent-content){min-block-size:calc(var(--lb-comment-avatar-size) + 1.75*var(--lb-spacing))}.lb-thread-show-more{z-index:1;gap:calc(.5*var(--lb-spacing));justify-content:center;align-items:center;display:flex;position:relative}.lb-thread-show-more:before,.lb-thread-show-more:after{content:"";z-index:0;min-inline-size:var(--lb-spacing);border-block-start:1px dashed var(--lb-foreground-subtle);flex:1 0 auto;block-size:0;transition-property:border}:where(.lb-thread-show-more+.lb-thread-new-indicator){margin-block-start:calc(.5*var(--lb-spacing))}.lb-thread-new-indicator{z-index:1;justify-content:center;align-items:center;block-size:0;display:flex;position:relative}.lb-thread-new-indicator:before,.lb-thread-new-indicator:after{content:"";z-index:0;border-block-start:1px solid var(--lb-foreground-subtle);flex:1;block-size:0;transition-property:border}.lb-thread-new-indicator-label{z-index:1;gap:calc(.325*var(--lb-spacing));padding:calc(.25*var(--lb-spacing))var(--lb-spacing);color:var(--lb-accent);text-transform:uppercase;flex:none;align-items:center;font-size:.675em;font-weight:600;display:flex}.lb-thread-new-indicator-label-icon{inline-size:calc(.6*var(--lb-icon-size));block-size:calc(.6*var(--lb-icon-size))}.lb-thread-composer{position:relative}.lb-thread-composer:after{content:"";border-block-start:1px solid var(--lb-foreground-subtle);pointer-events:none;block-size:100%;inline-size:100%;transition-property:border;position:absolute;inset:0}.lb-comment-attachments,.lb-composer-attachments{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-attachments{gap:calc(.75*var(--lb-spacing));grid-template-columns:repeat(auto-fill,minmax(min(100%,200px),1fr));display:grid}.lb-attachment,.lb-attachment-delete{all:unset;box-sizing:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;transition-timing-function:var(--lb-transition-easing);transition-duration:var(--lb-transition-duration);-webkit-tap-highlight-color:transparent;outline:none;transition-property:background,color,opacity;position:relative}.lb-attachment:after,.lb-attachment-delete:after{content:"";border-radius:inherit;pointer-events:none;transition-property:box-shadow;position:absolute;inset:0}.lb-attachment:where(:focus-visible),.lb-attachment-delete:where(:focus-visible){z-index:1}.lb-attachment:where(:focus-visible):after,.lb-attachment-delete:where(:focus-visible):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-accent)0 0 0 4px}.lb-attachment{border-radius:var(--lb-radius);background:var(--lb-dynamic-background);inline-size:100%;min-inline-size:0;box-shadow:inset 0 0 0 1px var(--lb-foreground-subtle);display:flex;position:relative}.lb-attachment:where([tabindex="-1"]){cursor:default}.lb-attachment:where(:not([tabindex="-1"])):where(:hover,:focus-visible){background:var(--lb-foreground-subtle)}.lb-attachment-delete{z-index:2;background:var(--lb-foreground-subtle);block-size:1.1rem;inline-size:1.1rem;color:var(--lb-foreground-secondary);box-shadow:0 0 0 2px var(--lb-dynamic-background);opacity:0;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute;inset-block-start:-.35rem;inset-inline-end:-.35rem}.lb-attachment-delete:before{content:"";z-index:-1;border-radius:inherit;position:absolute;inset:-4px}.lb-attachment-delete:where(:hover,:focus-visible){background:var(--lb-foreground-secondary);color:var(--lb-dynamic-background)}:where(.lb-attachment:focus-within,.lb-attachment:hover) .lb-attachment-delete{opacity:1}.lb-attachment-delete :where(.lb-icon){inline-size:.75rem}.lb-attachment-details{gap:calc(.25*var(--lb-spacing));flex-direction:column;justify-content:center;min-inline-size:0;font-size:.875em;display:flex;position:relative}.lb-attachment-name{font-weight:500;display:flex}.lb-attachment-name-base,.lb-attachment-description{text-overflow:ellipsis;white-space:nowrap;transition-property:color;overflow:hidden}.lb-attachment-preview{background:color-mix(in srgb,transparent,var(--lb-foreground)var(--lb-foreground-contrast));color:var(--lb-foreground-tertiary);flex:none;justify-content:center;align-items:center;transition-property:background,color;display:flex;position:relative;overflow:hidden}.lb-attachment-preview-media{border-radius:inherit;transition-property:opacity}.lb-attachment-preview-media,.lb-attachment-preview-media:after,.lb-attachment-preview-media img,.lb-attachment-preview-media video{block-size:100%;inline-size:100%;position:absolute;inset:0}.lb-attachment-preview-media img,.lb-attachment-preview-media video{object-fit:cover;pointer-events:none}.lb-attachment-preview-media:after{content:"";border-radius:inherit;box-shadow:var(--lb-highlight-shadow);pointer-events:none}.lb-attachment-preview-media:where([data-hidden]){opacity:0}.lb-attachment-icon{color:var(--lb-foreground);flex:none;overflow:visible}.lb-attachment-icon-glyph{fill:var(--lb-foreground-moderate)}.lb-attachment-icon-background{fill:var(--lb-background)}.lb-attachment-icon-fold{fill-opacity:calc(.75*var(--lb-foreground-contrast))}.lb-attachment-icon-shadow{filter:blur(6px);fill-opacity:var(--lb-foreground-contrast)}.lb-file-attachment{gap:calc(.5*var(--lb-spacing));padding:calc(.5*var(--lb-spacing));padding-inline-end:calc(.65*var(--lb-spacing))}.lb-file-attachment :where(.lb-attachment-preview){aspect-ratio:1;border-radius:calc(.5*var(--lb-radius));inline-size:2.5rem}.lb-file-attachment :where(.lb-attachment-name){color:var(--lb-foreground-secondary)}.lb-file-attachment :where(.lb-attachment-description){color:var(--lb-foreground-tertiary)}.lb-file-attachment:where(:not([tabindex="-1"])):where(:hover,:focus-visible,:focus-within) :where(.lb-attachment-name){color:var(--lb-foreground)}.lb-file-attachment:where(:not([tabindex="-1"])):where(:hover,:focus-visible,:focus-within) :where(.lb-attachment-description){color:var(--lb-foreground-secondary)}.lb-media-attachment{aspect-ratio:16/10}.lb-media-attachment :where(.lb-attachment-preview){border-radius:inherit;position:absolute;inset:0}.lb-media-attachment :where(.lb-attachment-details){padding:calc(.75*var(--lb-spacing));text-shadow:0 0 2px #0006;opacity:0;background:linear-gradient(#0000,#000c);border-end-end-radius:inherit;border-end-start-radius:inherit;transition-property:opacity;position:absolute;inset-block-end:0;inset-inline:0}.lb-media-attachment :where(.lb-attachment-name){color:#fff}.lb-media-attachment :where(.lb-attachment-description){color:#fffc}.lb-media-attachment:where(:not([tabindex="-1"])):where(:hover,:focus-visible,:focus-within) :where(.lb-attachment-details){opacity:1}.lb-attachment:where([data-error]) :where(.lb-attachment-preview){background:var(--lb-destructive);color:var(--lb-destructive-foreground)}.lb-inbox-notification{--lb-inbox-notification-aside-size:36px;gap:calc(.75*var(--lb-spacing));padding:var(--lb-spacing);background:var(--lb-dynamic-background);color:var(--lb-foreground);-webkit-text-decoration:inherit;text-decoration:inherit;font-weight:400;transition-property:background;display:flex;position:relative;overflow:hidden}.lb-inbox-notification:where([data-missing]){--lb-dynamic-background:var(--lb-background-accent-faint);--lb-accent:var(--lb-destructive)!important;--lb-accent-foreground:var(--lb-destructive-foreground)!important;--lb-accent-contrast:var(--lb-destructive-contrast)!important}.lb-inbox-notification:where([data-unread]){--lb-dynamic-background:var(--lb-background-accent-faint)}.lb-inbox-notification:where([href]){cursor:pointer}.lb-inbox-notification:where([href]):where(:hover,:focus-visible,:focus-within){--lb-dynamic-background:var(--lb-background-foreground-faint)}.lb-inbox-notification:where([href]):where([data-unread]):where(:hover,:focus-visible,:focus-within){--lb-dynamic-background:var(--lb-background-accent-subtle)}.lb-inbox-notification-aside{inline-size:var(--lb-inbox-notification-aside-size);flex:none}.lb-inbox-notification-icon{aspect-ratio:1;background:var(--lb-foreground-subtle);border-radius:50%;justify-content:center;place-items:center;display:flex}.lb-inbox-notification:where([data-missing]) :where(.lb-inbox-notification-icon){background:var(--lb-accent-subtle);color:var(--lb-accent)}.lb-inbox-notification-content{flex:1}.lb-inbox-notification-content,.lb-inbox-notification-body{min-inline-size:0;max-inline-size:100%}.lb-inbox-notification-header{gap:calc(.75*var(--lb-spacing));align-items:center;margin-block-start:calc(.25*var(--lb-spacing));margin-block-end:calc(.5*var(--lb-spacing));display:flex}.lb-inbox-notification-title{min-block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size))}:where(.lb-inbox-notification:not([data-inspector])) .lb-inbox-notification-title:first-letter{text-transform:capitalize}.lb-inbox-notification-title :where(strong,.lb-list,.lb-name){font-weight:500}.lb-inbox-notification-details{min-inline-size:0;block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));flex:none;align-self:start;margin-inline-start:auto}.lb-inbox-notification-details-labels{align-items:baseline;min-inline-size:0;display:flex}.lb-inbox-notification-details-labels:before{content:""}.lb-inbox-notification-actions{gap:calc(.125*var(--lb-spacing));grid-area:actions;align-self:start;display:flex}.lb-inbox-notification-comments{gap:var(--lb-spacing);flex-direction:column;display:flex}.lb-inbox-notification-comment{background:0 0;padding:0}.lb-inbox-notification-comment :where(.lb-comment-header){block-size:auto;color:var(--lb-foreground-tertiary);font-size:.875rem}.lb-inbox-notification-comment :where(.lb-comment-reaction),.lb-inbox-notification-comment :where(.lb-comment-attachment){pointer-events:none}.lb-inbox-notification-date{color:var(--lb-foreground-tertiary);font-size:.875em}.lb-inbox-notification-unread-indicator{block-size:10px;inline-size:10px;background:var(--lb-accent);border-radius:50%;align-self:center;margin-inline-start:calc(.5*var(--lb-spacing))}.lb-history-version-summary{gap:calc(.25*var(--lb-spacing));inline-size:100%;min-inline-size:0;padding:var(--lb-spacing);background:var(--lb-dynamic-background);flex-direction:column;justify-content:center;transition-property:background;display:flex;position:relative}.lb-history-version-summary:where(:hover,:focus-visible,:focus-within,[data-selected]:not([data-selected=false])){--lb-dynamic-background:var(--lb-background-foreground-faint)}.lb-history-version-summary-date,.lb-history-version-summary-authors{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;max-inline-size:100%;overflow:hidden}.lb-history-version-summary-date:first-letter,.lb-history-version-summary-authors:first-letter{text-transform:capitalize}.lb-history-version-summary-date{color:var(--lb-foreground-secondary);font-weight:500}.lb-history-version-summary-authors{color:var(--lb-foreground-tertiary)}.lb-history-version-preview{background:var(--lb-dynamic-background);flex-direction:column;display:flex;position:relative;overflow-y:auto}.lb-history-version-preview-content{padding:var(--lb-spacing);flex:1 0 auto}.lb-history-version-preview-footer{gap:var(--lb-spacing);padding:var(--lb-spacing);border-block-start:1px solid var(--lb-foreground-subtle);background:var(--lb-dynamic-background);flex:none;align-items:center;margin-block-start:auto;display:flex;position:sticky;inset-block-end:0}.lb-history-version-preview-authors{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;color:var(--lb-foreground-tertiary);flex:auto;overflow:hidden}.lb-history-version-preview-actions{gap:calc(.35*var(--lb-spacing));flex:none;align-items:center;margin-inline-start:auto;display:flex}.lb-inbox-notification-list,.lb-history-version-summary-list{margin:0;padding:0;list-style:none}.lb-inbox-notification-list-item:where(:not(:last-of-type)),.lb-history-version-summary-list-item:where(:not(:last-of-type)){border-block-end:1px solid var(--lb-foreground-subtle)}.lb-root :where(code:not(pre>code)){border-radius:calc(.75*var(--lb-radius));background:var(--lb-foreground-subtle);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:.2em .4em;font-size:85%;line-height:1}.lb-root :where(span:has(code)+span code){border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:0}.lb-root :where(span:has(code):has(+span code) code){border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:0}:where(.lb-root code){font-family:ui-monospace,Menlo,Monaco,Roboto Mono,Cascadia Code,Source Code Pro,Consolas,DejaVu Sans Mono,monospace}.lb-elevation{--lb-dynamic-background:var(--lb-background);border-radius:var(--lb-radius);background:var(--lb-dynamic-background);box-shadow:var(--lb-elevation-shadow);position:relative;overflow:hidden}.lb-elevation:after{content:"";z-index:1;border-radius:inherit;box-shadow:var(--lb-inset-shadow);pointer-events:none;position:absolute;inset:0}.lb-elevation:where(.lb-elevation-moderate){box-shadow:var(--lb-elevation-shadow-moderate)}.lb-dropdown,.lb-composer-suggestions{padding:4px;overflow-y:auto}.lb-dropdown:where([data-hidden]),.lb-composer-suggestions:where([data-hidden]){opacity:0}.lb-dropdown-item,.lb-composer-suggestions-list-item{padding:calc(.25*var(--lb-spacing))calc(.5*var(--lb-spacing));align-items:center;font-size:.875rem;display:flex}.lb-dropdown-item,.lb-composer-suggestions-list-item,.lb-emoji-picker-emoji{border-radius:calc(var(--lb-radius) - .75*4px);color:var(--lb-foreground-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;transition-property:background,color,opacity}:is(.lb-dropdown-item,.lb-composer-suggestions-list-item,.lb-emoji-picker-emoji):where([data-highlighted]:not([data-highlighted=false]),[data-selected]:not([data-selected=false]),[data-active]:not([data-active=false])){background:var(--lb-foreground-subtle);transition-duration:calc(var(--lb-transition-duration)/2)}:is(.lb-dropdown-item,.lb-composer-suggestions-list-item,.lb-emoji-picker-emoji):where(:disabled,[data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}.lb-dropdown,.lb-composer-suggestions,.lb-composer-floating-toolbar,.lb-tooltip,.lb-emoji-picker{animation-duration:var(--lb-transition-duration);animation-timing-function:var(--lb-transition-easing);will-change:transform,opacity}:is(.lb-dropdown,.lb-emoji-picker,.lb-tooltip:where([data-state=delayed-open]),.lb-composer-suggestions,.lb-composer-floating-toolbar):where([data-side=top]){animation-name:lb-animation-slide-up}:is(.lb-dropdown,.lb-emoji-picker,.lb-tooltip:where([data-state=delayed-open]),.lb-composer-suggestions,.lb-composer-floating-toolbar):where([data-side=bottom]){animation-name:lb-animation-slide-down}:is(.lb-dropdown,.lb-emoji-picker,.lb-tooltip,.lb-composer-suggestions,.lb-composer-floating-toolbar):where([data-state=closed]){animation-name:lb-animation-disappear}.lb-code-block{border:1px solid var(--lb-foreground-subtle);border-radius:var(--lb-radius);isolation:isolate;min-inline-size:0;position:relative}.lb-code-block :where(.lb-code-block-header){padding:calc(.5*var(--lb-spacing));align-items:center;display:flex}.lb-code-block :where(.lb-code-block-title){color:var(--lb-foreground-tertiary);text-transform:uppercase;margin-inline-start:calc(.5*var(--lb-spacing));font-size:.675em;font-weight:600}.lb-code-block :where(.lb-code-block-header-actions){margin-inline-start:auto}.lb-code-block :where(.lb-code-block-content){min-inline-size:0;padding:0 var(--lb-spacing)calc(.875*var(--lb-spacing));font-size:85%;line-height:var(--lb-line-height);margin:0;overflow-x:auto}.lb-ai-composer{inline-size:100%;color:var(--lb-foreground);position:relative}.lb-ai-composer-form:where(:has(.lb-ai-composer-editor:not(:focus-visible))) :where(.lb-button[data-variant=primary]){--lb-button-background:var(--lb-foreground-subtle);color:var(--lb-foreground-tertiary)}.lb-ai-composer-form:where(:has(.lb-ai-composer-editor:not(:focus-visible))) :where(.lb-button[data-variant=primary]):where(:enabled:hover,:enabled:focus-visible){--lb-button-background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-ai-composer-editor{max-block-size:15rem;padding:var(--lb-spacing)var(--lb-spacing)0;color:var(--lb-foreground-secondary);resize:none;outline:none;overflow-y:auto}.lb-ai-composer-editor,.lb-ai-composer-editor *{line-height:var(--lb-line-height)}.lb-ai-composer-editor :where(p){--lb-line-height-crop:calc(1lh - 1em)/-2;margin-block:.25em}.lb-ai-composer-editor :where(p):where(:first-of-type){margin-block-start:calc(.125em + var(--lb-line-height-crop))}.lb-ai-composer-editor :where(p):where(:last-of-type){margin-block-end:calc(.125em + var(--lb-line-height-crop))}.lb-ai-composer-editor:where([data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}.lb-ai-composer-editor :where([data-placeholder]){color:var(--lb-foreground-moderate)}.lb-ai-composer-footer{gap:calc(.75*var(--lb-spacing));padding:var(--lb-spacing);align-items:center;margin-block-start:calc(-.125*var(--lb-spacing));display:flex}.lb-ai-composer-actions,.lb-ai-composer-editor-actions{gap:calc(.125*var(--lb-spacing));align-items:center;display:flex}.lb-ai-composer-editor-actions{margin-inline-end:auto}.lb-ai-chat-message{gap:var(--lb-spacing);color:var(--lb-foreground);flex-direction:column;scroll-margin-block-start:calc(1.5*var(--lb-spacing));display:flex}.lb-ai-chat-user-message :where(.lb-ai-chat-message-content){--lb-dynamic-background:var(--lb-background-foreground-faint);--lb-ai-chat-message-content-horizontal-padding:calc(.9375*var(--lb-spacing));--lb-ai-chat-message-content-vertical-padding:calc(.5625*var(--lb-spacing));min-block-size:calc(1lh + 2*var(--lb-ai-chat-message-content-vertical-padding));padding:var(--lb-ai-chat-message-content-vertical-padding)var(--lb-ai-chat-message-content-horizontal-padding);border-radius:calc((1lh + 2*var(--lb-ai-chat-message-content-vertical-padding))/2);background:var(--lb-dynamic-background);color:var(--lb-foreground);line-height:var(--lb-line-height)}.lb-ai-chat-user-message :where(.lb-ai-chat-message-content):where(:has(h1,h2,h3,h4,h5,h6,ul,ol,blockquote,table,.lb-code-block)){--lb-ai-chat-message-content-horizontal-padding:calc(1.375*var(--lb-spacing));--lb-ai-chat-message-content-vertical-padding:calc(1.125*var(--lb-spacing))}.lb-ai-chat-user-message :where(.lb-ai-chat-message-content) :where(.lb-code-block){--lb-dynamic-background:var(--lb-background-foreground-subtle);background:var(--lb-dynamic-background);border:none}.lb-ai-chat-message-deleted{inline-size:100%;color:var(--lb-foreground-moderate);text-wrap:pretty;align-items:center;font-size:.875em;position:relative}.lb-ai-chat-message-error{gap:calc(.5*var(--lb-spacing));inline-size:100%;color:var(--lb-destructive);font-size:.875em;line-height:var(--lb-line-height);text-wrap:pretty;word-break:break-word;align-items:flex-start;display:flex}.lb-ai-chat-message-error :where(.lb-icon-container){block-size:1lh;color:var(--lb-destructive-secondary)}.lb-ai-chat-message-error :where(code:not(pre>code)){background:var(--lb-destructive-subtle)}.lb-ai-chat-message-content{white-space:break-spaces;inline-size:100%}.lb-ai-chat-message-content:where(:empty){display:contents}.lb-ai-chat-message-content>:where(.lb-ai-chat-message-text),.lb-ai-chat-message-content>:where(.lb-ai-chat-message-tool-invocation){margin-block:var(--lb-spacing)}.lb-ai-chat-message-content>:where(:first-child){margin-block-start:0}.lb-ai-chat-message-content>:where(:last-child){margin-block-end:0}.lb-ai-chat-messages{gap:calc(1.5*var(--lb-spacing));inline-size:100%;max-inline-size:min(calc(var(--lb-ai-chat-container-width) - var(--lb-spacing)),calc(100% - 3*var(--lb-spacing)));flex-direction:column;margin-inline:auto;padding-block-start:calc(1.5*var(--lb-spacing));padding-block-end:calc(3*var(--lb-spacing));display:flex}.lb-ai-chat-messages :where(.lb-ai-chat-user-message){max-inline-size:80%;margin-inline-start:auto}.lb-ai-chat-footer{gap:calc(.75*var(--lb-spacing));flex-direction:column;inline-size:100%;display:flex;position:relative}.lb-ai-chat{--lb-ai-chat-container-width:100%;background:var(--lb-background);isolation:isolate;flex-direction:column;block-size:100%;inline-size:100%;display:flex;overflow-y:auto}.lb-ai-chat :where(.lb-ai-chat-footer){z-index:1;margin-block-start:auto;position:sticky;inset-block-end:0}.lb-ai-chat :where(.lb-ai-chat-composer){margin-inline:auto}.lb-ai-chat:where(.lb-ai-chat\:layout-compact) :where(.lb-ai-chat-footer){background:var(--lb-dynamic-background)}.lb-ai-chat:where(.lb-ai-chat\:layout-compact) :where(.lb-ai-chat-footer):after{content:"";border-block-start:1px solid var(--lb-foreground-subtle);pointer-events:none;position:absolute;inset:0}.lb-ai-chat:where(.lb-ai-chat\:layout-compact) :where(.lb-ai-chat-composer){max-inline-size:min(100%,calc(var(--lb-ai-chat-container-width) + var(--lb-spacing)))}.lb-ai-chat:where(.lb-ai-chat\:layout-inset) :where(.lb-ai-chat-footer){padding:var(--lb-spacing);padding-block-start:0}.lb-ai-chat:where(.lb-ai-chat\:layout-inset) :where(.lb-ai-chat-footer):before{content:"";background:linear-gradient(to bottom,transparent 0%,var(--lb-background)calc(3.5*var(--lb-spacing)));pointer-events:none;position:absolute;inset:0;inset-block-start:calc(-3*var(--lb-spacing))}.lb-ai-chat:where(.lb-ai-chat\:layout-inset) :where(.lb-ai-chat-composer){max-inline-size:var(--lb-ai-chat-container-width);border-radius:calc(2*var(--lb-radius))}.lb-ai-chat-content{flex:1 0 auto;position:relative}.lb-ai-chat-footer-actions{pointer-events:none;justify-content:center;display:flex;position:absolute;inset-block-start:calc(-1*var(--lb-spacing));inset-inline:0;transform:translateY(-100%)}.lb-ai-chat-scroll-indicator{color:var(--lb-foreground-moderate);opacity:0;pointer-events:none;transform-origin:bottom;border-radius:9999px;transition-property:transform,opacity,background;transform:scale(.8)}.lb-ai-chat-scroll-indicator:where([data-visible]){opacity:1;pointer-events:all;transform:scale(1)}.lb-ai-chat-scroll-indicator-button{all:unset;box-sizing:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;transition-timing-function:var(--lb-transition-easing);transition-duration:var(--lb-transition-duration);-webkit-tap-highlight-color:transparent;padding:calc(.375*var(--lb-spacing));color:var(--lb-foreground-moderate);border-radius:9999px;outline:none;transition-property:opacity,color;position:relative}.lb-ai-chat-scroll-indicator-button:where(:hover,:focus-visible){color:var(--lb-foreground-secondary)}.lb-ai-chat-scroll-indicator-button:after{content:"";border-radius:inherit;pointer-events:none;transition-property:box-shadow;position:absolute;inset:0}.lb-ai-chat-scroll-indicator-button:where(:focus-visible):after{box-shadow:inset var(--lb-accent)0 0 0 2px}.lb-ai-chat-pending{-webkit-user-select:none;user-select:none;animation:2s cubic-bezier(.1,0,.9,1) infinite lb-animation-shimmer-text}.lb-ai-chat-message-thinking,.lb-ai-chat-message-retrieval,.lb-ai-chat-message-reasoning{margin-block-end:calc(.75*var(--lb-spacing))}.lb-ai-chat-message-thinking,.lb-ai-chat-message-retrieval{inline-size:fit-content;max-inline-size:100%;color:var(--lb-foreground-tertiary);transition-property:color}.lb-ai-chat-message-thinking:where(.lb-ai-chat-pending),.lb-ai-chat-message-retrieval:where(.lb-ai-chat-pending){color:var(--lb-foreground)}.lb-ai-chat-message-reasoning{position:relative}.lb-ai-chat-message-reasoning:after{content:"";inset:calc(-.375*var(--lb-spacing));border-radius:calc(.75*var(--lb-radius));pointer-events:none;transition-property:box-shadow;position:absolute}.lb-ai-chat-message-reasoning:where(:has(.lb-collapsible-trigger:focus-visible)){z-index:1}.lb-ai-chat-message-reasoning:where(:has(.lb-collapsible-trigger:focus-visible)):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-accent)0 0 0 4px}.lb-ai-chat-message-reasoning :where(.lb-collapsible-trigger){gap:calc(.25*var(--lb-spacing));color:var(--lb-foreground-tertiary);align-items:center;transition-property:color;display:flex}.lb-ai-chat-message-reasoning :where(.lb-collapsible-trigger):where(.lb-ai-chat-pending){color:var(--lb-foreground)}.lb-ai-chat-message-reasoning :where(.lb-collapsible-content){gap:calc(.5*var(--lb-spacing));line-height:var(--lb-line-height);flex-direction:column;display:flex}:where(.lb-ai-chat-message-reasoning :where(.lb-collapsible-content)>:first-child){margin-block-start:calc(.5*var(--lb-spacing))}.lb-ai-chat-message-reasoning :where(.lb-prose){color:var(--lb-foreground);opacity:.75;font-size:.875em}.lb-ai-chat-message-retrieval-query{font-weight:500}.lb-ai-chat-message-retrieval-query:before{content:"“"}.lb-ai-chat-message-retrieval-query:after{content:"”"}.lb-ai-tool{position:relative}.lb-ai-tool:after{content:"";border-radius:inherit;pointer-events:none;transition-property:box-shadow;position:absolute;inset:0}.lb-ai-tool:where(:has(.lb-ai-tool-header:focus-visible)){z-index:1}.lb-ai-tool:where(:has(.lb-ai-tool-header:focus-visible)):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-accent)0 0 0 4px}.lb-ai-tool-header{gap:calc(.25*var(--lb-spacing));align-items:center;inline-size:100%;display:flex}.lb-ai-tool-header-icon-container,.lb-ai-tool-icon{inline-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));flex:none;justify-content:center;align-items:center;display:flex}.lb-ai-tool-header-icon-container{color:var(--lb-foreground-moderate)}.lb-ai-tool-header-icon-container:where(:has(.lb-ai-tool-icon)){margin-inline-end:calc(.25*var(--lb-spacing))}.lb-ai-tool-icon{border-radius:calc(.75*var(--lb-radius));background:var(--lb-foreground-subtle);font-size:.875em}.lb-ai-tool-header-title{text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:auto;user-select:auto;overflow:hidden}.lb-ai-tool-header-status{color:var(--lb-foreground-moderate);flex:none}.lb-ai-tool:where(.lb-ai-tool\:variant-block){border-radius:var(--lb-radius);box-shadow:inset 0 0 0 1px var(--lb-foreground-subtle)}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-header){block-size:calc(calc(2*.25*var(--lb-spacing) + var(--lb-icon-size)) + var(--lb-spacing));padding-inline:calc(.5*var(--lb-spacing));color:var(--lb-foreground-secondary)}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-header-title){font-size:.9375em}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-header-title):where(:first-child){margin-inline-start:calc(.3125*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-header-status){margin-inline-start:auto;margin-inline-end:calc(.1875*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-block) :where(.lb-ai-tool-content:not(:empty)){padding:0 calc(.75*var(--lb-spacing))calc(.75*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-block):where([data-result=error]){box-shadow:inset 0 0 0 1px var(--lb-destructive-moderate)}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal):after{inset:calc(-.375*var(--lb-spacing));border-radius:calc(.75*var(--lb-radius))}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header){inline-size:fit-content;max-inline-size:100%;block-size:calc(2*.25*var(--lb-spacing) + var(--lb-icon-size));color:var(--lb-foreground-tertiary);transition-property:color;position:relative}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header):where(.lb-ai-chat-pending),.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header) :where(.lb-ai-chat-pending){color:var(--lb-foreground)}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header):before{content:"";inset:calc(-.375*var(--lb-spacing));z-index:-1;position:absolute}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header-icon-container){margin-inline-start:calc(-.125*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-header-title):where(:not(:first-child)){margin-inline-start:calc(-.0625*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal) :where(.lb-ai-tool-content:not(:empty)){padding-block-start:calc(.5*var(--lb-spacing))}.lb-ai-tool:where(.lb-ai-tool\:variant-minimal):where([data-result=cancelled]) :where(.lb-ai-tool-header){color:var(--lb-foreground-moderate)}.lb-ai-tool:where([data-result=error]):where(:has(.lb-ai-tool-header:focus-visible)):after{box-shadow:var(--lb-dynamic-background)0 0 0 2px,var(--lb-destructive)0 0 0 4px}.lb-ai-tool:where([data-result=error]) :where(.lb-ai-tool-header),.lb-ai-tool:where([data-result=error]) :where(.lb-ai-tool-header-status){color:var(--lb-destructive)}.lb-ai-tool:where([data-result=error]) :where(.lb-ai-tool-icon){background:var(--lb-destructive-subtle)}.lb-ai-tool:where([data-result=error]) :where(.lb-ai-tool-header-icon-container){color:var(--lb-destructive-secondary)}.lb-ai-tool-inspector{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-ai-tool-confirmation-footer{align-items:center;margin-block-start:calc(.75*var(--lb-spacing));display:flex}.lb-ai-tool-confirmation-actions{gap:calc(.75*var(--lb-spacing));justify-content:flex-end;align-items:center;margin-inline-start:auto;display:flex}@keyframes lb-animation-slide-down{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes lb-animation-slide-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes lb-animation-appear{0%{opacity:0}to{opacity:1}}@keyframes lb-animation-disappear{0%{opacity:1}to{opacity:0}}@keyframes lb-animation-shimmer-skeleton{0%,to{-webkit-mask-image:linear-gradient(90deg,#00000080,#000,#000,#00000080);mask-image:linear-gradient(90deg,#00000080,#000,#000,#00000080);-webkit-mask-size:400% 100%;mask-size:400% 100%}0%{-webkit-mask-position:200% 0;mask-position:200% 0}to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}@keyframes lb-animation-shimmer-text{0%,to{-webkit-mask-image:linear-gradient(90deg,#000000bf 36%,#0003 48% 52%,#000000bf 64%);mask-image:linear-gradient(90deg,#000000bf 36%,#0003 48% 52%,#000000bf 64%);-webkit-mask-size:300% 100%;mask-size:300% 100%}0%{-webkit-mask-position:100% 0;mask-position:100% 0}to{-webkit-mask-position:0 0;mask-position:0 0}}@keyframes lb-animation-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (hover:hover){.lb-comment:where(.lb-comment\:show-actions-hover) :where(.lb-comment-actions){opacity:0;transition-property:opacity;position:absolute;inset-inline-end:0}.lb-comment:where(.lb-comment\:show-actions-hover):where(:is(:hover,:focus-within,.lb-comment\:action-open)) :where(.lb-comment-actions){opacity:1;position:relative}.lb-thread:where(.lb-thread\:show-actions-hover :is(:hover,:focus-within)) :where(.lb-thread-actions){opacity:1}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-header){grid-template:"title secondary"/1fr max-content;display:grid}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-details){opacity:1;transition-property:opacity}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-actions){opacity:0;transition-property:opacity}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover):where(:is(:hover,:focus-within,.lb-inbox-notification\:action-open)) :where(.lb-inbox-notification-details){opacity:0}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover):where(:is(:hover,:focus-within,.lb-inbox-notification\:action-open)) :where(.lb-inbox-notification-actions){opacity:1}.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-details),.lb-inbox-notification:where(.lb-inbox-notification\:show-actions-hover) :where(.lb-inbox-notification-actions){grid-area:secondary;justify-self:end}}@media (prefers-reduced-motion:no-preference){@supports (interpolate-size:allow-keywords){.lb-collapsible-content{opacity:0;block-size:0;transition-duration:calc(3*var(--lb-transition-duration));interpolate-size:allow-keywords;transition-behavior:allow-discrete;transition-property:block-size,opacity,content-visibility;overflow-y:clip}.lb-collapsible-content:where([data-state=open]){opacity:1;block-size:auto;overflow-y:auto}}.lb-collapsible-chevron{transition-property:transform}.lb-collapsible:where([data-state=open]) :where(.lb-collapsible-chevron){transform:rotate(90deg)}}@media (prefers-reduced-motion){.lb-dropdown:where(:not([data-state=closed])),.lb-emoji-picker:where(:not([data-state=closed])),.lb-tooltip:where([data-state=delayed-open]:not([data-state=closed])),.lb-composer-suggestions:where(:not([data-state=closed])){animation-name:lb-animation-appear}}
package/styles.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["src/styles/src/styles/index.css","src/styles/src/styles/utils.css"],"names":[],"mappings":"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","file":"styles.css","sourcesContent":["@import \"./utils\";\n@import \"./constants\";\n\n.lb-root {\n /**\n * Basic\n */\n --lb-radius: 0.5em;\n --lb-spacing: 1em;\n --lb-accent: #17f;\n --lb-accent-foreground: #fff;\n --lb-destructive: #f45;\n --lb-destructive-foreground: #fff;\n --lb-background: #fff;\n --lb-foreground: #111;\n\n /**\n * Advanced\n */\n --lb-line-height: 1.5;\n --lb-icon-size: 20px;\n --lb-icon-weight: 1.5px;\n --lb-avatar-radius: 50%;\n --lb-button-radius: calc(0.75 * var(--lb-radius));\n --lb-transition-duration: 0.1s;\n --lb-transition-easing: cubic-bezier(0.4, 0, 0.2, 1);\n --lb-highlight-shadow: inset 0 0 0 1px rgb(0 0 0 / 10%);\n --lb-elevation-shadow: $lb-elevation-shadow;\n --lb-elevation-shadow-moderate: $lb-elevation-shadow-moderate;\n --lb-tooltip-shadow: $lb-tooltip-shadow;\n --lb-accent-contrast: 8%;\n --lb-destructive-contrast: 8%;\n --lb-foreground-contrast: 8%;\n\n /**\n * Colors\n */\n --lb-background-foreground-faint: color-mix-scale(\n var(--lb-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 50\n );\n --lb-background-foreground-subtle: color-mix-scale(\n var(--lb-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 100\n );\n --lb-background-accent-faint: color-mix-scale(\n var(--lb-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 50\n );\n --lb-background-accent-subtle: color-mix-scale(\n var(--lb-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 100\n );\n --lb-background-destructive-faint: color-mix-scale(\n var(--lb-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 50\n );\n --lb-background-destructive-subtle: color-mix-scale(\n var(--lb-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 100\n );\n --lb-accent-subtle: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 100\n );\n --lb-accent-moderate: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 400\n );\n --lb-accent-tertiary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 600\n );\n --lb-accent-secondary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 800\n );\n --lb-destructive-subtle: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 100\n );\n --lb-destructive-moderate: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 400\n );\n --lb-destructive-tertiary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 600\n );\n --lb-destructive-secondary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 800\n );\n --lb-foreground-subtle: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 100\n );\n --lb-foreground-moderate: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 400\n );\n --lb-foreground-tertiary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 600\n );\n --lb-foreground-secondary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 800\n );\n --lb-selection: color-mix(in srgb, var(--lb-accent) 40%, transparent);\n\n overflow-wrap: break-word;\n accent-color: var(--lb-accent);\n text-size-adjust: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n &,\n *,\n ::before,\n ::after {\n box-sizing: border-box;\n transition: none var(--lb-transition-duration) var(--lb-transition-easing);\n }\n\n /* Define some variables only on first .lb-root instances */\n &:where(:not(& &)) {\n --lb-dynamic-background: var(--lb-background);\n }\n}\n\n/*************************************\n * States *\n *************************************/\n\n.lb-loading,\n.lb-empty,\n.lb-error {\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.lb-loading {\n color: var(--lb-foreground-moderate);\n}\n\n.lb-empty,\n.lb-error {\n padding: var(--lb-spacing);\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n text-align: center;\n text-wrap: balance;\n}\n\n/*************************************\n * Icon *\n *************************************/\n\n.lb-icon-container,\n.lb-icon {\n inline-size: var(--lb-icon-size);\n block-size: var(--lb-icon-size);\n}\n\n.lb-icon-container {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.lb-icon {\n --lb-icon-background: var(--lb-dynamic-background);\n\n * {\n stroke-width: var(--lb-icon-weight);\n vector-effect: non-scaling-stroke;\n }\n}\n\n.lb-icon-spinner {\n transform-origin: center;\n animation: lb-animation-spin 0.75s linear infinite;\n}\n\n/*************************************\n * Button *\n *************************************/\n\n.lb-button {\n --lb-button-background: var(--lb-dynamic-background);\n\n @include button;\n\n display: flex;\n justify-content: center;\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing));\n border-radius: var(--lb-button-radius);\n background: var(--lb-button-background);\n color: var(--lb-foreground-moderate);\n\n &:where(.lb-button\\:non-disableable:disabled) {\n cursor: default;\n }\n\n &:where(:not(.lb-button\\:non-disableable):disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-tertiary);\n }\n\n &:where(\n [data-variant=\"default\"]:not(\n :is(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"],\n [aria-pressed]\n )\n )\n ) {\n background: transparent;\n }\n\n &:where([data-variant=\"primary\"]) {\n --lb-button-background: var(--lb-accent);\n\n color: var(--lb-accent-foreground);\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n --lb-button-background: var(--lb-accent-secondary);\n\n color: var(--lb-accent-foreground);\n }\n }\n\n &:where([data-variant=\"destructive\"]) {\n --lb-button-background: var(--lb-destructive);\n\n color: var(--lb-destructive-foreground);\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n --lb-button-background: var(--lb-destructive-secondary);\n\n color: var(--lb-destructive-foreground);\n }\n }\n\n &:where([data-variant=\"outline\"]) {\n box-shadow: inset 0 0 0 1px var(--lb-foreground-subtle);\n transition-property: background, color, opacity, box-shadow;\n }\n\n &:where([data-variant=\"ghost\"]) {\n background: transparent;\n }\n\n &:where(:has(.lb-button-label)) {\n gap: calc(0.175 * var(--lb-spacing));\n padding-inline: calc(0.55 * var(--lb-spacing));\n\n &:where(:has(.lb-icon-container)) {\n padding-inline-start: calc(0.4 * var(--lb-spacing));\n }\n }\n\n &:where([data-variant=\"toolbar\"]) {\n color: var(--lb-foreground-tertiary);\n\n &:where([aria-pressed=\"true\"]) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-secondary);\n\n :where(.lb-icon *) {\n stroke-width: calc(1.25 * var(--lb-icon-weight));\n }\n }\n }\n\n &:where([data-variant=\"secondary\"]) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-tertiary);\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n --lb-button-background: var(--lb-foreground);\n\n color: var(--lb-dynamic-background);\n }\n }\n\n &:where([data-size=\"large\"]) {\n padding: calc(0.5 * var(--lb-spacing));\n\n &:where(:has(.lb-button-label)) {\n gap: calc(0.35 * var(--lb-spacing));\n padding-inline: calc(0.7 * var(--lb-spacing));\n\n &:where(:has(.lb-icon-container)) {\n padding-inline-start: calc(0.6 * var(--lb-spacing));\n }\n }\n }\n\n :where(.lb-icon-container) {\n flex: none;\n }\n\n :where(.lb-icon) {\n --lb-icon-background: var(--lb-button-background);\n }\n}\n\n.lb-button-label {\n display: inline-flex;\n flex: none;\n align-items: center;\n block-size: var(--lb-icon-size);\n font-weight: 500;\n font-size: calc(0.7 * var(--lb-icon-size));\n line-height: 1;\n}\n\n/*************************************\n * Dropdown *\n *************************************/\n\n.lb-dropdown {\n min-inline-size: 160px;\n}\n\n.lb-dropdown-label {\n padding: calc(0.875 * var(--lb-spacing)) calc(0.625 * var(--lb-spacing))\n calc(0.125 * var(--lb-spacing));\n color: var(--lb-foreground-tertiary);\n font-weight: 600;\n font-size: 0.675em;\n text-transform: uppercase;\n pointer-events: none;\n user-select: none;\n\n &:where(:first-child) {\n padding-block-start: var(--lb-spacing);\n }\n}\n\n.lb-dropdown-separator {\n block-size: 1px;\n margin: $lb-elevation-padding calc(-1 * $lb-elevation-padding);\n background: var(--lb-foreground-subtle);\n}\n\n.lb-dropdown-item {\n :where(.lb-icon-container) {\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n margin-inline-end: calc(0.375 * var(--lb-spacing));\n color: var(--lb-foreground-moderate);\n transition-property: color;\n }\n}\n\n.lb-dropdown-item:where(\n :is(\n [data-highlighted]:not([data-highlighted=\"false\"]),\n [data-selected]:not([data-selected=\"false\"]),\n [data-active]:not([data-active=\"false\"])\n )\n ) {\n :where(.lb-icon-container) {\n color: var(--lb-foreground-tertiary);\n }\n}\n\n.lb-dropdown-item:where(:has(.lb-dropdown-item-accessory)) {\n :where(.lb-dropdown-item-label) {\n margin-inline-end: calc(0.375 * var(--lb-spacing));\n }\n}\n\n.lb-dropdown-item-accessory {\n margin-inline-start: auto;\n margin-inline-end: calc(-0.25 * var(--lb-spacing));\n}\n\n/* If a dropdown has at least one icon, all items should be aligned has if they had an icon */\n.lb-dropdown:where(:has(.lb-dropdown-item-icon))\n :where(.lb-dropdown-item:not(:has(.lb-dropdown-item-icon)))\n :where(.lb-dropdown-item-label) {\n margin-inline-start: calc(\n var(--lb-icon-size) + (0.375 - 0.125) * var(--lb-spacing)\n );\n}\n\n/*************************************\n * Select *\n *************************************/\n\n.lb-select-button {\n min-inline-size: 0;\n\n :where(.lb-button-label) {\n @include truncate;\n\n flex: 1;\n }\n}\n\n.lb-select-button-chevron {\n flex: none;\n margin-inline-end: calc(-0.25 * var(--lb-spacing));\n opacity: 0.75;\n}\n\n/*************************************\n * Collapsible *\n *************************************/\n\n.lb-collapsible-trigger {\n all: unset;\n position: relative;\n box-sizing: inherit;\n user-select: none;\n transition-timing-function: var(--lb-transition-easing);\n transition-duration: var(--lb-transition-duration);\n transition-property: color, background, opacity;\n -webkit-tap-highlight-color: transparent;\n\n &:where(:not([data-disabled])) {\n cursor: pointer;\n }\n}\n\n.lb-collapsible-chevron {\n inline-size: calc(0.8 * var(--lb-icon-size));\n block-size: calc(0.8 * var(--lb-icon-size));\n margin-inline-start: -1px;\n margin-block-start: 1px;\n opacity: 0.65;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n @supports (interpolate-size: allow-keywords) {\n .lb-collapsible-content {\n block-size: 0;\n opacity: 0;\n transition-duration: calc(3 * var(--lb-transition-duration));\n transition-property: block-size, opacity, content-visibility;\n\n /* overflow-block: clip; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: clip;\n\n /* interpolate-size is a new-ish property */\n /* stylelint-disable-next-line */\n interpolate-size: allow-keywords;\n\n /* transition-behavior is a new-ish property */\n /* stylelint-disable-next-line */\n transition-behavior: allow-discrete;\n\n &:where([data-state=\"open\"]) {\n block-size: auto;\n opacity: 1;\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n }\n }\n }\n\n .lb-collapsible-chevron {\n transition-property: transform;\n\n .lb-collapsible:where([data-state=\"open\"]) :where(&) {\n transform: rotate(90deg);\n }\n }\n}\n\n/* Fix default browser styles when `hidden=\"until-found\"` isn't supported. */\n.lb-collapsible-content:where([hidden]:not([hidden=\"until-found\"])) {\n display: none !important;\n}\n\n/*************************************\n * Prose *\n *************************************/\n\n.lb-prose {\n &,\n * {\n line-height: var(--lb-line-height);\n }\n\n :where(p) {\n margin-block: 0.75em;\n }\n\n :where(p, li) {\n text-wrap: pretty;\n }\n\n :where(h1, h2, h3, h4, h5, h6) {\n margin-block-start: 1.5em;\n margin-block-end: 0.375em;\n font-weight: 600;\n text-wrap: balance;\n }\n\n :where(h1) {\n font-size: 1.75em;\n line-height: calc(0.8 * var(--lb-line-height));\n }\n\n :where(h2) {\n font-size: 1.5em;\n line-height: calc(0.86 * var(--lb-line-height));\n }\n\n :where(h3) {\n font-size: 1.25em;\n line-height: calc(0.92 * var(--lb-line-height));\n }\n\n :where(h4) {\n font-size: 1.125em;\n line-height: calc(0.98 * var(--lb-line-height));\n }\n\n :where(h5) {\n font-size: 1em;\n }\n\n :where(h6) {\n font-size: 0.875em;\n }\n\n :where(hr) {\n margin-block: 1.5em;\n border: none;\n border-block-start: 1px solid var(--lb-foreground-subtle);\n }\n\n :where(ol, ul) {\n display: flex;\n flex-direction: column;\n gap: 0.25em;\n margin-block: 0.75em;\n padding-inline-start: 1.125em;\n list-style-position: outside;\n\n :where(ol, ul) {\n margin-block: 0;\n }\n }\n\n :where(ul) {\n list-style-type: disc;\n }\n\n :where(ol) {\n list-style-type: decimal;\n }\n\n :where(li) {\n margin-block: 0;\n\n > :where(ol, ul) {\n margin-block-start: 0.25em;\n }\n\n > :where(p) {\n margin-block: 0.25em;\n }\n\n > :where(p:first-child) {\n margin-block-start: 0;\n }\n\n > :where(p:last-child) {\n margin-block-end: 0;\n }\n }\n\n :where(a) {\n color: var(--lb-foreground);\n outline: none;\n font-weight: 500;\n transition-property: color, text-decoration-color;\n text-decoration-line: underline;\n text-decoration-color: var(--lb-foreground-moderate);\n text-underline-offset: 2px;\n\n &:where([href]):where(:hover, :focus-visible) {\n color: var(--lb-accent);\n text-decoration-color: var(--lb-accent-moderate);\n }\n }\n\n :where(strong) {\n font-weight: 600;\n }\n\n :where(table) {\n inline-size: 100%;\n min-inline-size: 0;\n margin-block: 1em;\n border-collapse: collapse;\n table-layout: auto;\n word-break: break-word;\n }\n\n :where(thead) {\n border-block-end: 2px solid var(--lb-foreground-subtle);\n\n :where(th) {\n vertical-align: bottom;\n }\n }\n\n :where(tbody) {\n :where(td) {\n vertical-align: baseline;\n }\n\n :where(tr:not(:last-child)) {\n border-block-end: 1px solid var(--lb-foreground-subtle);\n }\n }\n\n :where(tfoot) {\n border-block-start: 2px solid var(--lb-foreground-subtle);\n\n :where(td) {\n vertical-align: top;\n }\n }\n\n :where(th, td) {\n padding-inline: 0.75em;\n padding-block: 0.5em;\n text-align: start;\n\n &:where(:first-child) {\n padding-inline-start: 0;\n }\n\n &:where(:last-child) {\n padding-inline-end: 0;\n }\n }\n\n :where(.lb-code-block) {\n margin-block: 1em;\n }\n\n :where(blockquote) {\n position: relative;\n margin-inline: 0;\n margin-block: 0.75em;\n padding: 0;\n padding-inline-start: 1.25em;\n\n &::after {\n content: \"\";\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n inline-size: 4px;\n block-size: 100%;\n border-radius: calc(0.5 * var(--lb-radius));\n background: var(--lb-foreground-subtle);\n }\n\n &:where(& + &) {\n margin-block-start: 1em;\n }\n\n > :where(:first-child) {\n margin-block-start: 0;\n }\n\n > :where(:last-child) {\n margin-block-end: 0;\n }\n }\n\n > :where(:first-child) {\n margin-block-start: 0;\n }\n\n > :where(:last-child) {\n margin-block-end: 0;\n }\n}\n\n/*************************************\n * Composer suggestions *\n *************************************/\n\n.lb-composer-suggestions-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.lb-composer-suggestions-list-item {\n scroll-margin-block: $lb-elevation-padding;\n}\n\n/*************************************\n * Composer mention suggestions *\n *************************************/\n\n.lb-composer-mention-suggestions {\n --lb-composer-mention-suggestion-avatar-size: 1.25rem;\n}\n\n.lb-composer-mention-suggestion {\n padding: calc(0.375 * var(--lb-spacing)) calc(0.625 * var(--lb-spacing));\n}\n\n.lb-composer-mention-suggestion-avatar {\n inline-size: var(--lb-composer-mention-suggestion-avatar-size);\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n margin-inline-end: calc(0.5 * var(--lb-spacing));\n margin-block: calc(0.125 * var(--lb-spacing));\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-moderate);\n}\n\n/*************************************\n * List *\n *************************************/\n\n.lb-list {\n display: contents;\n\n :where(:first-child) {\n @include capitalize;\n }\n}\n\n/*************************************\n * Date *\n *************************************/\n\n.lb-date {\n @include capitalize;\n}\n\n/*************************************\n * Emoji *\n *************************************/\n\n.lb-emoji {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n inline-size: 1em;\n white-space: nowrap;\n}\n\n@include safari-only {\n .lb-emoji {\n transform: scale(0.825);\n will-change: transform;\n }\n}\n\n/*************************************\n * Emoji picker *\n *************************************/\n\n.lb-emoji-picker {\n --lb-emoji-picker-padding: $lb-emoji-picker-padding;\n --lb-emoji-picker-offset-padding: calc(\n $lb-emoji-picker-padding + 0.375 * var(--lb-spacing)\n );\n\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n max-inline-size: var(--frimousse-viewport-width);\n block-size: 374px;\n color: var(--lb-foreground);\n}\n\n.lb-emoji-picker-header {\n flex: none;\n border-block-end: 1px solid var(--lb-foreground-subtle);\n}\n\n.lb-emoji-picker-footer {\n display: flex;\n flex: none;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: center;\n inline-size: 100%;\n padding: calc(0.5 * var(--lb-spacing));\n border-block-start: 1px solid var(--lb-foreground-subtle);\n}\n\n.lb-emoji-picker-active-emoji {\n display: flex;\n flex: none;\n justify-content: center;\n align-items: center;\n inline-size: 1.25em;\n block-size: 1.25em;\n font-size: 1.25em;\n}\n\n.lb-emoji-picker-active-emoji-label {\n @include truncate;\n\n flex: 1;\n color: var(--lb-foreground-secondary);\n font-weight: 500;\n font-size: 0.8125em;\n}\n\n.lb-emoji-picker-active-emoji-label-placeholder {\n margin-inline-start: calc(0.5 * var(--lb-spacing));\n color: var(--lb-foreground-moderate);\n}\n\n.lb-emoji-picker-skin-tone-selector {\n display: flex;\n flex: none;\n justify-content: center;\n align-items: center;\n inline-size: calc(1.75 * var(--lb-spacing));\n block-size: calc(1.75 * var(--lb-spacing));\n margin-inline-start: auto;\n}\n\n.lb-emoji-picker-search-container {\n position: relative;\n display: flex;\n align-items: center;\n\n :where(.lb-icon) {\n position: absolute;\n inset-inline-start: var(--lb-emoji-picker-offset-padding);\n color: var(--lb-foreground-moderate);\n pointer-events: none;\n }\n}\n\n.lb-emoji-picker-search {\n all: unset;\n box-sizing: inherit;\n inline-size: 100%;\n padding: var(--lb-emoji-picker-offset-padding);\n padding-inline-start: calc(\n var(--lb-icon-size) + var(--lb-emoji-picker-offset-padding) + 0.375 *\n var(--lb-spacing)\n );\n background: transparent;\n outline: none;\n appearance: textfield;\n\n &::placeholder {\n color: var(--lb-foreground-moderate);\n }\n\n &::-webkit-search-cancel-button {\n display: none;\n }\n}\n\n.lb-emoji-picker-content {\n position: relative;\n flex: 1;\n outline: none;\n}\n\n.lb-emoji-picker-category-header {\n padding: var(--lb-emoji-picker-padding) var(--lb-emoji-picker-offset-padding);\n background: var(--lb-dynamic-background);\n}\n\n.lb-emoji-picker-category-header-title {\n color: var(--lb-foreground-tertiary);\n font-weight: 600;\n font-size: 0.675em;\n text-transform: uppercase;\n}\n\n.lb-emoji-picker-list {\n padding-block-end: var(--lb-emoji-picker-padding);\n animation: lb-animation-appear var(--lb-transition-duration)\n var(--lb-transition-easing) both;\n}\n\n.lb-emoji-picker-row {\n display: flex;\n padding-inline: var(--lb-emoji-picker-padding);\n scroll-margin-block-end: var(--lb-emoji-picker-padding);\n}\n\n.lb-emoji-picker-emoji {\n all: unset;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n box-sizing: inherit;\n aspect-ratio: 1;\n padding: calc(0.375 * var(--lb-spacing));\n border-radius: calc(var(--lb-radius) - 0.75 * $lb-emoji-picker-padding);\n text-align: center;\n}\n\n/*************************************\n * Tooltip *\n *************************************/\n\n.lb-tooltip {\n --lb-background: #222;\n --lb-foreground: #fff;\n --lb-foreground-contrast: 10%;\n --lb-dynamic-background: var(--lb-background);\n\n position: relative;\n display: flex;\n align-items: center;\n max-inline-size: 300px;\n min-block-size: calc(\n $lb-tooltip-shortcut-height + 2 * $lb-tooltip-additional-padding\n );\n padding-inline: $lb-tooltip-horizontal-padding;\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n box-shadow: var(--lb-tooltip-shadow);\n font-size: 0.75rem;\n line-height: 1;\n overflow-wrap: anywhere;\n pointer-events: none;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 1;\n border-radius: inherit;\n box-shadow: var(--lb-inset-shadow);\n pointer-events: none;\n }\n}\n\n.lb-tooltip\\:multiline {\n justify-content: center;\n padding-block: calc(\n $lb-tooltip-vertical-padding * (1 / $lb-tooltip-line-height)\n );\n line-height: $lb-tooltip-line-height;\n text-align: center;\n}\n\n.lb-tooltip-shortcut {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n justify-content: center;\n align-items: center;\n block-size: $lb-tooltip-shortcut-height;\n margin-inline-start: $lb-tooltip-horizontal-padding;\n margin-inline-end: calc(\n -1 * $lb-tooltip-horizontal-padding + $lb-tooltip-additional-padding\n );\n padding-inline: calc(0.25 * var(--lb-spacing));\n border-radius: calc(\n var(--lb-radius) - 0.625 * $lb-tooltip-additional-padding\n );\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-tertiary);\n font-family: inherit;\n line-height: 1;\n text-transform: uppercase;\n\n :where(abbr) {\n all: unset;\n }\n}\n\n/*************************************\n * Avatar *\n *************************************/\n\n.lb-avatar {\n position: relative;\n container-type: inline-size;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n aspect-ratio: 1;\n border-radius: var(--lb-avatar-radius);\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-moderate);\n\n &:where([data-loading]) {\n background: var(--lb-foreground);\n opacity: $lb-loading-opacity;\n }\n}\n\n.lb-avatar-image {\n position: absolute;\n inset: 0;\n object-fit: cover;\n inline-size: 100%;\n block-size: 100%;\n}\n\n.lb-avatar-fallback {\n font-weight: 500;\n font-size: 35cqi;\n white-space: nowrap;\n\n /**\n * Progressive enhancement: Only show the fallback when container queries are supported\n */\n @supports not (container-type: inline-size) {\n display: none;\n }\n}\n\n/*************************************\n * Name *\n *************************************/\n\n.lb-name {\n display: inline-block;\n\n &:where([data-loading]) {\n &::before {\n content: \"\\FEFF\";\n display: inline-block;\n vertical-align: middle;\n inline-size: 8ch;\n block-size: 1.75ex;\n border-radius: calc(0.5 * var(--lb-radius));\n background: currentcolor;\n opacity: $lb-loading-opacity;\n user-select: none;\n }\n }\n}\n\n/*************************************\n * Loading *\n *************************************/\n\n:is(.lb-avatar, .lb-name):where([data-loading]) {\n animation: lb-animation-shimmer-skeleton 8s linear infinite;\n}\n\n/*************************************\n * Body *\n *************************************/\n\n:is(.lb-comment-body, .lb-composer-editor) {\n color: var(--lb-foreground-secondary);\n\n &,\n * {\n line-height: var(--lb-line-height);\n }\n\n :where(p) {\n --lb-line-height-crop: calc(1lh - 1em) / -2;\n\n margin-block-start: 0.25em;\n margin-block-end: 0.25em;\n\n /* Cancel out the impact of line-height on margins/paddings */\n &:where(:first-of-type) {\n margin-block-start: calc(0.125em + var(--lb-line-height-crop));\n }\n\n /* Cancel out the impact of line-height on margins/paddings */\n &:where(:last-of-type) {\n margin-block-end: calc(0.125em + var(--lb-line-height-crop));\n }\n }\n\n :where(strong) {\n font-weight: 600;\n }\n}\n\n.lb-comment-mention,\n.lb-composer-mention {\n color: var(--lb-accent);\n box-decoration-break: clone;\n font-weight: 500;\n}\n\n:is(.lb-comment-link, .lb-composer-link) {\n color: var(--lb-foreground);\n outline: none;\n font-weight: 500;\n transition-property: color, text-decoration-color;\n text-decoration-line: underline;\n text-decoration-color: var(--lb-foreground-moderate);\n text-underline-offset: 2px;\n\n &:where([href]):where(:hover, :focus-visible) {\n color: var(--lb-accent);\n text-decoration-color: var(--lb-accent-moderate);\n }\n}\n\n.lb-comment-mention:where([data-self]),\n.lb-composer-mention {\n padding: 0.1em 0.3em;\n border-radius: calc(0.675 * var(--lb-radius));\n background: var(--lb-accent-subtle);\n}\n\n.lb-mention-symbol {\n display: contents;\n}\n\n/*************************************\n * Composer *\n *************************************/\n\n.lb-composer {\n position: relative;\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n transition-property: background;\n}\n\n.lb-composer-form {\n margin: 0;\n}\n\n.lb-composer:where(:has(.lb-composer-editor:not(:focus-visible))) {\n :where(.lb-button[data-variant=\"primary\"]) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-tertiary);\n\n &:where(:enabled:hover, :enabled:focus-visible) {\n --lb-button-background: var(--lb-accent);\n\n color: var(--lb-accent-foreground);\n }\n }\n}\n\n.lb-composer-editor {\n padding: var(--lb-spacing);\n outline: none;\n\n &:where([data-disabled]:not([data-disabled=\"false\"])) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n :where(.lb-composer-editor-container:has(.lb-composer-attachments)) & {\n padding-block-end: calc(0.25 * var(--lb-spacing));\n }\n\n :where([data-placeholder]) {\n color: var(--lb-foreground-moderate);\n }\n}\n\n.lb-composer-mention {\n @include invisible-selection;\n\n &:where([data-selected]:not([data-selected=\"false\"])) {\n background: var(--lb-accent);\n color: var(--lb-accent-foreground);\n }\n}\n\n.lb-composer-footer {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n block-size: calc($lb-button-size + var(--lb-spacing));\n margin-block-start: calc(-0.125 * var(--lb-spacing));\n padding: 0 var(--lb-spacing) var(--lb-spacing);\n}\n\n.lb-composer-actions,\n.lb-composer-editor-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n align-items: center;\n}\n\n.lb-composer-editor-actions {\n margin-inline-end: auto;\n}\n\n.lb-composer-attribution {\n color: var(--lb-foreground-moderate);\n outline: none;\n transition-property: color;\n\n &:where(:hover, :focus-visible) {\n color: var(--lb-foreground-tertiary);\n }\n\n :where(svg) {\n block-size: calc(0.75 * $lb-button-size);\n }\n}\n\n.lb-composer-attachments {\n padding-inline: var(--lb-spacing);\n padding-block-start: calc(0.75 * var(--lb-spacing));\n padding-block-end: var(--lb-spacing);\n}\n\n.lb-composer-editor-container:where([data-drop]) * {\n pointer-events: none;\n}\n\n.lb-composer-attachments-drop-area {\n position: absolute;\n inset: 0;\n display: flex;\n place-content: center;\n place-items: center;\n color: var(--lb-accent);\n\n &::before,\n &::after {\n content: \"\";\n position: absolute;\n inset: calc(0.5 * var(--lb-spacing));\n z-index: 0;\n border-radius: calc(0.75 * var(--lb-radius));\n }\n\n &::before {\n background: currentcolor;\n opacity: calc(1 * var(--lb-accent-contrast));\n }\n\n &::after {\n border: 2px dashed currentcolor;\n opacity: calc(2 * var(--lb-accent-contrast));\n }\n}\n\n.lb-composer-attachments-drop-area-label {\n position: relative;\n display: flex;\n gap: calc(0.25 * var(--lb-spacing));\n place-items: center;\n padding: calc(0.375 * var(--lb-spacing)) calc(0.5 * var(--lb-spacing));\n border-radius: calc(0.75 * var(--lb-radius));\n background: var(--lb-accent);\n color: var(--lb-accent-foreground);\n font-weight: 500;\n pointer-events: none;\n}\n\n/*************************************\n * Floating Toolbar *\n *************************************/\n\n.lb-composer-floating-toolbar {\n display: flex;\n flex-direction: row;\n gap: $lb-elevation-padding;\n padding: $lb-elevation-padding;\n user-select: none;\n\n /* Invisibly increase the buttons' hit target size */\n :where(.lb-button) {\n &::before {\n content: \"\";\n position: absolute;\n inset: calc(-1 * $lb-elevation-padding);\n z-index: -1;\n border-radius: inherit;\n }\n\n &:where(:not(:first-of-type))::before {\n inset-inline-start: calc(-0.5 * $lb-elevation-padding);\n }\n\n &:where(:not(:last-of-type))::before {\n inset-inline-end: calc(-0.5 * $lb-elevation-padding);\n }\n }\n}\n\n/*************************************\n * Comment *\n *************************************/\n\n.lb-comment {\n --lb-comment-avatar-size: $lb-button-size;\n\n position: relative;\n padding: var(--lb-spacing);\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n font-weight: 400;\n scroll-margin: var(--lb-spacing);\n\n @media (hover: hover) {\n &:where(.lb-comment\\:show-actions-hover) {\n :where(.lb-comment-actions) {\n position: absolute;\n inset-inline-end: 0;\n opacity: 0;\n transition-property: opacity;\n }\n\n &:where(:is(:hover, :focus-within, .lb-comment\\:action-open)) {\n :where(.lb-comment-actions) {\n position: relative;\n opacity: 1;\n }\n }\n }\n }\n\n &:where(:target, [data-target]) {\n --lb-dynamic-background: var(--lb-background-accent-faint);\n }\n\n &:where([data-editing]) {\n --lb-dynamic-background: var(--lb-background-foreground-faint);\n }\n}\n\n.lb-comment-header {\n position: relative;\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n block-size: var(--lb-comment-avatar-size);\n margin-block-end: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-comment-details {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n min-inline-size: 0;\n}\n\n.lb-comment-avatar {\n flex: none;\n inline-size: var(--lb-comment-avatar-size);\n}\n\n.lb-comment-details-labels {\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: baseline;\n min-inline-size: 0;\n}\n\n.lb-comment-author,\n.lb-comment-date {\n @include truncate;\n @include capitalize;\n}\n\n.lb-comment-author {\n font-weight: 500;\n}\n\n.lb-comment-date {\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n}\n\n.lb-comment-date-created,\n.lb-comment-date-edited {\n display: contents;\n}\n\n.lb-comment-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n margin-inline-start: auto;\n}\n\n.lb-comment-composer {\n margin: calc(-1 * var(--lb-spacing));\n background: unset;\n}\n\n.lb-comment-body {\n /**\n * Prevent empty lines from collapsing\n */\n :where(p span:only-child:empty)::before {\n content: \"\\FEFF\";\n user-select: none;\n }\n}\n\n.lb-comment-attachments {\n margin-block-start: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-comment-reactions {\n display: flex;\n flex-wrap: wrap;\n gap: calc(0.375 * var(--lb-spacing));\n margin-block-start: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-comment-reaction {\n gap: calc(0.375 * var(--lb-spacing));\n block-size: $lb-button-size;\n padding-inline: calc(0.575 * var(--lb-spacing));\n border-radius: $lb-radius-full;\n\n &:where([data-self]) {\n background: var(--lb-accent-subtle);\n color: var(--lb-accent-secondary);\n box-shadow: inset 0 0 0 1px var(--lb-accent-moderate);\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n color: var(--lb-accent);\n }\n }\n}\n\n.lb-comment-reaction-count {\n font-weight: 500;\n font-size: 0.75em;\n font-variant-numeric: tabular-nums;\n}\n\n.lb-comment-reaction-tooltip {\n max-inline-size: 200px;\n}\n\n.lb-comment-deleted {\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n}\n\n.lb-comment\\:indent-content {\n min-block-size: calc(var(--lb-comment-avatar-size) + 2 * var(--lb-spacing));\n\n :where(.lb-comment-header) {\n block-size: $lb-button-size;\n margin-block-end: calc(0.25 * var(--lb-spacing));\n }\n\n :where(.lb-comment-avatar) {\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n }\n\n :where(.lb-comment-details-labels) {\n margin-inline-start: calc(\n var(--lb-comment-avatar-size) + 0.75 * var(--lb-spacing)\n );\n }\n\n :where(.lb-comment-content) {\n padding-inline-start: calc(\n var(--lb-comment-avatar-size) + 0.75 * var(--lb-spacing)\n );\n }\n}\n\n/*************************************\n * Thread *\n *************************************/\n\n.lb-thread {\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n transition-property: background;\n\n @media (hover: hover) {\n &:where(.lb-thread\\:show-actions-hover :is(:hover, :focus-within)) {\n :where(.lb-thread-actions) {\n opacity: 1;\n }\n }\n }\n}\n\n.lb-thread-comments {\n position: relative;\n z-index: 0;\n display: flex;\n flex-direction: column;\n}\n\n.lb-thread-comment {\n z-index: 0;\n padding-block: calc(0.6 * var(--lb-spacing));\n transition-property: background;\n\n &:where(.lb-comment\\:indent-content) {\n min-block-size: calc(var(--lb-comment-avatar-size) + var(--lb-spacing));\n }\n\n &:where(:first-of-type, [data-editing]) {\n padding-block-start: var(--lb-spacing);\n\n &:where(.lb-comment\\:indent-content) {\n min-block-size: calc(\n var(--lb-comment-avatar-size) + 1.5 * var(--lb-spacing)\n );\n }\n }\n\n &:where(:last-of-type, [data-editing]) {\n padding-block-end: var(--lb-spacing);\n\n &:where(.lb-comment\\:indent-content) {\n min-block-size: calc(\n var(--lb-comment-avatar-size) + 1.75 * var(--lb-spacing)\n );\n }\n }\n}\n\n.lb-thread-show-more {\n position: relative;\n z-index: 1;\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n justify-content: center;\n align-items: center;\n\n &::before,\n &::after {\n content: \"\";\n z-index: 0;\n flex: 1 0 auto;\n min-inline-size: var(--lb-spacing);\n block-size: 0;\n border-block-start: 1px dashed var(--lb-foreground-subtle);\n transition-property: border;\n }\n}\n\n:where(.lb-thread-show-more + .lb-thread-new-indicator) {\n margin-block-start: calc(0.5 * var(--lb-spacing));\n}\n\n.lb-thread-new-indicator {\n position: relative;\n z-index: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n block-size: 0;\n\n &::before,\n &::after {\n content: \"\";\n z-index: 0;\n flex: 1;\n block-size: 0;\n border-block-start: 1px solid var(--lb-foreground-subtle);\n transition-property: border;\n }\n}\n\n.lb-thread-new-indicator-label {\n z-index: 1;\n display: flex;\n flex: none;\n gap: calc(0.325 * var(--lb-spacing));\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing)) var(--lb-spacing);\n color: var(--lb-accent);\n font-weight: 600;\n font-size: 0.675em;\n text-transform: uppercase;\n}\n\n.lb-thread-new-indicator-label-icon {\n inline-size: calc(0.6 * var(--lb-icon-size));\n block-size: calc(0.6 * var(--lb-icon-size));\n}\n\n.lb-thread-composer {\n position: relative;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n inline-size: 100%;\n block-size: 100%;\n border-block-start: 1px solid var(--lb-foreground-subtle);\n pointer-events: none;\n transition-property: border;\n }\n}\n\n/*************************************\n * Attachments *\n *************************************/\n\n.lb-comment-attachments,\n.lb-composer-attachments {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-attachments {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr));\n gap: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-attachment,\n.lb-attachment-delete {\n @include button;\n}\n\n.lb-attachment {\n position: relative;\n display: flex;\n inline-size: 100%;\n min-inline-size: 0;\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n box-shadow: inset 0 0 0 1px var(--lb-foreground-subtle);\n\n &:where([tabindex=\"-1\"]) {\n cursor: default;\n }\n\n &:where(:not([tabindex=\"-1\"])) {\n &:where(:hover, :focus-visible) {\n background: var(--lb-foreground-subtle);\n }\n }\n}\n\n.lb-attachment-delete {\n position: absolute;\n inset-inline-end: -0.35rem;\n inset-block-start: -0.35rem;\n z-index: 2;\n display: flex;\n justify-content: center;\n align-items: center;\n inline-size: 1.1rem;\n block-size: 1.1rem;\n border-radius: 50%;\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-secondary);\n box-shadow: 0 0 0 2px var(--lb-dynamic-background);\n opacity: 0;\n\n /* Invisibly increase the button's hit target size */\n &::before {\n content: \"\";\n position: absolute;\n inset: -4px;\n z-index: -1;\n border-radius: inherit;\n }\n\n &:where(:hover, :focus-visible) {\n background: var(--lb-foreground-secondary);\n color: var(--lb-dynamic-background);\n }\n\n :where(.lb-attachment:focus-within, .lb-attachment:hover) & {\n opacity: 1;\n }\n\n :where(.lb-icon) {\n inline-size: 0.75rem;\n }\n}\n\n.lb-attachment-details {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: calc(0.25 * var(--lb-spacing));\n justify-content: center;\n min-inline-size: 0;\n font-size: 0.875em;\n}\n\n.lb-attachment-name {\n display: flex;\n font-weight: 500;\n}\n\n.lb-attachment-name-base,\n.lb-attachment-description {\n @include truncate;\n\n transition-property: color;\n}\n\n.lb-attachment-preview {\n position: relative;\n display: flex;\n flex: none;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n background: color-mix(\n in srgb,\n transparent,\n var(--lb-foreground) var(--lb-foreground-contrast)\n );\n color: var(--lb-foreground-tertiary);\n transition-property: background, color;\n}\n\n.lb-attachment-preview-media {\n border-radius: inherit;\n transition-property: opacity;\n\n &,\n &::after,\n img,\n video {\n position: absolute;\n inset: 0;\n inline-size: 100%;\n block-size: 100%;\n }\n\n img,\n video {\n object-fit: cover;\n pointer-events: none;\n }\n\n &::after {\n content: \"\";\n border-radius: inherit;\n box-shadow: var(--lb-highlight-shadow);\n pointer-events: none;\n }\n\n &:where([data-hidden]) {\n opacity: 0;\n }\n}\n\n.lb-attachment-icon {\n flex: none;\n overflow: visible;\n color: var(--lb-foreground);\n}\n\n.lb-attachment-icon-glyph {\n fill: var(--lb-foreground-moderate);\n}\n\n.lb-attachment-icon-background {\n fill: var(--lb-background);\n}\n\n.lb-attachment-icon-fold {\n fill-opacity: calc(0.75 * var(--lb-foreground-contrast));\n}\n\n.lb-attachment-icon-shadow {\n filter: blur(6px);\n fill-opacity: var(--lb-foreground-contrast);\n}\n\n.lb-file-attachment {\n gap: calc(0.5 * var(--lb-spacing));\n padding: calc(0.5 * var(--lb-spacing));\n padding-inline-end: calc(0.65 * var(--lb-spacing));\n\n :where(.lb-attachment-preview) {\n aspect-ratio: 1;\n inline-size: 2.5rem;\n border-radius: calc(0.5 * var(--lb-radius));\n }\n\n :where(.lb-attachment-name) {\n color: var(--lb-foreground-secondary);\n }\n\n :where(.lb-attachment-description) {\n color: var(--lb-foreground-tertiary);\n }\n\n &:where(:not([tabindex=\"-1\"])) {\n &:where(:hover, :focus-visible, :focus-within) {\n :where(.lb-attachment-name) {\n color: var(--lb-foreground);\n }\n\n :where(.lb-attachment-description) {\n color: var(--lb-foreground-secondary);\n }\n }\n }\n}\n\n.lb-media-attachment {\n aspect-ratio: 16 / 10;\n\n :where(.lb-attachment-preview) {\n position: absolute;\n inset: 0;\n border-radius: inherit;\n }\n\n :where(.lb-attachment-details) {\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n padding: calc(0.75 * var(--lb-spacing));\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n background: linear-gradient(to bottom, transparent, rgba(0 0 0 / 80%));\n text-shadow: 0 0 2px rgba(0 0 0 / 40%);\n opacity: 0;\n transition-property: opacity;\n }\n\n :where(.lb-attachment-name) {\n color: #fff;\n }\n\n :where(.lb-attachment-description) {\n color: rgba(255 255 255 / 80%);\n }\n\n &:where(:not([tabindex=\"-1\"])) {\n &:where(:hover, :focus-visible, :focus-within) {\n :where(.lb-attachment-details) {\n opacity: 1;\n }\n }\n }\n}\n\n.lb-attachment:where([data-error]) {\n :where(.lb-attachment-preview) {\n background: var(--lb-destructive);\n color: var(--lb-destructive-foreground);\n }\n}\n\n/*************************************\n * Inbox Notification *\n *************************************/\n\n.lb-inbox-notification {\n --lb-inbox-notification-aside-size: 36px;\n\n position: relative;\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n overflow: hidden;\n padding: var(--lb-spacing);\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n font-weight: 400;\n text-decoration: inherit;\n transition-property: background;\n\n /* Highlight missing notifications during development */\n &:where([data-missing]) {\n --lb-accent: var(--lb-destructive) !important;\n --lb-accent-foreground: var(--lb-destructive-foreground) !important;\n --lb-accent-contrast: var(--lb-destructive-contrast) !important;\n --lb-dynamic-background: var(--lb-background-accent-faint);\n }\n\n &:where([data-unread]) {\n --lb-dynamic-background: var(--lb-background-accent-faint);\n }\n\n &:where([href]) {\n cursor: pointer;\n\n &:where(:hover, :focus-visible, :focus-within) {\n --lb-dynamic-background: var(--lb-background-foreground-faint);\n }\n\n &:where([data-unread]) {\n &:where(:hover, :focus-visible, :focus-within) {\n --lb-dynamic-background: var(--lb-background-accent-subtle);\n }\n }\n }\n\n @media (hover: hover) {\n &:where(.lb-inbox-notification\\:show-actions-hover) {\n :where(.lb-inbox-notification-header) {\n display: grid;\n grid-template: \"title secondary\" / 1fr max-content;\n }\n\n :where(.lb-inbox-notification-details) {\n opacity: 1;\n transition-property: opacity;\n }\n\n :where(.lb-inbox-notification-actions) {\n opacity: 0;\n transition-property: opacity;\n }\n\n &:where(:is(:hover, :focus-within, .lb-inbox-notification\\:action-open)) {\n :where(.lb-inbox-notification-details) {\n opacity: 0;\n }\n\n :where(.lb-inbox-notification-actions) {\n opacity: 1;\n }\n }\n\n :where(.lb-inbox-notification-details),\n :where(.lb-inbox-notification-actions) {\n grid-area: secondary;\n justify-self: end;\n }\n }\n }\n}\n\n.lb-inbox-notification-aside {\n flex: none;\n inline-size: var(--lb-inbox-notification-aside-size);\n}\n\n.lb-inbox-notification-icon {\n display: flex;\n justify-content: center;\n place-items: center;\n aspect-ratio: 1;\n border-radius: 50%;\n background: var(--lb-foreground-subtle);\n\n .lb-inbox-notification:where([data-missing]) :where(&) {\n background: var(--lb-accent-subtle);\n color: var(--lb-accent);\n }\n}\n\n.lb-inbox-notification-content {\n flex: 1;\n}\n\n.lb-inbox-notification-content,\n.lb-inbox-notification-body {\n min-inline-size: 0;\n max-inline-size: 100%;\n}\n\n.lb-inbox-notification-header {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n margin-block-start: calc(0.25 * var(--lb-spacing));\n margin-block-end: calc(0.5 * var(--lb-spacing));\n}\n\n.lb-inbox-notification-title {\n min-block-size: $lb-button-size;\n\n :where(.lb-inbox-notification:not([data-inspector])) & {\n @include capitalize;\n }\n\n :where(strong, .lb-list, .lb-name) {\n font-weight: 500;\n }\n}\n\n.lb-inbox-notification-details {\n flex: none;\n align-self: start;\n min-inline-size: 0;\n block-size: $lb-button-size;\n margin-inline-start: auto;\n}\n\n.lb-inbox-notification-details-labels {\n display: flex;\n align-items: baseline;\n min-inline-size: 0;\n\n &::before {\n content: \"\\FEFF\";\n }\n}\n\n.lb-inbox-notification-actions {\n display: flex;\n grid-area: actions;\n gap: calc(0.125 * var(--lb-spacing));\n align-self: start;\n}\n\n.lb-inbox-notification-comments {\n display: flex;\n flex-direction: column;\n gap: var(--lb-spacing);\n}\n\n.lb-inbox-notification-comment {\n padding: 0;\n background: transparent;\n\n :where(.lb-comment-header) {\n block-size: auto;\n color: var(--lb-foreground-tertiary);\n font-size: 0.875rem;\n }\n\n :where(.lb-comment-reaction),\n :where(.lb-comment-attachment) {\n pointer-events: none;\n }\n}\n\n.lb-inbox-notification-date {\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n}\n\n.lb-inbox-notification-unread-indicator {\n align-self: center;\n inline-size: 10px;\n block-size: 10px;\n margin-inline-start: calc(0.5 * var(--lb-spacing));\n border-radius: 50%;\n background: var(--lb-accent);\n}\n\n/*************************************\n * History Version Summary *\n *************************************/\n\n.lb-history-version-summary {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: calc(0.25 * var(--lb-spacing));\n justify-content: center;\n inline-size: 100%;\n min-inline-size: 0;\n padding: var(--lb-spacing);\n background: var(--lb-dynamic-background);\n transition-property: background;\n\n &:where(\n :hover,\n :focus-visible,\n :focus-within,\n [data-selected]:not([data-selected=\"false\"])\n ) {\n --lb-dynamic-background: var(--lb-background-foreground-faint);\n }\n}\n\n.lb-history-version-summary-date,\n.lb-history-version-summary-authors {\n @include truncate;\n @include capitalize;\n\n min-inline-size: 0;\n max-inline-size: 100%;\n}\n\n.lb-history-version-summary-date {\n color: var(--lb-foreground-secondary);\n font-weight: 500;\n}\n\n.lb-history-version-summary-authors {\n color: var(--lb-foreground-tertiary);\n}\n\n/*************************************\n * History Version Previe *\n *************************************/\n\n.lb-history-version-preview {\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--lb-dynamic-background);\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n}\n\n.lb-history-version-preview-content {\n flex: 1 0 auto;\n padding: var(--lb-spacing);\n}\n\n.lb-history-version-preview-footer {\n position: sticky;\n inset-block-end: 0;\n display: flex;\n flex: none;\n gap: var(--lb-spacing);\n align-items: center;\n margin-block-start: auto;\n padding: var(--lb-spacing);\n border-block-start: 1px solid var(--lb-foreground-subtle);\n background: var(--lb-dynamic-background);\n}\n\n.lb-history-version-preview-authors {\n @include truncate;\n\n flex: 1 1 auto;\n min-inline-size: 0;\n color: var(--lb-foreground-tertiary);\n}\n\n.lb-history-version-preview-actions {\n display: flex;\n flex: none;\n gap: calc(0.35 * var(--lb-spacing));\n align-items: center;\n margin-inline-start: auto;\n}\n\n/*************************************\n * Lists *\n *************************************/\n\n.lb-inbox-notification-list,\n.lb-history-version-summary-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.lb-inbox-notification-list-item,\n.lb-history-version-summary-list-item {\n &:where(:not(:last-of-type)) {\n border-block-end: 1px solid var(--lb-foreground-subtle);\n }\n}\n\n/*************************************\n * Inline code *\n *************************************/\n\n:is(.lb-root) {\n :where(code:not(pre > code)) {\n padding: 0.2em 0.4em;\n border-radius: calc(0.75 * var(--lb-radius));\n background: var(--lb-foreground-subtle);\n box-decoration-break: clone;\n font-size: 85%;\n line-height: 1;\n }\n\n /**\n * Merge adjacent inline code elements\n */\n :where(span:has(code) + span code) {\n padding-inline-start: 0;\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n }\n\n :where(span:has(code):has(+ span code) code) {\n padding-inline-end: 0;\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n }\n}\n\n/* 0,0,0 specificity to inherit any styles applied to `code` elements */\n:where(:is(.lb-root) code) {\n font-family: ui-monospace, Menlo, Monaco, \"Roboto Mono\", \"Cascadia Code\",\n \"Source Code Pro\", Consolas, \"DejaVu Sans Mono\", monospace;\n}\n\n/*************************************\n * Elevation *\n *************************************/\n\n.lb-elevation {\n --lb-dynamic-background: var(--lb-background);\n\n position: relative;\n overflow: hidden;\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n box-shadow: var(--lb-elevation-shadow);\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 1;\n border-radius: inherit;\n box-shadow: var(--lb-inset-shadow);\n pointer-events: none;\n }\n\n &:where(.lb-elevation-moderate) {\n box-shadow: var(--lb-elevation-shadow-moderate);\n }\n}\n\n/*************************************\n * Elevation lists *\n *************************************/\n\n.lb-dropdown,\n.lb-composer-suggestions {\n padding: $lb-elevation-padding;\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n\n &:where([data-hidden]) {\n opacity: 0;\n }\n}\n\n.lb-dropdown-item,\n.lb-composer-suggestions-list-item {\n display: flex;\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing)) calc(0.5 * var(--lb-spacing));\n font-size: 0.875rem;\n}\n\n.lb-dropdown-item,\n.lb-composer-suggestions-list-item,\n.lb-emoji-picker-emoji {\n border-radius: calc(var(--lb-radius) - 0.75 * $lb-elevation-padding);\n color: var(--lb-foreground-secondary);\n outline: none;\n cursor: pointer;\n user-select: none;\n transition-property: background, color, opacity;\n}\n\n:is(\n .lb-dropdown-item,\n .lb-composer-suggestions-list-item,\n .lb-emoji-picker-emoji\n) {\n &:where(\n [data-highlighted]:not([data-highlighted=\"false\"]),\n [data-selected]:not([data-selected=\"false\"]),\n [data-active]:not([data-active=\"false\"])\n ) {\n background: var(--lb-foreground-subtle);\n transition-duration: calc(var(--lb-transition-duration) / 2);\n }\n\n &:where(:disabled, [data-disabled]:not([data-disabled=\"false\"])) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n/*************************************\n * Floating animations *\n *************************************/\n\n.lb-dropdown,\n.lb-composer-suggestions,\n.lb-composer-floating-toolbar,\n.lb-tooltip,\n.lb-emoji-picker {\n animation-duration: var(--lb-transition-duration);\n animation-timing-function: var(--lb-transition-easing);\n will-change: transform, opacity;\n}\n\n:is(\n .lb-dropdown,\n .lb-emoji-picker,\n .lb-tooltip:where([data-state=\"delayed-open\"]),\n .lb-composer-suggestions,\n .lb-composer-floating-toolbar\n) {\n &:where([data-side=\"top\"]) {\n animation-name: lb-animation-slide-up;\n }\n\n &:where([data-side=\"bottom\"]) {\n animation-name: lb-animation-slide-down;\n }\n}\n\n:is(\n .lb-dropdown,\n .lb-emoji-picker,\n .lb-tooltip,\n .lb-composer-suggestions,\n .lb-composer-floating-toolbar\n) {\n &:where([data-state=\"closed\"]) {\n animation-name: lb-animation-disappear;\n }\n}\n\n@media (prefers-reduced-motion) {\n .lb-dropdown:where(:not([data-state=\"closed\"])),\n .lb-emoji-picker:where(:not([data-state=\"closed\"])),\n .lb-tooltip:where([data-state=\"delayed-open\"]:not([data-state=\"closed\"])),\n .lb-composer-suggestions:where(:not([data-state=\"closed\"])) {\n animation-name: lb-animation-appear;\n }\n}\n\n/*************************************\n * Code block *\n *************************************/\n\n.lb-code-block {\n position: relative;\n min-inline-size: 0;\n border: 1px solid var(--lb-foreground-subtle);\n border-radius: var(--lb-radius);\n isolation: isolate;\n\n :where(.lb-code-block-header) {\n display: flex;\n align-items: center;\n padding: calc(0.5 * var(--lb-spacing));\n }\n\n :where(.lb-code-block-title) {\n margin-inline-start: calc(0.5 * var(--lb-spacing));\n color: var(--lb-foreground-tertiary);\n font-weight: 600;\n font-size: 0.675em;\n text-transform: uppercase;\n }\n\n :where(.lb-code-block-header-actions) {\n margin-inline-start: auto;\n }\n\n :where(.lb-code-block-content) {\n min-inline-size: 0;\n margin: 0;\n padding: 0 var(--lb-spacing) calc(0.875 * var(--lb-spacing));\n font-size: 85%;\n line-height: var(--lb-line-height);\n\n /* overflow-inline: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-x: auto;\n }\n}\n\n/*************************************\n * AI Composer *\n *************************************/\n\n.lb-ai-composer {\n position: relative;\n inline-size: 100%;\n color: var(--lb-foreground);\n}\n\n.lb-ai-composer-form:where(:has(.lb-ai-composer-editor:not(:focus-visible))) {\n :where(.lb-button[data-variant=\"primary\"]) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-tertiary);\n\n &:where(:enabled:hover, :enabled:focus-visible) {\n --lb-button-background: var(--lb-accent);\n\n color: var(--lb-accent-foreground);\n }\n }\n}\n\n.lb-ai-composer-editor {\n max-block-size: 15rem;\n padding: var(--lb-spacing) var(--lb-spacing) 0;\n color: var(--lb-foreground-secondary);\n outline: none;\n resize: none;\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n\n &,\n * {\n line-height: var(--lb-line-height);\n }\n\n :where(p) {\n --lb-line-height-crop: calc(1lh - 1em) / -2;\n\n margin-block-start: 0.25em;\n margin-block-end: 0.25em;\n\n /* Cancel out the impact of line-height on margins/paddings */\n &:where(:first-of-type) {\n margin-block-start: calc(0.125em + var(--lb-line-height-crop));\n }\n\n /* Cancel out the impact of line-height on margins/paddings */\n &:where(:last-of-type) {\n margin-block-end: calc(0.125em + var(--lb-line-height-crop));\n }\n }\n\n &:where([data-disabled]:not([data-disabled=\"false\"])) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n :where([data-placeholder]) {\n color: var(--lb-foreground-moderate);\n }\n}\n\n.lb-ai-composer-footer {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n margin-block-start: calc(-0.125 * var(--lb-spacing));\n padding: var(--lb-spacing);\n}\n\n.lb-ai-composer-actions,\n.lb-ai-composer-editor-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n align-items: center;\n}\n\n.lb-ai-composer-editor-actions {\n margin-inline-end: auto;\n}\n\n/*************************************\n * Chat message *\n *************************************/\n\n.lb-ai-chat-message {\n display: flex;\n flex-direction: column;\n gap: var(--lb-spacing);\n color: var(--lb-foreground);\n scroll-margin-block-start: calc(1.5 * var(--lb-spacing));\n}\n\n.lb-ai-chat-user-message {\n :where(.lb-ai-chat-message-content) {\n --lb-dynamic-background: var(--lb-background-foreground-faint);\n --lb-ai-chat-message-content-horizontal-padding: calc(\n 0.9375 * var(--lb-spacing)\n );\n --lb-ai-chat-message-content-vertical-padding: calc(\n 0.5625 * var(--lb-spacing)\n );\n\n min-block-size: calc(\n 1lh + 2 * var(--lb-ai-chat-message-content-vertical-padding)\n );\n padding: var(--lb-ai-chat-message-content-vertical-padding)\n var(--lb-ai-chat-message-content-horizontal-padding);\n\n /**\n * Exactly half the height (line-height + padding) of a one line bubble,\n * so that it doesn't change when the text wraps and the bubble becomes taller.\n */\n border-radius: calc(\n (1lh + 2 * var(--lb-ai-chat-message-content-vertical-padding)) / 2\n );\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n line-height: var(--lb-line-height);\n\n /**\n * Rich messages get more padding than plain text ones.\n */\n &:where(\n :has(h1, h2, h3, h4, h5, h6, ul, ol, blockquote, table, .lb-code-block)\n ) {\n --lb-ai-chat-message-content-horizontal-padding: calc(\n 1.375 * var(--lb-spacing)\n );\n --lb-ai-chat-message-content-vertical-padding: calc(\n 1.125 * var(--lb-spacing)\n );\n }\n\n :where(.lb-code-block) {\n --lb-dynamic-background: var(--lb-background-foreground-subtle);\n\n border: none;\n background: var(--lb-dynamic-background);\n }\n }\n}\n\n.lb-ai-chat-message-deleted {\n position: relative;\n align-items: center;\n inline-size: 100%;\n color: var(--lb-foreground-moderate);\n font-size: 0.875em;\n text-wrap: pretty;\n}\n\n.lb-ai-chat-message-error {\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: flex-start;\n inline-size: 100%;\n color: var(--lb-destructive);\n font-size: 0.875em;\n line-height: var(--lb-line-height);\n text-wrap: pretty;\n word-break: break-word;\n\n :where(.lb-icon-container) {\n block-size: 1lh;\n color: var(--lb-destructive-secondary);\n }\n\n :where(code:not(pre > code)) {\n background: var(--lb-destructive-subtle);\n }\n}\n\n.lb-ai-chat-message-content {\n inline-size: 100%;\n white-space: break-spaces;\n\n &:where(:empty) {\n display: contents;\n }\n\n > :where(.lb-ai-chat-message-text) {\n margin-block: var(--lb-spacing);\n }\n\n > :where(.lb-ai-chat-message-tool-invocation) {\n margin-block: var(--lb-spacing);\n }\n\n > :where(:first-child) {\n margin-block-start: 0;\n }\n\n > :where(:last-child) {\n margin-block-end: 0;\n }\n}\n\n.lb-ai-chat-messages {\n display: flex;\n flex-direction: column;\n gap: calc(1.5 * var(--lb-spacing));\n inline-size: 100%;\n max-inline-size: min(\n calc(var(--lb-ai-chat-container-width) - var(--lb-spacing)),\n calc(100% - 3 * var(--lb-spacing))\n );\n margin-inline: auto;\n padding-block-start: calc(1.5 * var(--lb-spacing));\n padding-block-end: calc(3 * var(--lb-spacing));\n\n :where(.lb-ai-chat-user-message) {\n max-inline-size: 80%;\n margin-inline-start: auto;\n }\n}\n\n.lb-ai-chat-footer {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n inline-size: 100%;\n}\n\n.lb-ai-chat {\n --lb-ai-chat-container-width: 100%;\n\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n background: var(--lb-background);\n isolation: isolate;\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n\n :where(.lb-ai-chat-footer) {\n position: sticky;\n inset-block-end: 0;\n z-index: 1;\n margin-block-start: auto;\n }\n\n :where(.lb-ai-chat-composer) {\n margin-inline: auto;\n }\n}\n\n.lb-ai-chat:where(.lb-ai-chat\\:layout-compact) {\n :where(.lb-ai-chat-footer) {\n background: var(--lb-dynamic-background);\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-block-start: 1px solid var(--lb-foreground-subtle);\n pointer-events: none;\n }\n }\n\n :where(.lb-ai-chat-composer) {\n max-inline-size: min(\n 100%,\n calc(var(--lb-ai-chat-container-width) + var(--lb-spacing))\n );\n }\n}\n\n.lb-ai-chat:where(.lb-ai-chat\\:layout-inset) {\n :where(.lb-ai-chat-footer) {\n padding: var(--lb-spacing);\n padding-block-start: 0;\n\n &::before {\n content: \"\";\n position: absolute;\n inset: 0;\n inset-block-start: calc(-3 * var(--lb-spacing));\n background: linear-gradient(\n to bottom,\n transparent 0%,\n var(--lb-background) calc(3.5 * var(--lb-spacing))\n );\n pointer-events: none;\n }\n }\n\n :where(.lb-ai-chat-composer) {\n max-inline-size: var(--lb-ai-chat-container-width);\n border-radius: calc(2 * var(--lb-radius));\n }\n}\n\n.lb-ai-chat-content {\n position: relative;\n flex: 1 0 auto;\n}\n\n.lb-ai-chat-footer-actions {\n position: absolute;\n inset-inline: 0;\n inset-block-start: calc(-1 * var(--lb-spacing));\n display: flex;\n justify-content: center;\n pointer-events: none;\n transform: translateY(-100%);\n}\n\n.lb-ai-chat-scroll-indicator {\n border-radius: $lb-radius-full;\n color: var(--lb-foreground-moderate);\n opacity: 0;\n pointer-events: none;\n transition-property: transform, opacity, background;\n transform: scale(0.8);\n transform-origin: bottom;\n\n &:where([data-visible]) {\n opacity: 1;\n pointer-events: all;\n transform: scale(1);\n }\n}\n\n.lb-ai-chat-scroll-indicator-button {\n @include button-base;\n\n padding: calc(0.375 * var(--lb-spacing));\n border-radius: $lb-radius-full;\n color: var(--lb-foreground-moderate);\n transition-property: opacity, color;\n\n &:where(:hover, :focus-visible) {\n color: var(--lb-foreground-secondary);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n transition-property: box-shadow;\n }\n\n &:where(:focus-visible)::after {\n box-shadow: inset var(--lb-accent) 0 0 0 2px;\n }\n}\n\n.lb-ai-chat-pending {\n user-select: none;\n animation: lb-animation-shimmer-text 2s cubic-bezier(0.1, 0, 0.9, 1) infinite;\n}\n\n.lb-ai-chat-message-thinking,\n.lb-ai-chat-message-retrieval,\n.lb-ai-chat-message-reasoning {\n margin-block-end: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-chat-message-thinking,\n.lb-ai-chat-message-retrieval {\n inline-size: fit-content;\n max-inline-size: 100%;\n color: var(--lb-foreground-tertiary);\n transition-property: color;\n\n &:where(.lb-ai-chat-pending) {\n color: var(--lb-foreground);\n }\n}\n\n.lb-ai-chat-message-reasoning {\n position: relative;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: calc(-0.375 * var(--lb-spacing));\n border-radius: calc(0.75 * var(--lb-radius));\n pointer-events: none;\n transition-property: box-shadow;\n }\n\n &:where(:has(.lb-collapsible-trigger:focus-visible)) {\n z-index: 1;\n\n &::after {\n box-shadow:\n var(--lb-dynamic-background) 0 0 0 2px,\n var(--lb-accent) 0 0 0 4px;\n }\n }\n\n :where(.lb-collapsible-trigger) {\n display: flex;\n gap: calc(0.25 * var(--lb-spacing));\n align-items: center;\n color: var(--lb-foreground-tertiary);\n transition-property: color;\n\n &:where(.lb-ai-chat-pending) {\n color: var(--lb-foreground);\n }\n }\n\n :where(.lb-collapsible-content) {\n display: flex;\n flex-direction: column;\n gap: calc(0.5 * var(--lb-spacing));\n line-height: var(--lb-line-height);\n\n :where(& > *:first-child) {\n margin-block-start: calc(0.5 * var(--lb-spacing));\n }\n }\n\n :where(.lb-prose) {\n color: var(--lb-foreground);\n font-size: 0.875em;\n opacity: 0.75;\n }\n}\n\n.lb-ai-chat-message-retrieval-query {\n font-weight: 500;\n\n &::before {\n content: \"“\";\n }\n\n &::after {\n content: \"”\";\n }\n}\n\n.lb-ai-tool {\n position: relative;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n transition-property: box-shadow;\n }\n\n &:where(:has(.lb-ai-tool-header:focus-visible)) {\n z-index: 1;\n\n &::after {\n box-shadow:\n var(--lb-dynamic-background) 0 0 0 2px,\n var(--lb-accent) 0 0 0 4px;\n }\n }\n}\n\n.lb-ai-tool-header {\n display: flex;\n gap: calc(0.25 * var(--lb-spacing));\n align-items: center;\n inline-size: 100%;\n}\n\n.lb-ai-tool-header-icon-container,\n.lb-ai-tool-icon {\n display: flex;\n flex: none;\n justify-content: center;\n align-items: center;\n inline-size: $lb-button-size;\n block-size: $lb-button-size;\n}\n\n.lb-ai-tool-header-icon-container {\n color: var(--lb-foreground-moderate);\n\n &:where(:has(.lb-ai-tool-icon)) {\n margin-inline-end: calc(0.25 * var(--lb-spacing));\n }\n}\n\n.lb-ai-tool-icon {\n border-radius: calc(0.75 * var(--lb-radius));\n background: var(--lb-foreground-subtle);\n font-size: 0.875em;\n}\n\n.lb-ai-tool-header-title {\n @include truncate;\n}\n\n.lb-ai-tool-header-status {\n flex: none;\n color: var(--lb-foreground-moderate);\n}\n\n.lb-ai-tool:where(.lb-ai-tool\\:variant-block) {\n border-radius: var(--lb-radius);\n box-shadow: inset 0 0 0 1px var(--lb-foreground-subtle);\n\n :where(.lb-ai-tool-header) {\n block-size: calc($lb-button-size + var(--lb-spacing));\n padding-inline: calc(0.5 * var(--lb-spacing));\n color: var(--lb-foreground-secondary);\n }\n\n :where(.lb-ai-tool-header-title) {\n font-size: 0.9375em;\n\n &:where(:first-child) {\n margin-inline-start: calc(0.3125 * var(--lb-spacing));\n }\n }\n\n :where(.lb-ai-tool-header-status) {\n margin-inline-start: auto;\n margin-inline-end: calc(0.1875 * var(--lb-spacing));\n }\n\n :where(.lb-ai-tool-content:not(:empty)) {\n padding: 0 calc(0.75 * var(--lb-spacing)) calc(0.75 * var(--lb-spacing));\n }\n\n &:where([data-result=\"error\"]) {\n box-shadow: inset 0 0 0 1px var(--lb-destructive-moderate);\n }\n}\n\n.lb-ai-tool:where(.lb-ai-tool\\:variant-minimal) {\n &::after {\n inset: calc(-0.375 * var(--lb-spacing));\n border-radius: calc(0.75 * var(--lb-radius));\n }\n\n :where(.lb-ai-tool-header) {\n position: relative;\n inline-size: fit-content;\n max-inline-size: 100%;\n block-size: $lb-button-size;\n color: var(--lb-foreground-tertiary);\n transition-property: color;\n\n &:where(.lb-ai-chat-pending),\n :where(.lb-ai-chat-pending) {\n color: var(--lb-foreground);\n }\n\n /* Invisibly increase the header's hit target size */\n &::before {\n content: \"\";\n position: absolute;\n inset: calc(-0.375 * var(--lb-spacing));\n z-index: -1;\n }\n }\n\n :where(.lb-ai-tool-header-icon-container) {\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n }\n\n :where(.lb-ai-tool-header-title) {\n &:where(:not(:first-child)) {\n margin-inline-start: calc(-0.0625 * var(--lb-spacing));\n }\n }\n\n :where(.lb-ai-tool-content:not(:empty)) {\n padding-block-start: calc(0.5 * var(--lb-spacing));\n }\n\n &:where([data-result=\"cancelled\"]) {\n :where(.lb-ai-tool-header) {\n color: var(--lb-foreground-moderate);\n }\n }\n}\n\n.lb-ai-tool:where([data-result=\"error\"]) {\n &:where(:has(.lb-ai-tool-header:focus-visible)) {\n &::after {\n box-shadow:\n var(--lb-dynamic-background) 0 0 0 2px,\n var(--lb-destructive) 0 0 0 4px;\n }\n }\n\n :where(.lb-ai-tool-header),\n :where(.lb-ai-tool-header-status) {\n color: var(--lb-destructive);\n }\n\n :where(.lb-ai-tool-icon) {\n background: var(--lb-destructive-subtle);\n }\n\n :where(.lb-ai-tool-header-icon-container) {\n color: var(--lb-destructive-secondary);\n }\n}\n\n.lb-ai-tool-inspector {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-tool-confirmation-footer {\n display: flex;\n align-items: center;\n margin-block-start: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-tool-confirmation-actions {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n justify-content: flex-end;\n align-items: center;\n margin-inline-start: auto;\n}\n\n/*************************************\n * Animations *\n *************************************/\n\n@keyframes lb-animation-slide-down {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes lb-animation-slide-up {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes lb-animation-appear {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes lb-animation-disappear {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes lb-animation-shimmer-skeleton {\n from,\n to {\n mask-image: linear-gradient(\n 90deg,\n rgb(0 0 0 / 50%),\n #000,\n #000,\n rgb(0 0 0 / 50%)\n );\n mask-size: 400% 100%;\n }\n\n from {\n mask-position: 200% 0;\n }\n\n to {\n mask-position: -200% 0;\n }\n}\n\n@keyframes lb-animation-shimmer-text {\n from,\n to {\n mask-image: linear-gradient(\n 90deg,\n rgb(0 0 0 / 75%) 36%,\n rgb(0 0 0 / 20%) 48%,\n rgb(0 0 0 / 20%) 52%,\n rgb(0 0 0 / 75%) 64%\n );\n mask-size: 300% 100%;\n }\n\n from {\n mask-position: 100% 0;\n }\n\n to {\n mask-position: 0% 0;\n }\n}\n\n@keyframes lb-animation-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n","/* Because of `all: unset`, we have to re-define some of these values. */\n@mixin button-base {\n all: unset;\n position: relative;\n box-sizing: inherit;\n outline: none;\n cursor: pointer;\n user-select: none;\n transition-timing-function: var(--lb-transition-easing);\n transition-duration: var(--lb-transition-duration);\n -webkit-tap-highlight-color: transparent;\n}\n\n@mixin button {\n @include button-base;\n\n transition-property: background, color, opacity;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n transition-property: box-shadow;\n }\n\n &:where(:focus-visible) {\n z-index: 1;\n\n &::after {\n box-shadow:\n var(--lb-dynamic-background) 0 0 0 2px,\n var(--lb-accent) 0 0 0 4px;\n }\n }\n}\n\n@mixin truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n@mixin capitalize {\n &::first-letter {\n text-transform: capitalize;\n }\n}\n\n@mixin invisible-selection {\n &::selection,\n *::selection {\n background: transparent;\n }\n}\n\n@mixin invisible-scrollbar {\n & {\n -ms-overflow-style: none;\n scrollbar-width: none;\n }\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n@mixin firefox-only {\n @supports (-moz-appearance: none) {\n @content;\n }\n}\n\n@mixin not-firefox {\n @supports not (-moz-appearance: none) {\n @content;\n }\n}\n\n@mixin safari-only {\n @supports (background: -webkit-named-image(i)) {\n @content;\n }\n}\n\n@mixin not-safari {\n @supports not (background: -webkit-named-image(i)) {\n @content;\n }\n}\n"]}
1
+ {"version":3,"sources":["src/styles/src/styles/index.css","src/styles/src/styles/utils.css"],"names":[],"mappings":"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","file":"styles.css","sourcesContent":["@import \"./utils\";\n@import \"./constants\";\n\n.lb-root {\n /**\n * Basic\n */\n --lb-radius: 0.5em;\n --lb-spacing: 1em;\n --lb-accent: #17f;\n --lb-accent-foreground: #fff;\n --lb-destructive: #f45;\n --lb-destructive-foreground: #fff;\n --lb-background: #fff;\n --lb-foreground: #111;\n\n /**\n * Advanced\n */\n --lb-line-height: 1.5;\n --lb-icon-size: 20px;\n --lb-icon-weight: 1.5px;\n --lb-avatar-radius: 50%;\n --lb-button-radius: calc(0.75 * var(--lb-radius));\n --lb-transition-duration: 0.1s;\n --lb-transition-easing: cubic-bezier(0.4, 0, 0.2, 1);\n --lb-highlight-shadow: inset 0 0 0 1px rgb(0 0 0 / 10%);\n --lb-elevation-shadow: $lb-elevation-shadow;\n --lb-elevation-shadow-moderate: $lb-elevation-shadow-moderate;\n --lb-tooltip-shadow: $lb-tooltip-shadow;\n --lb-accent-contrast: 8%;\n --lb-destructive-contrast: 8%;\n --lb-foreground-contrast: 8%;\n\n /**\n * Colors\n */\n --lb-background-foreground-faint: color-mix-scale(\n var(--lb-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 50\n );\n --lb-background-foreground-subtle: color-mix-scale(\n var(--lb-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 100\n );\n --lb-background-accent-faint: color-mix-scale(\n var(--lb-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 50\n );\n --lb-background-accent-subtle: color-mix-scale(\n var(--lb-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 100\n );\n --lb-background-destructive-faint: color-mix-scale(\n var(--lb-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 50\n );\n --lb-background-destructive-subtle: color-mix-scale(\n var(--lb-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 100\n );\n --lb-accent-subtle: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 100\n );\n --lb-accent-moderate: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 400\n );\n --lb-accent-tertiary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 600\n );\n --lb-accent-secondary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-accent),\n var(--lb-accent-contrast),\n 800\n );\n --lb-destructive-subtle: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 100\n );\n --lb-destructive-moderate: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 400\n );\n --lb-destructive-tertiary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 600\n );\n --lb-destructive-secondary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-destructive),\n var(--lb-destructive-contrast),\n 800\n );\n --lb-foreground-subtle: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 100\n );\n --lb-foreground-moderate: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 400\n );\n --lb-foreground-tertiary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 600\n );\n --lb-foreground-secondary: color-mix-scale(\n var(--lb-dynamic-background),\n var(--lb-foreground),\n var(--lb-foreground-contrast),\n 800\n );\n --lb-selection: color-mix(in srgb, var(--lb-accent) 40%, transparent);\n\n overflow-wrap: break-word;\n accent-color: var(--lb-accent);\n text-size-adjust: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n &,\n *,\n ::before,\n ::after {\n box-sizing: border-box;\n transition: none var(--lb-transition-duration) var(--lb-transition-easing);\n }\n\n /* Define some variables only on first .lb-root instances */\n &:where(:not(& &)) {\n --lb-dynamic-background: var(--lb-background);\n }\n}\n\n/*************************************\n * States *\n *************************************/\n\n.lb-loading,\n.lb-empty,\n.lb-error {\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.lb-loading {\n color: var(--lb-foreground-moderate);\n}\n\n.lb-empty,\n.lb-error {\n padding: var(--lb-spacing);\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n text-align: center;\n text-wrap: balance;\n}\n\n/*************************************\n * Icon *\n *************************************/\n\n.lb-icon-container,\n.lb-icon {\n inline-size: var(--lb-icon-size);\n block-size: var(--lb-icon-size);\n}\n\n.lb-icon-container {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.lb-icon {\n --lb-icon-background: var(--lb-dynamic-background);\n\n * {\n stroke-width: var(--lb-icon-weight);\n vector-effect: non-scaling-stroke;\n }\n}\n\n.lb-icon-spinner {\n transform-origin: center;\n animation: lb-animation-spin 0.75s linear infinite;\n}\n\n/*************************************\n * Button *\n *************************************/\n\n.lb-button {\n --lb-button-background: var(--lb-dynamic-background);\n\n @include button;\n\n display: flex;\n justify-content: center;\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing));\n border-radius: var(--lb-button-radius);\n background: var(--lb-button-background);\n color: var(--lb-foreground-moderate);\n\n &:where(.lb-button\\:non-disableable:disabled) {\n cursor: default;\n }\n\n &:where(:not(.lb-button\\:non-disableable):disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-tertiary);\n }\n\n &:where(\n [data-variant=\"default\"]:not(\n :is(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"],\n [aria-pressed]\n )\n )\n ) {\n background: transparent;\n }\n\n &:where([data-variant=\"primary\"]) {\n --lb-button-background: var(--lb-accent);\n\n color: var(--lb-accent-foreground);\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n --lb-button-background: var(--lb-accent-secondary);\n\n color: var(--lb-accent-foreground);\n }\n }\n\n &:where([data-variant=\"destructive\"]) {\n --lb-button-background: var(--lb-destructive);\n\n color: var(--lb-destructive-foreground);\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n --lb-button-background: var(--lb-destructive-secondary);\n\n color: var(--lb-destructive-foreground);\n }\n }\n\n &:where([data-variant=\"outline\"]) {\n box-shadow: inset 0 0 0 1px var(--lb-foreground-subtle);\n transition-property: background, color, opacity, box-shadow;\n }\n\n &:where([data-variant=\"ghost\"]) {\n background: transparent;\n }\n\n &:where(:has(.lb-button-label)) {\n gap: calc(0.175 * var(--lb-spacing));\n padding-inline: calc(0.55 * var(--lb-spacing));\n\n &:where(:has(.lb-icon-container)) {\n padding-inline-start: calc(0.4 * var(--lb-spacing));\n }\n }\n\n &:where([data-variant=\"toolbar\"]) {\n color: var(--lb-foreground-tertiary);\n\n &:where([aria-pressed=\"true\"]) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-secondary);\n\n :where(.lb-icon *) {\n stroke-width: calc(1.25 * var(--lb-icon-weight));\n }\n }\n }\n\n &:where([data-variant=\"secondary\"]) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-tertiary);\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n --lb-button-background: var(--lb-foreground);\n\n color: var(--lb-dynamic-background);\n }\n }\n\n &:where([data-size=\"large\"]) {\n padding: calc(0.5 * var(--lb-spacing));\n\n &:where(:has(.lb-button-label)) {\n gap: calc(0.35 * var(--lb-spacing));\n padding-inline: calc(0.7 * var(--lb-spacing));\n\n &:where(:has(.lb-icon-container)) {\n padding-inline-start: calc(0.6 * var(--lb-spacing));\n }\n }\n }\n\n :where(.lb-icon-container) {\n flex: none;\n }\n\n :where(.lb-icon) {\n --lb-icon-background: var(--lb-button-background);\n }\n}\n\n.lb-button-label {\n display: inline-flex;\n flex: none;\n align-items: center;\n block-size: var(--lb-icon-size);\n font-weight: 500;\n font-size: calc(0.7 * var(--lb-icon-size));\n line-height: 1;\n}\n\n/*************************************\n * Dropdown *\n *************************************/\n\n.lb-dropdown {\n min-inline-size: 160px;\n}\n\n.lb-dropdown-label {\n padding: calc(0.875 * var(--lb-spacing)) calc(0.625 * var(--lb-spacing))\n calc(0.125 * var(--lb-spacing));\n color: var(--lb-foreground-tertiary);\n font-weight: 600;\n font-size: 0.675em;\n text-transform: uppercase;\n pointer-events: none;\n user-select: none;\n\n &:where(:first-child) {\n padding-block-start: var(--lb-spacing);\n }\n}\n\n.lb-dropdown-separator {\n block-size: 1px;\n margin: $lb-elevation-padding calc(-1 * $lb-elevation-padding);\n background: var(--lb-foreground-subtle);\n}\n\n.lb-dropdown-item {\n :where(.lb-icon-container) {\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n margin-inline-end: calc(0.375 * var(--lb-spacing));\n color: var(--lb-foreground-moderate);\n transition-property: color;\n }\n}\n\n.lb-dropdown-item:where(\n :is(\n [data-highlighted]:not([data-highlighted=\"false\"]),\n [data-selected]:not([data-selected=\"false\"]),\n [data-active]:not([data-active=\"false\"])\n )\n ) {\n :where(.lb-icon-container) {\n color: var(--lb-foreground-tertiary);\n }\n}\n\n.lb-dropdown-item:where(:has(.lb-dropdown-item-accessory)) {\n :where(.lb-dropdown-item-label) {\n margin-inline-end: calc(0.375 * var(--lb-spacing));\n }\n}\n\n.lb-dropdown-item-accessory {\n margin-inline-start: auto;\n margin-inline-end: calc(-0.25 * var(--lb-spacing));\n}\n\n/* If a dropdown has at least one icon, all items should be aligned has if they had an icon */\n.lb-dropdown:where(:has(.lb-dropdown-item-icon))\n :where(.lb-dropdown-item:not(:has(.lb-dropdown-item-icon)))\n :where(.lb-dropdown-item-label) {\n margin-inline-start: calc(\n var(--lb-icon-size) + (0.375 - 0.125) * var(--lb-spacing)\n );\n}\n\n/*************************************\n * Select *\n *************************************/\n\n.lb-select-button {\n min-inline-size: 0;\n\n :where(.lb-button-label) {\n @include truncate;\n\n flex: 1;\n }\n}\n\n.lb-select-button-chevron {\n flex: none;\n margin-inline-end: calc(-0.25 * var(--lb-spacing));\n opacity: 0.75;\n}\n\n/*************************************\n * Collapsible *\n *************************************/\n\n.lb-collapsible-trigger {\n all: unset;\n position: relative;\n box-sizing: inherit;\n user-select: none;\n transition-timing-function: var(--lb-transition-easing);\n transition-duration: var(--lb-transition-duration);\n transition-property: color, background, opacity;\n -webkit-tap-highlight-color: transparent;\n\n &:where(:not([data-disabled])) {\n cursor: pointer;\n }\n}\n\n.lb-collapsible-chevron {\n inline-size: calc(0.8 * var(--lb-icon-size));\n block-size: calc(0.8 * var(--lb-icon-size));\n margin-inline-start: -1px;\n margin-block-start: 1px;\n opacity: 0.65;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n @supports (interpolate-size: allow-keywords) {\n .lb-collapsible-content {\n block-size: 0;\n opacity: 0;\n transition-duration: calc(3 * var(--lb-transition-duration));\n transition-property: block-size, opacity, content-visibility;\n\n /* overflow-block: clip; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: clip;\n\n /* interpolate-size is a new-ish property */\n /* stylelint-disable-next-line */\n interpolate-size: allow-keywords;\n\n /* transition-behavior is a new-ish property */\n /* stylelint-disable-next-line */\n transition-behavior: allow-discrete;\n\n &:where([data-state=\"open\"]) {\n block-size: auto;\n opacity: 1;\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n }\n }\n }\n\n .lb-collapsible-chevron {\n transition-property: transform;\n\n .lb-collapsible:where([data-state=\"open\"]) :where(&) {\n transform: rotate(90deg);\n }\n }\n}\n\n/* Fix default browser styles when `hidden=\"until-found\"` isn't supported. */\n.lb-collapsible-content:where([hidden]:not([hidden=\"until-found\"])) {\n display: none !important;\n}\n\n/*************************************\n * Prose *\n *************************************/\n\n.lb-prose {\n &,\n * {\n line-height: var(--lb-line-height);\n }\n\n :where(p) {\n margin-block: 0.75em;\n }\n\n :where(p, li) {\n text-wrap: pretty;\n }\n\n :where(h1, h2, h3, h4, h5, h6) {\n margin-block-start: 1.5em;\n margin-block-end: 0.375em;\n font-weight: 600;\n text-wrap: balance;\n }\n\n :where(h1) {\n font-size: 1.75em;\n line-height: calc(0.8 * var(--lb-line-height));\n }\n\n :where(h2) {\n font-size: 1.5em;\n line-height: calc(0.86 * var(--lb-line-height));\n }\n\n :where(h3) {\n font-size: 1.25em;\n line-height: calc(0.92 * var(--lb-line-height));\n }\n\n :where(h4) {\n font-size: 1.125em;\n line-height: calc(0.98 * var(--lb-line-height));\n }\n\n :where(h5) {\n font-size: 1em;\n }\n\n :where(h6) {\n font-size: 0.875em;\n }\n\n :where(hr) {\n margin-block: 1.5em;\n border: none;\n border-block-start: 1px solid var(--lb-foreground-subtle);\n }\n\n :where(ol, ul) {\n display: flex;\n flex-direction: column;\n gap: 0.25em;\n margin-block: 0.75em;\n padding-inline-start: 1.125em;\n list-style-position: outside;\n\n :where(ol, ul) {\n margin-block: 0;\n }\n }\n\n :where(ul) {\n list-style-type: disc;\n }\n\n :where(ol) {\n list-style-type: decimal;\n }\n\n :where(li) {\n margin-block: 0;\n\n > :where(ol, ul) {\n margin-block-start: 0.25em;\n }\n\n > :where(p) {\n margin-block: 0.25em;\n }\n\n > :where(p:first-child) {\n margin-block-start: 0;\n }\n\n > :where(p:last-child) {\n margin-block-end: 0;\n }\n }\n\n :where(a) {\n color: var(--lb-foreground);\n outline: none;\n font-weight: 500;\n transition-property: color, text-decoration-color;\n text-decoration-line: underline;\n text-decoration-color: var(--lb-foreground-moderate);\n text-underline-offset: 2px;\n\n &:where([href]):where(:hover, :focus-visible) {\n color: var(--lb-accent);\n text-decoration-color: var(--lb-accent-moderate);\n }\n }\n\n :where(strong) {\n font-weight: 600;\n }\n\n :where(table) {\n inline-size: 100%;\n min-inline-size: 0;\n margin-block: 1em;\n border-collapse: collapse;\n table-layout: auto;\n word-break: break-word;\n }\n\n :where(thead) {\n border-block-end: 2px solid var(--lb-foreground-subtle);\n\n :where(th) {\n vertical-align: bottom;\n }\n }\n\n :where(tbody) {\n :where(td) {\n vertical-align: baseline;\n }\n\n :where(tr:not(:last-child)) {\n border-block-end: 1px solid var(--lb-foreground-subtle);\n }\n }\n\n :where(tfoot) {\n border-block-start: 2px solid var(--lb-foreground-subtle);\n\n :where(td) {\n vertical-align: top;\n }\n }\n\n :where(th, td) {\n padding-inline: 0.75em;\n padding-block: 0.5em;\n text-align: start;\n\n &:where(:first-child) {\n padding-inline-start: 0;\n }\n\n &:where(:last-child) {\n padding-inline-end: 0;\n }\n }\n\n :where(.lb-code-block) {\n margin-block: 1em;\n }\n\n :where(blockquote) {\n position: relative;\n margin-inline: 0;\n margin-block: 0.75em;\n padding: 0;\n padding-inline-start: 1.25em;\n\n &::after {\n content: \"\";\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n inline-size: 4px;\n block-size: 100%;\n border-radius: calc(0.5 * var(--lb-radius));\n background: var(--lb-foreground-subtle);\n }\n\n &:where(& + &) {\n margin-block-start: 1em;\n }\n\n > :where(:first-child) {\n margin-block-start: 0;\n }\n\n > :where(:last-child) {\n margin-block-end: 0;\n }\n }\n\n > :where(:first-child) {\n margin-block-start: 0;\n }\n\n > :where(:last-child) {\n margin-block-end: 0;\n }\n}\n\n/*************************************\n * Composer suggestions *\n *************************************/\n\n.lb-composer-suggestions-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.lb-composer-suggestions-list-item {\n scroll-margin-block: $lb-elevation-padding;\n}\n\n/*************************************\n * Composer mention suggestions *\n *************************************/\n\n.lb-composer-mention-suggestions {\n --lb-composer-mention-suggestion-avatar-size: 1.25rem;\n}\n\n.lb-composer-mention-suggestion {\n padding: calc(0.375 * var(--lb-spacing)) calc(0.625 * var(--lb-spacing));\n}\n\n.lb-composer-mention-suggestion-avatar {\n inline-size: var(--lb-composer-mention-suggestion-avatar-size);\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n margin-inline-end: calc(0.5 * var(--lb-spacing));\n margin-block: calc(0.125 * var(--lb-spacing));\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-moderate);\n}\n\n/*************************************\n * List *\n *************************************/\n\n.lb-list {\n display: contents;\n\n :where(:first-child) {\n @include capitalize;\n }\n}\n\n/*************************************\n * Date *\n *************************************/\n\n.lb-date {\n @include capitalize;\n}\n\n/*************************************\n * Emoji *\n *************************************/\n\n.lb-emoji {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n inline-size: 1em;\n white-space: nowrap;\n}\n\n@include safari-only {\n .lb-emoji {\n transform: scale(0.825);\n will-change: transform;\n }\n}\n\n/*************************************\n * Emoji picker *\n *************************************/\n\n.lb-emoji-picker {\n --lb-emoji-picker-padding: $lb-emoji-picker-padding;\n --lb-emoji-picker-offset-padding: calc(\n $lb-emoji-picker-padding + 0.375 * var(--lb-spacing)\n );\n\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n max-inline-size: var(--frimousse-viewport-width);\n block-size: 374px;\n color: var(--lb-foreground);\n}\n\n.lb-emoji-picker-header {\n flex: none;\n border-block-end: 1px solid var(--lb-foreground-subtle);\n}\n\n.lb-emoji-picker-footer {\n display: flex;\n flex: none;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: center;\n inline-size: 100%;\n padding: calc(0.5 * var(--lb-spacing));\n border-block-start: 1px solid var(--lb-foreground-subtle);\n}\n\n.lb-emoji-picker-active-emoji {\n display: flex;\n flex: none;\n justify-content: center;\n align-items: center;\n inline-size: 1.25em;\n block-size: 1.25em;\n font-size: 1.25em;\n}\n\n.lb-emoji-picker-active-emoji-label {\n @include truncate;\n\n flex: 1;\n color: var(--lb-foreground-secondary);\n font-weight: 500;\n font-size: 0.8125em;\n}\n\n.lb-emoji-picker-active-emoji-label-placeholder {\n margin-inline-start: calc(0.5 * var(--lb-spacing));\n color: var(--lb-foreground-moderate);\n}\n\n.lb-emoji-picker-skin-tone-selector {\n display: flex;\n flex: none;\n justify-content: center;\n align-items: center;\n inline-size: calc(1.75 * var(--lb-spacing));\n block-size: calc(1.75 * var(--lb-spacing));\n margin-inline-start: auto;\n}\n\n.lb-emoji-picker-search-container {\n position: relative;\n display: flex;\n align-items: center;\n\n :where(.lb-icon) {\n position: absolute;\n inset-inline-start: var(--lb-emoji-picker-offset-padding);\n color: var(--lb-foreground-moderate);\n pointer-events: none;\n }\n}\n\n.lb-emoji-picker-search {\n all: unset;\n box-sizing: inherit;\n inline-size: 100%;\n padding: var(--lb-emoji-picker-offset-padding);\n padding-inline-start: calc(\n var(--lb-icon-size) + var(--lb-emoji-picker-offset-padding) + 0.375 *\n var(--lb-spacing)\n );\n background: transparent;\n outline: none;\n appearance: textfield;\n\n &::placeholder {\n color: var(--lb-foreground-moderate);\n }\n\n &::-webkit-search-cancel-button {\n display: none;\n }\n}\n\n.lb-emoji-picker-content {\n position: relative;\n flex: 1;\n outline: none;\n}\n\n.lb-emoji-picker-category-header {\n padding: var(--lb-emoji-picker-padding) var(--lb-emoji-picker-offset-padding);\n background: var(--lb-dynamic-background);\n}\n\n.lb-emoji-picker-category-header-title {\n color: var(--lb-foreground-tertiary);\n font-weight: 600;\n font-size: 0.675em;\n text-transform: uppercase;\n}\n\n.lb-emoji-picker-list {\n padding-block-end: var(--lb-emoji-picker-padding);\n animation: lb-animation-appear var(--lb-transition-duration)\n var(--lb-transition-easing) both;\n}\n\n.lb-emoji-picker-row {\n display: flex;\n padding-inline: var(--lb-emoji-picker-padding);\n scroll-margin-block-end: var(--lb-emoji-picker-padding);\n}\n\n.lb-emoji-picker-emoji {\n all: unset;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n box-sizing: inherit;\n aspect-ratio: 1;\n padding: calc(0.375 * var(--lb-spacing));\n border-radius: calc(var(--lb-radius) - 0.75 * $lb-emoji-picker-padding);\n text-align: center;\n}\n\n/*************************************\n * Tooltip *\n *************************************/\n\n.lb-tooltip {\n --lb-background: #222;\n --lb-foreground: #fff;\n --lb-foreground-contrast: 10%;\n --lb-dynamic-background: var(--lb-background);\n\n position: relative;\n display: flex;\n align-items: center;\n max-inline-size: 300px;\n min-block-size: calc(\n $lb-tooltip-shortcut-height + 2 * $lb-tooltip-additional-padding\n );\n padding-inline: $lb-tooltip-horizontal-padding;\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n box-shadow: var(--lb-tooltip-shadow);\n font-size: 0.75rem;\n line-height: 1;\n overflow-wrap: anywhere;\n pointer-events: none;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 1;\n border-radius: inherit;\n box-shadow: var(--lb-inset-shadow);\n pointer-events: none;\n }\n}\n\n.lb-tooltip\\:multiline {\n justify-content: center;\n padding-block: calc(\n $lb-tooltip-vertical-padding * (1 / $lb-tooltip-line-height)\n );\n line-height: $lb-tooltip-line-height;\n text-align: center;\n}\n\n.lb-tooltip-shortcut {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n justify-content: center;\n align-items: center;\n block-size: $lb-tooltip-shortcut-height;\n margin-inline-start: $lb-tooltip-horizontal-padding;\n margin-inline-end: calc(\n -1 * $lb-tooltip-horizontal-padding + $lb-tooltip-additional-padding\n );\n padding-inline: calc(0.25 * var(--lb-spacing));\n border-radius: calc(\n var(--lb-radius) - 0.625 * $lb-tooltip-additional-padding\n );\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-tertiary);\n font-family: inherit;\n line-height: 1;\n text-transform: uppercase;\n\n :where(abbr) {\n all: unset;\n }\n}\n\n/*************************************\n * Avatar *\n *************************************/\n\n.lb-avatar {\n position: relative;\n container-type: inline-size;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n aspect-ratio: 1;\n border-radius: var(--lb-avatar-radius);\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-moderate);\n\n &:where([data-loading]) {\n background: var(--lb-foreground);\n opacity: $lb-loading-opacity;\n }\n}\n\n.lb-avatar-image {\n position: absolute;\n inset: 0;\n object-fit: cover;\n inline-size: 100%;\n block-size: 100%;\n}\n\n.lb-avatar-fallback {\n font-weight: 500;\n font-size: 35cqi;\n white-space: nowrap;\n\n /**\n * Progressive enhancement: Only show the fallback when container queries are supported\n */\n @supports not (container-type: inline-size) {\n display: none;\n }\n}\n\n/*************************************\n * Name *\n *************************************/\n\n.lb-name {\n display: inline-block;\n\n &:where([data-loading]) {\n &::before {\n content: \"\\FEFF\";\n display: inline-block;\n vertical-align: middle;\n inline-size: 8ch;\n block-size: 1.75ex;\n border-radius: calc(0.5 * var(--lb-radius));\n background: currentcolor;\n opacity: $lb-loading-opacity;\n user-select: none;\n }\n }\n}\n\n/*************************************\n * Loading *\n *************************************/\n\n:is(.lb-avatar, .lb-name):where([data-loading]) {\n animation: lb-animation-shimmer-skeleton 8s linear infinite;\n}\n\n/*************************************\n * Body *\n *************************************/\n\n:is(.lb-comment-body, .lb-composer-editor) {\n color: var(--lb-foreground-secondary);\n\n &,\n * {\n line-height: var(--lb-line-height);\n }\n\n :where(p) {\n --lb-line-height-crop: calc(1lh - 1em) / -2;\n\n margin-block-start: 0.25em;\n margin-block-end: 0.25em;\n\n /* Cancel out the impact of line-height on margins/paddings */\n &:where(:first-of-type) {\n margin-block-start: calc(0.125em + var(--lb-line-height-crop));\n }\n\n /* Cancel out the impact of line-height on margins/paddings */\n &:where(:last-of-type) {\n margin-block-end: calc(0.125em + var(--lb-line-height-crop));\n }\n }\n\n :where(strong) {\n font-weight: 600;\n }\n}\n\n.lb-comment-mention,\n.lb-composer-mention {\n color: var(--lb-accent);\n box-decoration-break: clone;\n font-weight: 500;\n}\n\n:is(.lb-comment-link, .lb-composer-link) {\n color: var(--lb-foreground);\n outline: none;\n font-weight: 500;\n transition-property: color, text-decoration-color;\n text-decoration-line: underline;\n text-decoration-color: var(--lb-foreground-moderate);\n text-underline-offset: 2px;\n\n &:where([href]):where(:hover, :focus-visible) {\n color: var(--lb-accent);\n text-decoration-color: var(--lb-accent-moderate);\n }\n}\n\n.lb-comment-mention:where([data-self]),\n.lb-composer-mention {\n padding: 0.1em 0.3em;\n border-radius: calc(0.675 * var(--lb-radius));\n background: var(--lb-accent-subtle);\n}\n\n.lb-mention-symbol {\n display: contents;\n}\n\n/*************************************\n * Composer *\n *************************************/\n\n.lb-composer {\n position: relative;\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n transition-property: background;\n}\n\n.lb-composer-form {\n margin: 0;\n}\n\n.lb-composer:where(:has(.lb-composer-editor:not(:focus-visible))) {\n :where(.lb-button[data-variant=\"primary\"]) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-tertiary);\n\n &:where(:enabled:hover, :enabled:focus-visible) {\n --lb-button-background: var(--lb-accent);\n\n color: var(--lb-accent-foreground);\n }\n }\n}\n\n.lb-composer-editor {\n padding: var(--lb-spacing);\n outline: none;\n\n &:where([data-disabled]:not([data-disabled=\"false\"])) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n :where(.lb-composer-editor-container:has(.lb-composer-attachments)) & {\n padding-block-end: calc(0.25 * var(--lb-spacing));\n }\n\n :where([data-placeholder]) {\n color: var(--lb-foreground-moderate);\n }\n}\n\n.lb-composer-mention {\n @include invisible-selection;\n\n &:where([data-selected]:not([data-selected=\"false\"])) {\n background: var(--lb-accent);\n color: var(--lb-accent-foreground);\n }\n}\n\n.lb-composer-footer {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n block-size: calc($lb-button-size + var(--lb-spacing));\n margin-block-start: calc(-0.125 * var(--lb-spacing));\n padding: 0 var(--lb-spacing) var(--lb-spacing);\n}\n\n.lb-composer-actions,\n.lb-composer-editor-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n align-items: center;\n}\n\n.lb-composer-editor-actions {\n margin-inline-end: auto;\n}\n\n.lb-composer-attribution {\n color: var(--lb-foreground-moderate);\n outline: none;\n transition-property: color;\n\n &:where(:hover, :focus-visible) {\n color: var(--lb-foreground-tertiary);\n }\n\n :where(svg) {\n block-size: calc(0.75 * $lb-button-size);\n }\n}\n\n.lb-composer-attachments {\n padding-inline: var(--lb-spacing);\n padding-block-start: calc(0.75 * var(--lb-spacing));\n padding-block-end: var(--lb-spacing);\n}\n\n.lb-composer-editor-container:where([data-drop]) * {\n pointer-events: none;\n}\n\n.lb-composer-attachments-drop-area {\n position: absolute;\n inset: 0;\n display: flex;\n place-content: center;\n place-items: center;\n color: var(--lb-accent);\n\n &::before,\n &::after {\n content: \"\";\n position: absolute;\n inset: calc(0.5 * var(--lb-spacing));\n z-index: 0;\n border-radius: calc(0.75 * var(--lb-radius));\n }\n\n &::before {\n background: currentcolor;\n opacity: calc(1 * var(--lb-accent-contrast));\n }\n\n &::after {\n border: 2px dashed currentcolor;\n opacity: calc(2 * var(--lb-accent-contrast));\n }\n}\n\n.lb-composer-attachments-drop-area-label {\n position: relative;\n display: flex;\n gap: calc(0.25 * var(--lb-spacing));\n place-items: center;\n padding: calc(0.375 * var(--lb-spacing)) calc(0.5 * var(--lb-spacing));\n border-radius: calc(0.75 * var(--lb-radius));\n background: var(--lb-accent);\n color: var(--lb-accent-foreground);\n font-weight: 500;\n pointer-events: none;\n}\n\n/*************************************\n * Floating Toolbar *\n *************************************/\n\n.lb-composer-floating-toolbar {\n display: flex;\n flex-direction: row;\n gap: $lb-elevation-padding;\n padding: $lb-elevation-padding;\n user-select: none;\n\n /* Invisibly increase the buttons' hit target size */\n :where(.lb-button) {\n &::before {\n content: \"\";\n position: absolute;\n inset: calc(-1 * $lb-elevation-padding);\n z-index: -1;\n border-radius: inherit;\n }\n\n &:where(:not(:first-of-type))::before {\n inset-inline-start: calc(-0.5 * $lb-elevation-padding);\n }\n\n &:where(:not(:last-of-type))::before {\n inset-inline-end: calc(-0.5 * $lb-elevation-padding);\n }\n }\n}\n\n/*************************************\n * Comment *\n *************************************/\n\n.lb-comment {\n --lb-comment-avatar-size: $lb-button-size;\n\n position: relative;\n padding: var(--lb-spacing);\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n font-weight: 400;\n scroll-margin: var(--lb-spacing);\n\n @media (hover: hover) {\n &:where(.lb-comment\\:show-actions-hover) {\n :where(.lb-comment-actions) {\n position: absolute;\n inset-inline-end: 0;\n opacity: 0;\n transition-property: opacity;\n }\n\n &:where(:is(:hover, :focus-within, .lb-comment\\:action-open)) {\n :where(.lb-comment-actions) {\n position: relative;\n opacity: 1;\n }\n }\n }\n }\n\n &:where(:target, [data-target]) {\n --lb-dynamic-background: var(--lb-background-accent-faint);\n }\n\n &:where([data-editing]) {\n --lb-dynamic-background: var(--lb-background-foreground-faint);\n }\n}\n\n.lb-comment-header {\n position: relative;\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n block-size: var(--lb-comment-avatar-size);\n margin-block-end: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-comment-details {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n min-inline-size: 0;\n}\n\n.lb-comment-avatar {\n flex: none;\n inline-size: var(--lb-comment-avatar-size);\n}\n\n.lb-comment-details-labels {\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: baseline;\n min-inline-size: 0;\n}\n\n.lb-comment-author,\n.lb-comment-date {\n @include truncate;\n @include capitalize;\n}\n\n.lb-comment-author {\n font-weight: 500;\n}\n\n.lb-comment-date {\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n}\n\n.lb-comment-date-created,\n.lb-comment-date-edited {\n display: contents;\n}\n\n.lb-comment-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n margin-inline-start: auto;\n}\n\n.lb-comment-composer {\n margin: calc(-1 * var(--lb-spacing));\n background: unset;\n}\n\n.lb-comment-body {\n /**\n * Prevent empty lines from collapsing\n */\n :where(p span:only-child:empty)::before {\n content: \"\\FEFF\";\n user-select: none;\n }\n}\n\n.lb-comment-attachments {\n margin-block-start: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-comment-reactions {\n display: flex;\n flex-wrap: wrap;\n gap: calc(0.375 * var(--lb-spacing));\n margin-block-start: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-comment-reaction {\n gap: calc(0.375 * var(--lb-spacing));\n block-size: $lb-button-size;\n padding-inline: calc(0.575 * var(--lb-spacing));\n border-radius: $lb-radius-full;\n\n &:where([data-self]) {\n background: var(--lb-accent-subtle);\n color: var(--lb-accent-secondary);\n box-shadow: inset 0 0 0 1px var(--lb-accent-moderate);\n\n &:where(\n :enabled:hover,\n :enabled:focus-visible,\n [aria-expanded=\"true\"],\n [aria-selected=\"true\"]\n ) {\n color: var(--lb-accent);\n }\n }\n}\n\n.lb-comment-reaction-count {\n font-weight: 500;\n font-size: 0.75em;\n font-variant-numeric: tabular-nums;\n}\n\n.lb-comment-reaction-tooltip {\n max-inline-size: 200px;\n}\n\n.lb-comment-deleted {\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n}\n\n.lb-comment\\:indent-content {\n min-block-size: calc(var(--lb-comment-avatar-size) + 2 * var(--lb-spacing));\n\n :where(.lb-comment-header) {\n block-size: $lb-button-size;\n margin-block-end: calc(0.25 * var(--lb-spacing));\n }\n\n :where(.lb-comment-avatar) {\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n }\n\n :where(.lb-comment-details-labels) {\n margin-inline-start: calc(\n var(--lb-comment-avatar-size) + 0.75 * var(--lb-spacing)\n );\n }\n\n :where(.lb-comment-content) {\n padding-inline-start: calc(\n var(--lb-comment-avatar-size) + 0.75 * var(--lb-spacing)\n );\n }\n}\n\n/*************************************\n * Thread *\n *************************************/\n\n.lb-thread {\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n transition-property: background;\n\n @media (hover: hover) {\n &:where(.lb-thread\\:show-actions-hover :is(:hover, :focus-within)) {\n :where(.lb-thread-actions) {\n opacity: 1;\n }\n }\n }\n}\n\n.lb-thread-comments {\n position: relative;\n z-index: 0;\n display: flex;\n flex-direction: column;\n}\n\n.lb-thread-comment {\n z-index: 0;\n padding-block: calc(0.6 * var(--lb-spacing));\n transition-property: background;\n\n &:where(.lb-comment\\:indent-content) {\n min-block-size: calc(var(--lb-comment-avatar-size) + var(--lb-spacing));\n }\n\n &:where(:first-of-type, [data-editing]) {\n padding-block-start: var(--lb-spacing);\n\n &:where(.lb-comment\\:indent-content) {\n min-block-size: calc(\n var(--lb-comment-avatar-size) + 1.5 * var(--lb-spacing)\n );\n }\n }\n\n &:where(:last-of-type, [data-editing]) {\n padding-block-end: var(--lb-spacing);\n\n &:where(.lb-comment\\:indent-content) {\n min-block-size: calc(\n var(--lb-comment-avatar-size) + 1.75 * var(--lb-spacing)\n );\n }\n }\n}\n\n.lb-thread-show-more {\n position: relative;\n z-index: 1;\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n justify-content: center;\n align-items: center;\n\n &::before,\n &::after {\n content: \"\";\n z-index: 0;\n flex: 1 0 auto;\n min-inline-size: var(--lb-spacing);\n block-size: 0;\n border-block-start: 1px dashed var(--lb-foreground-subtle);\n transition-property: border;\n }\n}\n\n:where(.lb-thread-show-more + .lb-thread-new-indicator) {\n margin-block-start: calc(0.5 * var(--lb-spacing));\n}\n\n.lb-thread-new-indicator {\n position: relative;\n z-index: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n block-size: 0;\n\n &::before,\n &::after {\n content: \"\";\n z-index: 0;\n flex: 1;\n block-size: 0;\n border-block-start: 1px solid var(--lb-foreground-subtle);\n transition-property: border;\n }\n}\n\n.lb-thread-new-indicator-label {\n z-index: 1;\n display: flex;\n flex: none;\n gap: calc(0.325 * var(--lb-spacing));\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing)) var(--lb-spacing);\n color: var(--lb-accent);\n font-weight: 600;\n font-size: 0.675em;\n text-transform: uppercase;\n}\n\n.lb-thread-new-indicator-label-icon {\n inline-size: calc(0.6 * var(--lb-icon-size));\n block-size: calc(0.6 * var(--lb-icon-size));\n}\n\n.lb-thread-composer {\n position: relative;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n inline-size: 100%;\n block-size: 100%;\n border-block-start: 1px solid var(--lb-foreground-subtle);\n pointer-events: none;\n transition-property: border;\n }\n}\n\n/*************************************\n * Attachments *\n *************************************/\n\n.lb-comment-attachments,\n.lb-composer-attachments {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-attachments {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr));\n gap: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-attachment,\n.lb-attachment-delete {\n @include button;\n}\n\n.lb-attachment {\n position: relative;\n display: flex;\n inline-size: 100%;\n min-inline-size: 0;\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n box-shadow: inset 0 0 0 1px var(--lb-foreground-subtle);\n\n &:where([tabindex=\"-1\"]) {\n cursor: default;\n }\n\n &:where(:not([tabindex=\"-1\"])) {\n &:where(:hover, :focus-visible) {\n background: var(--lb-foreground-subtle);\n }\n }\n}\n\n.lb-attachment-delete {\n position: absolute;\n inset-inline-end: -0.35rem;\n inset-block-start: -0.35rem;\n z-index: 2;\n display: flex;\n justify-content: center;\n align-items: center;\n inline-size: 1.1rem;\n block-size: 1.1rem;\n border-radius: 50%;\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-secondary);\n box-shadow: 0 0 0 2px var(--lb-dynamic-background);\n opacity: 0;\n\n /* Invisibly increase the button's hit target size */\n &::before {\n content: \"\";\n position: absolute;\n inset: -4px;\n z-index: -1;\n border-radius: inherit;\n }\n\n &:where(:hover, :focus-visible) {\n background: var(--lb-foreground-secondary);\n color: var(--lb-dynamic-background);\n }\n\n :where(.lb-attachment:focus-within, .lb-attachment:hover) & {\n opacity: 1;\n }\n\n :where(.lb-icon) {\n inline-size: 0.75rem;\n }\n}\n\n.lb-attachment-details {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: calc(0.25 * var(--lb-spacing));\n justify-content: center;\n min-inline-size: 0;\n font-size: 0.875em;\n}\n\n.lb-attachment-name {\n display: flex;\n font-weight: 500;\n}\n\n.lb-attachment-name-base,\n.lb-attachment-description {\n @include truncate;\n\n transition-property: color;\n}\n\n.lb-attachment-preview {\n position: relative;\n display: flex;\n flex: none;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n background: color-mix(\n in srgb,\n transparent,\n var(--lb-foreground) var(--lb-foreground-contrast)\n );\n color: var(--lb-foreground-tertiary);\n transition-property: background, color;\n}\n\n.lb-attachment-preview-media {\n border-radius: inherit;\n transition-property: opacity;\n\n &,\n &::after,\n img,\n video {\n position: absolute;\n inset: 0;\n inline-size: 100%;\n block-size: 100%;\n }\n\n img,\n video {\n object-fit: cover;\n pointer-events: none;\n }\n\n &::after {\n content: \"\";\n border-radius: inherit;\n box-shadow: var(--lb-highlight-shadow);\n pointer-events: none;\n }\n\n &:where([data-hidden]) {\n opacity: 0;\n }\n}\n\n.lb-attachment-icon {\n flex: none;\n overflow: visible;\n color: var(--lb-foreground);\n}\n\n.lb-attachment-icon-glyph {\n fill: var(--lb-foreground-moderate);\n}\n\n.lb-attachment-icon-background {\n fill: var(--lb-background);\n}\n\n.lb-attachment-icon-fold {\n fill-opacity: calc(0.75 * var(--lb-foreground-contrast));\n}\n\n.lb-attachment-icon-shadow {\n filter: blur(6px);\n fill-opacity: var(--lb-foreground-contrast);\n}\n\n.lb-file-attachment {\n gap: calc(0.5 * var(--lb-spacing));\n padding: calc(0.5 * var(--lb-spacing));\n padding-inline-end: calc(0.65 * var(--lb-spacing));\n\n :where(.lb-attachment-preview) {\n aspect-ratio: 1;\n inline-size: 2.5rem;\n border-radius: calc(0.5 * var(--lb-radius));\n }\n\n :where(.lb-attachment-name) {\n color: var(--lb-foreground-secondary);\n }\n\n :where(.lb-attachment-description) {\n color: var(--lb-foreground-tertiary);\n }\n\n &:where(:not([tabindex=\"-1\"])) {\n &:where(:hover, :focus-visible, :focus-within) {\n :where(.lb-attachment-name) {\n color: var(--lb-foreground);\n }\n\n :where(.lb-attachment-description) {\n color: var(--lb-foreground-secondary);\n }\n }\n }\n}\n\n.lb-media-attachment {\n aspect-ratio: 16 / 10;\n\n :where(.lb-attachment-preview) {\n position: absolute;\n inset: 0;\n border-radius: inherit;\n }\n\n :where(.lb-attachment-details) {\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n padding: calc(0.75 * var(--lb-spacing));\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n background: linear-gradient(to bottom, transparent, rgba(0 0 0 / 80%));\n text-shadow: 0 0 2px rgba(0 0 0 / 40%);\n opacity: 0;\n transition-property: opacity;\n }\n\n :where(.lb-attachment-name) {\n color: #fff;\n }\n\n :where(.lb-attachment-description) {\n color: rgba(255 255 255 / 80%);\n }\n\n &:where(:not([tabindex=\"-1\"])) {\n &:where(:hover, :focus-visible, :focus-within) {\n :where(.lb-attachment-details) {\n opacity: 1;\n }\n }\n }\n}\n\n.lb-attachment:where([data-error]) {\n :where(.lb-attachment-preview) {\n background: var(--lb-destructive);\n color: var(--lb-destructive-foreground);\n }\n}\n\n/*************************************\n * Inbox Notification *\n *************************************/\n\n.lb-inbox-notification {\n --lb-inbox-notification-aside-size: 36px;\n\n position: relative;\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n overflow: hidden;\n padding: var(--lb-spacing);\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n font-weight: 400;\n text-decoration: inherit;\n transition-property: background;\n\n /* Highlight missing notifications during development */\n &:where([data-missing]) {\n --lb-accent: var(--lb-destructive) !important;\n --lb-accent-foreground: var(--lb-destructive-foreground) !important;\n --lb-accent-contrast: var(--lb-destructive-contrast) !important;\n --lb-dynamic-background: var(--lb-background-accent-faint);\n }\n\n &:where([data-unread]) {\n --lb-dynamic-background: var(--lb-background-accent-faint);\n }\n\n &:where([href]) {\n cursor: pointer;\n\n &:where(:hover, :focus-visible, :focus-within) {\n --lb-dynamic-background: var(--lb-background-foreground-faint);\n }\n\n &:where([data-unread]) {\n &:where(:hover, :focus-visible, :focus-within) {\n --lb-dynamic-background: var(--lb-background-accent-subtle);\n }\n }\n }\n\n @media (hover: hover) {\n &:where(.lb-inbox-notification\\:show-actions-hover) {\n :where(.lb-inbox-notification-header) {\n display: grid;\n grid-template: \"title secondary\" / 1fr max-content;\n }\n\n :where(.lb-inbox-notification-details) {\n opacity: 1;\n transition-property: opacity;\n }\n\n :where(.lb-inbox-notification-actions) {\n opacity: 0;\n transition-property: opacity;\n }\n\n &:where(:is(:hover, :focus-within, .lb-inbox-notification\\:action-open)) {\n :where(.lb-inbox-notification-details) {\n opacity: 0;\n }\n\n :where(.lb-inbox-notification-actions) {\n opacity: 1;\n }\n }\n\n :where(.lb-inbox-notification-details),\n :where(.lb-inbox-notification-actions) {\n grid-area: secondary;\n justify-self: end;\n }\n }\n }\n}\n\n.lb-inbox-notification-aside {\n flex: none;\n inline-size: var(--lb-inbox-notification-aside-size);\n}\n\n.lb-inbox-notification-icon {\n display: flex;\n justify-content: center;\n place-items: center;\n aspect-ratio: 1;\n border-radius: 50%;\n background: var(--lb-foreground-subtle);\n\n .lb-inbox-notification:where([data-missing]) :where(&) {\n background: var(--lb-accent-subtle);\n color: var(--lb-accent);\n }\n}\n\n.lb-inbox-notification-content {\n flex: 1;\n}\n\n.lb-inbox-notification-content,\n.lb-inbox-notification-body {\n min-inline-size: 0;\n max-inline-size: 100%;\n}\n\n.lb-inbox-notification-header {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n margin-block-start: calc(0.25 * var(--lb-spacing));\n margin-block-end: calc(0.5 * var(--lb-spacing));\n}\n\n.lb-inbox-notification-title {\n min-block-size: $lb-button-size;\n\n :where(.lb-inbox-notification:not([data-inspector])) & {\n @include capitalize;\n }\n\n :where(strong, .lb-list, .lb-name) {\n font-weight: 500;\n }\n}\n\n.lb-inbox-notification-details {\n flex: none;\n align-self: start;\n min-inline-size: 0;\n block-size: $lb-button-size;\n margin-inline-start: auto;\n}\n\n.lb-inbox-notification-details-labels {\n display: flex;\n align-items: baseline;\n min-inline-size: 0;\n\n &::before {\n content: \"\\FEFF\";\n }\n}\n\n.lb-inbox-notification-actions {\n display: flex;\n grid-area: actions;\n gap: calc(0.125 * var(--lb-spacing));\n align-self: start;\n}\n\n.lb-inbox-notification-comments {\n display: flex;\n flex-direction: column;\n gap: var(--lb-spacing);\n}\n\n.lb-inbox-notification-comment {\n padding: 0;\n background: transparent;\n\n :where(.lb-comment-header) {\n block-size: auto;\n color: var(--lb-foreground-tertiary);\n font-size: 0.875rem;\n }\n\n :where(.lb-comment-reaction),\n :where(.lb-comment-attachment) {\n pointer-events: none;\n }\n}\n\n.lb-inbox-notification-date {\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n}\n\n.lb-inbox-notification-unread-indicator {\n align-self: center;\n inline-size: 10px;\n block-size: 10px;\n margin-inline-start: calc(0.5 * var(--lb-spacing));\n border-radius: 50%;\n background: var(--lb-accent);\n}\n\n/*************************************\n * History Version Summary *\n *************************************/\n\n.lb-history-version-summary {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: calc(0.25 * var(--lb-spacing));\n justify-content: center;\n inline-size: 100%;\n min-inline-size: 0;\n padding: var(--lb-spacing);\n background: var(--lb-dynamic-background);\n transition-property: background;\n\n &:where(\n :hover,\n :focus-visible,\n :focus-within,\n [data-selected]:not([data-selected=\"false\"])\n ) {\n --lb-dynamic-background: var(--lb-background-foreground-faint);\n }\n}\n\n.lb-history-version-summary-date,\n.lb-history-version-summary-authors {\n @include truncate;\n @include capitalize;\n\n min-inline-size: 0;\n max-inline-size: 100%;\n}\n\n.lb-history-version-summary-date {\n color: var(--lb-foreground-secondary);\n font-weight: 500;\n}\n\n.lb-history-version-summary-authors {\n color: var(--lb-foreground-tertiary);\n}\n\n/*************************************\n * History Version Previe *\n *************************************/\n\n.lb-history-version-preview {\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--lb-dynamic-background);\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n}\n\n.lb-history-version-preview-content {\n flex: 1 0 auto;\n padding: var(--lb-spacing);\n}\n\n.lb-history-version-preview-footer {\n position: sticky;\n inset-block-end: 0;\n display: flex;\n flex: none;\n gap: var(--lb-spacing);\n align-items: center;\n margin-block-start: auto;\n padding: var(--lb-spacing);\n border-block-start: 1px solid var(--lb-foreground-subtle);\n background: var(--lb-dynamic-background);\n}\n\n.lb-history-version-preview-authors {\n @include truncate;\n\n flex: 1 1 auto;\n min-inline-size: 0;\n color: var(--lb-foreground-tertiary);\n}\n\n.lb-history-version-preview-actions {\n display: flex;\n flex: none;\n gap: calc(0.35 * var(--lb-spacing));\n align-items: center;\n margin-inline-start: auto;\n}\n\n/*************************************\n * Lists *\n *************************************/\n\n.lb-inbox-notification-list,\n.lb-history-version-summary-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.lb-inbox-notification-list-item,\n.lb-history-version-summary-list-item {\n &:where(:not(:last-of-type)) {\n border-block-end: 1px solid var(--lb-foreground-subtle);\n }\n}\n\n/*************************************\n * Inline code *\n *************************************/\n\n:is(.lb-root) {\n :where(code:not(pre > code)) {\n padding: 0.2em 0.4em;\n border-radius: calc(0.75 * var(--lb-radius));\n background: var(--lb-foreground-subtle);\n box-decoration-break: clone;\n font-size: 85%;\n line-height: 1;\n }\n\n /**\n * Merge adjacent inline code elements\n */\n :where(span:has(code) + span code) {\n padding-inline-start: 0;\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n }\n\n :where(span:has(code):has(+ span code) code) {\n padding-inline-end: 0;\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n }\n}\n\n/* 0,0,0 specificity to inherit any styles applied to `code` elements */\n:where(:is(.lb-root) code) {\n font-family: ui-monospace, Menlo, Monaco, \"Roboto Mono\", \"Cascadia Code\",\n \"Source Code Pro\", Consolas, \"DejaVu Sans Mono\", monospace;\n}\n\n/*************************************\n * Elevation *\n *************************************/\n\n.lb-elevation {\n --lb-dynamic-background: var(--lb-background);\n\n position: relative;\n overflow: hidden;\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n box-shadow: var(--lb-elevation-shadow);\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 1;\n border-radius: inherit;\n box-shadow: var(--lb-inset-shadow);\n pointer-events: none;\n }\n\n &:where(.lb-elevation-moderate) {\n box-shadow: var(--lb-elevation-shadow-moderate);\n }\n}\n\n/*************************************\n * Elevation lists *\n *************************************/\n\n.lb-dropdown,\n.lb-composer-suggestions {\n padding: $lb-elevation-padding;\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n\n &:where([data-hidden]) {\n opacity: 0;\n }\n}\n\n.lb-dropdown-item,\n.lb-composer-suggestions-list-item {\n display: flex;\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing)) calc(0.5 * var(--lb-spacing));\n font-size: 0.875rem;\n}\n\n.lb-dropdown-item,\n.lb-composer-suggestions-list-item,\n.lb-emoji-picker-emoji {\n border-radius: calc(var(--lb-radius) - 0.75 * $lb-elevation-padding);\n color: var(--lb-foreground-secondary);\n outline: none;\n cursor: pointer;\n user-select: none;\n transition-property: background, color, opacity;\n}\n\n:is(\n .lb-dropdown-item,\n .lb-composer-suggestions-list-item,\n .lb-emoji-picker-emoji\n) {\n &:where(\n [data-highlighted]:not([data-highlighted=\"false\"]),\n [data-selected]:not([data-selected=\"false\"]),\n [data-active]:not([data-active=\"false\"])\n ) {\n background: var(--lb-foreground-subtle);\n transition-duration: calc(var(--lb-transition-duration) / 2);\n }\n\n &:where(:disabled, [data-disabled]:not([data-disabled=\"false\"])) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n/*************************************\n * Floating animations *\n *************************************/\n\n.lb-dropdown,\n.lb-composer-suggestions,\n.lb-composer-floating-toolbar,\n.lb-tooltip,\n.lb-emoji-picker {\n animation-duration: var(--lb-transition-duration);\n animation-timing-function: var(--lb-transition-easing);\n will-change: transform, opacity;\n}\n\n:is(\n .lb-dropdown,\n .lb-emoji-picker,\n .lb-tooltip:where([data-state=\"delayed-open\"]),\n .lb-composer-suggestions,\n .lb-composer-floating-toolbar\n) {\n &:where([data-side=\"top\"]) {\n animation-name: lb-animation-slide-up;\n }\n\n &:where([data-side=\"bottom\"]) {\n animation-name: lb-animation-slide-down;\n }\n}\n\n:is(\n .lb-dropdown,\n .lb-emoji-picker,\n .lb-tooltip,\n .lb-composer-suggestions,\n .lb-composer-floating-toolbar\n) {\n &:where([data-state=\"closed\"]) {\n animation-name: lb-animation-disappear;\n }\n}\n\n@media (prefers-reduced-motion) {\n .lb-dropdown:where(:not([data-state=\"closed\"])),\n .lb-emoji-picker:where(:not([data-state=\"closed\"])),\n .lb-tooltip:where([data-state=\"delayed-open\"]:not([data-state=\"closed\"])),\n .lb-composer-suggestions:where(:not([data-state=\"closed\"])) {\n animation-name: lb-animation-appear;\n }\n}\n\n/*************************************\n * Code block *\n *************************************/\n\n.lb-code-block {\n position: relative;\n min-inline-size: 0;\n border: 1px solid var(--lb-foreground-subtle);\n border-radius: var(--lb-radius);\n isolation: isolate;\n\n :where(.lb-code-block-header) {\n display: flex;\n align-items: center;\n padding: calc(0.5 * var(--lb-spacing));\n }\n\n :where(.lb-code-block-title) {\n margin-inline-start: calc(0.5 * var(--lb-spacing));\n color: var(--lb-foreground-tertiary);\n font-weight: 600;\n font-size: 0.675em;\n text-transform: uppercase;\n }\n\n :where(.lb-code-block-header-actions) {\n margin-inline-start: auto;\n }\n\n :where(.lb-code-block-content) {\n min-inline-size: 0;\n margin: 0;\n padding: 0 var(--lb-spacing) calc(0.875 * var(--lb-spacing));\n font-size: 85%;\n line-height: var(--lb-line-height);\n\n /* overflow-inline: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-x: auto;\n }\n}\n\n/*************************************\n * AI Composer *\n *************************************/\n\n.lb-ai-composer {\n position: relative;\n inline-size: 100%;\n color: var(--lb-foreground);\n}\n\n.lb-ai-composer-form:where(:has(.lb-ai-composer-editor:not(:focus-visible))) {\n :where(.lb-button[data-variant=\"primary\"]) {\n --lb-button-background: var(--lb-foreground-subtle);\n\n color: var(--lb-foreground-tertiary);\n\n &:where(:enabled:hover, :enabled:focus-visible) {\n --lb-button-background: var(--lb-accent);\n\n color: var(--lb-accent-foreground);\n }\n }\n}\n\n.lb-ai-composer-editor {\n max-block-size: 15rem;\n padding: var(--lb-spacing) var(--lb-spacing) 0;\n color: var(--lb-foreground-secondary);\n outline: none;\n resize: none;\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n\n &,\n * {\n line-height: var(--lb-line-height);\n }\n\n :where(p) {\n --lb-line-height-crop: calc(1lh - 1em) / -2;\n\n margin-block-start: 0.25em;\n margin-block-end: 0.25em;\n\n /* Cancel out the impact of line-height on margins/paddings */\n &:where(:first-of-type) {\n margin-block-start: calc(0.125em + var(--lb-line-height-crop));\n }\n\n /* Cancel out the impact of line-height on margins/paddings */\n &:where(:last-of-type) {\n margin-block-end: calc(0.125em + var(--lb-line-height-crop));\n }\n }\n\n &:where([data-disabled]:not([data-disabled=\"false\"])) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n :where([data-placeholder]) {\n color: var(--lb-foreground-moderate);\n }\n}\n\n.lb-ai-composer-footer {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n align-items: center;\n margin-block-start: calc(-0.125 * var(--lb-spacing));\n padding: var(--lb-spacing);\n}\n\n.lb-ai-composer-actions,\n.lb-ai-composer-editor-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n align-items: center;\n}\n\n.lb-ai-composer-editor-actions {\n margin-inline-end: auto;\n}\n\n/*************************************\n * Chat message *\n *************************************/\n\n.lb-ai-chat-message {\n display: flex;\n flex-direction: column;\n gap: var(--lb-spacing);\n color: var(--lb-foreground);\n scroll-margin-block-start: calc(1.5 * var(--lb-spacing));\n}\n\n.lb-ai-chat-user-message {\n :where(.lb-ai-chat-message-content) {\n --lb-dynamic-background: var(--lb-background-foreground-faint);\n --lb-ai-chat-message-content-horizontal-padding: calc(\n 0.9375 * var(--lb-spacing)\n );\n --lb-ai-chat-message-content-vertical-padding: calc(\n 0.5625 * var(--lb-spacing)\n );\n\n min-block-size: calc(\n 1lh + 2 * var(--lb-ai-chat-message-content-vertical-padding)\n );\n padding: var(--lb-ai-chat-message-content-vertical-padding)\n var(--lb-ai-chat-message-content-horizontal-padding);\n\n /**\n * Exactly half the height (line-height + padding) of a one line bubble,\n * so that it doesn't change when the text wraps and the bubble becomes taller.\n */\n border-radius: calc(\n (1lh + 2 * var(--lb-ai-chat-message-content-vertical-padding)) / 2\n );\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n line-height: var(--lb-line-height);\n\n /**\n * Rich messages get more padding than plain text ones.\n */\n &:where(\n :has(h1, h2, h3, h4, h5, h6, ul, ol, blockquote, table, .lb-code-block)\n ) {\n --lb-ai-chat-message-content-horizontal-padding: calc(\n 1.375 * var(--lb-spacing)\n );\n --lb-ai-chat-message-content-vertical-padding: calc(\n 1.125 * var(--lb-spacing)\n );\n }\n\n :where(.lb-code-block) {\n --lb-dynamic-background: var(--lb-background-foreground-subtle);\n\n border: none;\n background: var(--lb-dynamic-background);\n }\n }\n}\n\n.lb-ai-chat-message-deleted {\n position: relative;\n align-items: center;\n inline-size: 100%;\n color: var(--lb-foreground-moderate);\n font-size: 0.875em;\n text-wrap: pretty;\n}\n\n.lb-ai-chat-message-error {\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: flex-start;\n inline-size: 100%;\n color: var(--lb-destructive);\n font-size: 0.875em;\n line-height: var(--lb-line-height);\n text-wrap: pretty;\n word-break: break-word;\n\n :where(.lb-icon-container) {\n block-size: 1lh;\n color: var(--lb-destructive-secondary);\n }\n\n :where(code:not(pre > code)) {\n background: var(--lb-destructive-subtle);\n }\n}\n\n.lb-ai-chat-message-content {\n inline-size: 100%;\n white-space: break-spaces;\n\n &:where(:empty) {\n display: contents;\n }\n\n > :where(.lb-ai-chat-message-text) {\n margin-block: var(--lb-spacing);\n }\n\n > :where(.lb-ai-chat-message-tool-invocation) {\n margin-block: var(--lb-spacing);\n }\n\n > :where(:first-child) {\n margin-block-start: 0;\n }\n\n > :where(:last-child) {\n margin-block-end: 0;\n }\n}\n\n.lb-ai-chat-messages {\n display: flex;\n flex-direction: column;\n gap: calc(1.5 * var(--lb-spacing));\n inline-size: 100%;\n max-inline-size: min(\n calc(var(--lb-ai-chat-container-width) - var(--lb-spacing)),\n calc(100% - 3 * var(--lb-spacing))\n );\n margin-inline: auto;\n padding-block-start: calc(1.5 * var(--lb-spacing));\n padding-block-end: calc(3 * var(--lb-spacing));\n\n :where(.lb-ai-chat-user-message) {\n max-inline-size: 80%;\n margin-inline-start: auto;\n }\n}\n\n.lb-ai-chat-footer {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n inline-size: 100%;\n}\n\n.lb-ai-chat {\n --lb-ai-chat-container-width: 100%;\n\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n background: var(--lb-background);\n isolation: isolate;\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n\n :where(.lb-ai-chat-footer) {\n position: sticky;\n inset-block-end: 0;\n z-index: 1;\n margin-block-start: auto;\n }\n\n :where(.lb-ai-chat-composer) {\n margin-inline: auto;\n }\n}\n\n.lb-ai-chat:where(.lb-ai-chat\\:layout-compact) {\n :where(.lb-ai-chat-footer) {\n background: var(--lb-dynamic-background);\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-block-start: 1px solid var(--lb-foreground-subtle);\n pointer-events: none;\n }\n }\n\n :where(.lb-ai-chat-composer) {\n max-inline-size: min(\n 100%,\n calc(var(--lb-ai-chat-container-width) + var(--lb-spacing))\n );\n }\n}\n\n.lb-ai-chat:where(.lb-ai-chat\\:layout-inset) {\n :where(.lb-ai-chat-footer) {\n padding: var(--lb-spacing);\n padding-block-start: 0;\n\n &::before {\n content: \"\";\n position: absolute;\n inset: 0;\n inset-block-start: calc(-3 * var(--lb-spacing));\n background: linear-gradient(\n to bottom,\n transparent 0%,\n var(--lb-background) calc(3.5 * var(--lb-spacing))\n );\n pointer-events: none;\n }\n }\n\n :where(.lb-ai-chat-composer) {\n max-inline-size: var(--lb-ai-chat-container-width);\n border-radius: calc(2 * var(--lb-radius));\n }\n}\n\n.lb-ai-chat-content {\n position: relative;\n flex: 1 0 auto;\n}\n\n.lb-ai-chat-footer-actions {\n position: absolute;\n inset-inline: 0;\n inset-block-start: calc(-1 * var(--lb-spacing));\n display: flex;\n justify-content: center;\n pointer-events: none;\n transform: translateY(-100%);\n}\n\n.lb-ai-chat-scroll-indicator {\n border-radius: $lb-radius-full;\n color: var(--lb-foreground-moderate);\n opacity: 0;\n pointer-events: none;\n transition-property: transform, opacity, background;\n transform: scale(0.8);\n transform-origin: bottom;\n\n &:where([data-visible]) {\n opacity: 1;\n pointer-events: all;\n transform: scale(1);\n }\n}\n\n.lb-ai-chat-scroll-indicator-button {\n @include button-base;\n\n padding: calc(0.375 * var(--lb-spacing));\n border-radius: $lb-radius-full;\n color: var(--lb-foreground-moderate);\n transition-property: opacity, color;\n\n &:where(:hover, :focus-visible) {\n color: var(--lb-foreground-secondary);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n transition-property: box-shadow;\n }\n\n &:where(:focus-visible)::after {\n box-shadow: inset var(--lb-accent) 0 0 0 2px;\n }\n}\n\n.lb-ai-chat-pending {\n user-select: none;\n animation: lb-animation-shimmer-text 2s cubic-bezier(0.1, 0, 0.9, 1) infinite;\n}\n\n.lb-ai-chat-message-thinking,\n.lb-ai-chat-message-retrieval,\n.lb-ai-chat-message-reasoning {\n margin-block-end: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-chat-message-thinking,\n.lb-ai-chat-message-retrieval {\n inline-size: fit-content;\n max-inline-size: 100%;\n color: var(--lb-foreground-tertiary);\n transition-property: color;\n\n &:where(.lb-ai-chat-pending) {\n color: var(--lb-foreground);\n }\n}\n\n.lb-ai-chat-message-reasoning {\n position: relative;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: calc(-0.375 * var(--lb-spacing));\n border-radius: calc(0.75 * var(--lb-radius));\n pointer-events: none;\n transition-property: box-shadow;\n }\n\n &:where(:has(.lb-collapsible-trigger:focus-visible)) {\n z-index: 1;\n\n &::after {\n box-shadow:\n var(--lb-dynamic-background) 0 0 0 2px,\n var(--lb-accent) 0 0 0 4px;\n }\n }\n\n :where(.lb-collapsible-trigger) {\n display: flex;\n gap: calc(0.25 * var(--lb-spacing));\n align-items: center;\n color: var(--lb-foreground-tertiary);\n transition-property: color;\n\n &:where(.lb-ai-chat-pending) {\n color: var(--lb-foreground);\n }\n }\n\n :where(.lb-collapsible-content) {\n display: flex;\n flex-direction: column;\n gap: calc(0.5 * var(--lb-spacing));\n line-height: var(--lb-line-height);\n\n :where(& > *:first-child) {\n margin-block-start: calc(0.5 * var(--lb-spacing));\n }\n }\n\n :where(.lb-prose) {\n color: var(--lb-foreground);\n font-size: 0.875em;\n opacity: 0.75;\n }\n}\n\n.lb-ai-chat-message-retrieval-query {\n font-weight: 500;\n\n &::before {\n content: \"“\";\n }\n\n &::after {\n content: \"”\";\n }\n}\n\n.lb-ai-tool {\n position: relative;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n transition-property: box-shadow;\n }\n\n &:where(:has(.lb-ai-tool-header:focus-visible)) {\n z-index: 1;\n\n &::after {\n box-shadow:\n var(--lb-dynamic-background) 0 0 0 2px,\n var(--lb-accent) 0 0 0 4px;\n }\n }\n}\n\n.lb-ai-tool-header {\n display: flex;\n gap: calc(0.25 * var(--lb-spacing));\n align-items: center;\n inline-size: 100%;\n}\n\n.lb-ai-tool-header-icon-container,\n.lb-ai-tool-icon {\n display: flex;\n flex: none;\n justify-content: center;\n align-items: center;\n inline-size: $lb-button-size;\n block-size: $lb-button-size;\n}\n\n.lb-ai-tool-header-icon-container {\n color: var(--lb-foreground-moderate);\n\n &:where(:has(.lb-ai-tool-icon)) {\n margin-inline-end: calc(0.25 * var(--lb-spacing));\n }\n}\n\n.lb-ai-tool-icon {\n border-radius: calc(0.75 * var(--lb-radius));\n background: var(--lb-foreground-subtle);\n font-size: 0.875em;\n}\n\n.lb-ai-tool-header-title {\n @include truncate;\n\n user-select: auto;\n}\n\n.lb-ai-tool-header-status {\n flex: none;\n color: var(--lb-foreground-moderate);\n}\n\n.lb-ai-tool:where(.lb-ai-tool\\:variant-block) {\n border-radius: var(--lb-radius);\n box-shadow: inset 0 0 0 1px var(--lb-foreground-subtle);\n\n :where(.lb-ai-tool-header) {\n block-size: calc($lb-button-size + var(--lb-spacing));\n padding-inline: calc(0.5 * var(--lb-spacing));\n color: var(--lb-foreground-secondary);\n }\n\n :where(.lb-ai-tool-header-title) {\n font-size: 0.9375em;\n\n &:where(:first-child) {\n margin-inline-start: calc(0.3125 * var(--lb-spacing));\n }\n }\n\n :where(.lb-ai-tool-header-status) {\n margin-inline-start: auto;\n margin-inline-end: calc(0.1875 * var(--lb-spacing));\n }\n\n :where(.lb-ai-tool-content:not(:empty)) {\n padding: 0 calc(0.75 * var(--lb-spacing)) calc(0.75 * var(--lb-spacing));\n }\n\n &:where([data-result=\"error\"]) {\n box-shadow: inset 0 0 0 1px var(--lb-destructive-moderate);\n }\n}\n\n.lb-ai-tool:where(.lb-ai-tool\\:variant-minimal) {\n &::after {\n inset: calc(-0.375 * var(--lb-spacing));\n border-radius: calc(0.75 * var(--lb-radius));\n }\n\n :where(.lb-ai-tool-header) {\n position: relative;\n inline-size: fit-content;\n max-inline-size: 100%;\n block-size: $lb-button-size;\n color: var(--lb-foreground-tertiary);\n transition-property: color;\n\n &:where(.lb-ai-chat-pending),\n :where(.lb-ai-chat-pending) {\n color: var(--lb-foreground);\n }\n\n /* Invisibly increase the header's hit target size */\n &::before {\n content: \"\";\n position: absolute;\n inset: calc(-0.375 * var(--lb-spacing));\n z-index: -1;\n }\n }\n\n :where(.lb-ai-tool-header-icon-container) {\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n }\n\n :where(.lb-ai-tool-header-title) {\n &:where(:not(:first-child)) {\n margin-inline-start: calc(-0.0625 * var(--lb-spacing));\n }\n }\n\n :where(.lb-ai-tool-content:not(:empty)) {\n padding-block-start: calc(0.5 * var(--lb-spacing));\n }\n\n &:where([data-result=\"cancelled\"]) {\n :where(.lb-ai-tool-header) {\n color: var(--lb-foreground-moderate);\n }\n }\n}\n\n.lb-ai-tool:where([data-result=\"error\"]) {\n &:where(:has(.lb-ai-tool-header:focus-visible)) {\n &::after {\n box-shadow:\n var(--lb-dynamic-background) 0 0 0 2px,\n var(--lb-destructive) 0 0 0 4px;\n }\n }\n\n :where(.lb-ai-tool-header),\n :where(.lb-ai-tool-header-status) {\n color: var(--lb-destructive);\n }\n\n :where(.lb-ai-tool-icon) {\n background: var(--lb-destructive-subtle);\n }\n\n :where(.lb-ai-tool-header-icon-container) {\n color: var(--lb-destructive-secondary);\n }\n}\n\n.lb-ai-tool-inspector {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-tool-confirmation-footer {\n display: flex;\n align-items: center;\n margin-block-start: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-tool-confirmation-actions {\n display: flex;\n gap: calc(0.75 * var(--lb-spacing));\n justify-content: flex-end;\n align-items: center;\n margin-inline-start: auto;\n}\n\n/*************************************\n * Animations *\n *************************************/\n\n@keyframes lb-animation-slide-down {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes lb-animation-slide-up {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes lb-animation-appear {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes lb-animation-disappear {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes lb-animation-shimmer-skeleton {\n from,\n to {\n mask-image: linear-gradient(\n 90deg,\n rgb(0 0 0 / 50%),\n #000,\n #000,\n rgb(0 0 0 / 50%)\n );\n mask-size: 400% 100%;\n }\n\n from {\n mask-position: 200% 0;\n }\n\n to {\n mask-position: -200% 0;\n }\n}\n\n@keyframes lb-animation-shimmer-text {\n from,\n to {\n mask-image: linear-gradient(\n 90deg,\n rgb(0 0 0 / 75%) 36%,\n rgb(0 0 0 / 20%) 48%,\n rgb(0 0 0 / 20%) 52%,\n rgb(0 0 0 / 75%) 64%\n );\n mask-size: 300% 100%;\n }\n\n from {\n mask-position: 100% 0;\n }\n\n to {\n mask-position: 0% 0;\n }\n}\n\n@keyframes lb-animation-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n","/* Because of `all: unset`, we have to re-define some of these values. */\n@mixin button-base {\n all: unset;\n position: relative;\n box-sizing: inherit;\n outline: none;\n cursor: pointer;\n user-select: none;\n transition-timing-function: var(--lb-transition-easing);\n transition-duration: var(--lb-transition-duration);\n -webkit-tap-highlight-color: transparent;\n}\n\n@mixin button {\n @include button-base;\n\n transition-property: background, color, opacity;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n transition-property: box-shadow;\n }\n\n &:where(:focus-visible) {\n z-index: 1;\n\n &::after {\n box-shadow:\n var(--lb-dynamic-background) 0 0 0 2px,\n var(--lb-accent) 0 0 0 4px;\n }\n }\n}\n\n@mixin truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n@mixin capitalize {\n &::first-letter {\n text-transform: capitalize;\n }\n}\n\n@mixin invisible-selection {\n &::selection,\n *::selection {\n background: transparent;\n }\n}\n\n@mixin invisible-scrollbar {\n & {\n -ms-overflow-style: none;\n scrollbar-width: none;\n }\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n@mixin firefox-only {\n @supports (-moz-appearance: none) {\n @content;\n }\n}\n\n@mixin not-firefox {\n @supports not (-moz-appearance: none) {\n @content;\n }\n}\n\n@mixin safari-only {\n @supports (background: -webkit-named-image(i)) {\n @content;\n }\n}\n\n@mixin not-safari {\n @supports not (background: -webkit-named-image(i)) {\n @content;\n }\n}\n"]}