@liveblocks/react-ui 2.25.0-aiprivatebeta0 → 2.25.0-aiprivatebeta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AiChat/AiChat.cjs +23 -12
- package/dist/components/AiChat/AiChat.cjs.map +1 -1
- package/dist/components/AiChat/AiChat.js +23 -12
- package/dist/components/AiChat/AiChat.js.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/styles/index.css +1 -1
- package/styles.css +1 -1
- package/styles.css.map +1 -1
|
@@ -13,7 +13,7 @@ var AiChatAssistantMessage = require('../internal/AiChatAssistantMessage.cjs');
|
|
|
13
13
|
var AiChatComposer = require('../internal/AiChatComposer.cjs');
|
|
14
14
|
var AiChatUserMessage = require('../internal/AiChatUserMessage.cjs');
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
const MIN_DISTANCE_TO_BOTTOM = 50;
|
|
17
17
|
const AiChat = react.forwardRef(function({
|
|
18
18
|
chatId,
|
|
19
19
|
copilotId,
|
|
@@ -76,6 +76,26 @@ const AiChat = react.forwardRef(function({
|
|
|
76
76
|
container.scrollHeight - container.clientHeight - container.scrollTop
|
|
77
77
|
);
|
|
78
78
|
}, [messages]);
|
|
79
|
+
react.useEffect(() => {
|
|
80
|
+
const container = containerRef.current;
|
|
81
|
+
if (container === null)
|
|
82
|
+
return;
|
|
83
|
+
const distanceToBottom2 = container.scrollHeight - container.clientHeight - container.scrollTop;
|
|
84
|
+
if (messages === void 0)
|
|
85
|
+
return;
|
|
86
|
+
const lastMessage = messages[messages.length - 1];
|
|
87
|
+
if (lastMessage !== void 0 && lastMessage.role === "user") {
|
|
88
|
+
container.scrollTo({
|
|
89
|
+
top: container.scrollHeight,
|
|
90
|
+
behavior: "smooth"
|
|
91
|
+
});
|
|
92
|
+
} else if (distanceToBottom2 <= MIN_DISTANCE_TO_BOTTOM) {
|
|
93
|
+
container.scrollTo({
|
|
94
|
+
top: container.scrollHeight,
|
|
95
|
+
behavior: "smooth"
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}, [messages]);
|
|
79
99
|
react.useEffect(() => {
|
|
80
100
|
const container = containerRef.current;
|
|
81
101
|
if (container === null)
|
|
@@ -131,7 +151,7 @@ const AiChat = react.forwardRef(function({
|
|
|
131
151
|
className: "lb-ai-chat-footer-actions",
|
|
132
152
|
children: /* @__PURE__ */ jsxRuntime.jsx("button", {
|
|
133
153
|
className: "lb-ai-chat-scroll-button lb-button",
|
|
134
|
-
"data-visible": distanceToBottom !== null && distanceToBottom >
|
|
154
|
+
"data-visible": distanceToBottom !== null && distanceToBottom > MIN_DISTANCE_TO_BOTTOM ? "" : void 0,
|
|
135
155
|
"data-variant": "secondary",
|
|
136
156
|
onClick: () => {
|
|
137
157
|
const container = containerRef.current;
|
|
@@ -152,16 +172,7 @@ const AiChat = react.forwardRef(function({
|
|
|
152
172
|
chatId,
|
|
153
173
|
copilotId,
|
|
154
174
|
className: "lb-ai-chat-composer",
|
|
155
|
-
overrides:
|
|
156
|
-
onComposerSubmit: () => {
|
|
157
|
-
const container = containerRef.current;
|
|
158
|
-
if (container === null)
|
|
159
|
-
return;
|
|
160
|
-
container.scrollTo({
|
|
161
|
-
top: container.scrollHeight,
|
|
162
|
-
behavior: "smooth"
|
|
163
|
-
});
|
|
164
|
-
}
|
|
175
|
+
overrides: $
|
|
165
176
|
}, chatId)
|
|
166
177
|
]
|
|
167
178
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiChat.cjs","sources":["../../../src/components/AiChat/AiChat.tsx"],"sourcesContent":["import {\n type AiChatContext,\n type ClientToolDefinition,\n type CopilotId,\n kInternal,\n type UiChatMessage,\n} from \"@liveblocks/core\";\nimport { useAiChatMessages, useClient } from \"@liveblocks/react\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n forwardRef,\n type HTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { ChevronDownIcon } from \"../../icons/ChevronDown\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport {\n type ChatComposerOverrides,\n type ChatMessageOverrides,\n type ChatOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../../overrides\";\nimport { classNames } from \"../../utils/class-names\";\nimport { AiChatAssistantMessage } from \"../internal/AiChatAssistantMessage\";\nimport { AiChatComposer } from \"../internal/AiChatComposer\";\nimport { AiChatUserMessage } from \"../internal/AiChatUserMessage\";\n\n/**\n * The number of pixels from the bottom of the messages list to trigger the scroll to bottom.\n */\nconst BOTTOM_THRESHOLD = 100;\n\nexport type AiChatProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The id of the chat the composer belongs to.\n */\n chatId: string;\n /**\n * The id of the copilot to use to send the message.\n */\n copilotId?: CopilotId;\n /**\n * The contextual information to include in the chat. Used by the assistant when generating responses.\n */\n contexts?: AiChatContext[];\n /**\n * The contextual information to include in the chat. Used by the assistant when generating responses.\n */\n tools?: Record<string, ClientToolDefinition>;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides &\n ChatMessageOverrides &\n ChatComposerOverrides &\n ChatOverrides\n >;\n};\nexport const AiChat = forwardRef<HTMLDivElement, AiChatProps>(function (\n {\n chatId,\n copilotId,\n overrides,\n contexts = [],\n tools = {},\n className,\n ...props\n },\n forwardedRef\n) {\n const { messages, isLoading, error } = useAiChatMessages(chatId);\n const $ = useOverrides(overrides);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [distanceToBottom, setDistanceToBottom] = useState<number | null>(null);\n const client = useClient();\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n forwardedRef,\n () => containerRef.current,\n []\n );\n\n // Add the provided contextual information to the chat on mount and remove on unmount\n // Note: 'contexts' will most likely be a new object on each render (unless user passes a stable object), but this won't be an issue as context addition and removal is a quick operation\n useEffect(() => {\n const unregister = contexts.map((context) =>\n client[kInternal].ai.registerChatContext(chatId, context)\n );\n return () => {\n unregister.forEach((unregister) => unregister());\n };\n }, [client, chatId, contexts]);\n\n // Register the provided tools to the chat on mount and unregister them on unmount\n useEffect(() => {\n Object.entries(tools).map(([key, value]) =>\n client[kInternal].ai.registerChatTool(chatId, key, value)\n );\n return () => {\n Object.entries(tools).map(([key]) =>\n client[kInternal].ai.unregisterChatTool(chatId, key)\n );\n };\n }, [client, chatId, tools]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n function handleScrollChange() {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }\n container.addEventListener(\"scroll\", handleScrollChange);\n return () => {\n container.removeEventListener(\"scroll\", handleScrollChange);\n };\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n const observer = new ResizeObserver(() => {\n const container = containerRef.current;\n if (container === null) return;\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const scrollToBottomCallbackRef = useRef<() => void>(undefined);\n if (scrollToBottomCallbackRef.current === undefined) {\n scrollToBottomCallbackRef.current = function () {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"instant\",\n });\n };\n }\n\n return (\n <div\n ref={containerRef}\n {...props}\n className={classNames(\"lb-root lb-ai-chat\", className)}\n >\n {isLoading ? (\n <div className=\"lb-ai-chat-loading lb-loading\">\n <SpinnerIcon />\n </div>\n ) : error !== undefined ? (\n <div className=\"lb-ai-chat-error lb-error\">\n {$.GET_CHAT_MESSAGES_ERROR(error)}\n </div>\n ) : (\n <div className=\"lb-ai-chat-messages\">\n <Messages\n messages={messages}\n overrides={$}\n onDistanceToBottomChange={scrollToBottomCallbackRef.current}\n />\n </div>\n )}\n\n <div className=\"lb-ai-chat-footer\">\n <div className=\"lb-ai-chat-footer-actions\">\n <button\n className=\"lb-ai-chat-scroll-button lb-button\"\n data-visible={\n distanceToBottom !== null && distanceToBottom > BOTTOM_THRESHOLD\n ? \"\"\n : undefined\n }\n data-variant=\"secondary\"\n onClick={() => {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }}\n >\n <span className=\"lb-icon-container\">\n <ChevronDownIcon />\n </span>\n </button>\n </div>\n <AiChatComposer\n key={chatId}\n chatId={chatId}\n copilotId={copilotId}\n className=\"lb-ai-chat-composer\"\n overrides={$}\n onComposerSubmit={() => {\n const container = containerRef.current;\n if (container === null) return;\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }}\n />\n </div>\n </div>\n );\n});\n\nfunction Messages({\n messages,\n overrides,\n onDistanceToBottomChange,\n}: {\n messages: readonly UiChatMessage[];\n overrides: Partial<GlobalOverrides & ChatMessageOverrides>;\n onDistanceToBottomChange: () => void;\n}) {\n const $ = useOverrides(overrides);\n\n useLayoutEffect(() => {\n onDistanceToBottomChange();\n }, [onDistanceToBottomChange]);\n\n return messages.map((message) => {\n if (message.role === \"user\") {\n return (\n <AiChatUserMessage\n key={message.id}\n message={message}\n overrides={$}\n className=\"lb-ai-chat-messages-user-message\"\n />\n );\n } else if (message.role === \"assistant\") {\n return (\n <AiChatAssistantMessage\n key={message.id}\n message={message}\n overrides={$}\n className=\"lb-ai-chat-messages-assistant-message\"\n />\n );\n } else {\n return null;\n }\n });\n}\n"],"names":["forwardRef","overrides","useAiChatMessages","useOverrides","useRef","useState","useClient","useImperativeHandle","useEffect","kInternal","unregister","container","jsxs","classNames","jsx","SpinnerIcon","ChevronDownIcon","AiChatComposer","useLayoutEffect","AiChatUserMessage","AiChatAssistantMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AiChat.cjs","sources":["../../../src/components/AiChat/AiChat.tsx"],"sourcesContent":["import {\n type AiChatContext,\n type ClientToolDefinition,\n type CopilotId,\n kInternal,\n type UiChatMessage,\n} from \"@liveblocks/core\";\nimport { useAiChatMessages, useClient } from \"@liveblocks/react\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n forwardRef,\n type HTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { ChevronDownIcon } from \"../../icons/ChevronDown\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport {\n type ChatComposerOverrides,\n type ChatMessageOverrides,\n type ChatOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../../overrides\";\nimport { classNames } from \"../../utils/class-names\";\nimport { AiChatAssistantMessage } from \"../internal/AiChatAssistantMessage\";\nimport { AiChatComposer } from \"../internal/AiChatComposer\";\nimport { AiChatUserMessage } from \"../internal/AiChatUserMessage\";\n\n/**\n * The number of pixels from the bottom of the messages list to trigger the scroll to bottom.\n */\nconst MIN_DISTANCE_TO_BOTTOM = 50;\n\nexport type AiChatProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The id of the chat the composer belongs to.\n */\n chatId: string;\n /**\n * The id of the copilot to use to send the message.\n */\n copilotId?: string;\n /**\n * The contextual information to include in the chat. Used by the assistant when generating responses.\n */\n contexts?: AiChatContext[];\n /**\n * The contextual information to include in the chat. Used by the assistant when generating responses.\n */\n tools?: Record<string, ClientToolDefinition>;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides &\n ChatMessageOverrides &\n ChatComposerOverrides &\n ChatOverrides\n >;\n};\nexport const AiChat = forwardRef<HTMLDivElement, AiChatProps>(function (\n {\n chatId,\n copilotId,\n overrides,\n contexts = [],\n tools = {},\n className,\n ...props\n },\n forwardedRef\n) {\n const { messages, isLoading, error } = useAiChatMessages(chatId);\n const $ = useOverrides(overrides);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [distanceToBottom, setDistanceToBottom] = useState<number | null>(null);\n const client = useClient();\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n forwardedRef,\n () => containerRef.current,\n []\n );\n\n // Add the provided contextual information to the chat on mount and remove on unmount\n // Note: 'contexts' will most likely be a new object on each render (unless user passes a stable object), but this won't be an issue as context addition and removal is a quick operation\n useEffect(() => {\n const unregister = contexts.map((context) =>\n client[kInternal].ai.registerChatContext(chatId, context)\n );\n return () => {\n unregister.forEach((unregister) => unregister());\n };\n }, [client, chatId, contexts]);\n\n // Register the provided tools to the chat on mount and unregister them on unmount\n useEffect(() => {\n Object.entries(tools).map(([key, value]) =>\n client[kInternal].ai.registerChatTool(chatId, key, value)\n );\n return () => {\n Object.entries(tools).map(([key]) =>\n client[kInternal].ai.unregisterChatTool(chatId, key)\n );\n };\n }, [client, chatId, tools]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n function handleScrollChange() {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }\n container.addEventListener(\"scroll\", handleScrollChange);\n return () => {\n container.removeEventListener(\"scroll\", handleScrollChange);\n };\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n const distanceToBottom =\n container.scrollHeight - container.clientHeight - container.scrollTop;\n\n if (messages === undefined) return;\n const lastMessage = messages[messages.length - 1];\n if (lastMessage !== undefined && lastMessage.role === \"user\") {\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n } else if (distanceToBottom <= MIN_DISTANCE_TO_BOTTOM) {\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n const observer = new ResizeObserver(() => {\n const container = containerRef.current;\n if (container === null) return;\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const scrollToBottomCallbackRef = useRef<() => void>(undefined);\n if (scrollToBottomCallbackRef.current === undefined) {\n scrollToBottomCallbackRef.current = function () {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"instant\",\n });\n };\n }\n\n return (\n <div\n ref={containerRef}\n {...props}\n className={classNames(\"lb-root lb-ai-chat\", className)}\n >\n {isLoading ? (\n <div className=\"lb-ai-chat-loading lb-loading\">\n <SpinnerIcon />\n </div>\n ) : error !== undefined ? (\n <div className=\"lb-ai-chat-error lb-error\">\n {$.GET_CHAT_MESSAGES_ERROR(error)}\n </div>\n ) : (\n <div className=\"lb-ai-chat-messages\">\n <Messages\n messages={messages}\n overrides={$}\n onDistanceToBottomChange={scrollToBottomCallbackRef.current}\n />\n </div>\n )}\n\n <div className=\"lb-ai-chat-footer\">\n <div className=\"lb-ai-chat-footer-actions\">\n <button\n className=\"lb-ai-chat-scroll-button lb-button\"\n data-visible={\n distanceToBottom !== null &&\n distanceToBottom > MIN_DISTANCE_TO_BOTTOM\n ? \"\"\n : undefined\n }\n data-variant=\"secondary\"\n onClick={() => {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }}\n >\n <span className=\"lb-icon-container\">\n <ChevronDownIcon />\n </span>\n </button>\n </div>\n <AiChatComposer\n key={chatId}\n chatId={chatId}\n copilotId={copilotId as CopilotId}\n className=\"lb-ai-chat-composer\"\n overrides={$}\n />\n </div>\n </div>\n );\n});\n\nfunction Messages({\n messages,\n overrides,\n onDistanceToBottomChange,\n}: {\n messages: readonly UiChatMessage[];\n overrides: Partial<GlobalOverrides & ChatMessageOverrides>;\n onDistanceToBottomChange: () => void;\n}) {\n const $ = useOverrides(overrides);\n\n useLayoutEffect(() => {\n onDistanceToBottomChange();\n }, [onDistanceToBottomChange]);\n\n return messages.map((message) => {\n if (message.role === \"user\") {\n return (\n <AiChatUserMessage\n key={message.id}\n message={message}\n overrides={$}\n className=\"lb-ai-chat-messages-user-message\"\n />\n );\n } else if (message.role === \"assistant\") {\n return (\n <AiChatAssistantMessage\n key={message.id}\n message={message}\n overrides={$}\n className=\"lb-ai-chat-messages-assistant-message\"\n />\n );\n } else {\n return null;\n }\n });\n}\n"],"names":["forwardRef","overrides","useAiChatMessages","useOverrides","useRef","useState","useClient","useImperativeHandle","useEffect","kInternal","unregister","container","distanceToBottom","jsxs","classNames","jsx","SpinnerIcon","ChevronDownIcon","AiChatComposer","useLayoutEffect","AiChatUserMessage","AiChatAssistantMessage"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { AiChatAssistantMessage } from '../internal/AiChatAssistantMessage.js';
|
|
|
11
11
|
import { AiChatComposer } from '../internal/AiChatComposer.js';
|
|
12
12
|
import { AiChatUserMessage } from '../internal/AiChatUserMessage.js';
|
|
13
13
|
|
|
14
|
-
const
|
|
14
|
+
const MIN_DISTANCE_TO_BOTTOM = 50;
|
|
15
15
|
const AiChat = forwardRef(function({
|
|
16
16
|
chatId,
|
|
17
17
|
copilotId,
|
|
@@ -74,6 +74,26 @@ const AiChat = forwardRef(function({
|
|
|
74
74
|
container.scrollHeight - container.clientHeight - container.scrollTop
|
|
75
75
|
);
|
|
76
76
|
}, [messages]);
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
const container = containerRef.current;
|
|
79
|
+
if (container === null)
|
|
80
|
+
return;
|
|
81
|
+
const distanceToBottom2 = container.scrollHeight - container.clientHeight - container.scrollTop;
|
|
82
|
+
if (messages === void 0)
|
|
83
|
+
return;
|
|
84
|
+
const lastMessage = messages[messages.length - 1];
|
|
85
|
+
if (lastMessage !== void 0 && lastMessage.role === "user") {
|
|
86
|
+
container.scrollTo({
|
|
87
|
+
top: container.scrollHeight,
|
|
88
|
+
behavior: "smooth"
|
|
89
|
+
});
|
|
90
|
+
} else if (distanceToBottom2 <= MIN_DISTANCE_TO_BOTTOM) {
|
|
91
|
+
container.scrollTo({
|
|
92
|
+
top: container.scrollHeight,
|
|
93
|
+
behavior: "smooth"
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}, [messages]);
|
|
77
97
|
useEffect(() => {
|
|
78
98
|
const container = containerRef.current;
|
|
79
99
|
if (container === null)
|
|
@@ -129,7 +149,7 @@ const AiChat = forwardRef(function({
|
|
|
129
149
|
className: "lb-ai-chat-footer-actions",
|
|
130
150
|
children: /* @__PURE__ */ jsx("button", {
|
|
131
151
|
className: "lb-ai-chat-scroll-button lb-button",
|
|
132
|
-
"data-visible": distanceToBottom !== null && distanceToBottom >
|
|
152
|
+
"data-visible": distanceToBottom !== null && distanceToBottom > MIN_DISTANCE_TO_BOTTOM ? "" : void 0,
|
|
133
153
|
"data-variant": "secondary",
|
|
134
154
|
onClick: () => {
|
|
135
155
|
const container = containerRef.current;
|
|
@@ -150,16 +170,7 @@ const AiChat = forwardRef(function({
|
|
|
150
170
|
chatId,
|
|
151
171
|
copilotId,
|
|
152
172
|
className: "lb-ai-chat-composer",
|
|
153
|
-
overrides:
|
|
154
|
-
onComposerSubmit: () => {
|
|
155
|
-
const container = containerRef.current;
|
|
156
|
-
if (container === null)
|
|
157
|
-
return;
|
|
158
|
-
container.scrollTo({
|
|
159
|
-
top: container.scrollHeight,
|
|
160
|
-
behavior: "smooth"
|
|
161
|
-
});
|
|
162
|
-
}
|
|
173
|
+
overrides: $
|
|
163
174
|
}, chatId)
|
|
164
175
|
]
|
|
165
176
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiChat.js","sources":["../../../src/components/AiChat/AiChat.tsx"],"sourcesContent":["import {\n type AiChatContext,\n type ClientToolDefinition,\n type CopilotId,\n kInternal,\n type UiChatMessage,\n} from \"@liveblocks/core\";\nimport { useAiChatMessages, useClient } from \"@liveblocks/react\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n forwardRef,\n type HTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { ChevronDownIcon } from \"../../icons/ChevronDown\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport {\n type ChatComposerOverrides,\n type ChatMessageOverrides,\n type ChatOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../../overrides\";\nimport { classNames } from \"../../utils/class-names\";\nimport { AiChatAssistantMessage } from \"../internal/AiChatAssistantMessage\";\nimport { AiChatComposer } from \"../internal/AiChatComposer\";\nimport { AiChatUserMessage } from \"../internal/AiChatUserMessage\";\n\n/**\n * The number of pixels from the bottom of the messages list to trigger the scroll to bottom.\n */\nconst BOTTOM_THRESHOLD = 100;\n\nexport type AiChatProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The id of the chat the composer belongs to.\n */\n chatId: string;\n /**\n * The id of the copilot to use to send the message.\n */\n copilotId?: CopilotId;\n /**\n * The contextual information to include in the chat. Used by the assistant when generating responses.\n */\n contexts?: AiChatContext[];\n /**\n * The contextual information to include in the chat. Used by the assistant when generating responses.\n */\n tools?: Record<string, ClientToolDefinition>;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides &\n ChatMessageOverrides &\n ChatComposerOverrides &\n ChatOverrides\n >;\n};\nexport const AiChat = forwardRef<HTMLDivElement, AiChatProps>(function (\n {\n chatId,\n copilotId,\n overrides,\n contexts = [],\n tools = {},\n className,\n ...props\n },\n forwardedRef\n) {\n const { messages, isLoading, error } = useAiChatMessages(chatId);\n const $ = useOverrides(overrides);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [distanceToBottom, setDistanceToBottom] = useState<number | null>(null);\n const client = useClient();\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n forwardedRef,\n () => containerRef.current,\n []\n );\n\n // Add the provided contextual information to the chat on mount and remove on unmount\n // Note: 'contexts' will most likely be a new object on each render (unless user passes a stable object), but this won't be an issue as context addition and removal is a quick operation\n useEffect(() => {\n const unregister = contexts.map((context) =>\n client[kInternal].ai.registerChatContext(chatId, context)\n );\n return () => {\n unregister.forEach((unregister) => unregister());\n };\n }, [client, chatId, contexts]);\n\n // Register the provided tools to the chat on mount and unregister them on unmount\n useEffect(() => {\n Object.entries(tools).map(([key, value]) =>\n client[kInternal].ai.registerChatTool(chatId, key, value)\n );\n return () => {\n Object.entries(tools).map(([key]) =>\n client[kInternal].ai.unregisterChatTool(chatId, key)\n );\n };\n }, [client, chatId, tools]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n function handleScrollChange() {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }\n container.addEventListener(\"scroll\", handleScrollChange);\n return () => {\n container.removeEventListener(\"scroll\", handleScrollChange);\n };\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n const observer = new ResizeObserver(() => {\n const container = containerRef.current;\n if (container === null) return;\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const scrollToBottomCallbackRef = useRef<() => void>(undefined);\n if (scrollToBottomCallbackRef.current === undefined) {\n scrollToBottomCallbackRef.current = function () {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"instant\",\n });\n };\n }\n\n return (\n <div\n ref={containerRef}\n {...props}\n className={classNames(\"lb-root lb-ai-chat\", className)}\n >\n {isLoading ? (\n <div className=\"lb-ai-chat-loading lb-loading\">\n <SpinnerIcon />\n </div>\n ) : error !== undefined ? (\n <div className=\"lb-ai-chat-error lb-error\">\n {$.GET_CHAT_MESSAGES_ERROR(error)}\n </div>\n ) : (\n <div className=\"lb-ai-chat-messages\">\n <Messages\n messages={messages}\n overrides={$}\n onDistanceToBottomChange={scrollToBottomCallbackRef.current}\n />\n </div>\n )}\n\n <div className=\"lb-ai-chat-footer\">\n <div className=\"lb-ai-chat-footer-actions\">\n <button\n className=\"lb-ai-chat-scroll-button lb-button\"\n data-visible={\n distanceToBottom !== null && distanceToBottom > BOTTOM_THRESHOLD\n ? \"\"\n : undefined\n }\n data-variant=\"secondary\"\n onClick={() => {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }}\n >\n <span className=\"lb-icon-container\">\n <ChevronDownIcon />\n </span>\n </button>\n </div>\n <AiChatComposer\n key={chatId}\n chatId={chatId}\n copilotId={copilotId}\n className=\"lb-ai-chat-composer\"\n overrides={$}\n onComposerSubmit={() => {\n const container = containerRef.current;\n if (container === null) return;\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }}\n />\n </div>\n </div>\n );\n});\n\nfunction Messages({\n messages,\n overrides,\n onDistanceToBottomChange,\n}: {\n messages: readonly UiChatMessage[];\n overrides: Partial<GlobalOverrides & ChatMessageOverrides>;\n onDistanceToBottomChange: () => void;\n}) {\n const $ = useOverrides(overrides);\n\n useLayoutEffect(() => {\n onDistanceToBottomChange();\n }, [onDistanceToBottomChange]);\n\n return messages.map((message) => {\n if (message.role === \"user\") {\n return (\n <AiChatUserMessage\n key={message.id}\n message={message}\n overrides={$}\n className=\"lb-ai-chat-messages-user-message\"\n />\n );\n } else if (message.role === \"assistant\") {\n return (\n <AiChatAssistantMessage\n key={message.id}\n message={message}\n overrides={$}\n className=\"lb-ai-chat-messages-assistant-message\"\n />\n );\n } else {\n return null;\n }\n });\n}\n"],"names":["unregister","container"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AiChat.js","sources":["../../../src/components/AiChat/AiChat.tsx"],"sourcesContent":["import {\n type AiChatContext,\n type ClientToolDefinition,\n type CopilotId,\n kInternal,\n type UiChatMessage,\n} from \"@liveblocks/core\";\nimport { useAiChatMessages, useClient } from \"@liveblocks/react\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n forwardRef,\n type HTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { ChevronDownIcon } from \"../../icons/ChevronDown\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport {\n type ChatComposerOverrides,\n type ChatMessageOverrides,\n type ChatOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../../overrides\";\nimport { classNames } from \"../../utils/class-names\";\nimport { AiChatAssistantMessage } from \"../internal/AiChatAssistantMessage\";\nimport { AiChatComposer } from \"../internal/AiChatComposer\";\nimport { AiChatUserMessage } from \"../internal/AiChatUserMessage\";\n\n/**\n * The number of pixels from the bottom of the messages list to trigger the scroll to bottom.\n */\nconst MIN_DISTANCE_TO_BOTTOM = 50;\n\nexport type AiChatProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The id of the chat the composer belongs to.\n */\n chatId: string;\n /**\n * The id of the copilot to use to send the message.\n */\n copilotId?: string;\n /**\n * The contextual information to include in the chat. Used by the assistant when generating responses.\n */\n contexts?: AiChatContext[];\n /**\n * The contextual information to include in the chat. Used by the assistant when generating responses.\n */\n tools?: Record<string, ClientToolDefinition>;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides &\n ChatMessageOverrides &\n ChatComposerOverrides &\n ChatOverrides\n >;\n};\nexport const AiChat = forwardRef<HTMLDivElement, AiChatProps>(function (\n {\n chatId,\n copilotId,\n overrides,\n contexts = [],\n tools = {},\n className,\n ...props\n },\n forwardedRef\n) {\n const { messages, isLoading, error } = useAiChatMessages(chatId);\n const $ = useOverrides(overrides);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [distanceToBottom, setDistanceToBottom] = useState<number | null>(null);\n const client = useClient();\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n forwardedRef,\n () => containerRef.current,\n []\n );\n\n // Add the provided contextual information to the chat on mount and remove on unmount\n // Note: 'contexts' will most likely be a new object on each render (unless user passes a stable object), but this won't be an issue as context addition and removal is a quick operation\n useEffect(() => {\n const unregister = contexts.map((context) =>\n client[kInternal].ai.registerChatContext(chatId, context)\n );\n return () => {\n unregister.forEach((unregister) => unregister());\n };\n }, [client, chatId, contexts]);\n\n // Register the provided tools to the chat on mount and unregister them on unmount\n useEffect(() => {\n Object.entries(tools).map(([key, value]) =>\n client[kInternal].ai.registerChatTool(chatId, key, value)\n );\n return () => {\n Object.entries(tools).map(([key]) =>\n client[kInternal].ai.unregisterChatTool(chatId, key)\n );\n };\n }, [client, chatId, tools]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n function handleScrollChange() {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }\n container.addEventListener(\"scroll\", handleScrollChange);\n return () => {\n container.removeEventListener(\"scroll\", handleScrollChange);\n };\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n const distanceToBottom =\n container.scrollHeight - container.clientHeight - container.scrollTop;\n\n if (messages === undefined) return;\n const lastMessage = messages[messages.length - 1];\n if (lastMessage !== undefined && lastMessage.role === \"user\") {\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n } else if (distanceToBottom <= MIN_DISTANCE_TO_BOTTOM) {\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n const observer = new ResizeObserver(() => {\n const container = containerRef.current;\n if (container === null) return;\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const scrollToBottomCallbackRef = useRef<() => void>(undefined);\n if (scrollToBottomCallbackRef.current === undefined) {\n scrollToBottomCallbackRef.current = function () {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"instant\",\n });\n };\n }\n\n return (\n <div\n ref={containerRef}\n {...props}\n className={classNames(\"lb-root lb-ai-chat\", className)}\n >\n {isLoading ? (\n <div className=\"lb-ai-chat-loading lb-loading\">\n <SpinnerIcon />\n </div>\n ) : error !== undefined ? (\n <div className=\"lb-ai-chat-error lb-error\">\n {$.GET_CHAT_MESSAGES_ERROR(error)}\n </div>\n ) : (\n <div className=\"lb-ai-chat-messages\">\n <Messages\n messages={messages}\n overrides={$}\n onDistanceToBottomChange={scrollToBottomCallbackRef.current}\n />\n </div>\n )}\n\n <div className=\"lb-ai-chat-footer\">\n <div className=\"lb-ai-chat-footer-actions\">\n <button\n className=\"lb-ai-chat-scroll-button lb-button\"\n data-visible={\n distanceToBottom !== null &&\n distanceToBottom > MIN_DISTANCE_TO_BOTTOM\n ? \"\"\n : undefined\n }\n data-variant=\"secondary\"\n onClick={() => {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }}\n >\n <span className=\"lb-icon-container\">\n <ChevronDownIcon />\n </span>\n </button>\n </div>\n <AiChatComposer\n key={chatId}\n chatId={chatId}\n copilotId={copilotId as CopilotId}\n className=\"lb-ai-chat-composer\"\n overrides={$}\n />\n </div>\n </div>\n );\n});\n\nfunction Messages({\n messages,\n overrides,\n onDistanceToBottomChange,\n}: {\n messages: readonly UiChatMessage[];\n overrides: Partial<GlobalOverrides & ChatMessageOverrides>;\n onDistanceToBottomChange: () => void;\n}) {\n const $ = useOverrides(overrides);\n\n useLayoutEffect(() => {\n onDistanceToBottomChange();\n }, [onDistanceToBottomChange]);\n\n return messages.map((message) => {\n if (message.role === \"user\") {\n return (\n <AiChatUserMessage\n key={message.id}\n message={message}\n overrides={$}\n className=\"lb-ai-chat-messages-user-message\"\n />\n );\n } else if (message.role === \"assistant\") {\n return (\n <AiChatAssistantMessage\n key={message.id}\n message={message}\n overrides={$}\n className=\"lb-ai-chat-messages-assistant-message\"\n />\n );\n } else {\n return null;\n }\n });\n}\n"],"names":["unregister","container","distanceToBottom"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ElementType, ComponentPropsWithoutRef, ReactNode, HTMLAttributes, FormEvent, ComponentType, RefAttributes, MouseEvent, ComponentProps, PropsWithChildren } from 'react';
|
|
3
|
-
import { CommentAttachment,
|
|
3
|
+
import { CommentAttachment, AiChatContext, ClientToolDefinition, CommentBody, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
4
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
type Direction = "ltr" | "rtl";
|
|
@@ -124,7 +124,7 @@ type AiChatProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
124
124
|
/**
|
|
125
125
|
* The id of the copilot to use to send the message.
|
|
126
126
|
*/
|
|
127
|
-
copilotId?:
|
|
127
|
+
copilotId?: string;
|
|
128
128
|
/**
|
|
129
129
|
* The contextual information to include in the chat. Used by the assistant when generating responses.
|
|
130
130
|
*/
|
|
@@ -146,7 +146,7 @@ declare const AiChat: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElem
|
|
|
146
146
|
/**
|
|
147
147
|
* The id of the copilot to use to send the message.
|
|
148
148
|
*/
|
|
149
|
-
copilotId?:
|
|
149
|
+
copilotId?: string;
|
|
150
150
|
/**
|
|
151
151
|
* The contextual information to include in the chat. Used by the assistant when generating responses.
|
|
152
152
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ElementType, ComponentPropsWithoutRef, ReactNode, HTMLAttributes, FormEvent, ComponentType, RefAttributes, MouseEvent, ComponentProps, PropsWithChildren } from 'react';
|
|
3
|
-
import { CommentAttachment,
|
|
3
|
+
import { CommentAttachment, AiChatContext, ClientToolDefinition, CommentBody, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
4
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
type Direction = "ltr" | "rtl";
|
|
@@ -124,7 +124,7 @@ type AiChatProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
124
124
|
/**
|
|
125
125
|
* The id of the copilot to use to send the message.
|
|
126
126
|
*/
|
|
127
|
-
copilotId?:
|
|
127
|
+
copilotId?: string;
|
|
128
128
|
/**
|
|
129
129
|
* The contextual information to include in the chat. Used by the assistant when generating responses.
|
|
130
130
|
*/
|
|
@@ -146,7 +146,7 @@ declare const AiChat: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElem
|
|
|
146
146
|
/**
|
|
147
147
|
* The id of the copilot to use to send the message.
|
|
148
148
|
*/
|
|
149
|
-
copilotId?:
|
|
149
|
+
copilotId?: string;
|
|
150
150
|
/**
|
|
151
151
|
* The contextual information to include in the chat. Used by the assistant when generating responses.
|
|
152
152
|
*/
|
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 "2.25.0-
|
|
4
|
+
const PKG_VERSION = typeof "2.25.0-aiprivatebeta2" === "string" && "2.25.0-aiprivatebeta2";
|
|
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 "2.25.0-
|
|
2
|
+
const PKG_VERSION = typeof "2.25.0-aiprivatebeta2" === "string" && "2.25.0-aiprivatebeta2";
|
|
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": "2.25.0-
|
|
3
|
+
"version": "2.25.0-aiprivatebeta2",
|
|
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": "2.25.0-
|
|
80
|
-
"@liveblocks/core": "2.25.0-
|
|
81
|
-
"@liveblocks/react": "2.25.0-
|
|
79
|
+
"@liveblocks/client": "2.25.0-aiprivatebeta2",
|
|
80
|
+
"@liveblocks/core": "2.25.0-aiprivatebeta2",
|
|
81
|
+
"@liveblocks/react": "2.25.0-aiprivatebeta2",
|
|
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",
|
package/src/styles/index.css
CHANGED
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-small:0 0 0 1px #0000000a,0 2px 6px #0000000f,0 8px 26px #00000014;--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-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=outline]){box-shadow:inset 0 0 0 1px var(--lb-foreground-subtle);transition-property:background,color,opacity,box-shadow}.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-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}@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%;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}: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-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-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))}.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){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{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-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-ai-chat-composer-form:where(:has(.lb-ai-chat-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-chat-composer-form:where(:has(.lb-ai-chat-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-chat-composer-form{background:var(--lb-dynamic-background);color:var(--lb-foreground);transition-property:background;position:relative}.lb-ai-chat-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-chat-composer-editor,.lb-ai-chat-composer-editor *{line-height:var(--lb-line-height)}.lb-ai-chat-composer-editor :where(p){--lb-line-height-crop:calc(1lh - 1em)/-2;margin-block:.25em}.lb-ai-chat-composer-editor :where(p):where(:first-of-type){margin-block-start:calc(.125em + var(--lb-line-height-crop))}.lb-ai-chat-composer-editor :where(p):where(:last-of-type){margin-block-end:calc(.125em + var(--lb-line-height-crop))}.lb-ai-chat-composer-editor:where([data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}.lb-ai-chat-composer-editor :where([data-placeholder]){color:var(--lb-foreground-moderate)}.lb-ai-chat-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-chat-composer-actions,.lb-ai-chat-composer-editor-actions{gap:calc(.125*var(--lb-spacing));align-items:center;display:flex}.lb-ai-chat-composer-editor-actions{margin-inline-end:auto}.lb-ai-chat-composer-attachments{gap:calc(.75*var(--lb-spacing));padding-inline:var(--lb-spacing);flex-direction:column;padding-block-start:calc(.75*var(--lb-spacing));display:flex}.lb-ai-chat-composer-editor-container:where([data-drop]) *{pointer-events:none}.lb-ai-chat-user-message{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-ai-chat-user-message,.lb-ai-chat-user-message *{line-height:var(--lb-line-height)}.lb-ai-chat-user-message-content{padding:calc(.75*var(--lb-spacing))calc(1.375*var(--lb-spacing));border-radius:calc(3*var(--lb-radius));background:var(--lb-background-foreground-faint);color:var(--lb-foreground);white-space:break-spaces}.lb-ai-chat-user-message-attachments{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-ai-chat-user-message-media-attachments{gap:calc(.75*var(--lb-spacing));flex-wrap:wrap;justify-content:flex-end;display:flex}.lb-ai-chat-user-message-attachment{flex-shrink:1;flex-basis:300px}.lb-ai-chat-assistant-message{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-ai-chat-assistant-message-content{inline-size:100%}.lb-ai-chat-assistant-message-text-part{flex-direction:column;display:flex}.lb-ai-chat-assistant-message-text-part,.lb-ai-chat-assistant-message-text-part *{line-height:var(--lb-line-height)}.lb-ai-chat-assistant-message-text-part :where(p){margin-block:.25em}.lb-ai-chat-assistant-message-text-part :where(h1,h2,h3,h4,h5,h6){margin-block:.5em;font-weight:600}.lb-ai-chat-assistant-message-text-part :where(h1){font-size:1.75em}.lb-ai-chat-assistant-message-text-part :where(h2){font-size:1.5em}.lb-ai-chat-assistant-message-text-part :where(h3){font-size:1.25em}.lb-ai-chat-assistant-message-text-part :where(h4){font-size:1.125em}.lb-ai-chat-assistant-message-text-part :where(h5){font-size:1em}.lb-ai-chat-assistant-message-text-part :where(h6){font-size:.875em}.lb-ai-chat-assistant-message-text-part :where(hr){margin-block:calc(.75*var(--lb-spacing));border-block-start:1px solid var(--lb-foreground-subtle)}.lb-ai-chat-assistant-message-text-part :where(blockquote){padding:calc(.375*var(--lb-spacing))calc(1.5*var(--lb-spacing));margin-block-start:calc(.75*var(--lb-spacing));position:relative}.lb-ai-chat-assistant-message-text-part :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-ai-chat-assistant-message-text-part :where(ol,ul){margin-block:calc(.75*var(--lb-spacing));padding-inline-start:calc(1.5*var(--lb-spacing));list-style-position:outside}.lb-ai-chat-assistant-message-text-part :where(ul){list-style-type:disc}.lb-ai-chat-assistant-message-text-part :where(ol){list-style-type:decimal}.lb-ai-chat-assistant-message-text-part :where(li){margin-block:calc(.25*var(--lb-spacing))}.lb-ai-chat-assistant-message-text-part :where(span:has(code)+span code){border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:0}.lb-ai-chat-assistant-message-text-part :where(span:has(code):has(+span code) code){border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:0}.lb-ai-chat-assistant-message-text-part :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-ai-chat-assistant-message-text-part :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-ai-chat-assistant-message-text-part :where(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-ai-chat-assistant-message-text-part :where(pre){padding:var(--lb-spacing);border-radius:var(--lb-radius);-webkit-box-decoration-break:clone;box-decoration-break:clone;box-shadow:var(--lb-foreground-subtle)0 0 0 1px inset;margin-block:.25em}.lb-ai-chat-assistant-message-text-part :where(pre) :where(code){background:0 0;padding:0}.lb-ai-chat-assistant-message-text-part :where(strong){font-weight:600}.lb-ai-chat-assistant-message-thinking{text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;user-select:none;animation:8s linear infinite lb-animation-shimmer-small;overflow:hidden}.lb-ai-chat-user-message-deleted,.lb-ai-chat-assistant-message-deleted{inline-size:100%;color:var(--lb-foreground-moderate);text-wrap:balance;align-items:center;font-size:.875em;position:relative}.lb-asssitant-chat-message-error{--lb-dynamic-background:var(--lb-background-destructive-subtle);gap:calc(.5*var(--lb-spacing));inline-size:100%;padding:calc(.75*var(--lb-spacing));border-radius:var(--lb-radius);background:var(--lb-dynamic-background);color:var(--lb-destructive);text-wrap:balance;align-items:center;font-size:.875em;display:flex;position:relative}.lb-asssitant-chat-message-error :where(.lb-icon-container){color:var(--lb-destructive-secondary)}.lb-ai-chat-assistant-message-reasoning-part{inline-size:100%;color:var(--lb-foreground-secondary);flex-direction:column;font-size:.875em;display:flex;position:relative}.lb-ai-chat-assistant-message-reasoning-part-trigger{text-overflow:ellipsis;white-space:nowrap;gap:calc(.25*var(--lb-spacing));align-items:center;display:flex;overflow:hidden}.lb-ai-chat-assistant-message-reasoning-part-trigger:where([data-reasoning]){animation:8s linear infinite lb-animation-shimmer-small}.lb-ai-chat-assistant-message-reasoning-part-content{gap:calc(.5*var(--lb-spacing));line-height:var(--lb-line-height);display:flex}.lb-ai-chat-assistant-message-reasoning-part-content:where([data-state=open]){margin-block-start:.25em}.lb-ai-chat-assistant-message-actions{gap:calc(.125*var(--lb-spacing));align-items:center;display:flex}.lb-ai-chat{--lb-ai-chat-container-width:100%;background:var(--lb-background);flex-direction:column;block-size:100%;inline-size:100%;display:flex;overflow-y:auto}.lb-ai-chat-messages{gap:calc(.75*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:var(--lb-spacing);padding-block-end:calc(3*var(--lb-spacing));display:flex}.lb-ai-chat-loading,.lb-ai-chat-error{flex:auto;position:relative}.lb-ai-chat-messages-user-message{max-inline-size:80%;margin-inline-start:auto}.lb-ai-chat-footer{gap:calc(.75*var(--lb-spacing));inline-size:100%;padding:var(--lb-spacing);flex-direction:column;margin-block-start:auto;padding-block-start:0;display:flex;position:sticky;inset-block-end:0}.lb-ai-chat-footer:before{content:"";background:linear-gradient(to bottom,transparent 0%,var(--lb-background)calc(3*var(--lb-spacing)));pointer-events:none;position:absolute;inset:0;inset-block-start:calc(-3*var(--lb-spacing))}.lb-ai-chat-footer-actions{pointer-events:none;justify-content:center;display:flex;position:absolute;inset-block-start:calc(-3*var(--lb-spacing));inset-inline:0}.lb-ai-chat-composer{inline-size:100%;max-inline-size:var(--lb-ai-chat-container-width);border-radius:calc(2*var(--lb-radius));background:var(--lb-dynamic-background);box-shadow:var(--lb-elevation-shadow-small);margin-block-start:auto;margin-inline:auto;position:relative}.lb-ai-chat-composer:after{content:"";z-index:1;border-radius:inherit;box-shadow:var(--lb-inset-shadow);pointer-events:none;position:absolute;inset:0}.lb-ai-chat-scroll-button{opacity:0;pointer-events:none;border-radius:9999px;transition-property:opacity}.lb-ai-chat-scroll-button:where([data-visible]){opacity:1;pointer-events:all}@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{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-small{0%,to{-webkit-mask-image:linear-gradient(90deg,#000 8%,#00000080 20% 80%,#000 92%);mask-image:linear-gradient(90deg,#000 8%,#00000080 20% 80%,#000 92%);-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-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}.lb-ai-chat-assistant-message:where(.lb-ai-chat-assistant-message\:show-actions-hover) :where(.lb-ai-chat-assistant-message-actions){opacity:0;transition-property:opacity}.lb-ai-chat-assistant-message:where(.lb-ai-chat-assistant-message\:show-actions-hover):where(:is(:hover,:focus-within)) :where(.lb-ai-chat-assistant-message-actions){opacity:1}}@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-small:0 0 0 1px #0000000a,0 2px 6px #0000000f,0 8px 26px #00000014;--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-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=outline]){box-shadow:inset 0 0 0 1px var(--lb-foreground-subtle);transition-property:background,color,opacity,box-shadow}.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-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}@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%;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}: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-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-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))}.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){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{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-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-ai-chat-composer-form:where(:has(.lb-ai-chat-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-chat-composer-form:where(:has(.lb-ai-chat-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-chat-composer-form{background:var(--lb-dynamic-background);color:var(--lb-foreground);transition-property:background;position:relative}.lb-ai-chat-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-chat-composer-editor,.lb-ai-chat-composer-editor *{line-height:var(--lb-line-height)}.lb-ai-chat-composer-editor :where(p){--lb-line-height-crop:calc(1lh - 1em)/-2;margin-block:.25em}.lb-ai-chat-composer-editor :where(p):where(:first-of-type){margin-block-start:calc(.125em + var(--lb-line-height-crop))}.lb-ai-chat-composer-editor :where(p):where(:last-of-type){margin-block-end:calc(.125em + var(--lb-line-height-crop))}.lb-ai-chat-composer-editor:where([data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}.lb-ai-chat-composer-editor :where([data-placeholder]){color:var(--lb-foreground-moderate)}.lb-ai-chat-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-chat-composer-actions,.lb-ai-chat-composer-editor-actions{gap:calc(.125*var(--lb-spacing));align-items:center;display:flex}.lb-ai-chat-composer-editor-actions{margin-inline-end:auto}.lb-ai-chat-composer-attachments{gap:calc(.75*var(--lb-spacing));padding-inline:var(--lb-spacing);flex-direction:column;padding-block-start:calc(.75*var(--lb-spacing));display:flex}.lb-ai-chat-composer-editor-container:where([data-drop]) *{pointer-events:none}.lb-ai-chat-user-message{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-ai-chat-user-message,.lb-ai-chat-user-message *{line-height:var(--lb-line-height)}.lb-ai-chat-user-message-content{padding:calc(.75*var(--lb-spacing))calc(1.375*var(--lb-spacing));border-radius:calc(3*var(--lb-radius));background:var(--lb-background-foreground-faint);color:var(--lb-foreground);white-space:break-spaces}.lb-ai-chat-user-message-attachments{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-ai-chat-user-message-media-attachments{gap:calc(.75*var(--lb-spacing));flex-wrap:wrap;justify-content:flex-end;display:flex}.lb-ai-chat-user-message-attachment{flex-shrink:1;flex-basis:300px}.lb-ai-chat-assistant-message{gap:calc(.75*var(--lb-spacing));flex-direction:column;display:flex}.lb-ai-chat-assistant-message-content{inline-size:100%}.lb-ai-chat-assistant-message-text-part{flex-direction:column;display:flex}.lb-ai-chat-assistant-message-text-part,.lb-ai-chat-assistant-message-text-part *{line-height:var(--lb-line-height)}.lb-ai-chat-assistant-message-text-part :where(p){margin-block:.25em}.lb-ai-chat-assistant-message-text-part :where(h1,h2,h3,h4,h5,h6){margin-block:.5em;font-weight:600}.lb-ai-chat-assistant-message-text-part :where(h1){font-size:1.75em}.lb-ai-chat-assistant-message-text-part :where(h2){font-size:1.5em}.lb-ai-chat-assistant-message-text-part :where(h3){font-size:1.25em}.lb-ai-chat-assistant-message-text-part :where(h4){font-size:1.125em}.lb-ai-chat-assistant-message-text-part :where(h5){font-size:1em}.lb-ai-chat-assistant-message-text-part :where(h6){font-size:.875em}.lb-ai-chat-assistant-message-text-part :where(hr){margin-block:calc(.75*var(--lb-spacing));border-block-start:1px solid var(--lb-foreground-subtle)}.lb-ai-chat-assistant-message-text-part :where(blockquote){padding:calc(.375*var(--lb-spacing))calc(1.5*var(--lb-spacing));margin-block-start:calc(.75*var(--lb-spacing));position:relative}.lb-ai-chat-assistant-message-text-part :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-ai-chat-assistant-message-text-part :where(ol,ul){margin-block:calc(.75*var(--lb-spacing));padding-inline-start:calc(1.5*var(--lb-spacing));list-style-position:outside}.lb-ai-chat-assistant-message-text-part :where(ul){list-style-type:disc}.lb-ai-chat-assistant-message-text-part :where(ol){list-style-type:decimal}.lb-ai-chat-assistant-message-text-part :where(li){margin-block:calc(.25*var(--lb-spacing))}.lb-ai-chat-assistant-message-text-part :where(span:has(code)+span code){border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:0}.lb-ai-chat-assistant-message-text-part :where(span:has(code):has(+span code) code){border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:0}.lb-ai-chat-assistant-message-text-part :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-ai-chat-assistant-message-text-part :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-ai-chat-assistant-message-text-part :where(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-ai-chat-assistant-message-text-part :where(pre){padding:var(--lb-spacing);border-radius:var(--lb-radius);-webkit-box-decoration-break:clone;box-decoration-break:clone;box-shadow:var(--lb-foreground-subtle)0 0 0 1px inset;margin-block:.25em}.lb-ai-chat-assistant-message-text-part :where(pre) :where(code){background:0 0;padding:0}.lb-ai-chat-assistant-message-text-part :where(strong){font-weight:600}.lb-ai-chat-assistant-message-thinking{text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;user-select:none;animation:8s linear infinite lb-animation-shimmer-small;overflow:hidden}.lb-ai-chat-user-message-deleted,.lb-ai-chat-assistant-message-deleted{inline-size:100%;color:var(--lb-foreground-moderate);text-wrap:balance;align-items:center;font-size:.875em;position:relative}.lb-asssitant-chat-message-error{--lb-dynamic-background:var(--lb-background-destructive-subtle);gap:calc(.5*var(--lb-spacing));inline-size:100%;padding:calc(.75*var(--lb-spacing));border-radius:var(--lb-radius);background:var(--lb-dynamic-background);color:var(--lb-destructive);text-wrap:balance;align-items:center;font-size:.875em;display:flex;position:relative}.lb-asssitant-chat-message-error :where(.lb-icon-container){color:var(--lb-destructive-secondary)}.lb-ai-chat-assistant-message-reasoning-part{inline-size:100%;color:var(--lb-foreground-secondary);flex-direction:column;font-size:.875em;display:flex;position:relative}.lb-ai-chat-assistant-message-reasoning-part-trigger{text-overflow:ellipsis;white-space:nowrap;gap:calc(.25*var(--lb-spacing));align-items:center;display:flex;overflow:hidden}.lb-ai-chat-assistant-message-reasoning-part-trigger:where([data-reasoning]){animation:8s linear infinite lb-animation-shimmer-small}.lb-ai-chat-assistant-message-reasoning-part-content{gap:calc(.5*var(--lb-spacing));line-height:var(--lb-line-height);display:flex}.lb-ai-chat-assistant-message-reasoning-part-content:where([data-state=open]){margin-block-start:.25em}.lb-ai-chat-assistant-message-actions{gap:calc(.125*var(--lb-spacing));align-items:center;display:flex}.lb-ai-chat{--lb-ai-chat-container-width:100%;background:var(--lb-background);flex-direction:column;block-size:100%;inline-size:100%;display:flex;overflow-y:auto}.lb-ai-chat-messages{gap:calc(.75*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:var(--lb-spacing);padding-block-end:calc(5*var(--lb-spacing));display:flex}.lb-ai-chat-loading,.lb-ai-chat-error{flex:auto;position:relative}.lb-ai-chat-messages-user-message{max-inline-size:80%;margin-inline-start:auto}.lb-ai-chat-footer{gap:calc(.75*var(--lb-spacing));inline-size:100%;padding:var(--lb-spacing);flex-direction:column;margin-block-start:auto;padding-block-start:0;display:flex;position:sticky;inset-block-end:0}.lb-ai-chat-footer:before{content:"";background:linear-gradient(to bottom,transparent 0%,var(--lb-background)calc(3*var(--lb-spacing)));pointer-events:none;position:absolute;inset:0;inset-block-start:calc(-3*var(--lb-spacing))}.lb-ai-chat-footer-actions{pointer-events:none;justify-content:center;display:flex;position:absolute;inset-block-start:calc(-3*var(--lb-spacing));inset-inline:0}.lb-ai-chat-composer{inline-size:100%;max-inline-size:var(--lb-ai-chat-container-width);border-radius:calc(2*var(--lb-radius));background:var(--lb-dynamic-background);box-shadow:var(--lb-elevation-shadow-small);margin-block-start:auto;margin-inline:auto;position:relative}.lb-ai-chat-composer:after{content:"";z-index:1;border-radius:inherit;box-shadow:var(--lb-inset-shadow);pointer-events:none;position:absolute;inset:0}.lb-ai-chat-scroll-button{opacity:0;pointer-events:none;border-radius:9999px;transition-property:opacity}.lb-ai-chat-scroll-button:where([data-visible]){opacity:1;pointer-events:all}@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{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-small{0%,to{-webkit-mask-image:linear-gradient(90deg,#000 8%,#00000080 20% 80%,#000 92%);mask-image:linear-gradient(90deg,#000 8%,#00000080 20% 80%,#000 92%);-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-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}.lb-ai-chat-assistant-message:where(.lb-ai-chat-assistant-message\:show-actions-hover) :where(.lb-ai-chat-assistant-message-actions){opacity:0;transition-property:opacity}.lb-ai-chat-assistant-message:where(.lb-ai-chat-assistant-message\:show-actions-hover):where(:is(:hover,:focus-within)) :where(.lb-ai-chat-assistant-message-actions){opacity:1}}@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-small: $lb-elevation-shadow-small;\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-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=\"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(: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 * 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@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\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 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/*************************************\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-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 @include capitalize;\n\n min-block-size: $lb-button-size;\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) {\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 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\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 * Chat Composer *\n *************************************/\n.lb-ai-chat-composer-form:where(\n :has(.lb-ai-chat-composer-editor:not(:focus-visible))\n ) {\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-chat-composer-form {\n position: relative;\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n transition-property: background;\n}\n\n.lb-ai-chat-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-chat-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-chat-composer-actions,\n.lb-ai-chat-composer-editor-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n align-items: center;\n}\n\n.lb-ai-chat-composer-editor-actions {\n margin-inline-end: auto;\n}\n\n/*************************************\n * Chat composer attachments *\n *************************************/\n.lb-ai-chat-composer-attachments {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n padding-inline: var(--lb-spacing);\n padding-block-start: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-chat-composer-editor-container:where([data-drop]) * {\n pointer-events: none;\n}\n\n/*************************************\n * Chat message *\n *************************************/\n.lb-ai-chat-user-message {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n\n &,\n * {\n line-height: var(--lb-line-height);\n }\n}\n\n.lb-ai-chat-user-message-content {\n padding: calc(0.75 * var(--lb-spacing)) calc(1.375 * var(--lb-spacing));\n border-radius: calc(3 * var(--lb-radius));\n background: var(--lb-background-foreground-faint);\n color: var(--lb-foreground);\n white-space: break-spaces;\n}\n\n.lb-ai-chat-user-message-attachments {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-chat-user-message-media-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: calc(0.75 * var(--lb-spacing));\n justify-content: flex-end;\n}\n\n.lb-ai-chat-user-message-attachment {\n flex-shrink: 1;\n flex-basis: 300px;\n}\n\n.lb-ai-chat-assistant-message {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n\n @media (hover: hover) {\n &:where(.lb-ai-chat-assistant-message\\:show-actions-hover) {\n :where(.lb-ai-chat-assistant-message-actions) {\n opacity: 0;\n transition-property: opacity;\n }\n\n &:where(:is(:hover, :focus-within)) {\n :where(.lb-ai-chat-assistant-message-actions) {\n opacity: 1;\n }\n }\n }\n }\n}\n\n.lb-ai-chat-assistant-message-content {\n inline-size: 100%;\n}\n\n.lb-ai-chat-assistant-message-text-part {\n display: flex;\n flex-direction: column;\n\n &,\n * {\n line-height: var(--lb-line-height);\n }\n\n :where(p) {\n margin-block: 0.25em;\n }\n\n :where(h1, h2, h3, h4, h5, h6) {\n margin-block: 0.5em;\n font-weight: 600;\n }\n\n :where(h1) {\n font-size: 1.75em;\n }\n\n :where(h2) {\n font-size: 1.5em;\n }\n\n :where(h3) {\n font-size: 1.25em;\n }\n\n :where(h4) {\n font-size: 1.125em;\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: calc(0.75 * var(--lb-spacing));\n border-block-start: 1px solid var(--lb-foreground-subtle);\n }\n\n :where(blockquote) {\n position: relative;\n margin-block-start: calc(0.75 * var(--lb-spacing));\n padding: calc(0.375 * var(--lb-spacing)) calc(1.5 * var(--lb-spacing));\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\n :where(ol, ul) {\n margin-block: calc(0.75 * var(--lb-spacing));\n padding-inline-start: calc(1.5 * var(--lb-spacing));\n list-style-position: outside;\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: calc(0.25 * var(--lb-spacing));\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 :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(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 :where(pre) {\n margin-block: 0.25em;\n padding: var(--lb-spacing);\n border-radius: var(--lb-radius);\n box-decoration-break: clone;\n box-shadow: var(--lb-foreground-subtle) 0 0 0 1px inset;\n\n :where(code) {\n padding: 0;\n background: transparent;\n }\n }\n\n :where(strong) {\n font-weight: 600;\n }\n}\n\n.lb-ai-chat-assistant-message-thinking {\n @include truncate;\n\n user-select: none;\n animation: lb-animation-shimmer-small 8s linear infinite;\n}\n\n.lb-ai-chat-user-message-deleted,\n.lb-ai-chat-assistant-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: balance;\n}\n\n.lb-asssitant-chat-message-error {\n --lb-dynamic-background: var(--lb-background-destructive-subtle);\n\n position: relative;\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: center;\n inline-size: 100%;\n padding: calc(0.75 * var(--lb-spacing));\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n color: var(--lb-destructive);\n font-size: 0.875em;\n text-wrap: balance;\n\n :where(.lb-icon-container) {\n color: var(--lb-destructive-secondary);\n }\n}\n\n.lb-ai-chat-assistant-message-reasoning-part {\n position: relative;\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n color: var(--lb-foreground-secondary);\n font-size: 0.875em;\n}\n\n.lb-ai-chat-assistant-message-reasoning-part-trigger {\n @include truncate;\n\n display: flex;\n gap: calc(0.25 * var(--lb-spacing));\n align-items: center;\n\n &:where([data-reasoning]) {\n animation: lb-animation-shimmer-small 8s linear infinite;\n }\n}\n\n.lb-ai-chat-assistant-message-reasoning-part-content {\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n line-height: var(--lb-line-height);\n\n &:where([data-state=\"open\"]) {\n margin-block-start: 0.25em;\n }\n}\n\n.lb-ai-chat-assistant-message-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n align-items: center;\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\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-ai-chat-messages {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * 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: var(--lb-spacing);\n padding-block-end: calc(3 * var(--lb-spacing));\n}\n\n.lb-ai-chat-loading,\n.lb-ai-chat-error {\n position: relative;\n flex: 1 1 auto;\n}\n\n.lb-ai-chat-messages-user-message {\n max-inline-size: 80%;\n margin-inline-start: auto;\n}\n\n.lb-ai-chat-footer {\n position: sticky;\n inset-block-end: 0;\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n inline-size: 100%;\n margin-block-start: auto;\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 * var(--lb-spacing))\n );\n pointer-events: none;\n }\n}\n\n.lb-ai-chat-footer-actions {\n position: absolute;\n inset-inline: 0;\n inset-block-start: calc(-3 * var(--lb-spacing));\n display: flex;\n justify-content: center;\n pointer-events: none;\n}\n\n.lb-ai-chat-composer {\n position: relative;\n inline-size: 100%;\n max-inline-size: var(--lb-ai-chat-container-width);\n margin-inline: auto;\n margin-block-start: auto;\n border-radius: calc(2 * var(--lb-radius));\n background: var(--lb-dynamic-background);\n box-shadow: var(--lb-elevation-shadow-small);\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-ai-chat-scroll-button {\n border-radius: $lb-radius-full;\n opacity: 0;\n pointer-events: none;\n transition-property: opacity;\n\n &:where([data-visible]) {\n opacity: 1;\n pointer-events: all;\n }\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 {\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-small {\n from,\n to {\n mask-image: linear-gradient(\n 90deg,\n #000 8%,\n rgb(0 0 0 / 50%) 20%,\n rgb(0 0 0 / 50%) 80%,\n #000 92%\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-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 these values. */\n@mixin button {\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 transition-property: background, color, opacity;\n -webkit-tap-highlight-color: transparent;\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-small: $lb-elevation-shadow-small;\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-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=\"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(: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 * 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@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\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 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/*************************************\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-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 @include capitalize;\n\n min-block-size: $lb-button-size;\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) {\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 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\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 * Chat Composer *\n *************************************/\n.lb-ai-chat-composer-form:where(\n :has(.lb-ai-chat-composer-editor:not(:focus-visible))\n ) {\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-chat-composer-form {\n position: relative;\n background: var(--lb-dynamic-background);\n color: var(--lb-foreground);\n transition-property: background;\n}\n\n.lb-ai-chat-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-chat-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-chat-composer-actions,\n.lb-ai-chat-composer-editor-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n align-items: center;\n}\n\n.lb-ai-chat-composer-editor-actions {\n margin-inline-end: auto;\n}\n\n/*************************************\n * Chat composer attachments *\n *************************************/\n.lb-ai-chat-composer-attachments {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n padding-inline: var(--lb-spacing);\n padding-block-start: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-chat-composer-editor-container:where([data-drop]) * {\n pointer-events: none;\n}\n\n/*************************************\n * Chat message *\n *************************************/\n.lb-ai-chat-user-message {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n\n &,\n * {\n line-height: var(--lb-line-height);\n }\n}\n\n.lb-ai-chat-user-message-content {\n padding: calc(0.75 * var(--lb-spacing)) calc(1.375 * var(--lb-spacing));\n border-radius: calc(3 * var(--lb-radius));\n background: var(--lb-background-foreground-faint);\n color: var(--lb-foreground);\n white-space: break-spaces;\n}\n\n.lb-ai-chat-user-message-attachments {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n}\n\n.lb-ai-chat-user-message-media-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: calc(0.75 * var(--lb-spacing));\n justify-content: flex-end;\n}\n\n.lb-ai-chat-user-message-attachment {\n flex-shrink: 1;\n flex-basis: 300px;\n}\n\n.lb-ai-chat-assistant-message {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n\n @media (hover: hover) {\n &:where(.lb-ai-chat-assistant-message\\:show-actions-hover) {\n :where(.lb-ai-chat-assistant-message-actions) {\n opacity: 0;\n transition-property: opacity;\n }\n\n &:where(:is(:hover, :focus-within)) {\n :where(.lb-ai-chat-assistant-message-actions) {\n opacity: 1;\n }\n }\n }\n }\n}\n\n.lb-ai-chat-assistant-message-content {\n inline-size: 100%;\n}\n\n.lb-ai-chat-assistant-message-text-part {\n display: flex;\n flex-direction: column;\n\n &,\n * {\n line-height: var(--lb-line-height);\n }\n\n :where(p) {\n margin-block: 0.25em;\n }\n\n :where(h1, h2, h3, h4, h5, h6) {\n margin-block: 0.5em;\n font-weight: 600;\n }\n\n :where(h1) {\n font-size: 1.75em;\n }\n\n :where(h2) {\n font-size: 1.5em;\n }\n\n :where(h3) {\n font-size: 1.25em;\n }\n\n :where(h4) {\n font-size: 1.125em;\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: calc(0.75 * var(--lb-spacing));\n border-block-start: 1px solid var(--lb-foreground-subtle);\n }\n\n :where(blockquote) {\n position: relative;\n margin-block-start: calc(0.75 * var(--lb-spacing));\n padding: calc(0.375 * var(--lb-spacing)) calc(1.5 * var(--lb-spacing));\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\n :where(ol, ul) {\n margin-block: calc(0.75 * var(--lb-spacing));\n padding-inline-start: calc(1.5 * var(--lb-spacing));\n list-style-position: outside;\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: calc(0.25 * var(--lb-spacing));\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 :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(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 :where(pre) {\n margin-block: 0.25em;\n padding: var(--lb-spacing);\n border-radius: var(--lb-radius);\n box-decoration-break: clone;\n box-shadow: var(--lb-foreground-subtle) 0 0 0 1px inset;\n\n :where(code) {\n padding: 0;\n background: transparent;\n }\n }\n\n :where(strong) {\n font-weight: 600;\n }\n}\n\n.lb-ai-chat-assistant-message-thinking {\n @include truncate;\n\n user-select: none;\n animation: lb-animation-shimmer-small 8s linear infinite;\n}\n\n.lb-ai-chat-user-message-deleted,\n.lb-ai-chat-assistant-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: balance;\n}\n\n.lb-asssitant-chat-message-error {\n --lb-dynamic-background: var(--lb-background-destructive-subtle);\n\n position: relative;\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: center;\n inline-size: 100%;\n padding: calc(0.75 * var(--lb-spacing));\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n color: var(--lb-destructive);\n font-size: 0.875em;\n text-wrap: balance;\n\n :where(.lb-icon-container) {\n color: var(--lb-destructive-secondary);\n }\n}\n\n.lb-ai-chat-assistant-message-reasoning-part {\n position: relative;\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n color: var(--lb-foreground-secondary);\n font-size: 0.875em;\n}\n\n.lb-ai-chat-assistant-message-reasoning-part-trigger {\n @include truncate;\n\n display: flex;\n gap: calc(0.25 * var(--lb-spacing));\n align-items: center;\n\n &:where([data-reasoning]) {\n animation: lb-animation-shimmer-small 8s linear infinite;\n }\n}\n\n.lb-ai-chat-assistant-message-reasoning-part-content {\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n line-height: var(--lb-line-height);\n\n &:where([data-state=\"open\"]) {\n margin-block-start: 0.25em;\n }\n}\n\n.lb-ai-chat-assistant-message-actions {\n display: flex;\n gap: calc(0.125 * var(--lb-spacing));\n align-items: center;\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\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-ai-chat-messages {\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * 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: var(--lb-spacing);\n padding-block-end: calc(5 * var(--lb-spacing));\n}\n\n.lb-ai-chat-loading,\n.lb-ai-chat-error {\n position: relative;\n flex: 1 1 auto;\n}\n\n.lb-ai-chat-messages-user-message {\n max-inline-size: 80%;\n margin-inline-start: auto;\n}\n\n.lb-ai-chat-footer {\n position: sticky;\n inset-block-end: 0;\n display: flex;\n flex-direction: column;\n gap: calc(0.75 * var(--lb-spacing));\n inline-size: 100%;\n margin-block-start: auto;\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 * var(--lb-spacing))\n );\n pointer-events: none;\n }\n}\n\n.lb-ai-chat-footer-actions {\n position: absolute;\n inset-inline: 0;\n inset-block-start: calc(-3 * var(--lb-spacing));\n display: flex;\n justify-content: center;\n pointer-events: none;\n}\n\n.lb-ai-chat-composer {\n position: relative;\n inline-size: 100%;\n max-inline-size: var(--lb-ai-chat-container-width);\n margin-inline: auto;\n margin-block-start: auto;\n border-radius: calc(2 * var(--lb-radius));\n background: var(--lb-dynamic-background);\n box-shadow: var(--lb-elevation-shadow-small);\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-ai-chat-scroll-button {\n border-radius: $lb-radius-full;\n opacity: 0;\n pointer-events: none;\n transition-property: opacity;\n\n &:where([data-visible]) {\n opacity: 1;\n pointer-events: all;\n }\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 {\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-small {\n from,\n to {\n mask-image: linear-gradient(\n 90deg,\n #000 8%,\n rgb(0 0 0 / 50%) 20%,\n rgb(0 0 0 / 50%) 80%,\n #000 92%\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-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 these values. */\n@mixin button {\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 transition-property: background, color, opacity;\n -webkit-tap-highlight-color: transparent;\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"]}
|