@filigran/chatbot 3.9.0 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/markdown.js CHANGED
@@ -1,2 +1,2 @@
1
- function t(t){if(!t)return t;const n=t.split("\n"),e=/^(\s*)(`{3,})(.*)$/,s=/^(markdown|md|mdx|markup)\b/i;let r=-1;for(let t=0;t<n.length;t++){const i=n[t].match(e);if(i&&3===i[2].length&&s.test(i[3].trim())){r=t;break}}if(-1===r)return t;let i=3,c=0,l=-1;for(let t=r+1;t<n.length;t++){const s=n[t].match(e);s&&(c++,i=Math.max(i,s[2].length),""===s[3].trim()&&(l=t))}if(0===c)return t;const o="`".repeat(Math.max(i+1,4)),h=n[r].match(e);if(n[r]=`${h[1]}${o}${h[3]}`,l>r){const t=n[l].match(e);n[l]=`${t[1]}${o}`}return n.join("\n")}function n(t){if(!t||-1===t.indexOf("|"))return t;const n=t.split("\n"),e=t=>{let n=t.trim();n.startsWith("|")&&(n=n.slice(1)),n.endsWith("|")&&(n=n.slice(0,-1));const e=[];let s="";for(let t=0;t<n.length;t++){const r=n[t];"\\"===r&&t+1<n.length?(s+=r+n[t+1],t++):"|"===r?(e.push(s),s=""):s+=r}return e.push(s),e},s=t=>t.includes("|")&&/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/.test(t),r=t=>{const n=t.trim(),e=n.startsWith(":"),s=n.endsWith(":");return e&&s?":---:":s?"---:":e?":---":"---"},i=/^\s*(?:(?:>\s?)|(?:[-*+]\s+)|(?:\d{1,9}[.)]\s+))*(`{3,}|~{3,})(.*)$/;let c=null,l=0;const o=/^\s*(?:[-*+]\s+|\d{1,9}[.)]\s+)/;for(let t=0;t<n.length-1;t++){const h=n[t].match(i);if(h){const t=h[1];null===c?(c=t[0],l=t.length):t[0]===c&&t.length>=l&&""===h[2].trim()&&(c=null,l=0);continue}if(null!==c)continue;const u=n[t],a=n[t+1];if(!u.includes("|")||s(u)||!s(a))continue;const f=u.match(o),m=f?f[0].length:u.length-u.trimStart().length,d=f?" ".repeat(m):u.slice(0,m),g=e(u.slice(m)).length,p=e(a);if(g<2||p.length===g)continue;const $=[];for(let t=0;t<g;t++)$.push(p[t]?r(p[t]):"---");n[t+1]=`${d}| ${$.join(" | ")} |`}return n.join("\n")}function e(t){const n=t.trim();if(!n.startsWith("{")&&!n.startsWith("[")||n.startsWith("```"))return t;try{return JSON.parse(n),"```json\n"+n+"\n```"}catch{return t}}function s(t){return t.includes("![")?t.replace(/!\[([^\]]*?\n[^\]]*?)\]\(([^)\s]+)\)/g,(t,n,e)=>`![${n.replace(/\s+/g," ").trim()}](${e})`):t}const r=new Set(["http","https","mailto","tel"]);function i(t){const n=t.indexOf(":");if(n<0)return t;const e=t.indexOf("/"),s=t.indexOf("?"),i=t.indexOf("#");if(e>-1&&n>e||s>-1&&n>s||i>-1&&n>i)return t;const c=t.slice(0,n).toLowerCase();return r.has(c)||"data"===c&&/^data:image\//i.test(t)?t:""}export{t as hardenNestedCodeFences,i as markdownUrlTransform,s as normalizeImageMarkdown,n as normalizeMarkdownTables,e as wrapBareJson};
1
+ function t(t){if(!t)return t;const n=t.split("\n"),e=/^(\s*)(`{3,})(.*)$/,s=/^(markdown|md|mdx|markup)\b/i;let r=-1;for(let t=0;t<n.length;t++){const i=n[t].match(e);if(i&&3===i[2].length&&s.test(i[3].trim())){r=t;break}}if(-1===r)return t;const i=[];for(let t=r+1;t<n.length;t++){const s=n[t].match(e);s&&i.push({idx:t,run:s[2].length,bare:""===s[3].trim()})}const c=(t,e)=>{for(let s=t+1;s<e;s++)if(""!==n[s].trim())return!1;return!0};let l=0,o=3,a=0,u=-1;for(let t=0;t<i.length;t++){const n=i[t];if(n.bare&&0===l){const e=i[t+1];if(!e||!e.bare||c(n.idx,e.idx)){u=n.idx;break}l++}else l=n.bare?Math.max(0,l-1):l+1;a++,o=Math.max(o,n.run)}if(-1===u||0===a)return t;const h="`".repeat(Math.max(o+1,4)),f=n[r].match(e);n[r]=`${f[1]}${h}${f[3]}`;const m=n[u].match(e);return n[u]=`${m[1]}${h}`,n.join("\n")}function n(t){if(!t||-1===t.indexOf("|"))return t;const n=t.split("\n"),e=t=>{let n=t.trim();n.startsWith("|")&&(n=n.slice(1)),n.endsWith("|")&&(n=n.slice(0,-1));const e=[];let s="";for(let t=0;t<n.length;t++){const r=n[t];"\\"===r&&t+1<n.length?(s+=r+n[t+1],t++):"|"===r?(e.push(s),s=""):s+=r}return e.push(s),e},s=t=>t.includes("|")&&/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/.test(t),r=t=>{const n=t.trim(),e=n.startsWith(":"),s=n.endsWith(":");return e&&s?":---:":s?"---:":e?":---":"---"},i=/^\s*(?:(?:>\s?)|(?:[-*+]\s+)|(?:\d{1,9}[.)]\s+))*(`{3,}|~{3,})(.*)$/;let c=null,l=0;const o=/^\s*(?:[-*+]\s+|\d{1,9}[.)]\s+)/;for(let t=0;t<n.length-1;t++){const a=n[t].match(i);if(a){const t=a[1];null===c?(c=t[0],l=t.length):t[0]===c&&t.length>=l&&""===a[2].trim()&&(c=null,l=0);continue}if(null!==c)continue;const u=n[t],h=n[t+1];if(!u.includes("|")||s(u)||!s(h))continue;const f=u.match(o),m=f?f[0].length:u.length-u.trimStart().length,d=f?" ".repeat(m):u.slice(0,m),g=e(u.slice(m)).length,p=e(h);if(g<2||p.length===g)continue;const x=[];for(let t=0;t<g;t++)x.push(p[t]?r(p[t]):"---");n[t+1]=`${d}| ${x.join(" | ")} |`}return n.join("\n")}function e(t){const n=t.trim();if(!n.startsWith("{")&&!n.startsWith("[")||n.startsWith("```"))return t;try{return JSON.parse(n),"```json\n"+n+"\n```"}catch{return t}}function s(t){return t.includes("![")?t.replace(/!\[([^\]]*?\n[^\]]*?)\]\(([^)\s]+)\)/g,(t,n,e)=>`![${n.replace(/\s+/g," ").trim()}](${e})`):t}const r=new Set(["http","https","mailto","tel"]);function i(t){const n=t.indexOf(":");if(n<0)return t;const e=t.indexOf("/"),s=t.indexOf("?"),i=t.indexOf("#");if(e>-1&&n>e||s>-1&&n>s||i>-1&&n>i)return t;const c=t.slice(0,n).toLowerCase();return r.has(c)||"data"===c&&/^data:image\//i.test(t)?t:""}export{t as hardenNestedCodeFences,i as markdownUrlTransform,s as normalizeImageMarkdown,n as normalizeMarkdownTables,e as wrapBareJson};
2
2
  //# sourceMappingURL=markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sources":["../../src/utils/index.ts"],"sourcesContent":["export function hexAlpha(hex: string, alpha: number): string {\n const a = Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0');\n return `${hex}${a}`;\n}\n\n/**\n * Markdown has no native support for nesting fenced code blocks of the same\n * length: per the CommonMark spec, the first inner ``` closes the outer block,\n * so everything after it renders *outside* the code block. LLMs constantly hit\n * this — when an agent shows a prompt or a full markdown document inside a\n * ```markdown … ``` fence, that document's own ``` fences shatter the snippet\n * into alternating code / prose fragments.\n *\n * The robust, spec-compliant fix is to make the *outer* fence longer than any\n * fence it contains: a 4-backtick fence is only closed by a run of ≥4\n * backticks, so all inner 3-backtick fences become literal content and the\n * whole document renders as one clean, copyable code block.\n *\n * We act only on the unambiguous, dominant case — a 3-backtick opener whose\n * info string is a markup language (markdown / md / mdx / markup) that actually\n * contains nested fences — so already-correct markdown is never rewritten\n * (a correctly authored nested block already uses a 4+-backtick opener, which\n * we skip).\n */\nexport function hardenNestedCodeFences(raw: string): string {\n if (!raw) return raw;\n const lines = raw.split('\\n');\n const fenceRe = /^(\\s*)(`{3,})(.*)$/;\n const markupLang = /^(markdown|md|mdx|markup)\\b/i;\n\n let openerIdx = -1;\n for (let i = 0; i < lines.length; i++) {\n const m = lines[i].match(fenceRe);\n if (m && m[2].length === 3 && markupLang.test(m[3].trim())) {\n openerIdx = i;\n break;\n }\n }\n if (openerIdx === -1) return raw;\n\n let maxRun = 3;\n let nestedCount = 0;\n let lastBareFence = -1;\n for (let i = openerIdx + 1; i < lines.length; i++) {\n const m = lines[i].match(fenceRe);\n if (!m) continue;\n nestedCount++;\n maxRun = Math.max(maxRun, m[2].length);\n if (m[3].trim() === '') lastBareFence = i;\n }\n if (nestedCount === 0) return raw;\n\n const fence = '`'.repeat(Math.max(maxRun + 1, 4));\n const om = lines[openerIdx].match(fenceRe)!;\n lines[openerIdx] = `${om[1]}${fence}${om[3]}`;\n if (lastBareFence > openerIdx) {\n const cm = lines[lastBareFence].match(fenceRe)!;\n lines[lastBareFence] = `${cm[1]}${fence}`;\n }\n return lines.join('\\n');\n}\n\n/**\n * GFM renders a pipe table only when the delimiter row (`|---|---|`) has the\n * SAME number of columns as the header row. LLMs frequently miscount (e.g. a\n * 4-column header followed by a 3-column delimiter), and a server-side guard can\n * corrupt the delimiter — in either case the whole table silently degrades to\n * raw `| … |` text. This repairs a mismatched delimiter row to the header's\n * column count (preserving any alignment colons) so the table renders.\n *\n * It only rewrites a delimiter that is ACTUALLY mismatched, so already-valid\n * tables are never touched. Fenced code blocks are skipped, and setext headings\n * (underlines with no `|`) are never mistaken for a table.\n */\nexport function normalizeMarkdownTables(raw: string): string {\n if (!raw || raw.indexOf('|') === -1) return raw;\n const lines = raw.split('\\n');\n\n // Splits on unescaped `|` only. A manual walk (rather than a negative\n // lookbehind, which is unsupported on older engines and would throw at parse\n // time in an untranspiled ESNext bundle) keeps `\\|` inside a cell intact.\n const splitCells = (row: string): string[] => {\n let s = row.trim();\n if (s.startsWith('|')) s = s.slice(1);\n if (s.endsWith('|')) s = s.slice(0, -1);\n const cells: string[] = [];\n let current = '';\n for (let i = 0; i < s.length; i++) {\n const ch = s[i];\n if (ch === '\\\\' && i + 1 < s.length) {\n current += ch + s[i + 1];\n i++;\n } else if (ch === '|') {\n cells.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n cells.push(current);\n return cells;\n };\n const isDelimiterRow = (row: string): boolean => row.includes('|') && /^\\s*\\|?\\s*:?-+:?\\s*(\\|\\s*:?-+:?\\s*)*\\|?\\s*$/.test(row);\n // Emit the canonical 3-hyphen delimiter form. remark-gfm accepts a single\n // hyphen, but `---` (with optional alignment colons) is the portable form\n // every Markdown renderer agrees on, so prefer it.\n const alignOf = (cell: string): string => {\n const c = cell.trim();\n const left = c.startsWith(':');\n const right = c.endsWith(':');\n return left && right ? ':---:' : right ? '---:' : left ? ':---' : '---';\n };\n\n // Track both the fence character AND its run length: per CommonMark a closing\n // fence must use the same character and be at least as long as the opener, so\n // a shorter run (```) must not close a longer one (````), and a closing fence\n // carries no info string. Optional blockquote / list-item markers are allowed\n // before the run so fences nested in those containers (e.g. `- ```) are still\n // recognised and the table inside them is left untouched.\n const fenceRe = /^\\s*(?:(?:>\\s?)|(?:[-*+]\\s+)|(?:\\d{1,9}[.)]\\s+))*(`{3,}|~{3,})(.*)$/;\n let fenceChar: string | null = null;\n let fenceLen = 0;\n // A pipe-table header can share its line with a list-item marker (e.g.\n // `- | a | b |`). Strip a leading list marker before counting columns so the\n // count matches the cells GFM sees inside the list item, not the marker.\n const listMarkerRe = /^\\s*(?:[-*+]\\s+|\\d{1,9}[.)]\\s+)/;\n for (let i = 0; i < lines.length - 1; i++) {\n const fenceMatch = lines[i].match(fenceRe);\n if (fenceMatch) {\n const run = fenceMatch[1];\n if (fenceChar === null) {\n fenceChar = run[0];\n fenceLen = run.length;\n } else if (run[0] === fenceChar && run.length >= fenceLen && fenceMatch[2].trim() === '') {\n fenceChar = null;\n fenceLen = 0;\n }\n continue;\n }\n if (fenceChar !== null) continue;\n\n const header = lines[i];\n const delim = lines[i + 1];\n if (!header.includes('|') || isDelimiterRow(header) || !isDelimiterRow(delim)) continue;\n\n // A table can start on a list-item line, so both the cells and the\n // delimiter's alignment live AFTER the marker. Anchor the rewritten\n // delimiter to that content offset (padding the marker width with spaces) so\n // it stays a continuation line of the list item: GFM drops a table whose\n // delimiter dedents away from its header. Without a marker this is just the\n // header's leading whitespace, so top-level tables are emitted unchanged.\n const markerMatch = header.match(listMarkerRe);\n const offset = markerMatch ? markerMatch[0].length : header.length - header.trimStart().length;\n const indent = markerMatch ? ' '.repeat(offset) : header.slice(0, offset);\n\n const headerCols = splitCells(header.slice(offset)).length;\n const delimCells = splitCells(delim);\n if (headerCols < 2 || delimCells.length === headerCols) continue;\n\n const aligns: string[] = [];\n for (let c = 0; c < headerCols; c++) aligns.push(delimCells[c] ? alignOf(delimCells[c]) : '---');\n lines[i + 1] = `${indent}| ${aligns.join(' | ')} |`;\n }\n return lines.join('\\n');\n}\n\n/**\n * When the ENTIRE message is a raw JSON object/array (and not already fenced),\n * wrap it in a ```json fence so it renders as a proper, copyable code block\n * instead of one long line of mangled prose — markdown collapses the newlines\n * and eats the `*`/`_` inside string values otherwise.\n *\n * Deliberately conservative: it parses the payload first, so a message that\n * merely *starts* with `{` (e.g. prose about an object) is left untouched.\n */\nexport function wrapBareJson(raw: string): string {\n const trimmed = raw.trim();\n if ((!trimmed.startsWith('{') && !trimmed.startsWith('[')) || trimmed.startsWith('```')) return raw;\n try {\n JSON.parse(trimmed);\n return '```json\\n' + trimmed + '\\n```';\n } catch {\n return raw;\n }\n}\n\n/**\n * Models routinely emit markdown images whose alt text is the whole generation\n * prompt, spread over several lines. CommonMark has no multi-line `![…](…)`, so\n * the image syntax breaks apart and the prompt renders as literal paragraphs\n * followed by a stray link.\n *\n * This collapses the alt text of such an image onto a single line (whitespace\n * runs → one space) so the parser emits a real `<img>` node. Single-line images\n * are returned byte-identical, and the URL is never rewritten — the URL may\n * contain anything, and only the alt text is at fault.\n *\n * The URL part excludes `)` and whitespace, so a link title\n * (`![alt](url \"title\")`) or a parenthesised URL is left alone rather than\n * mis-parsed.\n */\nexport function normalizeImageMarkdown(raw: string): string {\n if (!raw.includes('![')) return raw;\n return raw.replace(/!\\[([^\\]]*?\\n[^\\]]*?)\\]\\(([^)\\s]+)\\)/g, (_match, alt: string, url: string) => {\n const flat = alt.replace(/\\s+/g, ' ').trim();\n return `![${flat}](${url})`;\n });\n}\n\n/** Schemes react-markdown's own sanitizer allows, minus the `data:` special case below. */\nconst SAFE_URL_PROTOCOLS = new Set(['http', 'https', 'mailto', 'tel']);\n\n/**\n * URL sanitizer for react-markdown that additionally preserves `data:image/*`\n * URIs.\n *\n * react-markdown v9+ ships a default `urlTransform` allowing only\n * http / https / mailto / tel. Agents with a code interpreter return charts as\n * `data:image/png;base64,…`, which that default strips — leaving a broken\n * `<img>`. Every other scheme (notably `javascript:` / `vbscript:`) is still\n * blocked, and non-image `data:` URIs are blocked too, so this widens the\n * allow-list by exactly one safe, inert case.\n */\nexport function markdownUrlTransform(url: string): string {\n const colon = url.indexOf(':');\n if (colon < 0) return url; // relative URL — always safe\n\n const slash = url.indexOf('/');\n const question = url.indexOf('?');\n const hash = url.indexOf('#');\n\n // A `/`, `?` or `#` before the colon means this is a path, not a scheme\n // (e.g. `./a:b`), so there is nothing to sanitize.\n if ((slash > -1 && colon > slash) || (question > -1 && colon > question) || (hash > -1 && colon > hash)) {\n return url;\n }\n\n const protocol = url.slice(0, colon).toLowerCase();\n if (SAFE_URL_PROTOCOLS.has(protocol)) return url;\n if (protocol === 'data' && /^data:image\\//i.test(url)) return url;\n return '';\n}\n\nexport const identity = (key: string) => key;\n\n/**\n * Nearest chatbot panel root (`.filigran-chatbot`) for portal-based overlays\n * (tooltips, dropdowns, dialogs), so they stay inside the panel's stacking\n * context instead of competing with the host app's z-indexes. Falls back to\n * `document.body` when rendered outside a panel.\n */\nexport function findChatbotRoot(el: HTMLElement | null): HTMLElement {\n let node = el;\n while (node) {\n if (node.classList.contains('filigran-chatbot')) return node;\n node = node.parentElement;\n }\n return document.body;\n}\n\n/**\n * Compact count for the composer's status readouts: 1200 → \"1.2k\", so neither\n * the quota nor the context gauge can widen the toolbar as the numbers grow.\n */\nexport function compactCount(n: number): string {\n if (n < 1000) return `${n}`;\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0).replace(/\\.0$/, '')}k`;\n return `${(n / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`;\n}\n\n/**\n * Compact relative-time label for the conversation history menu\n * (\"just now\", \"5m ago\", \"3h ago\", \"2d ago\", then a short date).\n * Returns an empty string for missing/unparseable timestamps so the row\n * simply omits the label instead of showing \"Invalid Date\".\n */\nexport function timeAgo(iso: string | undefined, t: (key: string) => string): string {\n if (!iso) return '';\n const then = new Date(iso).getTime();\n if (Number.isNaN(then)) return '';\n const diffMs = Date.now() - then;\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 1) return t('just now');\n if (minutes < 60) return `${minutes}${t('m ago')}`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}${t('h ago')}`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}${t('d ago')}`;\n return new Date(iso).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\n/** Matches a complete `[[FILE:<id>]]` deliverable marker agents embed in prose. */\nconst FILE_MARKER_RE = /\\[\\[FILE:[^\\]]+\\]\\]/g;\n\n/**\n * Matches an INCOMPLETE marker at the very end of the string. SSE streams can\n * split a `[[FILE:<id>]]` token before the closing `]]` arrives, so the tail\n * may be `[[FILE`, `[[FILE:`, `[[FILE:abc`, or `[[FILE:abc]` mid-stream. We\n * anchor on the literal `[[FILE` prefix (which is vanishingly unlikely to\n * appear legitimately at the end of prose) so it never clips real content.\n */\nconst PARTIAL_FILE_MARKER_RE = /\\[\\[FILE(?::[^\\]]*)?\\]?$/;\n\n/**\n * Strip the `[[FILE:<id>]]` markers an agent embeds in its reply to point at\n * generated files. The actual files render as separate download chips, so the\n * raw markers must be removed from the prose. Complete markers are removed\n * anywhere; an incomplete marker at the end is also removed so a partially\n * streamed token never flickers as raw `[[FILE:...` text.\n *\n * When no marker is present the content is returned **untouched** — we must\n * not trim or collapse blank lines on ordinary prose, which would clobber\n * intentional leading/trailing whitespace (e.g. indented Markdown / code).\n * Whitespace is only normalized when a marker was actually removed.\n *\n * Applied to assistant content only — user-typed text is never touched, so a\n * user who literally types `[[FILE:x]]` still sees their own text.\n */\nexport function stripFileMarkers(content: string): string {\n if (!content) return content;\n const stripped = content.replace(FILE_MARKER_RE, '').replace(PARTIAL_FILE_MARKER_RE, '');\n if (stripped === content) return content;\n return stripped\n .replace(/[ \\t]+\\n/g, '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n\n/** An ordered piece of assistant content: prose text or a file marker. */\nexport type FileMarkerPart = { type: 'text'; value: string } | { type: 'file'; fileId: string };\n\n/**\n * Split assistant content into ordered text/file parts around complete\n * `[[FILE:<id>]]` markers, so the renderer can place each download card at the\n * marker's source position (preserving interleaved order). A trailing\n * incomplete marker (an SSE token split mid-stream) is removed from the final\n * text part so it never shows as raw `[[FILE:...` text.\n */\nexport function splitFileMarkers(content: string): FileMarkerPart[] {\n if (!content) return [];\n const parts: FileMarkerPart[] = [];\n const re = /\\[\\[FILE:([^\\]]+)\\]\\]/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null = re.exec(content);\n while (match !== null) {\n if (match.index > lastIndex) {\n parts.push({ type: 'text', value: content.slice(lastIndex, match.index) });\n }\n parts.push({ type: 'file', fileId: match[1] });\n lastIndex = re.lastIndex;\n match = re.exec(content);\n }\n const tail = content.slice(lastIndex).replace(PARTIAL_FILE_MARKER_RE, '');\n if (tail) parts.push({ type: 'text', value: tail });\n return parts;\n}\n"],"names":["hardenNestedCodeFences","raw","lines","split","fenceRe","markupLang","openerIdx","i","length","m","match","test","trim","maxRun","nestedCount","lastBareFence","Math","max","fence","repeat","om","cm","join","normalizeMarkdownTables","indexOf","splitCells","row","s","startsWith","slice","endsWith","cells","current","ch","push","isDelimiterRow","includes","alignOf","cell","c","left","right","fenceChar","fenceLen","listMarkerRe","fenceMatch","run","header","delim","markerMatch","offset","trimStart","indent","headerCols","delimCells","aligns","wrapBareJson","trimmed","JSON","parse","normalizeImageMarkdown","replace","_match","alt","url","SAFE_URL_PROTOCOLS","Set","markdownUrlTransform","colon","slash","question","hash","protocol","toLowerCase","has"],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sources":["../../src/utils/index.ts"],"sourcesContent":["import type { Translate } from '../types';\n\nexport function hexAlpha(hex: string, alpha: number): string {\n const a = Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0');\n return `${hex}${a}`;\n}\n\n/**\n * Markdown has no native support for nesting fenced code blocks of the same\n * length: per the CommonMark spec, the first inner ``` closes the outer block,\n * so everything after it renders *outside* the code block. LLMs constantly hit\n * this — when an agent shows a prompt or a full markdown document inside a\n * ```markdown … ``` fence, that document's own ``` fences shatter the snippet\n * into alternating code / prose fragments.\n *\n * The robust, spec-compliant fix is to make the *outer* fence longer than any\n * fence it contains: a 4-backtick fence is only closed by a run of ≥4\n * backticks, so all inner 3-backtick fences become literal content and the\n * whole document renders as one clean, copyable code block.\n *\n * We act only on the unambiguous, dominant case — a 3-backtick opener whose\n * info string is a markup language (markdown / md / mdx / markup) that actually\n * contains nested fences — so already-correct markdown is never rewritten\n * (a correctly authored nested block already uses a 4+-backtick opener, which\n * we skip).\n */\nexport function hardenNestedCodeFences(raw: string): string {\n if (!raw) return raw;\n const lines = raw.split('\\n');\n const fenceRe = /^(\\s*)(`{3,})(.*)$/;\n const markupLang = /^(markdown|md|mdx|markup)\\b/i;\n\n let openerIdx = -1;\n for (let i = 0; i < lines.length; i++) {\n const m = lines[i].match(fenceRe);\n if (m && m[2].length === 3 && markupLang.test(m[3].trim())) {\n openerIdx = i;\n break;\n }\n }\n if (openerIdx === -1) return raw;\n\n // Find the outer block's *matching* closer rather than the last bare fence in\n // the message. Same-length fences are ambiguous — an inner ``` looks exactly\n // like the outer closer — so inner fences are paired off with two structural\n // signals:\n // • a labelled fence (```lang) opens a nested block, and the next bare\n // fence closes it (depth tracking); and\n // • two consecutive *bare* fences wrapping a non-blank body form an\n // unlabelled nested code block — a ``` … ``` example inside the document.\n // A bare fence at depth 0 is the outer closer when the next fence is\n // labelled, absent, or bare-but-separated-by-only-blank-lines: that last case\n // is a block boundary (this closer followed by a *separate* block), not\n // nesting, so the separate block is never absorbed.\n //\n // Taking the last bare fence instead swallowed everything up to it — trailing\n // prose and unrelated code blocks alike — whenever a later block followed the\n // markdown one.\n const fences: { idx: number; run: number; bare: boolean }[] = [];\n for (let i = openerIdx + 1; i < lines.length; i++) {\n const m = lines[i].match(fenceRe);\n if (m) fences.push({ idx: i, run: m[2].length, bare: m[3].trim() === '' });\n }\n\n // True when every line strictly between two fence lines is blank — which\n // separates a nested code block (real body) from a mere block boundary.\n const blankBetween = (a: number, b: number): boolean => {\n for (let k = a + 1; k < b; k++) {\n if (lines[k].trim() !== '') return false;\n }\n return true;\n };\n\n let depth = 0;\n let maxRun = 3;\n let nestedCount = 0;\n let closerIdx = -1;\n for (let j = 0; j < fences.length; j++) {\n const f = fences[j];\n if (f.bare && depth === 0) {\n const next = fences[j + 1];\n if (!next || !next.bare || blankBetween(f.idx, next.idx)) {\n closerIdx = f.idx;\n break;\n }\n depth++; // opens an unlabelled nested code block\n } else {\n // A labelled fence opens a nested block; a bare fence at depth > 0 closes\n // the innermost one.\n depth = f.bare ? Math.max(0, depth - 1) : depth + 1;\n }\n nestedCount++;\n maxRun = Math.max(maxRun, f.run);\n }\n\n // Only harden when the block really contains nested fences AND its own closer\n // was found — otherwise leave the text alone rather than extending the block\n // over whatever follows.\n if (closerIdx === -1 || nestedCount === 0) return raw;\n\n const fence = '`'.repeat(Math.max(maxRun + 1, 4));\n const om = lines[openerIdx].match(fenceRe)!;\n lines[openerIdx] = `${om[1]}${fence}${om[3]}`;\n const cm = lines[closerIdx].match(fenceRe)!;\n lines[closerIdx] = `${cm[1]}${fence}`;\n return lines.join('\\n');\n}\n\n/**\n * GFM renders a pipe table only when the delimiter row (`|---|---|`) has the\n * SAME number of columns as the header row. LLMs frequently miscount (e.g. a\n * 4-column header followed by a 3-column delimiter), and a server-side guard can\n * corrupt the delimiter — in either case the whole table silently degrades to\n * raw `| … |` text. This repairs a mismatched delimiter row to the header's\n * column count (preserving any alignment colons) so the table renders.\n *\n * It only rewrites a delimiter that is ACTUALLY mismatched, so already-valid\n * tables are never touched. Fenced code blocks are skipped, and setext headings\n * (underlines with no `|`) are never mistaken for a table.\n */\nexport function normalizeMarkdownTables(raw: string): string {\n if (!raw || raw.indexOf('|') === -1) return raw;\n const lines = raw.split('\\n');\n\n // Splits on unescaped `|` only. A manual walk (rather than a negative\n // lookbehind, which is unsupported on older engines and would throw at parse\n // time in an untranspiled ESNext bundle) keeps `\\|` inside a cell intact.\n const splitCells = (row: string): string[] => {\n let s = row.trim();\n if (s.startsWith('|')) s = s.slice(1);\n if (s.endsWith('|')) s = s.slice(0, -1);\n const cells: string[] = [];\n let current = '';\n for (let i = 0; i < s.length; i++) {\n const ch = s[i];\n if (ch === '\\\\' && i + 1 < s.length) {\n current += ch + s[i + 1];\n i++;\n } else if (ch === '|') {\n cells.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n cells.push(current);\n return cells;\n };\n const isDelimiterRow = (row: string): boolean => row.includes('|') && /^\\s*\\|?\\s*:?-+:?\\s*(\\|\\s*:?-+:?\\s*)*\\|?\\s*$/.test(row);\n // Emit the canonical 3-hyphen delimiter form. remark-gfm accepts a single\n // hyphen, but `---` (with optional alignment colons) is the portable form\n // every Markdown renderer agrees on, so prefer it.\n const alignOf = (cell: string): string => {\n const c = cell.trim();\n const left = c.startsWith(':');\n const right = c.endsWith(':');\n return left && right ? ':---:' : right ? '---:' : left ? ':---' : '---';\n };\n\n // Track both the fence character AND its run length: per CommonMark a closing\n // fence must use the same character and be at least as long as the opener, so\n // a shorter run (```) must not close a longer one (````), and a closing fence\n // carries no info string. Optional blockquote / list-item markers are allowed\n // before the run so fences nested in those containers (e.g. `- ```) are still\n // recognised and the table inside them is left untouched.\n const fenceRe = /^\\s*(?:(?:>\\s?)|(?:[-*+]\\s+)|(?:\\d{1,9}[.)]\\s+))*(`{3,}|~{3,})(.*)$/;\n let fenceChar: string | null = null;\n let fenceLen = 0;\n // A pipe-table header can share its line with a list-item marker (e.g.\n // `- | a | b |`). Strip a leading list marker before counting columns so the\n // count matches the cells GFM sees inside the list item, not the marker.\n const listMarkerRe = /^\\s*(?:[-*+]\\s+|\\d{1,9}[.)]\\s+)/;\n for (let i = 0; i < lines.length - 1; i++) {\n const fenceMatch = lines[i].match(fenceRe);\n if (fenceMatch) {\n const run = fenceMatch[1];\n if (fenceChar === null) {\n fenceChar = run[0];\n fenceLen = run.length;\n } else if (run[0] === fenceChar && run.length >= fenceLen && fenceMatch[2].trim() === '') {\n fenceChar = null;\n fenceLen = 0;\n }\n continue;\n }\n if (fenceChar !== null) continue;\n\n const header = lines[i];\n const delim = lines[i + 1];\n if (!header.includes('|') || isDelimiterRow(header) || !isDelimiterRow(delim)) continue;\n\n // A table can start on a list-item line, so both the cells and the\n // delimiter's alignment live AFTER the marker. Anchor the rewritten\n // delimiter to that content offset (padding the marker width with spaces) so\n // it stays a continuation line of the list item: GFM drops a table whose\n // delimiter dedents away from its header. Without a marker this is just the\n // header's leading whitespace, so top-level tables are emitted unchanged.\n const markerMatch = header.match(listMarkerRe);\n const offset = markerMatch ? markerMatch[0].length : header.length - header.trimStart().length;\n const indent = markerMatch ? ' '.repeat(offset) : header.slice(0, offset);\n\n const headerCols = splitCells(header.slice(offset)).length;\n const delimCells = splitCells(delim);\n if (headerCols < 2 || delimCells.length === headerCols) continue;\n\n const aligns: string[] = [];\n for (let c = 0; c < headerCols; c++) aligns.push(delimCells[c] ? alignOf(delimCells[c]) : '---');\n lines[i + 1] = `${indent}| ${aligns.join(' | ')} |`;\n }\n return lines.join('\\n');\n}\n\n/**\n * When the ENTIRE message is a raw JSON object/array (and not already fenced),\n * wrap it in a ```json fence so it renders as a proper, copyable code block\n * instead of one long line of mangled prose — markdown collapses the newlines\n * and eats the `*`/`_` inside string values otherwise.\n *\n * Deliberately conservative: it parses the payload first, so a message that\n * merely *starts* with `{` (e.g. prose about an object) is left untouched.\n */\nexport function wrapBareJson(raw: string): string {\n const trimmed = raw.trim();\n if ((!trimmed.startsWith('{') && !trimmed.startsWith('[')) || trimmed.startsWith('```')) return raw;\n try {\n JSON.parse(trimmed);\n return '```json\\n' + trimmed + '\\n```';\n } catch {\n return raw;\n }\n}\n\n/**\n * Models routinely emit markdown images whose alt text is the whole generation\n * prompt, spread over several lines. CommonMark has no multi-line `![…](…)`, so\n * the image syntax breaks apart and the prompt renders as literal paragraphs\n * followed by a stray link.\n *\n * This collapses the alt text of such an image onto a single line (whitespace\n * runs → one space) so the parser emits a real `<img>` node. Single-line images\n * are returned byte-identical, and the URL is never rewritten — the URL may\n * contain anything, and only the alt text is at fault.\n *\n * The URL part excludes `)` and whitespace, so a link title\n * (`![alt](url \"title\")`) or a parenthesised URL is left alone rather than\n * mis-parsed.\n */\nexport function normalizeImageMarkdown(raw: string): string {\n if (!raw.includes('![')) return raw;\n return raw.replace(/!\\[([^\\]]*?\\n[^\\]]*?)\\]\\(([^)\\s]+)\\)/g, (_match, alt: string, url: string) => {\n const flat = alt.replace(/\\s+/g, ' ').trim();\n return `![${flat}](${url})`;\n });\n}\n\n/** Schemes react-markdown's own sanitizer allows, minus the `data:` special case below. */\nconst SAFE_URL_PROTOCOLS = new Set(['http', 'https', 'mailto', 'tel']);\n\n/**\n * URL sanitizer for react-markdown that additionally preserves `data:image/*`\n * URIs.\n *\n * react-markdown v9+ ships a default `urlTransform` allowing only\n * http / https / mailto / tel. Agents with a code interpreter return charts as\n * `data:image/png;base64,…`, which that default strips — leaving a broken\n * `<img>`. Every other scheme (notably `javascript:` / `vbscript:`) is still\n * blocked, and non-image `data:` URIs are blocked too, so this widens the\n * allow-list by exactly one safe, inert case.\n */\nexport function markdownUrlTransform(url: string): string {\n const colon = url.indexOf(':');\n if (colon < 0) return url; // relative URL — always safe\n\n const slash = url.indexOf('/');\n const question = url.indexOf('?');\n const hash = url.indexOf('#');\n\n // A `/`, `?` or `#` before the colon means this is a path, not a scheme\n // (e.g. `./a:b`), so there is nothing to sanitize.\n if ((slash > -1 && colon > slash) || (question > -1 && colon > question) || (hash > -1 && colon > hash)) {\n return url;\n }\n\n const protocol = url.slice(0, colon).toLowerCase();\n if (SAFE_URL_PROTOCOLS.has(protocol)) return url;\n if (protocol === 'data' && /^data:image\\//i.test(url)) return url;\n return '';\n}\n\nexport const identity: Translate = (key) => key;\n\n/**\n * Translates `key`, then splices `values` into the result's `{name}` slots.\n *\n * The point is that the key stays a whole sentence. Building a phrase out of\n * translated fragments — \"Waiting for\" + count + \"tasks\" — freezes English word\n * order and English plural rules into the layout, and a translator sees each\n * fragment with no sentence around it. Here the locale owns the whole sentence\n * and decides where the number goes; the host's `t` still does nothing but look\n * a key up, so this needs no support from it.\n *\n * Plurals stay two explicit keys (`'1 tool call'` / `'{count} tool calls'`) for\n * the same reason: a lookup cannot select a plural form, so the call site picks\n * the sentence and the locale translates it whole.\n */\nexport function translate(t: Translate, key: string, values: Record<string, string | number>): string {\n // One pass over the sentence rather than one pass per value: a value that\n // happens to contain `{something}` is then never mistaken for a slot of its\n // own. A slot with no value keeps its braces, so a stray one is visible\n // rather than silently blank.\n return t(key).replace(/\\{(\\w+)\\}/g, (slot, name) => (Object.hasOwn(values, name) ? String(values[name] ?? '') : slot));\n}\n\n/**\n * Same as `translate`, but leaves one slot unfilled and returns the text on\n * either side of it — for the case where the value has to be markup (a coloured\n * agent name, a link) and so cannot be spliced into a string.\n *\n * Without this the sentence gets cut into \"How can \" + node + \" help you, \",\n * which is untranslatable in any language that would not put the node in that\n * spot. Here the locale still owns the whole sentence and decides where the slot\n * sits.\n *\n * `hasSlot` is false for a translation that dropped the slot — a locale that\n * reworded the sentence so it no longer names the value. The caller then renders\n * the sentence without the node instead of letting it dangle off the end.\n */\nexport function translateAround(\n t: Translate,\n key: string,\n slot: string,\n values: Record<string, string | number> = {},\n): { before: string; after: string; hasSlot: boolean } {\n const sentence = translate(t, key, values);\n const token = `{${slot}}`;\n const at = sentence.indexOf(token);\n if (at === -1) return { before: sentence, after: '', hasSlot: false };\n return { before: sentence.slice(0, at), after: sentence.slice(at + token.length), hasSlot: true };\n}\n\n/**\n * Nearest chatbot panel root (`.filigran-chatbot`) for portal-based overlays\n * (tooltips, dropdowns, dialogs), so they stay inside the panel's stacking\n * context instead of competing with the host app's z-indexes. Falls back to\n * `document.body` when rendered outside a panel.\n */\nexport function findChatbotRoot(el: HTMLElement | null): HTMLElement {\n let node = el;\n while (node) {\n if (node.classList.contains('filigran-chatbot')) return node;\n node = node.parentElement;\n }\n return document.body;\n}\n\n/**\n * Compact count for the composer's status readouts: 1200 → \"1.2k\", so neither\n * the quota nor the context gauge can widen the toolbar as the numbers grow.\n */\nexport function compactCount(n: number): string {\n if (n < 1000) return `${n}`;\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0).replace(/\\.0$/, '')}k`;\n return `${(n / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`;\n}\n\n/**\n * Compact relative-time label for the conversation history menu\n * (\"just now\", \"5m ago\", \"3h ago\", \"2d ago\", then a short date).\n * Returns an empty string for missing/unparseable timestamps so the row\n * simply omits the label instead of showing \"Invalid Date\".\n */\nexport function timeAgo(iso: string | undefined, t: Translate): string {\n if (!iso) return '';\n const then = new Date(iso).getTime();\n if (Number.isNaN(then)) return '';\n const diffMs = Date.now() - then;\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 1) return t('just now');\n if (minutes < 60) return translate(t, '{count}m ago', { count: minutes });\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return translate(t, '{count}h ago', { count: hours });\n const days = Math.floor(hours / 24);\n if (days < 7) return translate(t, '{count}d ago', { count: days });\n return new Date(iso).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\n/** Matches a complete `[[FILE:<id>]]` deliverable marker agents embed in prose. */\nconst FILE_MARKER_RE = /\\[\\[FILE:[^\\]]+\\]\\]/g;\n\n/**\n * Matches an INCOMPLETE marker at the very end of the string. SSE streams can\n * split a `[[FILE:<id>]]` token before the closing `]]` arrives, so the tail\n * may be `[[FILE`, `[[FILE:`, `[[FILE:abc`, or `[[FILE:abc]` mid-stream. We\n * anchor on the literal `[[FILE` prefix (which is vanishingly unlikely to\n * appear legitimately at the end of prose) so it never clips real content.\n */\nconst PARTIAL_FILE_MARKER_RE = /\\[\\[FILE(?::[^\\]]*)?\\]?$/;\n\n/**\n * Strip the `[[FILE:<id>]]` markers an agent embeds in its reply to point at\n * generated files. The actual files render as separate download chips, so the\n * raw markers must be removed from the prose. Complete markers are removed\n * anywhere; an incomplete marker at the end is also removed so a partially\n * streamed token never flickers as raw `[[FILE:...` text.\n *\n * When no marker is present the content is returned **untouched** — we must\n * not trim or collapse blank lines on ordinary prose, which would clobber\n * intentional leading/trailing whitespace (e.g. indented Markdown / code).\n * Whitespace is only normalized when a marker was actually removed.\n *\n * Applied to assistant content only — user-typed text is never touched, so a\n * user who literally types `[[FILE:x]]` still sees their own text.\n */\nexport function stripFileMarkers(content: string): string {\n if (!content) return content;\n const stripped = content.replace(FILE_MARKER_RE, '').replace(PARTIAL_FILE_MARKER_RE, '');\n if (stripped === content) return content;\n return stripped\n .replace(/[ \\t]+\\n/g, '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n\n/** An ordered piece of assistant content: prose text or a file marker. */\nexport type FileMarkerPart = { type: 'text'; value: string } | { type: 'file'; fileId: string };\n\n/**\n * Split assistant content into ordered text/file parts around complete\n * `[[FILE:<id>]]` markers, so the renderer can place each download card at the\n * marker's source position (preserving interleaved order). A trailing\n * incomplete marker (an SSE token split mid-stream) is removed from the final\n * text part so it never shows as raw `[[FILE:...` text.\n */\nexport function splitFileMarkers(content: string): FileMarkerPart[] {\n if (!content) return [];\n const parts: FileMarkerPart[] = [];\n const re = /\\[\\[FILE:([^\\]]+)\\]\\]/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null = re.exec(content);\n while (match !== null) {\n if (match.index > lastIndex) {\n parts.push({ type: 'text', value: content.slice(lastIndex, match.index) });\n }\n parts.push({ type: 'file', fileId: match[1] });\n lastIndex = re.lastIndex;\n match = re.exec(content);\n }\n const tail = content.slice(lastIndex).replace(PARTIAL_FILE_MARKER_RE, '');\n if (tail) parts.push({ type: 'text', value: tail });\n return parts;\n}\n"],"names":["hardenNestedCodeFences","raw","lines","split","fenceRe","markupLang","openerIdx","i","length","m","match","test","trim","fences","push","idx","run","bare","blankBetween","a","b","k","depth","maxRun","nestedCount","closerIdx","j","f","next","Math","max","fence","repeat","om","cm","join","normalizeMarkdownTables","indexOf","splitCells","row","s","startsWith","slice","endsWith","cells","current","ch","isDelimiterRow","includes","alignOf","cell","c","left","right","fenceChar","fenceLen","listMarkerRe","fenceMatch","header","delim","markerMatch","offset","trimStart","indent","headerCols","delimCells","aligns","wrapBareJson","trimmed","JSON","parse","normalizeImageMarkdown","replace","_match","alt","url","SAFE_URL_PROTOCOLS","Set","markdownUrlTransform","colon","slash","question","hash","protocol","toLowerCase","has"],"mappings":"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"}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-xl:1.25rem;--text-xl--line-height:1.4;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{:where(.filigran-chatbot),:where(.filigran-chatbot) *,:where(.filigran-chatbot) :after,:where(.filigran-chatbot) :before{border:0 solid;box-sizing:border-box}:where(.filigran-chatbot) button,:where(.filigran-chatbot) input,:where(.filigran-chatbot) textarea{background:0 0;color:inherit;font:inherit;margin:0;padding:0}:where(.filigran-chatbot) button:not(:disabled){cursor:pointer}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::backdrop,:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)):after,:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)):before{border:0 solid;box-sizing:border-box;margin:0;padding:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::file-selector-button{border:0 solid;box-sizing:border-box;margin:0;padding:0}.filigran-chatbot:where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){-webkit-text-size-adjust:100%;font-feature-settings:var(--default-font-feature-settings,normal);-webkit-tap-highlight-color:transparent;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4}hr:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){border-top-width:1px;color:inherit;height:0}abbr:where([title]):where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h2:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h3:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h4:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h5:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h6:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-size:inherit;font-weight:inherit}a:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),strong:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-weight:bolder}code:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),kbd:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),pre:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),samp:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-feature-settings:var(--default-mono-font-feature-settings,normal);font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-size:80%}sub:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),sup:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){bottom:-.25em}sup:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){top:-.5em}table:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){outline:auto}progress:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){vertical-align:baseline}summary:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){display:list-item}menu:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),ol:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),ul:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){list-style:none}audio:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),canvas:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),embed:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),iframe:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),img:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),object:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),svg:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),video:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){display:block;vertical-align:middle}img:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),video:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){height:auto;max-width:100%}button:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),input:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),optgroup:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),select:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),textarea:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-feature-settings:inherit;background-color:#0000;border-radius:0;color:inherit;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::file-selector-button{font-feature-settings:inherit;background-color:#0000;border-radius:0;color:inherit;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-weight:bolder}:where(select:is([multiple],[size])) optgroup option:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){padding-inline-start:20px}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::file-selector-button{margin-inline-end:4px}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){resize:vertical}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-search-decoration{-webkit-appearance:none}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit{display:inline-flex}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-fields-wrapper{padding:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-year-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-month-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-day-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-hour-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-minute-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-second-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-millisecond-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-meridiem-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){box-shadow:none}button:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),input:where([type=button],[type=reset],[type=submit]):where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){appearance:button}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::file-selector-button{appearance:button}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-inner-spin-button{height:auto}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])):where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-5{bottom:calc(var(--spacing)*5)}.-left-1{left:calc(var(--spacing)*-1)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.z-10{z-index:10}.z-\[1200\]{z-index:1200}.z-\[1300\]{z-index:1300}.z-\[1400\]{z-index:1400}.z-\[10000\]{z-index:10000}.z-\[10001\]{z-index:10001}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2\.5{margin-top:calc(var(--spacing)*2.5)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-0\.5{margin-right:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-11{margin-left:calc(var(--spacing)*11)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-\[5px\]{height:5px}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-44{max-height:calc(var(--spacing)*44)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-72{max-height:calc(var(--spacing)*72)}.max-h-\[90\%\]{max-height:90%}.max-h-\[200px\]{max-height:200px}.max-h-\[240px\]{max-height:240px}.max-h-\[400px\]{max-height:400px}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[48px\]{min-height:48px}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-64{width:calc(var(--spacing)*64)}.w-\[5px\]{width:5px}.w-full{width:100%}.max-w-\[45\%\]{max-width:45%}.max-w-\[75\%\]{max-width:75%}.max-w-\[78\%\]{max-width:78%}.max-w-\[90\%\]{max-width:90%}.max-w-\[320px\]{max-width:320px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-zoom-in{cursor:zoom-in}.resize{resize:both}.resize-none{resize:none}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-\[3px\]{gap:3px}.gap-px{gap:1px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*1*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*1*var(--tw-space-y-reverse))}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-\[14px_14px_4px_14px\]{border-radius:14px 14px 4px}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-r-md{border-bottom-right-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-b-xl{border-bottom-left-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-none{--tw-border-style:none;border-style:none}.border-\[var\(--chat-accent\)\]\/30{border-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--chat-accent\)\]\/30{border-color:color-mix(in oklab,var(--chat-accent) 30%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500) 25%,transparent)}}.border-current\/20{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/20{border-color:color-mix(in oklab,currentcolor 20%,transparent)}}.border-current\/30{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/30{border-color:color-mix(in oklab,currentcolor 30%,transparent)}}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-red-300{border-color:var(--color-red-300)}.border-t-\[var\(--chat-accent\)\]{border-top-color:var(--chat-accent)}.border-t-current{border-top-color:currentColor}.bg-\[var\(--chat-accent\)\],.bg-\[var\(--chat-accent\)\]\/10{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/10{background-color:color-mix(in oklab,var(--chat-accent) 10%,transparent)}}.bg-\[var\(--chat-accent\)\]\/20{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/20{background-color:color-mix(in oklab,var(--chat-accent) 20%,transparent)}}.bg-\[var\(--chat-accent\)\]\/50{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/50{background-color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.bg-\[var\(--chat-accent\)\]\/60{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/60{background-color:color-mix(in oklab,var(--chat-accent) 60%,transparent)}}.bg-\[var\(--chat-accent\)\]\/70{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/70{background-color:color-mix(in oklab,var(--chat-accent) 70%,transparent)}}.bg-\[var\(--chat-accent\)\]\/\[0\.03\]{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/\[0\.03\]{background-color:color-mix(in oklab,var(--chat-accent) 3%,transparent)}}.bg-\[var\(--chat-accent-dark\)\]{background-color:var(--chat-accent-dark)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/5{background-color:color-mix(in oklab,var(--color-amber-500) 5%,transparent)}}.bg-amber-500\/\[0\.02\]{background-color:#f99c0005}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-amber-500) 2%,transparent)}}.bg-amber-500\/\[0\.04\]{background-color:#f99c000a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-amber-500) 4%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/50{background-color:color-mix(in oklab,var(--color-gray-50) 50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-100\/50{background-color:#f3f4f680}@supports (color:color-mix(in lab,red,red)){.bg-gray-100\/50{background-color:color-mix(in oklab,var(--color-gray-100) 50%,transparent)}}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab}.bg-gradient-to-br,.bg-gradient-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab}.from-\[var\(--chat-accent\)\]\/15{--tw-gradient-from:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--chat-accent\)\]\/15{--tw-gradient-from:color-mix(in oklab,var(--chat-accent) 15%,transparent)}}.from-\[var\(--chat-accent\)\]\/15{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-\[var\(--chat-accent\)\]\/20{--tw-gradient-from:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--chat-accent\)\]\/20{--tw-gradient-from:color-mix(in oklab,var(--chat-accent) 20%,transparent)}}.from-\[var\(--chat-accent\)\]\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-from:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-from:color-mix(in oklab,var(--chat-accent) 3%,transparent)}}.from-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-\[var\(--chat-accent-dark\)\]\/\[0\.13\]{--tw-gradient-from:var(--chat-accent-dark)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--chat-accent-dark\)\]\/\[0\.13\]{--tw-gradient-from:color-mix(in oklab,var(--chat-accent-dark) 13%,transparent)}}.from-\[var\(--chat-accent-dark\)\]\/\[0\.13\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-via) var(--tw-gradient-via-position),var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[var\(--chat-accent\)\]\/5{--tw-gradient-to:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.to-\[var\(--chat-accent\)\]\/5{--tw-gradient-to:color-mix(in oklab,var(--chat-accent) 5%,transparent)}}.to-\[var\(--chat-accent\)\]\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-to:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.to-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-to:color-mix(in oklab,var(--chat-accent) 3%,transparent)}}.to-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-\[var\(--chat-accent\)\]\/\[0\.07\]{--tw-gradient-to:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.to-\[var\(--chat-accent\)\]\/\[0\.07\]{--tw-gradient-to:color-mix(in oklab,var(--chat-accent) 7.0%,transparent)}}.to-\[var\(--chat-accent\)\]\/\[0\.07\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.\[mask-image\:linear-gradient\(to_bottom\,transparent_0\,rgb\(0_0_0\/0\.25\)_1\.5rem\,rgb\(0_0_0\/0\.7\)_3rem\,black_4\.5rem\)\]{-webkit-mask-image:linear-gradient(#0000,#00000040 1.5rem,#000000b3 3rem,#000 4.5rem);mask-image:linear-gradient(#0000,#00000040 1.5rem,#000000b3 3rem,#000 4.5rem)}.stroke-gray-200{stroke:var(--color-gray-200)}.object-contain{object-fit:contain}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-\[3px\]{padding-block:3px}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-3\.5{padding-top:calc(var(--spacing)*3.5)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-3{padding-right:calc(var(--spacing)*3)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-2\.5{padding-bottom:calc(var(--spacing)*2.5)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-7{padding-left:calc(var(--spacing)*7)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.6rem\]{font-size:.6rem}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.9rem\]{font-size:.9rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[0\.75rem\]{font-size:.75rem}.text-\[0\.85rem\]{font-size:.85rem}.text-\[0\.875rem\]{font-size:.875rem}.text-\[0\.8125rem\]{font-size:.8125rem}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\[1\.7\]{--tw-leading:1.7;line-height:1.7}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[1\.5px\]{--tw-tracking:1.5px;letter-spacing:1.5px}.tracking-\[1px\]{--tw-tracking:1px;letter-spacing:1px}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--chat-accent\)\],.text-\[var\(--chat-accent\)\]\/70{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.text-\[var\(--chat-accent\)\]\/70{color:color-mix(in oklab,var(--chat-accent) 70%,transparent)}}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#00000026)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.15\)\],.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.25\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.25\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#00000040)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[var\(--chat-accent\)\]{--tw-ring-color:var(--chat-accent)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline:2px solid #0000;outline-offset:2px}}.drop-shadow-\[0_0_12px_var\(--chat-accent-40\)\]{--tw-drop-shadow-size:drop-shadow(0 0 12px var(--tw-drop-shadow-color,var(--chat-accent-40)));--tw-drop-shadow:var(--tw-drop-shadow-size)}.drop-shadow-\[0_0_12px_var\(--chat-accent-40\)\],.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[stroke-dashoffset\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:stroke-dashoffset;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[width\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.\[-webkit-mask-image\:linear-gradient\(to_bottom\,transparent_0\,rgb\(0_0_0\/0\.25\)_1\.5rem\,rgb\(0_0_0\/0\.7\)_3rem\,black_4\.5rem\)\]{-webkit-mask-image:linear-gradient(#0000,#00000040 1.5rem,#000000b3 3rem,#000 4.5rem)}@media (hover:hover){.group-hover\:text-\[var\(--chat-accent\)\]:is(:where(.group):hover *){color:var(--chat-accent)}.group-hover\/img\:opacity-100:is(:where(.group\/img):hover *),.group-hover\/msg\:opacity-100:is(:where(.group\/msg):hover *),.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-active\:opacity-100:is(:where(.group):active *){opacity:1}.marker\:text-\[var\(--chat-accent\)\]\/50 ::marker{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.marker\:text-\[var\(--chat-accent\)\]\/50 ::marker{color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.marker\:text-\[var\(--chat-accent\)\]\/50::marker{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.marker\:text-\[var\(--chat-accent\)\]\/50::marker{color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.marker\:text-\[var\(--chat-accent\)\]\/50 ::-webkit-details-marker{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.marker\:text-\[var\(--chat-accent\)\]\/50 ::-webkit-details-marker{color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.marker\:text-\[var\(--chat-accent\)\]\/50::-webkit-details-marker{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.marker\:text-\[var\(--chat-accent\)\]\/50::-webkit-details-marker{color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-full:first-child{border-bottom-left-radius:3.40282e+38px;border-top-left-radius:3.40282e+38px}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.focus-within\:border-\[var\(--chat-accent\)\]:focus-within{border-color:var(--chat-accent)}.focus-within\:opacity-100:focus-within{opacity:1}@media (hover:hover){.hover\:border-\[var\(--chat-accent\)\]:hover,.hover\:border-\[var\(--chat-accent\)\]\/40:hover{border-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:border-\[var\(--chat-accent\)\]\/40:hover{border-color:color-mix(in oklab,var(--chat-accent) 40%,transparent)}}.hover\:border-\[var\(--chat-accent-50\)\]:hover{border-color:var(--chat-accent-50)}.hover\:bg-\[var\(--chat-accent\)\]\/5:hover{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--chat-accent\)\]\/5:hover{background-color:color-mix(in oklab,var(--chat-accent) 5%,transparent)}}.hover\:bg-\[var\(--chat-accent\)\]\/20:hover{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--chat-accent\)\]\/20:hover{background-color:color-mix(in oklab,var(--chat-accent) 20%,transparent)}}.hover\:bg-\[var\(--chat-accent-10\)\]:hover{background-color:var(--chat-accent-10)}.hover\:bg-black\/70:hover{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/70:hover{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.hover\:text-\[var\(--chat-accent\)\]:hover{color:var(--chat-accent)}.hover\:text-amber-600:hover{color:var(--color-amber-600)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:brightness-125:hover{--tw-brightness:brightness(125%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-\[var\(--chat-accent\)\]\/50:focus{border-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.focus\:border-\[var\(--chat-accent\)\]\/50:focus{border-color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-\[var\(--chat-accent\)\]:focus{--tw-ring-color:var(--chat-accent)}.focus-visible\:text-\[var\(--chat-accent\)\]:focus-visible{color:var(--chat-accent)}.focus-visible\:opacity-100:focus-visible{opacity:1}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark .dark\:border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.dark .dark\:border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.dark .dark\:border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-white\/15{border-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.dark .dark\:border-white\/\[0\.04\]{border-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-white\/\[0\.04\]{border-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.dark .dark\:border-white\/\[0\.06\]{border-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-white\/\[0\.06\]{border-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.dark .dark\:bg-\[\#1e1e2e\]{background-color:#1e1e2e}.dark .dark\:bg-\[\#2a2a3e\]{background-color:#2a2a3e}.dark .dark\:bg-\[\#161622\]{background-color:#161622}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.dark .dark\:bg-gray-100{background-color:var(--color-gray-100)}.dark .dark\:bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.dark .dark\:bg-white\/\[0\.01\]{background-color:#ffffff03}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.01\]{background-color:color-mix(in oklab,var(--color-white) 1%,transparent)}}.dark .dark\:bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.dark .dark\:bg-white\/\[0\.04\]{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.dark .dark\:bg-white\/\[0\.06\]{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.dark .dark\:bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.dark .dark\:stroke-white\/15{stroke:#ffffff26}@supports (color:color-mix(in lab,red,red)){.dark .dark\:stroke-white\/15{stroke:color-mix(in oklab,var(--color-white) 15%,transparent)}}.dark .dark\:text-amber-300{color:var(--color-amber-300)}.dark .dark\:text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300) 90%,transparent)}}.dark .dark\:text-amber-400{color:var(--color-amber-400)}.dark .dark\:text-emerald-300{color:var(--color-emerald-300)}.dark .dark\:text-emerald-400{color:var(--color-emerald-400)}.dark .dark\:text-gray-900{color:var(--color-gray-900)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-white\/20{color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/20{color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.dark .dark\:text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/30{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.dark .dark\:text-white\/35{color:#ffffff59}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/35{color:color-mix(in oklab,var(--color-white) 35%,transparent)}}.dark .dark\:text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/40{color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.dark .dark\:text-white\/45{color:#ffffff73}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/45{color:color-mix(in oklab,var(--color-white) 45%,transparent)}}.dark .dark\:text-white\/50{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/50{color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.dark .dark\:text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/60{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.dark .dark\:text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.dark .dark\:text-white\/75{color:#ffffffbf}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/75{color:color-mix(in oklab,var(--color-white) 75%,transparent)}}.dark .dark\:text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/80{color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.dark .dark\:text-white\/85{color:#ffffffd9}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/85{color:color-mix(in oklab,var(--color-white) 85%,transparent)}}.dark .dark\:text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/90{color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.dark .dark\:shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.4\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0006)}.dark .dark\:shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.4\)\],.dark .dark\:shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.6\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.6\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0009)}.dark .dark\:placeholder\:text-white\/30::placeholder{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:placeholder\:text-white\/30::placeholder{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.dark .dark\:placeholder\:text-white\/40::placeholder{color:#fff6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:placeholder\:text-white\/40::placeholder{color:color-mix(in oklab,var(--color-white) 40%,transparent)}}@media (hover:hover){.dark .dark\:hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.dark .dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.dark .dark\:hover\:bg-white\/\[0\.02\]:hover{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/\[0\.02\]:hover{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.dark .dark\:hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/\[0\.03\]:hover{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.dark .dark\:hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.dark .dark\:hover\:text-amber-300:hover{color:var(--color-amber-300)}.dark .dark\:hover\:text-red-400:hover{color:var(--color-red-400)}.dark .dark\:hover\:text-white\/60:hover{color:#fff9}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:text-white\/60:hover{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.dark .dark\:hover\:text-white\/70:hover{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}}.\[\&_li\]\:mb-1 li{margin-bottom:calc(var(--spacing)*1)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:h-4>svg{height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-12>svg{height:calc(var(--spacing)*12)}.\[\&\>svg\]\:h-\[18px\]>svg{height:18px}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-4>svg{width:calc(var(--spacing)*4)}.\[\&\>svg\]\:w-12>svg{width:calc(var(--spacing)*12)}.\[\&\>svg\]\:w-\[18px\]>svg{width:18px}}.filigran-chat-scrollable{scrollbar-color:#00000026 transparent;scrollbar-width:thin}.dark .filigran-chat-scrollable{scrollbar-color:#ffffff26 transparent}.filigran-chat-scrollable::-webkit-scrollbar{width:6px}.filigran-chat-scrollable::-webkit-scrollbar-track{background:0 0}.filigran-chat-scrollable::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}.dark .filigran-chat-scrollable::-webkit-scrollbar-thumb{background:#ffffff26}.filigran-chat-scrollable::-webkit-scrollbar-thumb:hover{background:#00000040}.dark .filigran-chat-scrollable::-webkit-scrollbar-thumb:hover{background:#ffffff40}@keyframes chat-dot{0%,80%,to{opacity:.25;transform:scale(.85)}40%{opacity:1;transform:scale(1.15)}}@keyframes reasoningGlow{0%,to{border-color:var(--chat-accent,#0fbbff);border-left-color:color-mix(in srgb,var(--chat-accent,#0fbbff) 15%,transparent);box-shadow:inset 2px 0 8px -4px color-mix(in srgb,var(--chat-accent,#0fbbff) 8%,transparent)}50%{border-color:var(--chat-accent,#0fbbff);border-left-color:color-mix(in srgb,var(--chat-accent,#0fbbff) 35%,transparent);box-shadow:inset 2px 0 12px -4px color-mix(in srgb,var(--chat-accent,#0fbbff) 18%,transparent)}}@keyframes chat-fade-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-xl:1.25rem;--text-xl--line-height:1.4;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{:where(.filigran-chatbot),:where(.filigran-chatbot) *,:where(.filigran-chatbot) :after,:where(.filigran-chatbot) :before{border:0 solid;box-sizing:border-box}:where(.filigran-chatbot) button,:where(.filigran-chatbot) input,:where(.filigran-chatbot) textarea{background:0 0;color:inherit;font:inherit;margin:0;padding:0}:where(.filigran-chatbot) button:not(:disabled){cursor:pointer}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::backdrop,:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)):after,:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)):before{border:0 solid;box-sizing:border-box;margin:0;padding:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::file-selector-button{border:0 solid;box-sizing:border-box;margin:0;padding:0}.filigran-chatbot:where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){-webkit-text-size-adjust:100%;font-feature-settings:var(--default-font-feature-settings,normal);-webkit-tap-highlight-color:transparent;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4}hr:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){border-top-width:1px;color:inherit;height:0}abbr:where([title]):where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h2:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h3:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h4:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h5:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),h6:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-size:inherit;font-weight:inherit}a:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),strong:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-weight:bolder}code:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),kbd:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),pre:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),samp:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-feature-settings:var(--default-mono-font-feature-settings,normal);font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-size:80%}sub:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),sup:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){bottom:-.25em}sup:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){top:-.5em}table:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){outline:auto}progress:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){vertical-align:baseline}summary:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){display:list-item}menu:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),ol:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),ul:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){list-style:none}audio:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),canvas:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),embed:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),iframe:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),img:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),object:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),svg:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),video:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){display:block;vertical-align:middle}img:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),video:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){height:auto;max-width:100%}button:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),input:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),optgroup:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),select:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),textarea:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-feature-settings:inherit;background-color:#0000;border-radius:0;color:inherit;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::file-selector-button{font-feature-settings:inherit;background-color:#0000;border-radius:0;color:inherit;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){font-weight:bolder}:where(select:is([multiple],[size])) optgroup option:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){padding-inline-start:20px}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::file-selector-button{margin-inline-end:4px}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){resize:vertical}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-search-decoration{-webkit-appearance:none}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit{display:inline-flex}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-fields-wrapper{padding:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-year-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-month-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-day-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-hour-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-minute-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-second-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-millisecond-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-datetime-edit-meridiem-field{padding-block:0}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){box-shadow:none}button:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)),input:where([type=button],[type=reset],[type=submit]):where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){appearance:button}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::file-selector-button{appearance:button}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-inner-spin-button{height:auto}:where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)) ::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])):where(.filigran-chatbot,.filigran-chatbot *):where(:not(.no-filigran-chatbot,.no-filigran-chatbot *)){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-5{bottom:calc(var(--spacing)*5)}.-left-1{left:calc(var(--spacing)*-1)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.z-10{z-index:10}.z-\[1200\]{z-index:1200}.z-\[1300\]{z-index:1300}.z-\[1400\]{z-index:1400}.z-\[10000\]{z-index:10000}.z-\[10001\]{z-index:10001}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2\.5{margin-top:calc(var(--spacing)*2.5)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-0\.5{margin-right:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-11{margin-left:calc(var(--spacing)*11)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-\[5px\]{height:5px}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-44{max-height:calc(var(--spacing)*44)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-72{max-height:calc(var(--spacing)*72)}.max-h-\[90\%\]{max-height:90%}.max-h-\[200px\]{max-height:200px}.max-h-\[240px\]{max-height:240px}.max-h-\[400px\]{max-height:400px}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[48px\]{min-height:48px}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-64{width:calc(var(--spacing)*64)}.w-\[5px\]{width:5px}.w-full{width:100%}.max-w-\[45\%\]{max-width:45%}.max-w-\[75\%\]{max-width:75%}.max-w-\[78\%\]{max-width:78%}.max-w-\[90\%\]{max-width:90%}.max-w-\[320px\]{max-width:320px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-zoom-in{cursor:zoom-in}.resize{resize:both}.resize-none{resize:none}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-\[3px\]{gap:3px}.gap-px{gap:1px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*1*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*1*var(--tw-space-y-reverse))}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-\[14px_14px_4px_14px\]{border-radius:14px 14px 4px}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-r-md{border-bottom-right-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-b-xl{border-bottom-left-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-none{--tw-border-style:none;border-style:none}.border-\[var\(--chat-accent\)\]\/30{border-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--chat-accent\)\]\/30{border-color:color-mix(in oklab,var(--chat-accent) 30%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500) 25%,transparent)}}.border-current\/20{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/20{border-color:color-mix(in oklab,currentcolor 20%,transparent)}}.border-current\/30{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/30{border-color:color-mix(in oklab,currentcolor 30%,transparent)}}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-red-300{border-color:var(--color-red-300)}.border-t-\[var\(--chat-accent\)\]{border-top-color:var(--chat-accent)}.border-t-current{border-top-color:currentColor}.bg-\[var\(--chat-accent\)\],.bg-\[var\(--chat-accent\)\]\/10{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/10{background-color:color-mix(in oklab,var(--chat-accent) 10%,transparent)}}.bg-\[var\(--chat-accent\)\]\/20{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/20{background-color:color-mix(in oklab,var(--chat-accent) 20%,transparent)}}.bg-\[var\(--chat-accent\)\]\/50{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/50{background-color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.bg-\[var\(--chat-accent\)\]\/60{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/60{background-color:color-mix(in oklab,var(--chat-accent) 60%,transparent)}}.bg-\[var\(--chat-accent\)\]\/70{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/70{background-color:color-mix(in oklab,var(--chat-accent) 70%,transparent)}}.bg-\[var\(--chat-accent\)\]\/\[0\.03\]{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--chat-accent\)\]\/\[0\.03\]{background-color:color-mix(in oklab,var(--chat-accent) 3%,transparent)}}.bg-\[var\(--chat-accent-dark\)\]{background-color:var(--chat-accent-dark)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/5{background-color:color-mix(in oklab,var(--color-amber-500) 5%,transparent)}}.bg-amber-500\/\[0\.02\]{background-color:#f99c0005}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-amber-500) 2%,transparent)}}.bg-amber-500\/\[0\.04\]{background-color:#f99c000a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-amber-500) 4%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/50{background-color:color-mix(in oklab,var(--color-gray-50) 50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-100\/50{background-color:#f3f4f680}@supports (color:color-mix(in lab,red,red)){.bg-gray-100\/50{background-color:color-mix(in oklab,var(--color-gray-100) 50%,transparent)}}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab}.bg-gradient-to-br,.bg-gradient-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab}.from-\[var\(--chat-accent\)\]\/15{--tw-gradient-from:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--chat-accent\)\]\/15{--tw-gradient-from:color-mix(in oklab,var(--chat-accent) 15%,transparent)}}.from-\[var\(--chat-accent\)\]\/15{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-\[var\(--chat-accent\)\]\/20{--tw-gradient-from:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--chat-accent\)\]\/20{--tw-gradient-from:color-mix(in oklab,var(--chat-accent) 20%,transparent)}}.from-\[var\(--chat-accent\)\]\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-from:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-from:color-mix(in oklab,var(--chat-accent) 3%,transparent)}}.from-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-\[var\(--chat-accent-dark\)\]\/\[0\.13\]{--tw-gradient-from:var(--chat-accent-dark)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--chat-accent-dark\)\]\/\[0\.13\]{--tw-gradient-from:color-mix(in oklab,var(--chat-accent-dark) 13%,transparent)}}.from-\[var\(--chat-accent-dark\)\]\/\[0\.13\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-via) var(--tw-gradient-via-position),var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[var\(--chat-accent\)\]\/5{--tw-gradient-to:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.to-\[var\(--chat-accent\)\]\/5{--tw-gradient-to:color-mix(in oklab,var(--chat-accent) 5%,transparent)}}.to-\[var\(--chat-accent\)\]\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-to:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.to-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-to:color-mix(in oklab,var(--chat-accent) 3%,transparent)}}.to-\[var\(--chat-accent\)\]\/\[0\.03\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-\[var\(--chat-accent\)\]\/\[0\.07\]{--tw-gradient-to:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.to-\[var\(--chat-accent\)\]\/\[0\.07\]{--tw-gradient-to:color-mix(in oklab,var(--chat-accent) 7.0%,transparent)}}.to-\[var\(--chat-accent\)\]\/\[0\.07\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.\[mask-image\:linear-gradient\(to_bottom\,transparent_0\,rgb\(0_0_0\/0\.25\)_1\.5rem\,rgb\(0_0_0\/0\.7\)_3rem\,black_4\.5rem\)\]{-webkit-mask-image:linear-gradient(#0000,#00000040 1.5rem,#000000b3 3rem,#000 4.5rem);mask-image:linear-gradient(#0000,#00000040 1.5rem,#000000b3 3rem,#000 4.5rem)}.stroke-gray-200{stroke:var(--color-gray-200)}.object-contain{object-fit:contain}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-\[3px\]{padding-block:3px}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-3\.5{padding-top:calc(var(--spacing)*3.5)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-3{padding-right:calc(var(--spacing)*3)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-2\.5{padding-bottom:calc(var(--spacing)*2.5)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-7{padding-left:calc(var(--spacing)*7)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.6rem\]{font-size:.6rem}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.9rem\]{font-size:.9rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[0\.75rem\]{font-size:.75rem}.text-\[0\.85rem\]{font-size:.85rem}.text-\[0\.875rem\]{font-size:.875rem}.text-\[0\.8125rem\]{font-size:.8125rem}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\[1\.7\]{--tw-leading:1.7;line-height:1.7}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[1\.5px\]{--tw-tracking:1.5px;letter-spacing:1.5px}.tracking-\[1px\]{--tw-tracking:1px;letter-spacing:1px}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--chat-accent\)\],.text-\[var\(--chat-accent\)\]\/70{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.text-\[var\(--chat-accent\)\]\/70{color:color-mix(in oklab,var(--chat-accent) 70%,transparent)}}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#00000026)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.15\)\],.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.25\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.25\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#00000040)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[var\(--chat-accent\)\]{--tw-ring-color:var(--chat-accent)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline:2px solid #0000;outline-offset:2px}}.drop-shadow-\[0_0_12px_var\(--chat-accent-40\)\]{--tw-drop-shadow-size:drop-shadow(0 0 12px var(--tw-drop-shadow-color,var(--chat-accent-40)));--tw-drop-shadow:var(--tw-drop-shadow-size)}.drop-shadow-\[0_0_12px_var\(--chat-accent-40\)\],.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[stroke-dashoffset\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:stroke-dashoffset;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[width\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.\[-webkit-mask-image\:linear-gradient\(to_bottom\,transparent_0\,rgb\(0_0_0\/0\.25\)_1\.5rem\,rgb\(0_0_0\/0\.7\)_3rem\,black_4\.5rem\)\]{-webkit-mask-image:linear-gradient(#0000,#00000040 1.5rem,#000000b3 3rem,#000 4.5rem)}@media (hover:hover){.group-hover\:text-\[var\(--chat-accent\)\]:is(:where(.group):hover *){color:var(--chat-accent)}.group-hover\/img\:opacity-100:is(:where(.group\/img):hover *),.group-hover\/msg\:opacity-100:is(:where(.group\/msg):hover *),.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-active\:opacity-100:is(:where(.group):active *){opacity:1}.marker\:text-\[var\(--chat-accent\)\]\/50 ::marker{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.marker\:text-\[var\(--chat-accent\)\]\/50 ::marker{color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.marker\:text-\[var\(--chat-accent\)\]\/50::marker{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.marker\:text-\[var\(--chat-accent\)\]\/50::marker{color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.marker\:text-\[var\(--chat-accent\)\]\/50 ::-webkit-details-marker{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.marker\:text-\[var\(--chat-accent\)\]\/50 ::-webkit-details-marker{color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.marker\:text-\[var\(--chat-accent\)\]\/50::-webkit-details-marker{color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.marker\:text-\[var\(--chat-accent\)\]\/50::-webkit-details-marker{color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-full:first-child{border-bottom-left-radius:3.40282e+38px;border-top-left-radius:3.40282e+38px}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.focus-within\:border-\[var\(--chat-accent\)\]:focus-within{border-color:var(--chat-accent)}.focus-within\:opacity-100:focus-within{opacity:1}@media (hover:hover){.hover\:border-\[var\(--chat-accent\)\]:hover,.hover\:border-\[var\(--chat-accent\)\]\/40:hover{border-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:border-\[var\(--chat-accent\)\]\/40:hover{border-color:color-mix(in oklab,var(--chat-accent) 40%,transparent)}}.hover\:border-\[var\(--chat-accent-50\)\]:hover{border-color:var(--chat-accent-50)}.hover\:bg-\[var\(--chat-accent\)\]\/5:hover{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--chat-accent\)\]\/5:hover{background-color:color-mix(in oklab,var(--chat-accent) 5%,transparent)}}.hover\:bg-\[var\(--chat-accent\)\]\/20:hover{background-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--chat-accent\)\]\/20:hover{background-color:color-mix(in oklab,var(--chat-accent) 20%,transparent)}}.hover\:bg-\[var\(--chat-accent-10\)\]:hover{background-color:var(--chat-accent-10)}.hover\:bg-black\/70:hover{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/70:hover{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.hover\:text-\[var\(--chat-accent\)\]:hover{color:var(--chat-accent)}.hover\:text-amber-600:hover{color:var(--color-amber-600)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:brightness-125:hover{--tw-brightness:brightness(125%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-\[var\(--chat-accent\)\]\/50:focus{border-color:var(--chat-accent)}@supports (color:color-mix(in lab,red,red)){.focus\:border-\[var\(--chat-accent\)\]\/50:focus{border-color:color-mix(in oklab,var(--chat-accent) 50%,transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-\[var\(--chat-accent\)\]:focus{--tw-ring-color:var(--chat-accent)}.focus-visible\:text-\[var\(--chat-accent\)\]:focus-visible{color:var(--chat-accent)}.focus-visible\:opacity-100:focus-visible{opacity:1}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark .dark\:border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.dark .dark\:border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.dark .dark\:border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-white\/15{border-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.dark .dark\:border-white\/\[0\.04\]{border-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-white\/\[0\.04\]{border-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.dark .dark\:border-white\/\[0\.06\]{border-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-white\/\[0\.06\]{border-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.dark .dark\:bg-\[\#1e1e2e\]{background-color:#1e1e2e}.dark .dark\:bg-\[\#2a2a3e\]{background-color:#2a2a3e}.dark .dark\:bg-\[\#161622\]{background-color:#161622}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.dark .dark\:bg-gray-100{background-color:var(--color-gray-100)}.dark .dark\:bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.dark .dark\:bg-white\/\[0\.01\]{background-color:#ffffff03}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.01\]{background-color:color-mix(in oklab,var(--color-white) 1%,transparent)}}.dark .dark\:bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.dark .dark\:bg-white\/\[0\.04\]{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.dark .dark\:bg-white\/\[0\.06\]{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.dark .dark\:bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.dark .dark\:stroke-white\/15{stroke:#ffffff26}@supports (color:color-mix(in lab,red,red)){.dark .dark\:stroke-white\/15{stroke:color-mix(in oklab,var(--color-white) 15%,transparent)}}.dark .dark\:text-amber-300{color:var(--color-amber-300)}.dark .dark\:text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300) 90%,transparent)}}.dark .dark\:text-amber-400{color:var(--color-amber-400)}.dark .dark\:text-emerald-300{color:var(--color-emerald-300)}.dark .dark\:text-emerald-400{color:var(--color-emerald-400)}.dark .dark\:text-gray-900{color:var(--color-gray-900)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-white\/20{color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/20{color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.dark .dark\:text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/30{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.dark .dark\:text-white\/35{color:#ffffff59}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/35{color:color-mix(in oklab,var(--color-white) 35%,transparent)}}.dark .dark\:text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/40{color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.dark .dark\:text-white\/45{color:#ffffff73}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/45{color:color-mix(in oklab,var(--color-white) 45%,transparent)}}.dark .dark\:text-white\/50{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/50{color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.dark .dark\:text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/60{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.dark .dark\:text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.dark .dark\:text-white\/75{color:#ffffffbf}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/75{color:color-mix(in oklab,var(--color-white) 75%,transparent)}}.dark .dark\:text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/80{color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.dark .dark\:text-white\/85{color:#ffffffd9}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/85{color:color-mix(in oklab,var(--color-white) 85%,transparent)}}.dark .dark\:text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white\/90{color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.dark .dark\:shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.4\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0006)}.dark .dark\:shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.4\)\],.dark .dark\:shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.6\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.6\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0009)}.dark .dark\:placeholder\:text-white\/30::placeholder{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:placeholder\:text-white\/30::placeholder{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.dark .dark\:placeholder\:text-white\/40::placeholder{color:#fff6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:placeholder\:text-white\/40::placeholder{color:color-mix(in oklab,var(--color-white) 40%,transparent)}}@media (hover:hover){.dark .dark\:hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.dark .dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.dark .dark\:hover\:bg-white\/\[0\.02\]:hover{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/\[0\.02\]:hover{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.dark .dark\:hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/\[0\.03\]:hover{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.dark .dark\:hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.dark .dark\:hover\:text-amber-300:hover{color:var(--color-amber-300)}.dark .dark\:hover\:text-red-400:hover{color:var(--color-red-400)}.dark .dark\:hover\:text-white\/60:hover{color:#fff9}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:text-white\/60:hover{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.dark .dark\:hover\:text-white\/70:hover{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}}.\[\&_li\]\:mb-1 li{margin-bottom:calc(var(--spacing)*1)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:h-4>svg{height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-12>svg{height:calc(var(--spacing)*12)}.\[\&\>svg\]\:h-\[18px\]>svg{height:18px}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-4>svg{width:calc(var(--spacing)*4)}.\[\&\>svg\]\:w-12>svg{width:calc(var(--spacing)*12)}.\[\&\>svg\]\:w-\[18px\]>svg{width:18px}}.filigran-chat-scrollable{scrollbar-color:#00000026 transparent;scrollbar-width:thin}.dark .filigran-chat-scrollable{scrollbar-color:#ffffff26 transparent}.filigran-chat-scrollable::-webkit-scrollbar{width:6px}.filigran-chat-scrollable::-webkit-scrollbar-track{background:0 0}.filigran-chat-scrollable::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}.dark .filigran-chat-scrollable::-webkit-scrollbar-thumb{background:#ffffff26}.filigran-chat-scrollable::-webkit-scrollbar-thumb:hover{background:#00000040}.dark .filigran-chat-scrollable::-webkit-scrollbar-thumb:hover{background:#ffffff40}@keyframes chat-dot{0%,80%,to{opacity:.25;transform:scale(.85)}40%{opacity:1;transform:scale(1.15)}}@keyframes chat-reasoning-glow{0%,to{border-color:var(--chat-accent,#0fbbff);border-left-color:color-mix(in srgb,var(--chat-accent,#0fbbff) 15%,transparent);box-shadow:inset 2px 0 8px -4px color-mix(in srgb,var(--chat-accent,#0fbbff) 8%,transparent)}50%{border-color:var(--chat-accent,#0fbbff);border-left-color:color-mix(in srgb,var(--chat-accent,#0fbbff) 35%,transparent);box-shadow:inset 2px 0 12px -4px color-mix(in srgb,var(--chat-accent,#0fbbff) 18%,transparent)}}.filigran-chat-reasoning{border-left-color:var(--chat-accent,#0fbbff)}@supports (color:color-mix(in lab,red,red)){.filigran-chat-reasoning{border-left-color:color-mix(in srgb,var(--chat-accent,#0fbbff) 25%,transparent)}}.filigran-chat-reasoning{animation:chat-reasoning-glow 3s ease-in-out infinite,chat-fade-in .5s ease-out}@media (prefers-reduced-motion:reduce){.filigran-chat-reasoning{animation:none}}@keyframes chat-fade-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/FiligranHQ/filigran-ui.git"
9
9
  },
10
- "version": "3.9.0",
10
+ "version": "3.10.0",
11
11
  "type": "module",
12
12
  "exports": {
13
13
  ".": {
@@ -51,7 +51,7 @@
51
51
  "@types/react-dom": "19.2.3",
52
52
  "eslint": "10.1.0",
53
53
  "eslint-config-prettier": "10.1.8",
54
- "postcss": "8.5.10",
54
+ "postcss": "8.5.18",
55
55
  "prettier": "3.8.1",
56
56
  "react": "19.2.4",
57
57
  "react-dom": "19.2.4",