@ash-cloud/ash-ui 0.2.0 → 0.2.2

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.
@@ -1 +1 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-20{bottom:5rem}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-1{right:.25rem}.top-1{top:.25rem}.ml-0\.5{margin-left:.125rem}.ml-6{margin-left:1.5rem}.mt-0\.5{margin-top:.125rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.line-clamp-2{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[var\(--ash-avatar-size\2c 1\.25rem\)\]{height:var(--ash-avatar-size,1.25rem)}.h-full{height:100%}.min-h-\[200px\]{min-height:200px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[var\(--ash-avatar-size\2c 1\.25rem\)\]{width:var(--ash-avatar-size,1.25rem)}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[80\%\]{max-width:80%}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[shimmer_1\.5s_ease-in-out_infinite\]{animation:shimmer 1.5s ease-in-out infinite}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-bounce{animation:bounce 1s infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-\[var\(--ash-message-gap\2c 0\.5rem\)\]{gap:var(--ash-message-gap,.5rem)}.gap-\[var\(--ash-message-list-gap\2c 0\.25rem\)\]{gap:var(--ash-message-list-gap,.25rem)}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\[var\(--ash-radius-lg\2c 0\.75rem\)\]{border-radius:var(--ash-radius-lg,.75rem)}.rounded-\[var\(--ash-radius-md\2c 0\.5rem\)\]{border-radius:var(--ash-radius-md,.5rem)}.rounded-\[var\(--ash-radius-sm\2c 0\.375rem\)\]{border-radius:var(--ash-radius-sm,.375rem)}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-\[var\(--ash-assistant-border\2c rgba\(255\2c 255\2c 255\2c 0\.08\)\)\]{border-color:var(--ash-assistant-border,hsla(0,0%,100%,.08))}.border-\[var\(--ash-border\2c rgba\(255\2c 255\2c 255\2c 0\.08\)\)\]{border-color:var(--ash-border,hsla(0,0%,100%,.08))}.border-\[var\(--ash-border-subtle\2c rgba\(255\2c 255\2c 255\2c 0\.04\)\)\]{border-color:var(--ash-border-subtle,hsla(0,0%,100%,.04))}.border-\[var\(--ash-thinking-border\2c rgba\(147\2c 51\2c 234\2c 0\.2\)\)\]{border-color:var(--ash-thinking-border,rgba(147,51,234,.2))}.border-\[var\(--ash-user-border\2c transparent\)\]{border-color:var(--ash-user-border,transparent)}.border-red-500\/30{border-color:rgba(239,68,68,.3)}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-white\/20{border-color:hsla(0,0%,100%,.2)}.bg-\[var\(--ash-assistant-bg\2c \#1a1a1a\)\]{background-color:var(--ash-assistant-bg,#1a1a1a)}.bg-\[var\(--ash-code-header-bg\)\]{background-color:var(--ash-code-header-bg)}.bg-\[var\(--ash-surface-dark\2c \#0a0a0a\)\]{background-color:var(--ash-surface-dark,#0a0a0a)}.bg-\[var\(--ash-surface-elevated\2c \#111111\)\],.bg-\[var\(--ash-surface-elevated\2c \#111\)\]{background-color:var(--ash-surface-elevated,#111)}.bg-\[var\(--ash-thinking-bg\2c rgba\(147\2c 51\2c 234\2c 0\.06\)\)\]{background-color:var(--ash-thinking-bg,rgba(147,51,234,.06))}.bg-\[var\(--ash-tool-bg\2c var\(--ash-surface-dark\2c \#0a0a0a\)\)\]{background-color:var(--ash-tool-bg,var(--ash-surface-dark,#0a0a0a))}.bg-\[var\(--ash-user-bg\2c \#5B6EF5\)\]{background-color:var(--ash-user-bg,#5b6ef5)}.bg-black\/20{background-color:rgba(0,0,0,.2)}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-blue-900\/20{background-color:rgba(30,58,138,.2)}.bg-current{background-color:currentColor}.bg-red-500\/5{background-color:rgba(239,68,68,.05)}.bg-red-900\/20{background-color:rgba(127,29,29,.2)}.bg-red-900\/50{background-color:rgba(127,29,29,.5)}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-yellow-400\/10{background-color:rgba(250,204,21,.1)}.bg-yellow-900\/20{background-color:rgba(113,63,18,.2)}.bg-yellow-900\/50{background-color:rgba(113,63,18,.5)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-white\/5{--tw-gradient-from:hsla(0,0%,100%,.05) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-white\/10{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.1) var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-white\/5{--tw-gradient-to:hsla(0,0%,100%,.05) var(--tw-gradient-to-position)}.bg-\[length\:200\%_100\%\]{background-size:200% 100%}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-\[var\(--ash-message-padding\2c 0\.5rem_0\.75rem\)\]{padding:var(--ash-message-padding,.5rem .75rem)}.p-\[var\(--ash-spacing-md\2c 0\.75rem\)\]{padding:var(--ash-spacing-md,.75rem)}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-2{padding-bottom:.5rem}.pl-4{padding-left:1rem}.pr-2{padding-right:.5rem}.pt-0\.5{padding-top:.125rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[var\(--ash-font-size-base\2c 13px\)\]{font-weight:var(--ash-font-size-base,13px)}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.text-\[var\(--ash-accent\)\]{color:var(--ash-accent)}.text-\[var\(--ash-accent\2c \#ccff00\)\]{color:var(--ash-accent,#cf0)}.text-\[var\(--ash-assistant-text\2c rgba\(255\2c 255\2c 255\2c 0\.9\)\)\]{color:var(--ash-assistant-text,hsla(0,0%,100%,.9))}.text-\[var\(--ash-font-size-sm\2c 12px\)\]{color:var(--ash-font-size-sm,12px)}.text-\[var\(--ash-font-size-xs\2c 10px\)\]{color:var(--ash-font-size-xs,10px)}.text-\[var\(--ash-text-faint\2c rgba\(255\2c 255\2c 255\2c 0\.3\)\)\]{color:var(--ash-text-faint,hsla(0,0%,100%,.3))}.text-\[var\(--ash-text-muted\)\]{color:var(--ash-text-muted)}.text-\[var\(--ash-text-muted\2c rgba\(255\2c 255\2c 255\2c 0\.5\)\)\]{color:var(--ash-text-muted,hsla(0,0%,100%,.5))}.text-\[var\(--ash-text-primary\)\]{color:var(--ash-text-primary)}.text-\[var\(--ash-text-primary\2c rgba\(255\2c 255\2c 255\2c 0\.9\)\)\]{color:var(--ash-text-primary,hsla(0,0%,100%,.9))}.text-\[var\(--ash-text-secondary\2c rgba\(255\2c 255\2c 255\2c 0\.7\)\)\]{color:var(--ash-text-secondary,hsla(0,0%,100%,.7))}.text-\[var\(--ash-thinking-text\2c rgb\(196\2c 181\2c 253\)\)\]{color:var(--ash-thinking-text,#c4b5fd)}.text-\[var\(--ash-user-text\2c \#ffffff\)\]{color:var(--ash-user-text,#fff)}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/30{color:hsla(0,0%,100%,.3)}.text-white\/40{color:hsla(0,0%,100%,.4)}.text-white\/50{color:hsla(0,0%,100%,.5)}.text-white\/60{color:hsla(0,0%,100%,.6)}.text-white\/70{color:hsla(0,0%,100%,.7)}.text-white\/80{color:hsla(0,0%,100%,.8)}.text-white\/90{color:hsla(0,0%,100%,.9)}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.blur{--tw-blur:blur(8px)}.blur,.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:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--ash-accent:#cf0;--ash-accent-foreground:#000;--ash-accent-muted:rgba(204,255,0,.15);--ash-accent-50:#f8ffe5;--ash-accent-100:#eeffb8;--ash-accent-200:#e0ff85;--ash-accent-300:#d4ff52;--ash-accent-400:#cf0;--ash-accent-500:#b8e600;--ash-accent-600:#9c0;--ash-accent-700:#739900;--ash-accent-800:#4d6600;--ash-accent-900:#263300;--ash-surface-dark:#0a0a0a;--ash-surface-darker:#050505;--ash-surface-card:#0c0c0c;--ash-surface-elevated:#111;--ash-surface-border:hsla(0,0%,100%,.08);--ash-text-primary:hsla(0,0%,100%,.9);--ash-text-secondary:hsla(0,0%,100%,.7);--ash-text-muted:hsla(0,0%,100%,.5);--ash-text-faint:hsla(0,0%,100%,.3);--ash-border:hsla(0,0%,100%,.08);--ash-border-subtle:hsla(0,0%,100%,.04);--ash-border-emphasis:hsla(0,0%,100%,.15);--ash-user-bg:#5b6ef5;--ash-user-text:#fff;--ash-user-border:transparent;--ash-assistant-bg:#1a1a1a;--ash-assistant-text:hsla(0,0%,100%,.9);--ash-assistant-border:hsla(0,0%,100%,.08);--ash-thinking-bg:rgba(147,51,234,.06);--ash-thinking-text:#c4b5fd;--ash-thinking-border:rgba(147,51,234,.2);--ash-error-bg:rgba(239,68,68,.06);--ash-error-text:#fca5a5;--ash-error-border:rgba(239,68,68,.2);--ash-tool-bg:var(--ash-surface-dark);--ash-tool-border:var(--ash-border);--ash-avatar-user-bg:hsla(0,0%,100%,.1);--ash-avatar-assistant-bg:#10a37f;--ash-avatar-thinking-bg:rgba(147,51,234,.15);--ash-avatar-error-bg:rgba(239,68,68,.15);--ash-code-header-bg:hsla(0,0%,100%,.05);--ash-status-online:#10a37f;--ash-font-size-base:13px;--ash-font-size-sm:12px;--ash-font-size-xs:10px;--ash-font-size-code:12px;--ash-spacing-xs:0.25rem;--ash-spacing-sm:0.5rem;--ash-spacing-md:0.75rem;--ash-spacing-lg:1rem;--ash-radius-sm:0.375rem;--ash-radius-md:0.5rem;--ash-radius-lg:0.75rem;--ash-message-gap:0.5rem;--ash-message-padding:0.5rem 0.75rem;--ash-avatar-size:1.25rem;--ash-message-padding-dense:0.25rem 0.5rem;--ash-message-gap-dense:0.375rem;--ash-avatar-size-dense:1rem;--ash-font-size-dense:12px;--ash-message-list-gap:0.25rem;--ash-message-row-gap:0.5rem}.ash-glass-panel{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-width:1px;--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);--tw-backdrop-blur:blur(24px)}.ash-glass-panel,.ash-glass-panel-elevated{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ash-glass-panel-elevated{background-color:hsla(0,0%,100%,.08);border-width:1px;--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);--tw-backdrop-blur:blur(40px);border-color:hsla(0,0%,100%,.15)}.ash-card-glass{background-color:hsla(0,0%,100%,.03);border-color:hsla(0,0%,100%,.06);border-radius:.5rem;border-width:1px;--tw-backdrop-blur:blur(24px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-card-glass:hover{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1)}.ash-btn-accent{background-color:var(--ash-accent);border-radius:9999px;font-weight:500;padding:.75rem 1.5rem;--tw-text-opacity:1;border-color:var(--ash-accent);border-width:1px;box-shadow:0 0 20px rgba(204,255,0,.3);color:rgb(0 0 0/var(--tw-text-opacity,1));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-accent:hover{background-color:var(--ash-accent-500);box-shadow:0 0 30px rgba(204,255,0,.5)}.ash-btn-ghost{border-radius:.75rem;color:hsla(0,0%,100%,.7);padding:.5rem 1rem}.ash-btn-ghost:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-btn-ghost{border-color:transparent;border-width:1px;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-ghost:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.1)}.ash-btn-outline{border-color:hsla(0,0%,100%,.2);border-radius:.75rem;border-width:1px;color:hsla(0,0%,100%,.8);padding:.5rem 1rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-outline:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.3)}.ash-input-glass{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;padding:.75rem 1rem;width:100%;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-input-glass::-moz-placeholder{color:hsla(0,0%,100%,.4)}.ash-input-glass::placeholder{color:hsla(0,0%,100%,.4)}.ash-input-glass:focus{background-color:hsla(0,0%,100%,.1);outline:2px solid transparent;outline-offset:2px}.ash-input-glass{transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-input-glass:focus{border-color:rgba(204,255,0,.5);box-shadow:0 0 20px rgba(204,255,0,.15)}.ash-text-base{font-size:var(--ash-font-size-base);line-height:1.5}.ash-text-sm{font-size:var(--ash-font-size-sm);line-height:1.5}.ash-text-xs{font-size:var(--ash-font-size-xs);line-height:1.5}.ash-text-code{font-size:var(--ash-font-size-code);line-height:1.5}.ash-density-dense{--ash-font-size-base:12px;--ash-font-size-sm:11px;--ash-font-size-xs:10px;--ash-message-gap:0.375rem;--ash-message-padding:0.25rem 0.5rem;--ash-avatar-size:1rem;--ash-message-list-gap:2px;--ash-spacing-sm:0.25rem;--ash-spacing-md:0.5rem}.ash-density-dense [data-message-role]{gap:.375rem}.ash-density-compact{--ash-font-size-base:13px;--ash-message-gap:0.5rem;--ash-message-padding:0.5rem 0.75rem;--ash-avatar-size:1.25rem;--ash-message-list-gap:4px}.ash-density-comfortable{--ash-font-size-base:15px;--ash-message-gap:1rem;--ash-message-padding:1rem 1.25rem;--ash-avatar-size:1.75rem;--ash-message-list-gap:12px}.ash-message-content{font-size:var(--ash-font-size-base);line-height:1.6}.ash-message-content pre{background-color:rgba(0,0,0,.3);border-radius:.375rem;margin-bottom:.375rem;margin-top:.375rem;overflow-x:auto;padding:.75rem;--tw-text-opacity:1;border-color:hsla(0,0%,100%,.06);border-width:1px;color:rgb(229 231 235/var(--tw-text-opacity,1));font-size:var(--ash-font-size-code)}.ash-message-content code{background-color:hsla(0,0%,100%,.08);border-radius:.25rem;color:var(--ash-accent);font-size:var(--ash-font-size-code);padding:.125rem .25rem}.ash-message-content pre code{background-color:transparent;padding:0;--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}@keyframes ash-tool-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes ash-glow-pulse{0%,to{box-shadow:0 0 20px rgba(204,255,0,.3)}50%{box-shadow:0 0 40px rgba(204,255,0,.5)}}.ash-tool-status-pending{animation:ash-tool-pulse 1.5s ease-in-out infinite}.ash-tool-card-details{transition:max-height .2s ease-out,opacity .2s ease-out}.ash-tool-code-block{background-color:rgba(0,0,0,.3);border-color:hsla(0,0%,100%,.06);border-radius:.375rem;border-width:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--ash-font-size-code);overflow-x:auto;padding:.5rem;white-space:pre-wrap;word-break:break-word}.ash-tool-section-header{background-color:hsla(0,0%,100%,.03);border-bottom-width:1px;border-color:hsla(0,0%,100%,.06);color:hsla(0,0%,100%,.4);font-size:var(--ash-font-size-xs);font-weight:500;letter-spacing:.05em;padding:.375rem .75rem;text-transform:uppercase}.ash-status-pending{--tw-bg-opacity:1;animation:ash-tool-pulse 1.5s ease-in-out infinite;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.ash-status-success{background-color:var(--ash-accent)}.ash-status-failed{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.ash-truncate-fade{background:linear-gradient(0deg,#0a0a0a,transparent)}.ash-ambient-glow{border-radius:9999px;opacity:.08;pointer-events:none;position:absolute;--tw-blur:blur(120px);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)}.ash-ambient-glow-accent{background:radial-gradient(circle,rgba(204,255,0,.15) 0,transparent 70%)}.ash-ambient-glow-green{background:radial-gradient(circle,rgba(5,46,22,.25) 0,transparent 70%)}.ash-grid-pattern{background-image:linear-gradient(hsla(0,0%,100%,.03) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.03) 1px,transparent 0);background-size:50px 50px}.ash-noise-overlay{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'%3E%3Cfilter id='a'%3E%3CfeTurbulence baseFrequency='.9' numOctaves='4' stitchTiles='stitch' type='fractalNoise'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");opacity:.02}@keyframes ash-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes ash-slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes ash-pulse-slow{0%,to{opacity:.06}50%{opacity:.1}}.ash-animate-fade-in{animation:ash-fade-in .3s ease-out forwards}.ash-animate-slide-up{animation:ash-slide-up .4s ease-out forwards}.ash-animate-pulse-slow{animation:ash-pulse-slow 8s ease-in-out infinite}.ash-delay-100{animation-delay:.1s}.ash-delay-200{animation-delay:.2s}.ash-delay-300{animation-delay:.3s}.ash-delay-400{animation-delay:.4s}@keyframes ash-status-line-enter{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes ash-status-line-exit{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}@keyframes ash-status-line-replace{0%{opacity:1;transform:translateX(0)}50%{opacity:0;transform:translateX(-20px)}51%{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes ash-text-shimmer{0%{background-position:-200%}to{background-position:200%}}.ash-status-line-enter{animation:ash-status-line-enter ease-out forwards}.ash-status-line-exit{animation:ash-status-line-exit ease-out forwards}.ash-status-line-replace{animation:ash-status-line-replace ease-in-out forwards}.ash-text-shimmer{background:linear-gradient(90deg,hsla(0,0%,100%,.6),#fff 50%,hsla(0,0%,100%,.6));background-clip:text;-webkit-background-clip:text;background-size:200% auto;-webkit-text-fill-color:transparent;animation:ash-text-shimmer 2s linear infinite}.ash-execution-connector{background:linear-gradient(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.05));bottom:0;left:1rem;position:absolute;top:2.5rem;width:1px}@keyframes ash-accordion-expand{0%{max-height:0;opacity:0;transform:translateY(-10px)}to{max-height:2000px;opacity:1;transform:translateY(0)}}.ash-accordion-content{animation:ash-accordion-expand .3s ease-out forwards;overflow:hidden}.ash-badge{align-items:center;border-radius:9999px;display:inline-flex;font-size:var(--ash-font-size-xs);font-weight:500;padding:.25rem .625rem}.ash-badge-accent{background-color:rgba(204,255,0,.2);border:1px solid rgba(204,255,0,.3);color:var(--ash-accent)}.ash-badge-success{background-color:rgba(16,185,129,.2);border:1px solid rgba(16,185,129,.3);color:#34d399}.ash-badge-warning{background-color:rgba(234,179,8,.2);border:1px solid rgba(234,179,8,.3);color:#facc15}.ash-badge-error{background-color:rgba(239,68,68,.2);border:1px solid rgba(239,68,68,.3);color:#f87171}.ash-badge-info{background-color:rgba(59,130,246,.2);border:1px solid rgba(59,130,246,.3);color:#60a5fa}.ash-scrollbar::-webkit-scrollbar{height:6px;width:6px}.ash-scrollbar::-webkit-scrollbar-track{background:transparent}.ash-scrollbar::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.1);border-radius:3px}.ash-scrollbar::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.2)}.ash-message-content.prose-invert{--tw-prose-body:hsla(0,0%,100%,.8);--tw-prose-headings:#fff;--tw-prose-links:var(--ash-accent);--tw-prose-bold:#fff;--tw-prose-code:var(--ash-accent);--tw-prose-quotes:hsla(0,0%,100%,.6)}.ash-message-content a{color:var(--ash-accent);text-decoration:underline;text-underline-offset:2px}.ash-message-content a:hover{opacity:.8}.ash-message-content ol,.ash-message-content ul{margin-bottom:.375rem;margin-top:.375rem;padding-left:1rem}.ash-message-content li{margin-bottom:.125rem;margin-top:.125rem}.ash-message-content p{margin-bottom:.375rem;margin-top:.375rem}.ash-message-content p:first-child{margin-top:0}.ash-message-content p:last-child{margin-bottom:0}.ash-card-glow{border-color:rgba(204,255,0,.2);box-shadow:0 0 20px rgba(204,255,0,.08);transition:all .4s cubic-bezier(.4,0,.2,1)}.ash-card-glow:hover{border-color:rgba(204,255,0,.4);box-shadow:0 0 30px rgba(204,255,0,.15);transform:translateY(-2px) scale(1.01)}.ash-container{background-color:var(--ash-surface-dark);color:#fff}.ash-chat-container{background-color:var(--ash-surface-card);border-color:hsla(0,0%,100%,.05);border-radius:.75rem;border-width:1px;display:flex;flex-direction:column;height:100%}.ash-env-vars-panel{margin-bottom:.75rem}.ash-env-vars-header{align-items:center;color:hsla(0,0%,100%,.5);cursor:pointer;display:flex;font-size:var(--ash-font-size-xs);font-weight:500;gap:.5rem;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-header:hover{color:hsla(0,0%,100%,.8)}.ash-env-vars-chevron{height:.75rem;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);width:.75rem}.ash-env-vars-chevron-expanded{transform:rotate(90deg)}.ash-env-vars-label{letter-spacing:.025em;text-transform:uppercase}.ash-env-vars-badge{align-items:center;background-color:rgba(204,255,0,.2);border-radius:9999px;color:var(--ash-accent);display:inline-flex;font-size:var(--ash-font-size-xs);font-weight:500;height:1.25rem;justify-content:center;min-width:20px;padding-left:.375rem;padding-right:.375rem}.ash-env-vars-content{margin-top:.5rem}.ash-env-vars-content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.ash-env-vars-item{align-items:center;background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;display:flex;font-size:var(--ash-font-size-sm);gap:.5rem;padding:.5rem .75rem}.ash-env-vars-key{color:var(--ash-accent);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:500}.ash-env-vars-equals{color:hsla(0,0%,100%,.4)}.ash-env-vars-value{color:hsla(0,0%,100%,.7);flex:1 1 0%;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ash-env-vars-remove{color:hsla(0,0%,100%,.4);cursor:pointer;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-remove:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.ash-env-vars-add{align-items:center;display:flex;gap:.5rem}.ash-env-vars-input{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--ash-font-size-sm);padding:.5rem .75rem;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-input:focus{border-color:rgba(204,255,0,.5);outline:2px solid transparent;outline-offset:2px}.ash-env-vars-input-key{flex:1 1 0%;min-width:0}.ash-env-vars-input-value{flex:2;min-width:0}.ash-env-vars-add-button{background-color:rgba(204,255,0,.2);border-radius:.75rem;color:var(--ash-accent);font-size:var(--ash-font-size-sm);padding:.5rem .75rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-add-button:disabled{cursor:not-allowed;opacity:.3}.ash-env-vars-add-button:hover:not(:disabled){background-color:rgba(204,255,0,.3)}.ash-env-vars-helper{color:hsla(0,0%,100%,.4);font-size:var(--ash-font-size-xs);margin-top:.25rem}.ash-display-mode-toggle{align-items:center;background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.5rem;border-width:1px;color:hsla(0,0%,100%,.7);display:flex;font-size:var(--ash-font-size-sm);gap:.375rem;padding:.375rem .5rem}.ash-display-mode-toggle:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.2);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-display-mode-toggle{cursor:pointer;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-display-mode-icon{height:1rem;width:1rem}.ash-display-mode-label{display:none}@media (min-width:640px){.ash-display-mode-label{display:inline}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.ash-conversation{scroll-behavior:smooth}.ash-message+.ash-message[data-message-role=assistant]{margin-top:var(--ash-message-list-gap,.25rem)}.ash-message+.ash-message[data-message-role=user]{margin-top:calc(var(--ash-message-list-gap, .25rem)*2)}.ash-tool[data-tool-state=call],.ash-tool[data-tool-state=partial-call]{border-color:rgba(234,179,8,.3)}.ash-reasoning[data-reasoning-streaming=true]{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:0 0 20px rgba(147,51,234,.15)}.ash-task-item[data-task-status=in_progress]{border-left-width:2px;--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity,1))}.ash-attachment:hover .ash-attachment-preview img{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition:transform .2s ease}.ash-loading-dots span{animation-duration:.6s;animation-iteration-count:infinite}.ash-message-response h1,.ash-message-response h2,.ash-message-response h3{font-weight:600;margin-bottom:.5rem;margin-top:1rem}.ash-message-response h1{font-size:1.125rem;line-height:1.75rem}.ash-message-response h2{font-size:1rem;line-height:1.5rem}.ash-message-response h3{font-size:.875rem;line-height:1.25rem}.ash-message-response ol,.ash-message-response ul{margin-bottom:.5rem;margin-top:.5rem;padding-left:1rem}.ash-message-response li{margin-bottom:.25rem;margin-top:.25rem}.ash-message-response code:not(pre code){background-color:hsla(0,0%,100%,.1);border-radius:.25rem;font-size:.875rem;line-height:1.25rem;padding:.125rem .25rem}.ash-message-response pre{background-color:rgba(0,0,0,.3);border-color:hsla(0,0%,100%,.06);border-radius:.375rem;border-width:1px;margin-bottom:.5rem;margin-top:.5rem;overflow-x:auto;padding:.75rem}.ash-message-response blockquote{border-color:hsla(0,0%,100%,.2);border-left-width:2px;color:hsla(0,0%,100%,.7);font-style:italic;margin-bottom:.5rem;margin-top:.5rem;padding-left:.75rem}.ash-message-response a{color:var(--ash-accent);text-decoration-line:underline;text-underline-offset:2px}.ash-message-response table{border-collapse:collapse;margin-bottom:.5rem;margin-top:.5rem;width:100%}.ash-message-response td,.ash-message-response th{border-color:hsla(0,0%,100%,.1);border-width:1px;padding:.25rem .5rem;text-align:left}.ash-message-response th{background-color:hsla(0,0%,100%,.05);font-weight:500}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-\[var\(--ash-border-emphasis\2c rgba\(255\2c 255\2c 255\2c 0\.15\)\)\]:hover{border-color:var(--ash-border-emphasis,hsla(0,0%,100%,.15))}.hover\:bg-\[var\(--ash-surface-card\2c \#0c0c0c\)\]:hover{background-color:var(--ash-surface-card,#0c0c0c)}.hover\:bg-\[var\(--ash-surface-elevated\2c \#111111\)\]:hover{background-color:var(--ash-surface-elevated,#111)}.hover\:bg-black\/80:hover{background-color:rgba(0,0,0,.8)}.hover\:bg-white\/5:hover{background-color:hsla(0,0%,100%,.05)}.hover\:bg-white\/\[0\.03\]:hover{background-color:hsla(0,0%,100%,.03)}.hover\:text-\[var\(--ash-accent-300\)\]:hover{color:var(--ash-accent-300)}.hover\:text-\[var\(--ash-text-secondary\2c rgba\(255\2c 255\2c 255\2c 0\.7\)\)\]:hover{color:var(--ash-text-secondary,hsla(0,0%,100%,.7))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x:0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-\[var\(--ash-accent\)\]{color:var(--ash-accent)}.group:hover .group-hover\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-white\/60{color:hsla(0,0%,100%,.6)}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-20{bottom:5rem}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-1{right:.25rem}.top-1{top:.25rem}.ml-0\.5{margin-left:.125rem}.ml-6{margin-left:1.5rem}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.line-clamp-2{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[var\(--ash-avatar-size\2c 1\.25rem\)\]{height:var(--ash-avatar-size,1.25rem)}.h-full{height:100%}.min-h-\[200px\]{min-height:200px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[var\(--ash-avatar-size\2c 1\.25rem\)\]{width:var(--ash-avatar-size,1.25rem)}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[80\%\]{max-width:80%}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[shimmer_1\.5s_ease-in-out_infinite\]{animation:shimmer 1.5s ease-in-out infinite}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-bounce{animation:bounce 1s infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-\[var\(--ash-message-gap\2c 0\.5rem\)\]{gap:var(--ash-message-gap,.5rem)}.gap-\[var\(--ash-message-list-gap\2c 0\.25rem\)\]{gap:var(--ash-message-list-gap,.25rem)}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\[var\(--ash-radius-lg\2c 0\.75rem\)\]{border-radius:var(--ash-radius-lg,.75rem)}.rounded-\[var\(--ash-radius-md\2c 0\.5rem\)\]{border-radius:var(--ash-radius-md,.5rem)}.rounded-\[var\(--ash-radius-sm\2c 0\.375rem\)\]{border-radius:var(--ash-radius-sm,.375rem)}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-\[var\(--ash-assistant-border\2c rgba\(255\2c 255\2c 255\2c 0\.08\)\)\]{border-color:var(--ash-assistant-border,hsla(0,0%,100%,.08))}.border-\[var\(--ash-border\2c rgba\(255\2c 255\2c 255\2c 0\.08\)\)\]{border-color:var(--ash-border,hsla(0,0%,100%,.08))}.border-\[var\(--ash-border-subtle\2c rgba\(255\2c 255\2c 255\2c 0\.04\)\)\]{border-color:var(--ash-border-subtle,hsla(0,0%,100%,.04))}.border-\[var\(--ash-thinking-border\2c rgba\(147\2c 51\2c 234\2c 0\.2\)\)\]{border-color:var(--ash-thinking-border,rgba(147,51,234,.2))}.border-\[var\(--ash-user-border\2c transparent\)\]{border-color:var(--ash-user-border,transparent)}.border-red-500\/30{border-color:rgba(239,68,68,.3)}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-white\/20{border-color:hsla(0,0%,100%,.2)}.bg-\[var\(--ash-assistant-bg\2c \#1a1a1a\)\]{background-color:var(--ash-assistant-bg,#1a1a1a)}.bg-\[var\(--ash-code-header-bg\)\]{background-color:var(--ash-code-header-bg)}.bg-\[var\(--ash-surface-dark\2c \#0a0a0a\)\]{background-color:var(--ash-surface-dark,#0a0a0a)}.bg-\[var\(--ash-surface-elevated\2c \#111111\)\],.bg-\[var\(--ash-surface-elevated\2c \#111\)\]{background-color:var(--ash-surface-elevated,#111)}.bg-\[var\(--ash-thinking-bg\2c rgba\(147\2c 51\2c 234\2c 0\.06\)\)\]{background-color:var(--ash-thinking-bg,rgba(147,51,234,.06))}.bg-\[var\(--ash-tool-bg\2c var\(--ash-surface-dark\2c \#0a0a0a\)\)\]{background-color:var(--ash-tool-bg,var(--ash-surface-dark,#0a0a0a))}.bg-\[var\(--ash-user-bg\2c \#5B6EF5\)\]{background-color:var(--ash-user-bg,#5b6ef5)}.bg-black\/20{background-color:rgba(0,0,0,.2)}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-blue-900\/20{background-color:rgba(30,58,138,.2)}.bg-current{background-color:currentColor}.bg-red-500\/5{background-color:rgba(239,68,68,.05)}.bg-red-900\/20{background-color:rgba(127,29,29,.2)}.bg-red-900\/50{background-color:rgba(127,29,29,.5)}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-yellow-400\/10{background-color:rgba(250,204,21,.1)}.bg-yellow-900\/20{background-color:rgba(113,63,18,.2)}.bg-yellow-900\/50{background-color:rgba(113,63,18,.5)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-white\/5{--tw-gradient-from:hsla(0,0%,100%,.05) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-white\/10{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.1) var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-white\/5{--tw-gradient-to:hsla(0,0%,100%,.05) var(--tw-gradient-to-position)}.bg-\[length\:200\%_100\%\]{background-size:200% 100%}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-\[var\(--ash-message-padding\2c 0\.5rem_0\.75rem\)\]{padding:var(--ash-message-padding,.5rem .75rem)}.p-\[var\(--ash-spacing-md\2c 0\.75rem\)\]{padding:var(--ash-spacing-md,.75rem)}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-2{padding-bottom:.5rem}.pl-4{padding-left:1rem}.pr-2{padding-right:.5rem}.pt-0\.5{padding-top:.125rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[9px\]{font-size:9px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[var\(--ash-font-size-base\2c 13px\)\]{font-weight:var(--ash-font-size-base,13px)}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.text-\[var\(--ash-accent\)\]{color:var(--ash-accent)}.text-\[var\(--ash-accent\2c \#ccff00\)\]{color:var(--ash-accent,#cf0)}.text-\[var\(--ash-assistant-text\2c rgba\(255\2c 255\2c 255\2c 0\.9\)\)\]{color:var(--ash-assistant-text,hsla(0,0%,100%,.9))}.text-\[var\(--ash-font-size-sm\2c 12px\)\]{color:var(--ash-font-size-sm,12px)}.text-\[var\(--ash-font-size-xs\2c 10px\)\]{color:var(--ash-font-size-xs,10px)}.text-\[var\(--ash-text-faint\2c rgba\(255\2c 255\2c 255\2c 0\.3\)\)\]{color:var(--ash-text-faint,hsla(0,0%,100%,.3))}.text-\[var\(--ash-text-muted\)\]{color:var(--ash-text-muted)}.text-\[var\(--ash-text-muted\2c rgba\(255\2c 255\2c 255\2c 0\.5\)\)\]{color:var(--ash-text-muted,hsla(0,0%,100%,.5))}.text-\[var\(--ash-text-primary\)\]{color:var(--ash-text-primary)}.text-\[var\(--ash-text-primary\2c rgba\(255\2c 255\2c 255\2c 0\.9\)\)\]{color:var(--ash-text-primary,hsla(0,0%,100%,.9))}.text-\[var\(--ash-text-secondary\2c rgba\(255\2c 255\2c 255\2c 0\.7\)\)\]{color:var(--ash-text-secondary,hsla(0,0%,100%,.7))}.text-\[var\(--ash-thinking-text\2c rgb\(196\2c 181\2c 253\)\)\]{color:var(--ash-thinking-text,#c4b5fd)}.text-\[var\(--ash-user-text\2c \#ffffff\)\]{color:var(--ash-user-text,#fff)}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/30{color:hsla(0,0%,100%,.3)}.text-white\/40{color:hsla(0,0%,100%,.4)}.text-white\/50{color:hsla(0,0%,100%,.5)}.text-white\/60{color:hsla(0,0%,100%,.6)}.text-white\/70{color:hsla(0,0%,100%,.7)}.text-white\/80{color:hsla(0,0%,100%,.8)}.text-white\/90{color:hsla(0,0%,100%,.9)}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.blur{--tw-blur:blur(8px)}.blur,.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:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--ash-accent:#cf0;--ash-accent-foreground:#000;--ash-accent-muted:rgba(204,255,0,.15);--ash-accent-50:#f8ffe5;--ash-accent-100:#eeffb8;--ash-accent-200:#e0ff85;--ash-accent-300:#d4ff52;--ash-accent-400:#cf0;--ash-accent-500:#b8e600;--ash-accent-600:#9c0;--ash-accent-700:#739900;--ash-accent-800:#4d6600;--ash-accent-900:#263300;--ash-surface-dark:#0a0a0a;--ash-surface-darker:#050505;--ash-surface-card:#0c0c0c;--ash-surface-elevated:#111;--ash-surface-border:hsla(0,0%,100%,.08);--ash-text-primary:hsla(0,0%,100%,.9);--ash-text-secondary:hsla(0,0%,100%,.7);--ash-text-muted:hsla(0,0%,100%,.5);--ash-text-faint:hsla(0,0%,100%,.3);--ash-border:hsla(0,0%,100%,.08);--ash-border-subtle:hsla(0,0%,100%,.04);--ash-border-emphasis:hsla(0,0%,100%,.15);--ash-user-bg:#5b6ef5;--ash-user-text:#fff;--ash-user-border:transparent;--ash-assistant-bg:#1a1a1a;--ash-assistant-text:hsla(0,0%,100%,.9);--ash-assistant-border:hsla(0,0%,100%,.08);--ash-thinking-bg:rgba(147,51,234,.06);--ash-thinking-text:#c4b5fd;--ash-thinking-border:rgba(147,51,234,.2);--ash-error-bg:rgba(239,68,68,.06);--ash-error-text:#fca5a5;--ash-error-border:rgba(239,68,68,.2);--ash-tool-bg:var(--ash-surface-dark);--ash-tool-border:var(--ash-border);--ash-avatar-user-bg:hsla(0,0%,100%,.1);--ash-avatar-assistant-bg:#10a37f;--ash-avatar-thinking-bg:rgba(147,51,234,.15);--ash-avatar-error-bg:rgba(239,68,68,.15);--ash-code-header-bg:hsla(0,0%,100%,.05);--ash-status-online:#10a37f;--ash-font-size-base:13px;--ash-font-size-sm:12px;--ash-font-size-xs:10px;--ash-font-size-code:12px;--ash-spacing-xs:0.25rem;--ash-spacing-sm:0.5rem;--ash-spacing-md:0.75rem;--ash-spacing-lg:1rem;--ash-radius-sm:0.375rem;--ash-radius-md:0.5rem;--ash-radius-lg:0.75rem;--ash-message-gap:0.5rem;--ash-message-padding:0.5rem 0.75rem;--ash-avatar-size:1.25rem;--ash-message-padding-dense:0.25rem 0.5rem;--ash-message-gap-dense:0.375rem;--ash-avatar-size-dense:1rem;--ash-font-size-dense:12px;--ash-message-list-gap:0.25rem;--ash-message-row-gap:0.5rem}.ash-glass-panel{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-width:1px;--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);--tw-backdrop-blur:blur(24px)}.ash-glass-panel,.ash-glass-panel-elevated{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ash-glass-panel-elevated{background-color:hsla(0,0%,100%,.08);border-width:1px;--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);--tw-backdrop-blur:blur(40px);border-color:hsla(0,0%,100%,.15)}.ash-card-glass{background-color:hsla(0,0%,100%,.03);border-color:hsla(0,0%,100%,.06);border-radius:.5rem;border-width:1px;--tw-backdrop-blur:blur(24px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-card-glass:hover{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1)}.ash-btn-accent{background-color:var(--ash-accent);border-radius:9999px;font-weight:500;padding:.75rem 1.5rem;--tw-text-opacity:1;border-color:var(--ash-accent);border-width:1px;box-shadow:0 0 20px rgba(204,255,0,.3);color:rgb(0 0 0/var(--tw-text-opacity,1));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-accent:hover{background-color:var(--ash-accent-500);box-shadow:0 0 30px rgba(204,255,0,.5)}.ash-btn-ghost{border-radius:.75rem;color:hsla(0,0%,100%,.7);padding:.5rem 1rem}.ash-btn-ghost:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-btn-ghost{border-color:transparent;border-width:1px;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-ghost:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.1)}.ash-btn-outline{border-color:hsla(0,0%,100%,.2);border-radius:.75rem;border-width:1px;color:hsla(0,0%,100%,.8);padding:.5rem 1rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-outline:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.3)}.ash-input-glass{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;padding:.75rem 1rem;width:100%;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-input-glass::-moz-placeholder{color:hsla(0,0%,100%,.4)}.ash-input-glass::placeholder{color:hsla(0,0%,100%,.4)}.ash-input-glass:focus{background-color:hsla(0,0%,100%,.1);outline:2px solid transparent;outline-offset:2px}.ash-input-glass{transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-input-glass:focus{border-color:rgba(204,255,0,.5);box-shadow:0 0 20px rgba(204,255,0,.15)}.ash-text-base{font-size:var(--ash-font-size-base);line-height:1.5}.ash-text-sm{font-size:var(--ash-font-size-sm);line-height:1.5}.ash-text-xs{font-size:var(--ash-font-size-xs);line-height:1.5}.ash-text-code{font-size:var(--ash-font-size-code);line-height:1.5}.ash-density-dense{--ash-font-size-base:12px;--ash-font-size-sm:11px;--ash-font-size-xs:10px;--ash-message-gap:0.375rem;--ash-message-padding:0.25rem 0.5rem;--ash-avatar-size:1rem;--ash-message-list-gap:2px;--ash-spacing-sm:0.25rem;--ash-spacing-md:0.5rem}.ash-density-dense [data-message-role]{gap:.375rem}.ash-density-compact{--ash-font-size-base:13px;--ash-message-gap:0.5rem;--ash-message-padding:0.5rem 0.75rem;--ash-avatar-size:1.25rem;--ash-message-list-gap:4px}.ash-density-comfortable{--ash-font-size-base:15px;--ash-message-gap:1rem;--ash-message-padding:1rem 1.25rem;--ash-avatar-size:1.75rem;--ash-message-list-gap:12px}.ash-message-content{font-size:var(--ash-font-size-base);line-height:1.6}.ash-message-content pre{background-color:rgba(0,0,0,.3);border-radius:.375rem;margin-bottom:.375rem;margin-top:.375rem;overflow-x:auto;padding:.75rem;--tw-text-opacity:1;border-color:hsla(0,0%,100%,.06);border-width:1px;color:rgb(229 231 235/var(--tw-text-opacity,1));font-size:var(--ash-font-size-code)}.ash-message-content code{background-color:hsla(0,0%,100%,.08);border-radius:.25rem;color:var(--ash-accent);font-size:var(--ash-font-size-code);padding:.125rem .25rem}.ash-message-content pre code{background-color:transparent;padding:0;--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}@keyframes ash-tool-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes ash-glow-pulse{0%,to{box-shadow:0 0 20px rgba(204,255,0,.3)}50%{box-shadow:0 0 40px rgba(204,255,0,.5)}}.ash-tool-status-pending{animation:ash-tool-pulse 1.5s ease-in-out infinite}.ash-tool-card-details{transition:max-height .2s ease-out,opacity .2s ease-out}.ash-tool-code-block{background-color:rgba(0,0,0,.3);border-color:hsla(0,0%,100%,.06);border-radius:.375rem;border-width:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--ash-font-size-code);overflow-x:auto;padding:.5rem;white-space:pre-wrap;word-break:break-word}.ash-tool-section-header{background-color:hsla(0,0%,100%,.03);border-bottom-width:1px;border-color:hsla(0,0%,100%,.06);color:hsla(0,0%,100%,.4);font-size:var(--ash-font-size-xs);font-weight:500;letter-spacing:.05em;padding:.375rem .75rem;text-transform:uppercase}.ash-status-pending{--tw-bg-opacity:1;animation:ash-tool-pulse 1.5s ease-in-out infinite;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.ash-status-success{background-color:var(--ash-accent)}.ash-status-failed{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.ash-truncate-fade{background:linear-gradient(0deg,#0a0a0a,transparent)}.ash-ambient-glow{border-radius:9999px;opacity:.08;pointer-events:none;position:absolute;--tw-blur:blur(120px);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)}.ash-ambient-glow-accent{background:radial-gradient(circle,rgba(204,255,0,.15) 0,transparent 70%)}.ash-ambient-glow-green{background:radial-gradient(circle,rgba(5,46,22,.25) 0,transparent 70%)}.ash-grid-pattern{background-image:linear-gradient(hsla(0,0%,100%,.03) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.03) 1px,transparent 0);background-size:50px 50px}.ash-noise-overlay{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'%3E%3Cfilter id='a'%3E%3CfeTurbulence baseFrequency='.9' numOctaves='4' stitchTiles='stitch' type='fractalNoise'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");opacity:.02}@keyframes ash-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes ash-slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes ash-pulse-slow{0%,to{opacity:.06}50%{opacity:.1}}.ash-animate-fade-in{animation:ash-fade-in .3s ease-out forwards}.ash-animate-slide-up{animation:ash-slide-up .4s ease-out forwards}.ash-animate-pulse-slow{animation:ash-pulse-slow 8s ease-in-out infinite}.ash-delay-100{animation-delay:.1s}.ash-delay-200{animation-delay:.2s}.ash-delay-300{animation-delay:.3s}.ash-delay-400{animation-delay:.4s}@keyframes ash-status-line-enter{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes ash-status-line-exit{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}@keyframes ash-status-line-replace{0%{opacity:1;transform:translateX(0)}50%{opacity:0;transform:translateX(-20px)}51%{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes ash-text-shimmer{0%{background-position:-200%}to{background-position:200%}}.ash-status-line-enter{animation:ash-status-line-enter ease-out forwards}.ash-status-line-exit{animation:ash-status-line-exit ease-out forwards}.ash-status-line-replace{animation:ash-status-line-replace ease-in-out forwards}.ash-text-shimmer{background:linear-gradient(90deg,hsla(0,0%,100%,.6),#fff 50%,hsla(0,0%,100%,.6));background-clip:text;-webkit-background-clip:text;background-size:200% auto;-webkit-text-fill-color:transparent;animation:ash-text-shimmer 2s linear infinite}.ash-execution-connector{background:linear-gradient(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.05));bottom:0;left:1rem;position:absolute;top:2.5rem;width:1px}@keyframes ash-accordion-expand{0%{max-height:0;opacity:0;transform:translateY(-10px)}to{max-height:2000px;opacity:1;transform:translateY(0)}}.ash-accordion-content{animation:ash-accordion-expand .3s ease-out forwards;overflow:hidden}.ash-badge{align-items:center;border-radius:9999px;display:inline-flex;font-size:var(--ash-font-size-xs);font-weight:500;padding:.25rem .625rem}.ash-badge-accent{background-color:rgba(204,255,0,.2);border:1px solid rgba(204,255,0,.3);color:var(--ash-accent)}.ash-badge-success{background-color:rgba(16,185,129,.2);border:1px solid rgba(16,185,129,.3);color:#34d399}.ash-badge-warning{background-color:rgba(234,179,8,.2);border:1px solid rgba(234,179,8,.3);color:#facc15}.ash-badge-error{background-color:rgba(239,68,68,.2);border:1px solid rgba(239,68,68,.3);color:#f87171}.ash-badge-info{background-color:rgba(59,130,246,.2);border:1px solid rgba(59,130,246,.3);color:#60a5fa}.ash-scrollbar::-webkit-scrollbar{height:6px;width:6px}.ash-scrollbar::-webkit-scrollbar-track{background:transparent}.ash-scrollbar::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.1);border-radius:3px}.ash-scrollbar::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.2)}.ash-message-content.prose-invert{--tw-prose-body:hsla(0,0%,100%,.8);--tw-prose-headings:#fff;--tw-prose-links:var(--ash-accent);--tw-prose-bold:#fff;--tw-prose-code:var(--ash-accent);--tw-prose-quotes:hsla(0,0%,100%,.6)}.ash-message-content a{color:var(--ash-accent);text-decoration:underline;text-underline-offset:2px}.ash-message-content a:hover{opacity:.8}.ash-message-content ol,.ash-message-content ul{margin-bottom:.375rem;margin-top:.375rem;padding-left:1rem}.ash-message-content li{margin-bottom:.125rem;margin-top:.125rem}.ash-message-content p{margin-bottom:.375rem;margin-top:.375rem}.ash-message-content p:first-child{margin-top:0}.ash-message-content p:last-child{margin-bottom:0}.ash-card-glow{border-color:rgba(204,255,0,.2);box-shadow:0 0 20px rgba(204,255,0,.08);transition:all .4s cubic-bezier(.4,0,.2,1)}.ash-card-glow:hover{border-color:rgba(204,255,0,.4);box-shadow:0 0 30px rgba(204,255,0,.15);transform:translateY(-2px) scale(1.01)}.ash-container{background-color:var(--ash-surface-dark);color:#fff}.ash-chat-container{background-color:var(--ash-surface-card);border-color:hsla(0,0%,100%,.05);border-radius:.75rem;border-width:1px;display:flex;flex-direction:column;height:100%}.ash-env-vars-panel{margin-bottom:.75rem}.ash-env-vars-header{align-items:center;color:hsla(0,0%,100%,.5);cursor:pointer;display:flex;font-size:var(--ash-font-size-xs);font-weight:500;gap:.5rem;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-header:hover{color:hsla(0,0%,100%,.8)}.ash-env-vars-chevron{height:.75rem;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);width:.75rem}.ash-env-vars-chevron-expanded{transform:rotate(90deg)}.ash-env-vars-label{letter-spacing:.025em;text-transform:uppercase}.ash-env-vars-badge{align-items:center;background-color:rgba(204,255,0,.2);border-radius:9999px;color:var(--ash-accent);display:inline-flex;font-size:var(--ash-font-size-xs);font-weight:500;height:1.25rem;justify-content:center;min-width:20px;padding-left:.375rem;padding-right:.375rem}.ash-env-vars-content{margin-top:.5rem}.ash-env-vars-content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.ash-env-vars-item{align-items:center;background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;display:flex;font-size:var(--ash-font-size-sm);gap:.5rem;padding:.5rem .75rem}.ash-env-vars-key{color:var(--ash-accent);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:500}.ash-env-vars-equals{color:hsla(0,0%,100%,.4)}.ash-env-vars-value{color:hsla(0,0%,100%,.7);flex:1 1 0%;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ash-env-vars-remove{color:hsla(0,0%,100%,.4);cursor:pointer;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-remove:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.ash-env-vars-add{align-items:center;display:flex;gap:.5rem}.ash-env-vars-input{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--ash-font-size-sm);padding:.5rem .75rem;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-input:focus{border-color:rgba(204,255,0,.5);outline:2px solid transparent;outline-offset:2px}.ash-env-vars-input-key{flex:1 1 0%;min-width:0}.ash-env-vars-input-value{flex:2;min-width:0}.ash-env-vars-add-button{background-color:rgba(204,255,0,.2);border-radius:.75rem;color:var(--ash-accent);font-size:var(--ash-font-size-sm);padding:.5rem .75rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-add-button:disabled{cursor:not-allowed;opacity:.3}.ash-env-vars-add-button:hover:not(:disabled){background-color:rgba(204,255,0,.3)}.ash-env-vars-helper{color:hsla(0,0%,100%,.4);font-size:var(--ash-font-size-xs);margin-top:.25rem}.ash-display-mode-toggle{align-items:center;background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.5rem;border-width:1px;color:hsla(0,0%,100%,.7);display:flex;font-size:var(--ash-font-size-sm);gap:.375rem;padding:.375rem .5rem}.ash-display-mode-toggle:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.2);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-display-mode-toggle{cursor:pointer;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-display-mode-icon{height:1rem;width:1rem}.ash-display-mode-label{display:none}@media (min-width:640px){.ash-display-mode-label{display:inline}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.ash-conversation{scroll-behavior:smooth}.ash-message+.ash-message[data-message-role=assistant]{margin-top:var(--ash-message-list-gap,.25rem)}.ash-message+.ash-message[data-message-role=user]{margin-top:calc(var(--ash-message-list-gap, .25rem)*2)}.ash-tool[data-tool-state=call],.ash-tool[data-tool-state=partial-call]{border-color:rgba(234,179,8,.3)}.ash-reasoning[data-reasoning-streaming=true]{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:0 0 20px rgba(147,51,234,.15)}.ash-task-item[data-task-status=in_progress]{border-left-width:2px;--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity,1))}.ash-attachment:hover .ash-attachment-preview img{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition:transform .2s ease}.ash-loading-dots span{animation-duration:.6s;animation-iteration-count:infinite}.ash-message-response h1,.ash-message-response h2,.ash-message-response h3{font-weight:600;margin-bottom:.5rem;margin-top:1rem}.ash-message-response h1{font-size:1.125rem;line-height:1.75rem}.ash-message-response h2{font-size:1rem;line-height:1.5rem}.ash-message-response h3{font-size:.875rem;line-height:1.25rem}.ash-message-response ol,.ash-message-response ul{margin-bottom:.5rem;margin-top:.5rem;padding-left:1rem}.ash-message-response li{margin-bottom:.25rem;margin-top:.25rem}.ash-message-response code:not(pre code){background-color:hsla(0,0%,100%,.1);border-radius:.25rem;font-size:.875rem;line-height:1.25rem;padding:.125rem .25rem}.ash-message-response pre{background-color:rgba(0,0,0,.3);border-color:hsla(0,0%,100%,.06);border-radius:.375rem;border-width:1px;margin-bottom:.5rem;margin-top:.5rem;overflow-x:auto;padding:.75rem}.ash-message-response blockquote{border-color:hsla(0,0%,100%,.2);border-left-width:2px;color:hsla(0,0%,100%,.7);font-style:italic;margin-bottom:.5rem;margin-top:.5rem;padding-left:.75rem}.ash-message-response a{color:var(--ash-accent);text-decoration-line:underline;text-underline-offset:2px}.ash-message-response table{border-collapse:collapse;margin-bottom:.5rem;margin-top:.5rem;width:100%}.ash-message-response td,.ash-message-response th{border-color:hsla(0,0%,100%,.1);border-width:1px;padding:.25rem .5rem;text-align:left}.ash-message-response th{background-color:hsla(0,0%,100%,.05);font-weight:500}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-\[var\(--ash-border-emphasis\2c rgba\(255\2c 255\2c 255\2c 0\.15\)\)\]:hover{border-color:var(--ash-border-emphasis,hsla(0,0%,100%,.15))}.hover\:bg-\[var\(--ash-surface-card\2c \#0c0c0c\)\]:hover{background-color:var(--ash-surface-card,#0c0c0c)}.hover\:bg-\[var\(--ash-surface-elevated\2c \#111111\)\]:hover{background-color:var(--ash-surface-elevated,#111)}.hover\:bg-black\/80:hover{background-color:rgba(0,0,0,.8)}.hover\:bg-white\/5:hover{background-color:hsla(0,0%,100%,.05)}.hover\:bg-white\/\[0\.03\]:hover{background-color:hsla(0,0%,100%,.03)}.hover\:text-\[var\(--ash-accent-300\)\]:hover{color:var(--ash-accent-300)}.hover\:text-\[var\(--ash-text-secondary\2c rgba\(255\2c 255\2c 255\2c 0\.7\)\)\]:hover{color:var(--ash-text-secondary,hsla(0,0%,100%,.7))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x:0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-\[var\(--ash-accent\)\]{color:var(--ash-accent)}.group:hover .group-hover\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-white\/60{color:hsla(0,0%,100%,.6)}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- .container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-20{bottom:5rem}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-1{right:.25rem}.top-1{top:.25rem}.ml-0\.5{margin-left:.125rem}.ml-6{margin-left:1.5rem}.mt-0\.5{margin-top:.125rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.line-clamp-2{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[var\(--ash-avatar-size\2c 1\.25rem\)\]{height:var(--ash-avatar-size,1.25rem)}.h-full{height:100%}.min-h-\[200px\]{min-height:200px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[var\(--ash-avatar-size\2c 1\.25rem\)\]{width:var(--ash-avatar-size,1.25rem)}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[80\%\]{max-width:80%}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[shimmer_1\.5s_ease-in-out_infinite\]{animation:shimmer 1.5s ease-in-out infinite}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-bounce{animation:bounce 1s infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-\[var\(--ash-message-gap\2c 0\.5rem\)\]{gap:var(--ash-message-gap,.5rem)}.gap-\[var\(--ash-message-list-gap\2c 0\.25rem\)\]{gap:var(--ash-message-list-gap,.25rem)}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\[var\(--ash-radius-lg\2c 0\.75rem\)\]{border-radius:var(--ash-radius-lg,.75rem)}.rounded-\[var\(--ash-radius-md\2c 0\.5rem\)\]{border-radius:var(--ash-radius-md,.5rem)}.rounded-\[var\(--ash-radius-sm\2c 0\.375rem\)\]{border-radius:var(--ash-radius-sm,.375rem)}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-\[var\(--ash-assistant-border\2c rgba\(255\2c 255\2c 255\2c 0\.08\)\)\]{border-color:var(--ash-assistant-border,hsla(0,0%,100%,.08))}.border-\[var\(--ash-border\2c rgba\(255\2c 255\2c 255\2c 0\.08\)\)\]{border-color:var(--ash-border,hsla(0,0%,100%,.08))}.border-\[var\(--ash-border-subtle\2c rgba\(255\2c 255\2c 255\2c 0\.04\)\)\]{border-color:var(--ash-border-subtle,hsla(0,0%,100%,.04))}.border-\[var\(--ash-thinking-border\2c rgba\(147\2c 51\2c 234\2c 0\.2\)\)\]{border-color:var(--ash-thinking-border,rgba(147,51,234,.2))}.border-\[var\(--ash-user-border\2c transparent\)\]{border-color:var(--ash-user-border,transparent)}.border-red-500\/30{border-color:rgba(239,68,68,.3)}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-white\/20{border-color:hsla(0,0%,100%,.2)}.bg-\[var\(--ash-assistant-bg\2c \#1a1a1a\)\]{background-color:var(--ash-assistant-bg,#1a1a1a)}.bg-\[var\(--ash-code-header-bg\)\]{background-color:var(--ash-code-header-bg)}.bg-\[var\(--ash-surface-dark\2c \#0a0a0a\)\]{background-color:var(--ash-surface-dark,#0a0a0a)}.bg-\[var\(--ash-surface-elevated\2c \#111111\)\],.bg-\[var\(--ash-surface-elevated\2c \#111\)\]{background-color:var(--ash-surface-elevated,#111)}.bg-\[var\(--ash-thinking-bg\2c rgba\(147\2c 51\2c 234\2c 0\.06\)\)\]{background-color:var(--ash-thinking-bg,rgba(147,51,234,.06))}.bg-\[var\(--ash-tool-bg\2c var\(--ash-surface-dark\2c \#0a0a0a\)\)\]{background-color:var(--ash-tool-bg,var(--ash-surface-dark,#0a0a0a))}.bg-\[var\(--ash-user-bg\2c \#5B6EF5\)\]{background-color:var(--ash-user-bg,#5b6ef5)}.bg-black\/20{background-color:rgba(0,0,0,.2)}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-blue-900\/20{background-color:rgba(30,58,138,.2)}.bg-current{background-color:currentColor}.bg-red-500\/5{background-color:rgba(239,68,68,.05)}.bg-red-900\/20{background-color:rgba(127,29,29,.2)}.bg-red-900\/50{background-color:rgba(127,29,29,.5)}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-yellow-400\/10{background-color:rgba(250,204,21,.1)}.bg-yellow-900\/20{background-color:rgba(113,63,18,.2)}.bg-yellow-900\/50{background-color:rgba(113,63,18,.5)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-white\/5{--tw-gradient-from:hsla(0,0%,100%,.05) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-white\/10{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.1) var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-white\/5{--tw-gradient-to:hsla(0,0%,100%,.05) var(--tw-gradient-to-position)}.bg-\[length\:200\%_100\%\]{background-size:200% 100%}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-\[var\(--ash-message-padding\2c 0\.5rem_0\.75rem\)\]{padding:var(--ash-message-padding,.5rem .75rem)}.p-\[var\(--ash-spacing-md\2c 0\.75rem\)\]{padding:var(--ash-spacing-md,.75rem)}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-2{padding-bottom:.5rem}.pl-4{padding-left:1rem}.pr-2{padding-right:.5rem}.pt-0\.5{padding-top:.125rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[var\(--ash-font-size-base\2c 13px\)\]{font-weight:var(--ash-font-size-base,13px)}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.text-\[var\(--ash-accent\)\]{color:var(--ash-accent)}.text-\[var\(--ash-accent\2c \#ccff00\)\]{color:var(--ash-accent,#cf0)}.text-\[var\(--ash-assistant-text\2c rgba\(255\2c 255\2c 255\2c 0\.9\)\)\]{color:var(--ash-assistant-text,hsla(0,0%,100%,.9))}.text-\[var\(--ash-font-size-sm\2c 12px\)\]{color:var(--ash-font-size-sm,12px)}.text-\[var\(--ash-font-size-xs\2c 10px\)\]{color:var(--ash-font-size-xs,10px)}.text-\[var\(--ash-text-faint\2c rgba\(255\2c 255\2c 255\2c 0\.3\)\)\]{color:var(--ash-text-faint,hsla(0,0%,100%,.3))}.text-\[var\(--ash-text-muted\)\]{color:var(--ash-text-muted)}.text-\[var\(--ash-text-muted\2c rgba\(255\2c 255\2c 255\2c 0\.5\)\)\]{color:var(--ash-text-muted,hsla(0,0%,100%,.5))}.text-\[var\(--ash-text-primary\)\]{color:var(--ash-text-primary)}.text-\[var\(--ash-text-primary\2c rgba\(255\2c 255\2c 255\2c 0\.9\)\)\]{color:var(--ash-text-primary,hsla(0,0%,100%,.9))}.text-\[var\(--ash-text-secondary\2c rgba\(255\2c 255\2c 255\2c 0\.7\)\)\]{color:var(--ash-text-secondary,hsla(0,0%,100%,.7))}.text-\[var\(--ash-thinking-text\2c rgb\(196\2c 181\2c 253\)\)\]{color:var(--ash-thinking-text,#c4b5fd)}.text-\[var\(--ash-user-text\2c \#ffffff\)\]{color:var(--ash-user-text,#fff)}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/30{color:hsla(0,0%,100%,.3)}.text-white\/40{color:hsla(0,0%,100%,.4)}.text-white\/50{color:hsla(0,0%,100%,.5)}.text-white\/60{color:hsla(0,0%,100%,.6)}.text-white\/70{color:hsla(0,0%,100%,.7)}.text-white\/80{color:hsla(0,0%,100%,.8)}.text-white\/90{color:hsla(0,0%,100%,.9)}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.blur{--tw-blur:blur(8px)}.blur,.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:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--ash-accent:#cf0;--ash-accent-foreground:#000;--ash-accent-50:#f8ffe5;--ash-accent-100:#eeffb8;--ash-accent-200:#e0ff85;--ash-accent-300:#d4ff52;--ash-accent-400:#cf0;--ash-accent-500:#b8e600;--ash-accent-600:#9c0;--ash-accent-700:#739900;--ash-accent-800:#4d6600;--ash-accent-900:#263300;--ash-surface-dark:#0a0a0a;--ash-surface-darker:#050505;--ash-surface-card:#0c0c0c;--ash-surface-elevated:#111;--ash-surface-border:hsla(0,0%,100%,.1);--ash-font-size-base:14px;--ash-font-size-sm:12px;--ash-font-size-xs:11px;--ash-font-size-code:13px}.ash-glass-panel{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-width:1px;--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);--tw-backdrop-blur:blur(24px)}.ash-glass-panel,.ash-glass-panel-elevated{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ash-glass-panel-elevated{background-color:hsla(0,0%,100%,.08);border-width:1px;--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);--tw-backdrop-blur:blur(40px);border-color:hsla(0,0%,100%,.15)}.ash-card-glass{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:1rem;border-width:1px;--tw-backdrop-blur:blur(24px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-card-glass,.ash-card-glass:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ash-card-glass:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);background-color:hsla(0,0%,100%,.08);border-color:hsla(0,0%,100%,.2)}.ash-btn-accent{background-color:var(--ash-accent);border-radius:9999px;font-weight:500;padding:.75rem 1.5rem;--tw-text-opacity:1;border-color:var(--ash-accent);border-width:1px;box-shadow:0 0 20px rgba(204,255,0,.3);color:rgb(0 0 0/var(--tw-text-opacity,1));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-accent:hover{background-color:var(--ash-accent-500);box-shadow:0 0 30px rgba(204,255,0,.5)}.ash-btn-ghost{border-radius:.75rem;color:hsla(0,0%,100%,.7);padding:.5rem 1rem}.ash-btn-ghost:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-btn-ghost{border-color:transparent;border-width:1px;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-ghost:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.1)}.ash-btn-outline{border-color:hsla(0,0%,100%,.2);border-radius:.75rem;border-width:1px;color:hsla(0,0%,100%,.8);padding:.5rem 1rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-outline:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.3)}.ash-input-glass{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;padding:.75rem 1rem;width:100%;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-input-glass::-moz-placeholder{color:hsla(0,0%,100%,.4)}.ash-input-glass::placeholder{color:hsla(0,0%,100%,.4)}.ash-input-glass:focus{background-color:hsla(0,0%,100%,.1);outline:2px solid transparent;outline-offset:2px}.ash-input-glass{transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-input-glass:focus{border-color:rgba(204,255,0,.5);box-shadow:0 0 20px rgba(204,255,0,.15)}.ash-text-base{font-size:var(--ash-font-size-base);line-height:1.5}.ash-text-sm{font-size:var(--ash-font-size-sm);line-height:1.5}.ash-text-xs{font-size:var(--ash-font-size-xs);line-height:1.5}.ash-text-code{font-size:var(--ash-font-size-code);line-height:1.5}.ash-message-content{font-size:var(--ash-font-size-base);line-height:1.6}.ash-message-content pre{background-color:rgba(0,0,0,.4);border-radius:.75rem;margin-bottom:.5rem;margin-top:.5rem;overflow-x:auto;padding:1rem;--tw-text-opacity:1;border-color:hsla(0,0%,100%,.1);border-width:1px;color:rgb(243 244 246/var(--tw-text-opacity,1))}.ash-message-content code{background-color:hsla(0,0%,100%,.1);border-radius:.25rem;color:var(--ash-accent);font-size:var(--ash-font-size-code);padding:.125rem .375rem}.ash-message-content pre code{background-color:transparent;padding:0;--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}@keyframes ash-tool-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes ash-glow-pulse{0%,to{box-shadow:0 0 20px rgba(204,255,0,.3)}50%{box-shadow:0 0 40px rgba(204,255,0,.5)}}.ash-tool-status-pending{animation:ash-tool-pulse 1.5s ease-in-out infinite}.ash-tool-card-details{transition:max-height .2s ease-out,opacity .2s ease-out}.ash-tool-code-block{background-color:rgba(0,0,0,.4);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--ash-font-size-code);overflow-x:auto;padding:.75rem;white-space:pre-wrap;word-break:break-word}.ash-tool-section-header{background-color:hsla(0,0%,100%,.05);border-bottom-width:1px;border-color:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5);font-size:var(--ash-font-size-xs);font-weight:500;letter-spacing:.025em;padding:.5rem .75rem;text-transform:uppercase}.ash-status-pending{--tw-bg-opacity:1;animation:ash-tool-pulse 1.5s ease-in-out infinite;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.ash-status-success{background-color:var(--ash-accent)}.ash-status-failed{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.ash-truncate-fade{background:linear-gradient(0deg,#0a0a0a,transparent)}.ash-ambient-glow{border-radius:9999px;opacity:.08;pointer-events:none;position:absolute;--tw-blur:blur(120px);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)}.ash-ambient-glow-accent{background:radial-gradient(circle,rgba(204,255,0,.15) 0,transparent 70%)}.ash-ambient-glow-green{background:radial-gradient(circle,rgba(5,46,22,.25) 0,transparent 70%)}.ash-grid-pattern{background-image:linear-gradient(hsla(0,0%,100%,.03) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.03) 1px,transparent 0);background-size:50px 50px}.ash-noise-overlay{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'%3E%3Cfilter id='a'%3E%3CfeTurbulence baseFrequency='.9' numOctaves='4' stitchTiles='stitch' type='fractalNoise'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");opacity:.02}@keyframes ash-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes ash-slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes ash-pulse-slow{0%,to{opacity:.06}50%{opacity:.1}}.ash-animate-fade-in{animation:ash-fade-in .3s ease-out forwards}.ash-animate-slide-up{animation:ash-slide-up .4s ease-out forwards}.ash-animate-pulse-slow{animation:ash-pulse-slow 8s ease-in-out infinite}.ash-delay-100{animation-delay:.1s}.ash-delay-200{animation-delay:.2s}.ash-delay-300{animation-delay:.3s}.ash-delay-400{animation-delay:.4s}@keyframes ash-status-line-enter{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes ash-status-line-exit{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}@keyframes ash-status-line-replace{0%{opacity:1;transform:translateX(0)}50%{opacity:0;transform:translateX(-20px)}51%{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes ash-text-shimmer{0%{background-position:-200%}to{background-position:200%}}.ash-status-line-enter{animation:ash-status-line-enter ease-out forwards}.ash-status-line-exit{animation:ash-status-line-exit ease-out forwards}.ash-status-line-replace{animation:ash-status-line-replace ease-in-out forwards}.ash-text-shimmer{background:linear-gradient(90deg,hsla(0,0%,100%,.6),#fff 50%,hsla(0,0%,100%,.6));background-clip:text;-webkit-background-clip:text;background-size:200% auto;-webkit-text-fill-color:transparent;animation:ash-text-shimmer 2s linear infinite}.ash-execution-connector{background:linear-gradient(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.05));bottom:0;left:1rem;position:absolute;top:2.5rem;width:1px}@keyframes ash-accordion-expand{0%{max-height:0;opacity:0;transform:translateY(-10px)}to{max-height:2000px;opacity:1;transform:translateY(0)}}.ash-accordion-content{animation:ash-accordion-expand .3s ease-out forwards;overflow:hidden}.ash-badge{align-items:center;border-radius:9999px;display:inline-flex;font-size:var(--ash-font-size-xs);font-weight:500;padding:.25rem .625rem}.ash-badge-accent{background-color:rgba(204,255,0,.2);border:1px solid rgba(204,255,0,.3);color:var(--ash-accent)}.ash-badge-success{background-color:rgba(16,185,129,.2);border:1px solid rgba(16,185,129,.3);color:#34d399}.ash-badge-warning{background-color:rgba(234,179,8,.2);border:1px solid rgba(234,179,8,.3);color:#facc15}.ash-badge-error{background-color:rgba(239,68,68,.2);border:1px solid rgba(239,68,68,.3);color:#f87171}.ash-badge-info{background-color:rgba(59,130,246,.2);border:1px solid rgba(59,130,246,.3);color:#60a5fa}.ash-scrollbar::-webkit-scrollbar{height:8px;width:8px}.ash-scrollbar::-webkit-scrollbar-track{background:hsla(0,0%,100%,.05);border-radius:4px}.ash-scrollbar::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.15);border-radius:4px}.ash-scrollbar::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.25)}.ash-message-content.prose-invert{--tw-prose-body:hsla(0,0%,100%,.8);--tw-prose-headings:#fff;--tw-prose-links:var(--ash-accent);--tw-prose-bold:#fff;--tw-prose-code:var(--ash-accent);--tw-prose-quotes:hsla(0,0%,100%,.6)}.ash-message-content a{color:var(--ash-accent);text-decoration:underline;text-underline-offset:2px}.ash-message-content a:hover{opacity:.8}.ash-message-content ol,.ash-message-content ul{margin-bottom:.5rem;margin-top:.5rem}.ash-message-content li{margin-bottom:.25rem;margin-top:.25rem}.ash-message-content p{margin-bottom:.5rem;margin-top:.5rem}.ash-message-content p:first-child{margin-top:0}.ash-message-content p:last-child{margin-bottom:0}.ash-card-glow{border-color:rgba(204,255,0,.2);box-shadow:0 0 20px rgba(204,255,0,.08);transition:all .4s cubic-bezier(.4,0,.2,1)}.ash-card-glow:hover{border-color:rgba(204,255,0,.4);box-shadow:0 0 30px rgba(204,255,0,.15);transform:translateY(-2px) scale(1.01)}.ash-container{background-color:var(--ash-surface-dark);color:#fff}.ash-chat-container{background-color:var(--ash-surface-card);border-color:hsla(0,0%,100%,.05);border-radius:.75rem;border-width:1px;display:flex;flex-direction:column;height:100%}.ash-env-vars-panel{margin-bottom:.75rem}.ash-env-vars-header{align-items:center;color:hsla(0,0%,100%,.5);cursor:pointer;display:flex;font-size:var(--ash-font-size-xs);font-weight:500;gap:.5rem;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-header:hover{color:hsla(0,0%,100%,.8)}.ash-env-vars-chevron{height:.75rem;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);width:.75rem}.ash-env-vars-chevron-expanded{transform:rotate(90deg)}.ash-env-vars-label{letter-spacing:.025em;text-transform:uppercase}.ash-env-vars-badge{align-items:center;background-color:rgba(204,255,0,.2);border-radius:9999px;color:var(--ash-accent);display:inline-flex;font-size:var(--ash-font-size-xs);font-weight:500;height:1.25rem;justify-content:center;min-width:20px;padding-left:.375rem;padding-right:.375rem}.ash-env-vars-content{margin-top:.5rem}.ash-env-vars-content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.ash-env-vars-item{align-items:center;background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;display:flex;font-size:var(--ash-font-size-sm);gap:.5rem;padding:.5rem .75rem}.ash-env-vars-key{color:var(--ash-accent);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:500}.ash-env-vars-equals{color:hsla(0,0%,100%,.4)}.ash-env-vars-value{color:hsla(0,0%,100%,.7);flex:1 1 0%;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ash-env-vars-remove{color:hsla(0,0%,100%,.4);cursor:pointer;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-remove:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.ash-env-vars-add{align-items:center;display:flex;gap:.5rem}.ash-env-vars-input{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--ash-font-size-sm);padding:.5rem .75rem;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-input:focus{border-color:rgba(204,255,0,.5);outline:2px solid transparent;outline-offset:2px}.ash-env-vars-input-key{flex:1 1 0%;min-width:0}.ash-env-vars-input-value{flex:2;min-width:0}.ash-env-vars-add-button{background-color:rgba(204,255,0,.2);border-radius:.75rem;color:var(--ash-accent);font-size:var(--ash-font-size-sm);padding:.5rem .75rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-add-button:disabled{cursor:not-allowed;opacity:.3}.ash-env-vars-add-button:hover:not(:disabled){background-color:rgba(204,255,0,.3)}.ash-env-vars-helper{color:hsla(0,0%,100%,.4);font-size:var(--ash-font-size-xs);margin-top:.25rem}.ash-display-mode-toggle{align-items:center;background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.5rem;border-width:1px;color:hsla(0,0%,100%,.7);display:flex;font-size:var(--ash-font-size-sm);gap:.375rem;padding:.375rem .5rem}.ash-display-mode-toggle:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.2);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-display-mode-toggle{cursor:pointer;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-display-mode-icon{height:1rem;width:1rem}.ash-display-mode-label{display:none}@media (min-width:640px){.ash-display-mode-label{display:inline}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.ash-conversation{scroll-behavior:smooth}.ash-message+.ash-message[data-message-role=assistant]{margin-top:var(--ash-message-list-gap,.25rem)}.ash-message+.ash-message[data-message-role=user]{margin-top:calc(var(--ash-message-list-gap, .25rem)*2)}.ash-tool[data-tool-state=call],.ash-tool[data-tool-state=partial-call]{border-color:rgba(234,179,8,.3)}.ash-reasoning[data-reasoning-streaming=true]{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:0 0 20px rgba(147,51,234,.15)}.ash-task-item[data-task-status=in_progress]{border-left-width:2px;--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity,1))}.ash-attachment:hover .ash-attachment-preview img{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition:transform .2s ease}.ash-loading-dots span{animation-duration:.6s;animation-iteration-count:infinite}.ash-message-response h1,.ash-message-response h2,.ash-message-response h3{font-weight:600;margin-bottom:.5rem;margin-top:1rem}.ash-message-response h1{font-size:1.125rem;line-height:1.75rem}.ash-message-response h2{font-size:1rem;line-height:1.5rem}.ash-message-response h3{font-size:.875rem;line-height:1.25rem}.ash-message-response ol,.ash-message-response ul{margin-bottom:.5rem;margin-top:.5rem;padding-left:1rem}.ash-message-response li{margin-bottom:.25rem;margin-top:.25rem}.ash-message-response code:not(pre code){background-color:hsla(0,0%,100%,.1);border-radius:.25rem;font-size:.875rem;line-height:1.25rem;padding:.125rem .25rem}.ash-message-response pre{background-color:rgba(0,0,0,.3);border-color:hsla(0,0%,100%,.06);border-radius:.375rem;border-width:1px;margin-bottom:.5rem;margin-top:.5rem;overflow-x:auto;padding:.75rem}.ash-message-response blockquote{border-color:hsla(0,0%,100%,.2);border-left-width:2px;color:hsla(0,0%,100%,.7);font-style:italic;margin-bottom:.5rem;margin-top:.5rem;padding-left:.75rem}.ash-message-response a{color:var(--ash-accent);text-decoration-line:underline;text-underline-offset:2px}.ash-message-response table{border-collapse:collapse;margin-bottom:.5rem;margin-top:.5rem;width:100%}.ash-message-response td,.ash-message-response th{border-color:hsla(0,0%,100%,.1);border-width:1px;padding:.25rem .5rem;text-align:left}.ash-message-response th{background-color:hsla(0,0%,100%,.05);font-weight:500}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-\[var\(--ash-border-emphasis\2c rgba\(255\2c 255\2c 255\2c 0\.15\)\)\]:hover{border-color:var(--ash-border-emphasis,hsla(0,0%,100%,.15))}.hover\:bg-\[var\(--ash-surface-card\2c \#0c0c0c\)\]:hover{background-color:var(--ash-surface-card,#0c0c0c)}.hover\:bg-\[var\(--ash-surface-elevated\2c \#111111\)\]:hover{background-color:var(--ash-surface-elevated,#111)}.hover\:bg-black\/80:hover{background-color:rgba(0,0,0,.8)}.hover\:bg-white\/5:hover{background-color:hsla(0,0%,100%,.05)}.hover\:bg-white\/\[0\.03\]:hover{background-color:hsla(0,0%,100%,.03)}.hover\:text-\[var\(--ash-accent-300\)\]:hover{color:var(--ash-accent-300)}.hover\:text-\[var\(--ash-text-secondary\2c rgba\(255\2c 255\2c 255\2c 0\.7\)\)\]:hover{color:var(--ash-text-secondary,hsla(0,0%,100%,.7))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x:0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-\[var\(--ash-accent\)\]{color:var(--ash-accent)}.group:hover .group-hover\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-white\/60{color:hsla(0,0%,100%,.6)}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}
1
+ .container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-20{bottom:5rem}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-1{right:.25rem}.top-1{top:.25rem}.ml-0\.5{margin-left:.125rem}.ml-6{margin-left:1.5rem}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.line-clamp-2{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[var\(--ash-avatar-size\2c 1\.25rem\)\]{height:var(--ash-avatar-size,1.25rem)}.h-full{height:100%}.min-h-\[200px\]{min-height:200px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[var\(--ash-avatar-size\2c 1\.25rem\)\]{width:var(--ash-avatar-size,1.25rem)}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[80\%\]{max-width:80%}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[shimmer_1\.5s_ease-in-out_infinite\]{animation:shimmer 1.5s ease-in-out infinite}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-bounce{animation:bounce 1s infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-\[var\(--ash-message-gap\2c 0\.5rem\)\]{gap:var(--ash-message-gap,.5rem)}.gap-\[var\(--ash-message-list-gap\2c 0\.25rem\)\]{gap:var(--ash-message-list-gap,.25rem)}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\[var\(--ash-radius-lg\2c 0\.75rem\)\]{border-radius:var(--ash-radius-lg,.75rem)}.rounded-\[var\(--ash-radius-md\2c 0\.5rem\)\]{border-radius:var(--ash-radius-md,.5rem)}.rounded-\[var\(--ash-radius-sm\2c 0\.375rem\)\]{border-radius:var(--ash-radius-sm,.375rem)}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-\[var\(--ash-assistant-border\2c rgba\(255\2c 255\2c 255\2c 0\.08\)\)\]{border-color:var(--ash-assistant-border,hsla(0,0%,100%,.08))}.border-\[var\(--ash-border\2c rgba\(255\2c 255\2c 255\2c 0\.08\)\)\]{border-color:var(--ash-border,hsla(0,0%,100%,.08))}.border-\[var\(--ash-border-subtle\2c rgba\(255\2c 255\2c 255\2c 0\.04\)\)\]{border-color:var(--ash-border-subtle,hsla(0,0%,100%,.04))}.border-\[var\(--ash-thinking-border\2c rgba\(147\2c 51\2c 234\2c 0\.2\)\)\]{border-color:var(--ash-thinking-border,rgba(147,51,234,.2))}.border-\[var\(--ash-user-border\2c transparent\)\]{border-color:var(--ash-user-border,transparent)}.border-red-500\/30{border-color:rgba(239,68,68,.3)}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-white\/20{border-color:hsla(0,0%,100%,.2)}.bg-\[var\(--ash-assistant-bg\2c \#1a1a1a\)\]{background-color:var(--ash-assistant-bg,#1a1a1a)}.bg-\[var\(--ash-code-header-bg\)\]{background-color:var(--ash-code-header-bg)}.bg-\[var\(--ash-surface-dark\2c \#0a0a0a\)\]{background-color:var(--ash-surface-dark,#0a0a0a)}.bg-\[var\(--ash-surface-elevated\2c \#111111\)\],.bg-\[var\(--ash-surface-elevated\2c \#111\)\]{background-color:var(--ash-surface-elevated,#111)}.bg-\[var\(--ash-thinking-bg\2c rgba\(147\2c 51\2c 234\2c 0\.06\)\)\]{background-color:var(--ash-thinking-bg,rgba(147,51,234,.06))}.bg-\[var\(--ash-tool-bg\2c var\(--ash-surface-dark\2c \#0a0a0a\)\)\]{background-color:var(--ash-tool-bg,var(--ash-surface-dark,#0a0a0a))}.bg-\[var\(--ash-user-bg\2c \#5B6EF5\)\]{background-color:var(--ash-user-bg,#5b6ef5)}.bg-black\/20{background-color:rgba(0,0,0,.2)}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-blue-900\/20{background-color:rgba(30,58,138,.2)}.bg-current{background-color:currentColor}.bg-red-500\/5{background-color:rgba(239,68,68,.05)}.bg-red-900\/20{background-color:rgba(127,29,29,.2)}.bg-red-900\/50{background-color:rgba(127,29,29,.5)}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-yellow-400\/10{background-color:rgba(250,204,21,.1)}.bg-yellow-900\/20{background-color:rgba(113,63,18,.2)}.bg-yellow-900\/50{background-color:rgba(113,63,18,.5)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-white\/5{--tw-gradient-from:hsla(0,0%,100%,.05) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-white\/10{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.1) var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-white\/5{--tw-gradient-to:hsla(0,0%,100%,.05) var(--tw-gradient-to-position)}.bg-\[length\:200\%_100\%\]{background-size:200% 100%}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-\[var\(--ash-message-padding\2c 0\.5rem_0\.75rem\)\]{padding:var(--ash-message-padding,.5rem .75rem)}.p-\[var\(--ash-spacing-md\2c 0\.75rem\)\]{padding:var(--ash-spacing-md,.75rem)}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-2{padding-bottom:.5rem}.pl-4{padding-left:1rem}.pr-2{padding-right:.5rem}.pt-0\.5{padding-top:.125rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[9px\]{font-size:9px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[var\(--ash-font-size-base\2c 13px\)\]{font-weight:var(--ash-font-size-base,13px)}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.text-\[var\(--ash-accent\)\]{color:var(--ash-accent)}.text-\[var\(--ash-accent\2c \#ccff00\)\]{color:var(--ash-accent,#cf0)}.text-\[var\(--ash-assistant-text\2c rgba\(255\2c 255\2c 255\2c 0\.9\)\)\]{color:var(--ash-assistant-text,hsla(0,0%,100%,.9))}.text-\[var\(--ash-font-size-sm\2c 12px\)\]{color:var(--ash-font-size-sm,12px)}.text-\[var\(--ash-font-size-xs\2c 10px\)\]{color:var(--ash-font-size-xs,10px)}.text-\[var\(--ash-text-faint\2c rgba\(255\2c 255\2c 255\2c 0\.3\)\)\]{color:var(--ash-text-faint,hsla(0,0%,100%,.3))}.text-\[var\(--ash-text-muted\)\]{color:var(--ash-text-muted)}.text-\[var\(--ash-text-muted\2c rgba\(255\2c 255\2c 255\2c 0\.5\)\)\]{color:var(--ash-text-muted,hsla(0,0%,100%,.5))}.text-\[var\(--ash-text-primary\)\]{color:var(--ash-text-primary)}.text-\[var\(--ash-text-primary\2c rgba\(255\2c 255\2c 255\2c 0\.9\)\)\]{color:var(--ash-text-primary,hsla(0,0%,100%,.9))}.text-\[var\(--ash-text-secondary\2c rgba\(255\2c 255\2c 255\2c 0\.7\)\)\]{color:var(--ash-text-secondary,hsla(0,0%,100%,.7))}.text-\[var\(--ash-thinking-text\2c rgb\(196\2c 181\2c 253\)\)\]{color:var(--ash-thinking-text,#c4b5fd)}.text-\[var\(--ash-user-text\2c \#ffffff\)\]{color:var(--ash-user-text,#fff)}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/30{color:hsla(0,0%,100%,.3)}.text-white\/40{color:hsla(0,0%,100%,.4)}.text-white\/50{color:hsla(0,0%,100%,.5)}.text-white\/60{color:hsla(0,0%,100%,.6)}.text-white\/70{color:hsla(0,0%,100%,.7)}.text-white\/80{color:hsla(0,0%,100%,.8)}.text-white\/90{color:hsla(0,0%,100%,.9)}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.blur{--tw-blur:blur(8px)}.blur,.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:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--ash-accent:#cf0;--ash-accent-foreground:#000;--ash-accent-50:#f8ffe5;--ash-accent-100:#eeffb8;--ash-accent-200:#e0ff85;--ash-accent-300:#d4ff52;--ash-accent-400:#cf0;--ash-accent-500:#b8e600;--ash-accent-600:#9c0;--ash-accent-700:#739900;--ash-accent-800:#4d6600;--ash-accent-900:#263300;--ash-surface-dark:#0a0a0a;--ash-surface-darker:#050505;--ash-surface-card:#0c0c0c;--ash-surface-elevated:#111;--ash-surface-border:hsla(0,0%,100%,.1);--ash-font-size-base:14px;--ash-font-size-sm:12px;--ash-font-size-xs:11px;--ash-font-size-code:13px}.ash-glass-panel{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-width:1px;--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);--tw-backdrop-blur:blur(24px)}.ash-glass-panel,.ash-glass-panel-elevated{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ash-glass-panel-elevated{background-color:hsla(0,0%,100%,.08);border-width:1px;--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);--tw-backdrop-blur:blur(40px);border-color:hsla(0,0%,100%,.15)}.ash-card-glass{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:1rem;border-width:1px;--tw-backdrop-blur:blur(24px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-card-glass,.ash-card-glass:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ash-card-glass:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);background-color:hsla(0,0%,100%,.08);border-color:hsla(0,0%,100%,.2)}.ash-btn-accent{background-color:var(--ash-accent);border-radius:9999px;font-weight:500;padding:.75rem 1.5rem;--tw-text-opacity:1;border-color:var(--ash-accent);border-width:1px;box-shadow:0 0 20px rgba(204,255,0,.3);color:rgb(0 0 0/var(--tw-text-opacity,1));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-accent:hover{background-color:var(--ash-accent-500);box-shadow:0 0 30px rgba(204,255,0,.5)}.ash-btn-ghost{border-radius:.75rem;color:hsla(0,0%,100%,.7);padding:.5rem 1rem}.ash-btn-ghost:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-btn-ghost{border-color:transparent;border-width:1px;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-ghost:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.1)}.ash-btn-outline{border-color:hsla(0,0%,100%,.2);border-radius:.75rem;border-width:1px;color:hsla(0,0%,100%,.8);padding:.5rem 1rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-btn-outline:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.3)}.ash-input-glass{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;padding:.75rem 1rem;width:100%;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-input-glass::-moz-placeholder{color:hsla(0,0%,100%,.4)}.ash-input-glass::placeholder{color:hsla(0,0%,100%,.4)}.ash-input-glass:focus{background-color:hsla(0,0%,100%,.1);outline:2px solid transparent;outline-offset:2px}.ash-input-glass{transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-input-glass:focus{border-color:rgba(204,255,0,.5);box-shadow:0 0 20px rgba(204,255,0,.15)}.ash-text-base{font-size:var(--ash-font-size-base);line-height:1.5}.ash-text-sm{font-size:var(--ash-font-size-sm);line-height:1.5}.ash-text-xs{font-size:var(--ash-font-size-xs);line-height:1.5}.ash-text-code{font-size:var(--ash-font-size-code);line-height:1.5}.ash-message-content{font-size:var(--ash-font-size-base);line-height:1.6}.ash-message-content pre{background-color:rgba(0,0,0,.4);border-radius:.75rem;margin-bottom:.5rem;margin-top:.5rem;overflow-x:auto;padding:1rem;--tw-text-opacity:1;border-color:hsla(0,0%,100%,.1);border-width:1px;color:rgb(243 244 246/var(--tw-text-opacity,1))}.ash-message-content code{background-color:hsla(0,0%,100%,.1);border-radius:.25rem;color:var(--ash-accent);font-size:var(--ash-font-size-code);padding:.125rem .375rem}.ash-message-content pre code{background-color:transparent;padding:0;--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}@keyframes ash-tool-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes ash-glow-pulse{0%,to{box-shadow:0 0 20px rgba(204,255,0,.3)}50%{box-shadow:0 0 40px rgba(204,255,0,.5)}}.ash-tool-status-pending{animation:ash-tool-pulse 1.5s ease-in-out infinite}.ash-tool-card-details{transition:max-height .2s ease-out,opacity .2s ease-out}.ash-tool-code-block{background-color:rgba(0,0,0,.4);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--ash-font-size-code);overflow-x:auto;padding:.75rem;white-space:pre-wrap;word-break:break-word}.ash-tool-section-header{background-color:hsla(0,0%,100%,.05);border-bottom-width:1px;border-color:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5);font-size:var(--ash-font-size-xs);font-weight:500;letter-spacing:.025em;padding:.5rem .75rem;text-transform:uppercase}.ash-status-pending{--tw-bg-opacity:1;animation:ash-tool-pulse 1.5s ease-in-out infinite;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.ash-status-success{background-color:var(--ash-accent)}.ash-status-failed{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.ash-truncate-fade{background:linear-gradient(0deg,#0a0a0a,transparent)}.ash-ambient-glow{border-radius:9999px;opacity:.08;pointer-events:none;position:absolute;--tw-blur:blur(120px);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)}.ash-ambient-glow-accent{background:radial-gradient(circle,rgba(204,255,0,.15) 0,transparent 70%)}.ash-ambient-glow-green{background:radial-gradient(circle,rgba(5,46,22,.25) 0,transparent 70%)}.ash-grid-pattern{background-image:linear-gradient(hsla(0,0%,100%,.03) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.03) 1px,transparent 0);background-size:50px 50px}.ash-noise-overlay{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'%3E%3Cfilter id='a'%3E%3CfeTurbulence baseFrequency='.9' numOctaves='4' stitchTiles='stitch' type='fractalNoise'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");opacity:.02}@keyframes ash-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes ash-slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes ash-pulse-slow{0%,to{opacity:.06}50%{opacity:.1}}.ash-animate-fade-in{animation:ash-fade-in .3s ease-out forwards}.ash-animate-slide-up{animation:ash-slide-up .4s ease-out forwards}.ash-animate-pulse-slow{animation:ash-pulse-slow 8s ease-in-out infinite}.ash-delay-100{animation-delay:.1s}.ash-delay-200{animation-delay:.2s}.ash-delay-300{animation-delay:.3s}.ash-delay-400{animation-delay:.4s}@keyframes ash-status-line-enter{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes ash-status-line-exit{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}@keyframes ash-status-line-replace{0%{opacity:1;transform:translateX(0)}50%{opacity:0;transform:translateX(-20px)}51%{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes ash-text-shimmer{0%{background-position:-200%}to{background-position:200%}}.ash-status-line-enter{animation:ash-status-line-enter ease-out forwards}.ash-status-line-exit{animation:ash-status-line-exit ease-out forwards}.ash-status-line-replace{animation:ash-status-line-replace ease-in-out forwards}.ash-text-shimmer{background:linear-gradient(90deg,hsla(0,0%,100%,.6),#fff 50%,hsla(0,0%,100%,.6));background-clip:text;-webkit-background-clip:text;background-size:200% auto;-webkit-text-fill-color:transparent;animation:ash-text-shimmer 2s linear infinite}.ash-execution-connector{background:linear-gradient(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.05));bottom:0;left:1rem;position:absolute;top:2.5rem;width:1px}@keyframes ash-accordion-expand{0%{max-height:0;opacity:0;transform:translateY(-10px)}to{max-height:2000px;opacity:1;transform:translateY(0)}}.ash-accordion-content{animation:ash-accordion-expand .3s ease-out forwards;overflow:hidden}.ash-badge{align-items:center;border-radius:9999px;display:inline-flex;font-size:var(--ash-font-size-xs);font-weight:500;padding:.25rem .625rem}.ash-badge-accent{background-color:rgba(204,255,0,.2);border:1px solid rgba(204,255,0,.3);color:var(--ash-accent)}.ash-badge-success{background-color:rgba(16,185,129,.2);border:1px solid rgba(16,185,129,.3);color:#34d399}.ash-badge-warning{background-color:rgba(234,179,8,.2);border:1px solid rgba(234,179,8,.3);color:#facc15}.ash-badge-error{background-color:rgba(239,68,68,.2);border:1px solid rgba(239,68,68,.3);color:#f87171}.ash-badge-info{background-color:rgba(59,130,246,.2);border:1px solid rgba(59,130,246,.3);color:#60a5fa}.ash-scrollbar::-webkit-scrollbar{height:8px;width:8px}.ash-scrollbar::-webkit-scrollbar-track{background:hsla(0,0%,100%,.05);border-radius:4px}.ash-scrollbar::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.15);border-radius:4px}.ash-scrollbar::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.25)}.ash-message-content.prose-invert{--tw-prose-body:hsla(0,0%,100%,.8);--tw-prose-headings:#fff;--tw-prose-links:var(--ash-accent);--tw-prose-bold:#fff;--tw-prose-code:var(--ash-accent);--tw-prose-quotes:hsla(0,0%,100%,.6)}.ash-message-content a{color:var(--ash-accent);text-decoration:underline;text-underline-offset:2px}.ash-message-content a:hover{opacity:.8}.ash-message-content ol,.ash-message-content ul{margin-bottom:.5rem;margin-top:.5rem}.ash-message-content li{margin-bottom:.25rem;margin-top:.25rem}.ash-message-content p{margin-bottom:.5rem;margin-top:.5rem}.ash-message-content p:first-child{margin-top:0}.ash-message-content p:last-child{margin-bottom:0}.ash-card-glow{border-color:rgba(204,255,0,.2);box-shadow:0 0 20px rgba(204,255,0,.08);transition:all .4s cubic-bezier(.4,0,.2,1)}.ash-card-glow:hover{border-color:rgba(204,255,0,.4);box-shadow:0 0 30px rgba(204,255,0,.15);transform:translateY(-2px) scale(1.01)}.ash-container{background-color:var(--ash-surface-dark);color:#fff}.ash-chat-container{background-color:var(--ash-surface-card);border-color:hsla(0,0%,100%,.05);border-radius:.75rem;border-width:1px;display:flex;flex-direction:column;height:100%}.ash-env-vars-panel{margin-bottom:.75rem}.ash-env-vars-header{align-items:center;color:hsla(0,0%,100%,.5);cursor:pointer;display:flex;font-size:var(--ash-font-size-xs);font-weight:500;gap:.5rem;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-header:hover{color:hsla(0,0%,100%,.8)}.ash-env-vars-chevron{height:.75rem;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);width:.75rem}.ash-env-vars-chevron-expanded{transform:rotate(90deg)}.ash-env-vars-label{letter-spacing:.025em;text-transform:uppercase}.ash-env-vars-badge{align-items:center;background-color:rgba(204,255,0,.2);border-radius:9999px;color:var(--ash-accent);display:inline-flex;font-size:var(--ash-font-size-xs);font-weight:500;height:1.25rem;justify-content:center;min-width:20px;padding-left:.375rem;padding-right:.375rem}.ash-env-vars-content{margin-top:.5rem}.ash-env-vars-content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.ash-env-vars-item{align-items:center;background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;display:flex;font-size:var(--ash-font-size-sm);gap:.5rem;padding:.5rem .75rem}.ash-env-vars-key{color:var(--ash-accent);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:500}.ash-env-vars-equals{color:hsla(0,0%,100%,.4)}.ash-env-vars-value{color:hsla(0,0%,100%,.7);flex:1 1 0%;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ash-env-vars-remove{color:hsla(0,0%,100%,.4);cursor:pointer;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-remove:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.ash-env-vars-add{align-items:center;display:flex;gap:.5rem}.ash-env-vars-input{background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.75rem;border-width:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--ash-font-size-sm);padding:.5rem .75rem;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-input:focus{border-color:rgba(204,255,0,.5);outline:2px solid transparent;outline-offset:2px}.ash-env-vars-input-key{flex:1 1 0%;min-width:0}.ash-env-vars-input-value{flex:2;min-width:0}.ash-env-vars-add-button{background-color:rgba(204,255,0,.2);border-radius:.75rem;color:var(--ash-accent);font-size:var(--ash-font-size-sm);padding:.5rem .75rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-env-vars-add-button:disabled{cursor:not-allowed;opacity:.3}.ash-env-vars-add-button:hover:not(:disabled){background-color:rgba(204,255,0,.3)}.ash-env-vars-helper{color:hsla(0,0%,100%,.4);font-size:var(--ash-font-size-xs);margin-top:.25rem}.ash-display-mode-toggle{align-items:center;background-color:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1);border-radius:.5rem;border-width:1px;color:hsla(0,0%,100%,.7);display:flex;font-size:var(--ash-font-size-sm);gap:.375rem;padding:.375rem .5rem}.ash-display-mode-toggle:hover{background-color:hsla(0,0%,100%,.1);border-color:hsla(0,0%,100%,.2);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ash-display-mode-toggle{cursor:pointer;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ash-display-mode-icon{height:1rem;width:1rem}.ash-display-mode-label{display:none}@media (min-width:640px){.ash-display-mode-label{display:inline}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.ash-conversation{scroll-behavior:smooth}.ash-message+.ash-message[data-message-role=assistant]{margin-top:var(--ash-message-list-gap,.25rem)}.ash-message+.ash-message[data-message-role=user]{margin-top:calc(var(--ash-message-list-gap, .25rem)*2)}.ash-tool[data-tool-state=call],.ash-tool[data-tool-state=partial-call]{border-color:rgba(234,179,8,.3)}.ash-reasoning[data-reasoning-streaming=true]{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:0 0 20px rgba(147,51,234,.15)}.ash-task-item[data-task-status=in_progress]{border-left-width:2px;--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity,1))}.ash-attachment:hover .ash-attachment-preview img{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition:transform .2s ease}.ash-loading-dots span{animation-duration:.6s;animation-iteration-count:infinite}.ash-message-response h1,.ash-message-response h2,.ash-message-response h3{font-weight:600;margin-bottom:.5rem;margin-top:1rem}.ash-message-response h1{font-size:1.125rem;line-height:1.75rem}.ash-message-response h2{font-size:1rem;line-height:1.5rem}.ash-message-response h3{font-size:.875rem;line-height:1.25rem}.ash-message-response ol,.ash-message-response ul{margin-bottom:.5rem;margin-top:.5rem;padding-left:1rem}.ash-message-response li{margin-bottom:.25rem;margin-top:.25rem}.ash-message-response code:not(pre code){background-color:hsla(0,0%,100%,.1);border-radius:.25rem;font-size:.875rem;line-height:1.25rem;padding:.125rem .25rem}.ash-message-response pre{background-color:rgba(0,0,0,.3);border-color:hsla(0,0%,100%,.06);border-radius:.375rem;border-width:1px;margin-bottom:.5rem;margin-top:.5rem;overflow-x:auto;padding:.75rem}.ash-message-response blockquote{border-color:hsla(0,0%,100%,.2);border-left-width:2px;color:hsla(0,0%,100%,.7);font-style:italic;margin-bottom:.5rem;margin-top:.5rem;padding-left:.75rem}.ash-message-response a{color:var(--ash-accent);text-decoration-line:underline;text-underline-offset:2px}.ash-message-response table{border-collapse:collapse;margin-bottom:.5rem;margin-top:.5rem;width:100%}.ash-message-response td,.ash-message-response th{border-color:hsla(0,0%,100%,.1);border-width:1px;padding:.25rem .5rem;text-align:left}.ash-message-response th{background-color:hsla(0,0%,100%,.05);font-weight:500}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-\[var\(--ash-border-emphasis\2c rgba\(255\2c 255\2c 255\2c 0\.15\)\)\]:hover{border-color:var(--ash-border-emphasis,hsla(0,0%,100%,.15))}.hover\:bg-\[var\(--ash-surface-card\2c \#0c0c0c\)\]:hover{background-color:var(--ash-surface-card,#0c0c0c)}.hover\:bg-\[var\(--ash-surface-elevated\2c \#111111\)\]:hover{background-color:var(--ash-surface-elevated,#111)}.hover\:bg-black\/80:hover{background-color:rgba(0,0,0,.8)}.hover\:bg-white\/5:hover{background-color:hsla(0,0%,100%,.05)}.hover\:bg-white\/\[0\.03\]:hover{background-color:hsla(0,0%,100%,.03)}.hover\:text-\[var\(--ash-accent-300\)\]:hover{color:var(--ash-accent-300)}.hover\:text-\[var\(--ash-text-secondary\2c rgba\(255\2c 255\2c 255\2c 0\.7\)\)\]:hover{color:var(--ash-text-secondary,hsla(0,0%,100%,.7))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x:0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-\[var\(--ash-accent\)\]{color:var(--ash-accent)}.group:hover .group-hover\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-white\/60{color:hsla(0,0%,100%,.6)}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"names":[],"mappings":"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","file":"types.cjs","sourcesContent":["/**\n * @ash-cloud/ash-ui - Types\n *\n * Normalized types for structured tool call display in agentic UIs.\n * These types provide a unified representation for displaying tool calls\n * with their arguments and results together.\n */\n\nimport type { ReactNode } from 'react';\n\n// =============================================================================\n// Tool Status\n// =============================================================================\n\n/**\n * Status of a tool call execution\n */\nexport type ToolStatus = 'pending' | 'success' | 'failed';\n\n// =============================================================================\n// Action-Specific Result Types\n// =============================================================================\n\n/**\n * Result from a command/bash execution\n */\nexport interface CommandRunResult {\n exitCode?: number;\n success?: boolean;\n output?: string;\n}\n\n/**\n * Generic tool result that can be markdown or structured JSON\n */\nexport interface ToolResult {\n type: 'markdown' | 'json';\n value: unknown;\n}\n\n// =============================================================================\n// Action Types (Discriminated Union)\n// =============================================================================\n\n/**\n * Bash/command execution action\n */\nexport interface CommandRunAction {\n action: 'command_run';\n command: string;\n description?: string;\n result?: CommandRunResult;\n}\n\n/**\n * File read action\n */\nexport interface FileReadAction {\n action: 'file_read';\n path: string;\n offset?: number;\n limit?: number;\n /** Number of lines read (for display) */\n linesRead?: number;\n}\n\n/**\n * File edit action\n */\nexport interface FileEditAction {\n action: 'file_edit';\n path: string;\n oldString?: string;\n newString?: string;\n replaceAll?: boolean;\n /** Number of lines added */\n linesAdded?: number;\n /** Number of lines removed */\n linesRemoved?: number;\n}\n\n/**\n * File write action\n */\nexport interface FileWriteAction {\n action: 'file_write';\n path: string;\n content?: string;\n /** Number of lines written */\n linesWritten?: number;\n}\n\n/**\n * Search/grep action\n */\nexport interface SearchAction {\n action: 'search';\n pattern: string;\n path?: string;\n glob?: string;\n type?: string;\n}\n\n/**\n * Glob/file pattern matching action\n */\nexport interface GlobAction {\n action: 'glob';\n pattern: string;\n path?: string;\n}\n\n/**\n * Web fetch action\n */\nexport interface WebFetchAction {\n action: 'web_fetch';\n url: string;\n prompt?: string;\n}\n\n/**\n * Web search action\n */\nexport interface WebSearchAction {\n action: 'web_search';\n query: string;\n}\n\n/**\n * MCP (Model Context Protocol) tool action\n */\nexport interface McpToolAction {\n action: 'mcp_tool';\n serverName: string;\n toolName: string;\n arguments?: unknown;\n result?: ToolResult;\n}\n\n/**\n * Generic/unknown tool action\n */\nexport interface GenericToolAction {\n action: 'generic_tool';\n toolName: string;\n arguments?: unknown;\n result?: ToolResult;\n}\n\n/**\n * Agent/Task tool action - represents a sub-agent that can have nested tool calls\n */\nexport interface AgentToolAction {\n action: 'agent_tool';\n /** Agent type (e.g., 'Explore', 'Plan', 'Bash', 'general-purpose') */\n agentType: string;\n /** Description of what the agent is doing */\n description: string;\n /** Full prompt given to the agent */\n prompt?: string;\n /** Nested tool calls made by this agent */\n nestedToolCalls?: NormalizedToolCall[];\n /** Current count of tool calls (updates during streaming) */\n toolCallCount?: number;\n /** When the agent started */\n startedAt?: string;\n /** When the agent completed */\n completedAt?: string;\n /** Result/output from the agent */\n result?: ToolResult;\n}\n\n// =============================================================================\n// Todo Types\n// =============================================================================\n\n/**\n * Status of a todo item\n */\nexport type TodoStatus = 'pending' | 'in_progress' | 'completed';\n\n/**\n * A single todo item from TodoWrite tool\n */\nexport interface TodoItem {\n /** Task content - imperative form (e.g., \"Run tests\") */\n content: string;\n /** Current status of the todo */\n status: TodoStatus;\n /** Active form shown during execution (e.g., \"Running tests\") */\n activeForm: string;\n}\n\n/**\n * TodoWrite tool action - tracks task progress\n */\nexport interface TodoWriteAction {\n action: 'todo_write';\n /** All todos in the current list */\n todos: TodoItem[];\n /** Summary statistics */\n stats?: {\n total: number;\n completed: number;\n inProgress: number;\n pending: number;\n };\n}\n\n/**\n * Discriminated union of all action types\n */\nexport type ActionType =\n | CommandRunAction\n | FileReadAction\n | FileEditAction\n | FileWriteAction\n | SearchAction\n | GlobAction\n | WebFetchAction\n | WebSearchAction\n | McpToolAction\n | GenericToolAction\n | TodoWriteAction\n | AgentToolAction;\n\n// =============================================================================\n// Normalized Tool Call\n// =============================================================================\n\n/**\n * A normalized tool call that combines tool_use and tool_result data\n */\nexport interface NormalizedToolCall {\n /** Unique ID from the tool_use block */\n id: string;\n\n /** Original tool name (e.g., 'Bash', 'Read', 'mcp__server__tool') */\n toolName: string;\n\n /** Parsed action type with structured arguments and result */\n actionType: ActionType;\n\n /** Current execution status */\n status: ToolStatus;\n\n /** Human-readable one-liner summary */\n summary: string;\n\n /** Raw input from tool_use event (for display in UI) */\n input?: unknown;\n\n /** Raw output/result from tool_result event (for display in UI) */\n output?: unknown;\n\n /** When the tool call started */\n startedAt?: string;\n\n /** When the tool call completed */\n completedAt?: string;\n\n /** Whether this tool call resulted in an error */\n isError?: boolean;\n\n /** Nested tool calls (for agent/sub-agent tools like Task) */\n nestedToolCalls?: NormalizedToolCall[];\n\n /** Current count of nested tool calls (updates during streaming) */\n nestedToolCallCount?: number;\n}\n\n// =============================================================================\n// Normalized Entry Types\n// =============================================================================\n\n/**\n * User message entry\n */\nexport interface UserMessageEntry {\n type: 'user_message';\n}\n\n/**\n * Assistant message entry\n */\nexport interface AssistantMessageEntry {\n type: 'assistant_message';\n}\n\n/**\n * Thinking/reasoning entry (extended thinking)\n */\nexport interface ThinkingEntry {\n type: 'thinking';\n}\n\n/**\n * Tool call entry with full tool call data\n */\nexport interface ToolCallEntry {\n type: 'tool_call';\n toolCall: NormalizedToolCall;\n}\n\n/**\n * Error entry\n */\nexport interface ErrorEntry {\n type: 'error';\n message: string;\n code?: string;\n}\n\n/**\n * Custom widget entry - rendered via consumer-provided render function\n *\n * Use this for interactive UI components like:\n * - Image grid selectors\n * - Product carousels\n * - Form inputs\n * - Data visualizations\n * - Any custom interactive widget\n *\n * @example\n * ```tsx\n * const entry: NormalizedEntry = {\n * id: 'widget-1',\n * entryType: {\n * type: 'widget',\n * widgetType: 'image-grid',\n * widgetData: { images: [...], selected: null },\n * },\n * content: 'Select an image',\n * };\n * ```\n */\nexport interface WidgetEntry {\n type: 'widget';\n /** Widget type identifier (e.g., 'image-grid', 'product-selector') */\n widgetType: string;\n /** Widget-specific data passed to the render function */\n widgetData: unknown;\n}\n\n/**\n * Discriminated union of all entry types\n */\nexport type NormalizedEntryType =\n | UserMessageEntry\n | AssistantMessageEntry\n | ThinkingEntry\n | ToolCallEntry\n | ErrorEntry\n | WidgetEntry;\n\n// =============================================================================\n// Normalized Entry\n// =============================================================================\n\n/**\n * A normalized conversation entry for display\n */\nexport interface NormalizedEntry {\n /** Unique entry ID */\n id: string;\n\n /** ISO timestamp */\n timestamp?: string;\n\n /** Entry type with type-specific data */\n entryType: NormalizedEntryType;\n\n /** Text content for display (plain text or markdown) */\n content: string;\n}\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport function isCommandRunAction(action: ActionType): action is CommandRunAction {\n return action.action === 'command_run';\n}\n\nexport function isFileReadAction(action: ActionType): action is FileReadAction {\n return action.action === 'file_read';\n}\n\nexport function isFileEditAction(action: ActionType): action is FileEditAction {\n return action.action === 'file_edit';\n}\n\nexport function isFileWriteAction(action: ActionType): action is FileWriteAction {\n return action.action === 'file_write';\n}\n\nexport function isSearchAction(action: ActionType): action is SearchAction {\n return action.action === 'search';\n}\n\nexport function isGlobAction(action: ActionType): action is GlobAction {\n return action.action === 'glob';\n}\n\nexport function isWebFetchAction(action: ActionType): action is WebFetchAction {\n return action.action === 'web_fetch';\n}\n\nexport function isWebSearchAction(action: ActionType): action is WebSearchAction {\n return action.action === 'web_search';\n}\n\nexport function isMcpToolAction(action: ActionType): action is McpToolAction {\n return action.action === 'mcp_tool';\n}\n\nexport function isGenericToolAction(action: ActionType): action is GenericToolAction {\n return action.action === 'generic_tool';\n}\n\nexport function isTodoWriteAction(action: ActionType): action is TodoWriteAction {\n return action.action === 'todo_write';\n}\n\nexport function isAgentToolAction(action: ActionType): action is AgentToolAction {\n return action.action === 'agent_tool';\n}\n\nexport function isToolCallEntry(entry: NormalizedEntryType): entry is ToolCallEntry {\n return entry.type === 'tool_call';\n}\n\nexport function isErrorEntry(entry: NormalizedEntryType): entry is ErrorEntry {\n return entry.type === 'error';\n}\n\nexport function isWidgetEntry(entry: NormalizedEntryType): entry is WidgetEntry {\n return entry.type === 'widget';\n}\n\n// =============================================================================\n// Widget Rendering\n// =============================================================================\n\n/**\n * Props passed to the widget render function\n */\nexport interface WidgetRenderProps<T = unknown> {\n /** The widget entry being rendered */\n entry: NormalizedEntry;\n /** Widget type identifier */\n widgetType: string;\n /** Widget-specific data */\n widgetData: T;\n /** Callback for widget interactions (e.g., selection, submit) */\n onAction?: (action: WidgetAction) => void;\n}\n\n/**\n * Action dispatched from a widget interaction\n */\nexport interface WidgetAction {\n /** Action type (e.g., 'select', 'submit', 'cancel') */\n type: string;\n /** Widget type that dispatched the action */\n widgetType: string;\n /** Entry ID of the widget */\n entryId: string;\n /** Action-specific payload */\n payload?: unknown;\n}\n\n/**\n * Function type for rendering custom widgets\n *\n * @example\n * ```tsx\n * const renderWidget: WidgetRenderFunction = ({ widgetType, widgetData, onAction }) => {\n * switch (widgetType) {\n * case 'image-grid':\n * return (\n * <ImageGrid\n * images={widgetData.images}\n * onSelect={(id) => onAction?.({ type: 'select', widgetType, entryId, payload: { id } })}\n * />\n * );\n * case 'product-selector':\n * return <ProductSelector data={widgetData} onAction={onAction} />;\n * default:\n * return null;\n * }\n * };\n *\n * <MessageList entries={entries} renderWidget={renderWidget} />\n * ```\n */\nexport type WidgetRenderFunction = (props: WidgetRenderProps) => ReactNode;\n\n// =============================================================================\n// Log Types (for SandboxLogsPanel)\n// =============================================================================\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug';\nexport type LogCategory = 'setup' | 'skills' | 'execution' | 'process' | 'startup';\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n category: LogCategory;\n message: string;\n data?: Record<string, unknown>;\n}\n\n// =============================================================================\n// File Attachment\n// =============================================================================\n\nexport interface FileAttachment {\n name: string;\n type: string;\n size: number;\n base64: string;\n}\n\n// =============================================================================\n// Display Mode Configuration\n// =============================================================================\n\n// =============================================================================\n// Theming & Customization\n// =============================================================================\n\n/**\n * Message visual style variant\n *\n * - 'bubble': Rounded card with padding and background (default for user messages)\n * - 'plain': No background, just text with subtle styling\n * - 'minimal': Bare text, no decoration\n */\nexport type MessageVariant = 'bubble' | 'plain' | 'minimal';\n\n/**\n * Typography scale/density preset\n *\n * - 'dense': Minimal spacing, smallest fonts (12px base) - for maximum information density\n * - 'compact': Tighter spacing, smaller fonts (13px base)\n * - 'default': Standard sizing (14px base)\n * - 'comfortable': More generous spacing (15px base)\n */\nexport type TypographyScale = 'dense' | 'compact' | 'default' | 'comfortable';\n\n/**\n * Message role for data attribute targeting\n */\nexport type MessageRole = 'user' | 'assistant' | 'thinking' | 'tool' | 'error' | 'widget';\n\n/**\n * Metadata to display with a message\n */\nexport interface MessageMetadata {\n /** Timestamp to display */\n timestamp?: string;\n /** Model name/info to display */\n model?: string;\n /** Custom label */\n label?: string;\n /** Any additional metadata */\n extra?: Record<string, unknown>;\n}\n\n/**\n * Function to render custom message metadata\n */\nexport type RenderMetadataFunction = (props: {\n entry: NormalizedEntry;\n metadata?: MessageMetadata;\n}) => ReactNode;\n\n/**\n * Custom markdown component overrides\n *\n * @example\n * ```tsx\n * const components: MarkdownComponents = {\n * h2: ({ children }) => <h2 className=\"custom-h2\">{children}</h2>,\n * code: ({ children, className }) => <CustomCode className={className}>{children}</CustomCode>,\n * };\n * ```\n */\nexport interface MarkdownComponents {\n h1?: React.ComponentType<{ children?: ReactNode }>;\n h2?: React.ComponentType<{ children?: ReactNode }>;\n h3?: React.ComponentType<{ children?: ReactNode }>;\n h4?: React.ComponentType<{ children?: ReactNode }>;\n h5?: React.ComponentType<{ children?: ReactNode }>;\n h6?: React.ComponentType<{ children?: ReactNode }>;\n p?: React.ComponentType<{ children?: ReactNode }>;\n a?: React.ComponentType<{ children?: ReactNode; href?: string }>;\n ul?: React.ComponentType<{ children?: ReactNode }>;\n ol?: React.ComponentType<{ children?: ReactNode }>;\n li?: React.ComponentType<{ children?: ReactNode }>;\n code?: React.ComponentType<{ children?: ReactNode; className?: string }>;\n pre?: React.ComponentType<{ children?: ReactNode }>;\n blockquote?: React.ComponentType<{ children?: ReactNode }>;\n strong?: React.ComponentType<{ children?: ReactNode }>;\n em?: React.ComponentType<{ children?: ReactNode }>;\n hr?: React.ComponentType<Record<string, never>>;\n img?: React.ComponentType<{ src?: string; alt?: string }>;\n table?: React.ComponentType<{ children?: ReactNode }>;\n thead?: React.ComponentType<{ children?: ReactNode }>;\n tbody?: React.ComponentType<{ children?: ReactNode }>;\n tr?: React.ComponentType<{ children?: ReactNode }>;\n th?: React.ComponentType<{ children?: ReactNode }>;\n td?: React.ComponentType<{ children?: ReactNode }>;\n}\n\n/**\n * Style configuration for message display\n */\nexport interface MessageStyleConfig {\n /** Variant for user messages */\n userVariant?: MessageVariant;\n /** Variant for assistant messages */\n assistantVariant?: MessageVariant;\n /** Typography/density scale */\n scale?: TypographyScale;\n /** Show timestamps with messages */\n showTimestamp?: boolean;\n /** Show avatars */\n showAvatars?: boolean;\n /** Custom class name for messages */\n messageClassName?: string;\n}\n\n/**\n * Default style configuration\n */\nexport const DEFAULT_STYLE_CONFIG: MessageStyleConfig = {\n userVariant: 'bubble',\n assistantVariant: 'bubble',\n scale: 'compact',\n showTimestamp: true,\n showAvatars: true,\n}\n\n// =============================================================================\n// AI SDK Compatible Types\n// =============================================================================\n\n/**\n * Tool invocation status - matches AI SDK ToolInvocation\n */\nexport type ToolInvocationState = 'partial-call' | 'call' | 'result';\n\n/**\n * Tool invocation - matches AI SDK ToolInvocation type\n */\nexport interface ToolInvocation {\n /** Tool invocation state */\n state: ToolInvocationState;\n /** Unique tool call ID */\n toolCallId: string;\n /** Tool name */\n toolName: string;\n /** Arguments passed to the tool (parsed JSON) */\n args: Record<string, unknown>;\n /** Result from tool execution (only present when state is 'result') */\n result?: unknown;\n}\n\n/**\n * AI SDK message role - matches AI SDK Message role\n */\nexport type AIMessageRole = 'user' | 'assistant' | 'system' | 'data';\n\n/**\n * AI SDK compatible message type\n * This is the primary type used by the new useChat hook\n */\nexport interface Message {\n /** Unique message ID */\n id: string;\n /** Message role */\n role: AIMessageRole;\n /** Message content (text) */\n content: string;\n /** Tool invocations for this message */\n toolInvocations?: ToolInvocation[];\n /** When the message was created */\n createdAt?: Date;\n /** Optional reasoning/thinking content */\n reasoning?: string;\n /** Experimental attachments (for file uploads) */\n experimental_attachments?: MessageAttachment[];\n}\n\n/**\n * Message attachment for file uploads\n */\nexport interface MessageAttachment {\n /** Attachment name */\n name: string;\n /** MIME type */\n contentType: string;\n /** URL to the attachment */\n url: string;\n}\n\n// =============================================================================\n// Type Conversion Functions\n// =============================================================================\n\n/**\n * Convert a NormalizedEntry to an AI SDK Message\n */\nexport function normalizedEntryToMessage(entry: NormalizedEntry): Message | null {\n const { id, entryType, content, timestamp } = entry;\n const createdAt = timestamp ? new Date(timestamp) : undefined;\n\n switch (entryType.type) {\n case 'user_message':\n return {\n id,\n role: 'user',\n content,\n createdAt,\n };\n\n case 'assistant_message':\n return {\n id,\n role: 'assistant',\n content,\n createdAt,\n };\n\n case 'thinking':\n // Thinking is represented as reasoning on the previous assistant message\n // Return as assistant message with reasoning\n return {\n id,\n role: 'assistant',\n content: '',\n reasoning: content,\n createdAt,\n };\n\n case 'tool_call': {\n const { toolCall } = entryType;\n const toolInvocation: ToolInvocation = {\n state: toolCall.status === 'pending' ? 'call' : 'result',\n toolCallId: toolCall.id,\n toolName: toolCall.toolName,\n args: (toolCall.input as Record<string, unknown>) || {},\n result: toolCall.output,\n };\n // Tool calls are attached to assistant messages\n return {\n id,\n role: 'assistant',\n content: '',\n toolInvocations: [toolInvocation],\n createdAt,\n };\n }\n\n case 'error':\n // Errors can be represented as system messages\n return {\n id,\n role: 'system',\n content: `Error: ${entryType.message}${entryType.code ? ` (${entryType.code})` : ''}`,\n createdAt,\n };\n\n case 'widget':\n // Widgets are data messages\n return {\n id,\n role: 'data',\n content: JSON.stringify({\n widgetType: entryType.widgetType,\n widgetData: entryType.widgetData,\n }),\n createdAt,\n };\n\n default:\n return null;\n }\n}\n\n/**\n * Convert an AI SDK Message to a NormalizedEntry\n */\nexport function messageToNormalizedEntry(message: Message): NormalizedEntry {\n const { id, role, content, createdAt, toolInvocations, reasoning } = message;\n const timestamp = createdAt?.toISOString();\n\n // If there are tool invocations, create tool call entries\n if (toolInvocations && toolInvocations.length > 0) {\n // For simplicity, take the first tool invocation\n // In practice, multiple tool invocations would need multiple entries\n const inv = toolInvocations[0]!;\n const toolCall: NormalizedToolCall = {\n id: inv.toolCallId,\n toolName: inv.toolName,\n actionType: {\n action: 'generic_tool',\n toolName: inv.toolName,\n arguments: inv.args,\n result: inv.result ? { type: 'json', value: inv.result } : undefined,\n },\n status: inv.state === 'result' ? 'success' : 'pending',\n summary: `${inv.toolName}(${Object.keys(inv.args).join(', ')})`,\n input: inv.args,\n output: inv.result,\n };\n\n return {\n id,\n timestamp,\n entryType: { type: 'tool_call', toolCall },\n content: toolCall.summary,\n };\n }\n\n // If there's reasoning, create a thinking entry\n if (reasoning) {\n return {\n id,\n timestamp,\n entryType: { type: 'thinking' },\n content: reasoning,\n };\n }\n\n // Standard message types based on role\n if (role === 'user') {\n return {\n id,\n timestamp,\n entryType: { type: 'user_message' },\n content,\n };\n }\n\n if (role === 'assistant') {\n return {\n id,\n timestamp,\n entryType: { type: 'assistant_message' },\n content,\n };\n }\n\n if (role === 'system') {\n // System messages that look like errors\n if (content.startsWith('Error:')) {\n return {\n id,\n timestamp,\n entryType: { type: 'error', message: content.replace('Error: ', '') },\n content,\n };\n }\n // Otherwise treat as assistant message\n return {\n id,\n timestamp,\n entryType: { type: 'assistant_message' },\n content,\n };\n }\n\n if (role === 'data') {\n // Try to parse as widget\n try {\n const data = JSON.parse(content);\n if (data.widgetType) {\n return {\n id,\n timestamp,\n entryType: {\n type: 'widget',\n widgetType: data.widgetType,\n widgetData: data.widgetData,\n },\n content: '',\n };\n }\n } catch {\n // Not valid JSON, treat as assistant message\n }\n return {\n id,\n timestamp,\n entryType: { type: 'assistant_message' },\n content,\n };\n }\n\n // Default fallback\n return {\n id,\n timestamp,\n entryType: { type: 'assistant_message' },\n content,\n };\n}\n\n/**\n * Convert an array of NormalizedEntry to AI SDK Messages\n * Merges consecutive assistant entries (text + tool calls) into single messages\n */\nexport function normalizedEntriesToMessages(entries: NormalizedEntry[]): Message[] {\n const messages: Message[] = [];\n let currentAssistantMessage: Message | null = null;\n\n for (const entry of entries) {\n const message = normalizedEntryToMessage(entry);\n if (!message) continue;\n\n if (message.role === 'assistant') {\n // Check if we should merge with current assistant message\n if (currentAssistantMessage) {\n // Merge tool invocations\n if (message.toolInvocations) {\n currentAssistantMessage.toolInvocations = [\n ...(currentAssistantMessage.toolInvocations || []),\n ...message.toolInvocations,\n ];\n }\n // Merge content\n if (message.content) {\n currentAssistantMessage.content = currentAssistantMessage.content\n ? `${currentAssistantMessage.content}\\n${message.content}`\n : message.content;\n }\n // Merge reasoning\n if (message.reasoning) {\n currentAssistantMessage.reasoning = currentAssistantMessage.reasoning\n ? `${currentAssistantMessage.reasoning}\\n${message.reasoning}`\n : message.reasoning;\n }\n } else {\n currentAssistantMessage = { ...message };\n }\n } else {\n // Flush current assistant message\n if (currentAssistantMessage) {\n messages.push(currentAssistantMessage);\n currentAssistantMessage = null;\n }\n messages.push(message);\n }\n }\n\n // Flush any remaining assistant message\n if (currentAssistantMessage) {\n messages.push(currentAssistantMessage);\n }\n\n return messages;\n}\n\n/**\n * Convert AI SDK Messages back to NormalizedEntry array\n * Expands tool invocations into separate entries\n */\nexport function messagesToNormalizedEntries(messages: Message[]): NormalizedEntry[] {\n const entries: NormalizedEntry[] = [];\n\n for (const message of messages) {\n // If message has reasoning, add thinking entry first\n if (message.reasoning) {\n entries.push({\n id: `${message.id}-thinking`,\n timestamp: message.createdAt?.toISOString(),\n entryType: { type: 'thinking' },\n content: message.reasoning,\n });\n }\n\n // If message has content, add the content entry\n if (message.content || !message.toolInvocations?.length) {\n entries.push(messageToNormalizedEntry({\n ...message,\n toolInvocations: undefined,\n reasoning: undefined,\n }));\n }\n\n // Add separate entries for each tool invocation\n if (message.toolInvocations) {\n for (const inv of message.toolInvocations) {\n const toolMessage: Message = {\n id: inv.toolCallId,\n role: 'assistant',\n content: '',\n toolInvocations: [inv],\n createdAt: message.createdAt,\n };\n entries.push(messageToNormalizedEntry(toolMessage));\n }\n }\n }\n\n return entries;\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts"],"names":[],"mappings":"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","file":"types.cjs","sourcesContent":["/**\n * @ash-cloud/ash-ui - Types\n *\n * Normalized types for structured tool call display in agentic UIs.\n * These types provide a unified representation for displaying tool calls\n * with their arguments and results together.\n */\n\nimport type { ReactNode } from 'react';\n\n// =============================================================================\n// Tool Status\n// =============================================================================\n\n/**\n * Status of a tool call execution\n */\nexport type ToolStatus = 'pending' | 'success' | 'failed';\n\n// =============================================================================\n// Action-Specific Result Types\n// =============================================================================\n\n/**\n * Result from a command/bash execution\n */\nexport interface CommandRunResult {\n exitCode?: number;\n success?: boolean;\n output?: string;\n}\n\n/**\n * Generic tool result that can be markdown or structured JSON\n */\nexport interface ToolResult {\n type: 'markdown' | 'json';\n value: unknown;\n}\n\n// =============================================================================\n// Action Types (Discriminated Union)\n// =============================================================================\n\n/**\n * Bash/command execution action\n */\nexport interface CommandRunAction {\n action: 'command_run';\n command: string;\n description?: string;\n result?: CommandRunResult;\n}\n\n/**\n * File read action\n */\nexport interface FileReadAction {\n action: 'file_read';\n path: string;\n offset?: number;\n limit?: number;\n /** Number of lines read (for display) */\n linesRead?: number;\n}\n\n/**\n * File edit action\n */\nexport interface FileEditAction {\n action: 'file_edit';\n path: string;\n oldString?: string;\n newString?: string;\n replaceAll?: boolean;\n /** Number of lines added */\n linesAdded?: number;\n /** Number of lines removed */\n linesRemoved?: number;\n}\n\n/**\n * File write action\n */\nexport interface FileWriteAction {\n action: 'file_write';\n path: string;\n content?: string;\n /** Number of lines written */\n linesWritten?: number;\n}\n\n/**\n * Search/grep action\n */\nexport interface SearchAction {\n action: 'search';\n pattern: string;\n path?: string;\n glob?: string;\n type?: string;\n}\n\n/**\n * Glob/file pattern matching action\n */\nexport interface GlobAction {\n action: 'glob';\n pattern: string;\n path?: string;\n}\n\n/**\n * Web fetch action\n */\nexport interface WebFetchAction {\n action: 'web_fetch';\n url: string;\n prompt?: string;\n}\n\n/**\n * Web search action\n */\nexport interface WebSearchAction {\n action: 'web_search';\n query: string;\n}\n\n/**\n * MCP (Model Context Protocol) tool action\n */\nexport interface McpToolAction {\n action: 'mcp_tool';\n serverName: string;\n toolName: string;\n arguments?: unknown;\n result?: ToolResult;\n}\n\n/**\n * Generic/unknown tool action\n */\nexport interface GenericToolAction {\n action: 'generic_tool';\n toolName: string;\n arguments?: unknown;\n result?: ToolResult;\n}\n\n/**\n * Agent/Task tool action - represents a sub-agent that can have nested tool calls\n */\nexport interface AgentToolAction {\n action: 'agent_tool';\n /** Agent type (e.g., 'Explore', 'Plan', 'Bash', 'general-purpose') */\n agentType: string;\n /** Description of what the agent is doing */\n description: string;\n /** Full prompt given to the agent */\n prompt?: string;\n /** Nested tool calls made by this agent */\n nestedToolCalls?: NormalizedToolCall[];\n /** Current count of tool calls (updates during streaming) */\n toolCallCount?: number;\n /** When the agent started */\n startedAt?: string;\n /** When the agent completed */\n completedAt?: string;\n /** Result/output from the agent */\n result?: ToolResult;\n}\n\n// =============================================================================\n// Todo Types\n// =============================================================================\n\n/**\n * Status of a todo item\n */\nexport type TodoStatus = 'pending' | 'in_progress' | 'completed';\n\n/**\n * A single todo item from TodoWrite tool\n */\nexport interface TodoItem {\n /** Task content - imperative form (e.g., \"Run tests\") */\n content: string;\n /** Current status of the todo */\n status: TodoStatus;\n /** Active form shown during execution (e.g., \"Running tests\") */\n activeForm: string;\n}\n\n/**\n * TodoWrite tool action - tracks task progress\n */\nexport interface TodoWriteAction {\n action: 'todo_write';\n /** All todos in the current list */\n todos: TodoItem[];\n /** Summary statistics */\n stats?: {\n total: number;\n completed: number;\n inProgress: number;\n pending: number;\n };\n}\n\n/**\n * Discriminated union of all action types\n */\nexport type ActionType =\n | CommandRunAction\n | FileReadAction\n | FileEditAction\n | FileWriteAction\n | SearchAction\n | GlobAction\n | WebFetchAction\n | WebSearchAction\n | McpToolAction\n | GenericToolAction\n | TodoWriteAction\n | AgentToolAction;\n\n// =============================================================================\n// Normalized Tool Call\n// =============================================================================\n\n/**\n * A normalized tool call that combines tool_use and tool_result data\n */\nexport interface NormalizedToolCall {\n /** Unique ID from the tool_use block */\n id: string;\n\n /** Original tool name (e.g., 'Bash', 'Read', 'mcp__server__tool') */\n toolName: string;\n\n /** Parsed action type with structured arguments and result */\n actionType: ActionType;\n\n /** Current execution status */\n status: ToolStatus;\n\n /** Human-readable one-liner summary */\n summary: string;\n\n /** Raw input from tool_use event (for display in UI) */\n input?: unknown;\n\n /** Raw output/result from tool_result event (for display in UI) */\n output?: unknown;\n\n /** When the tool call started */\n startedAt?: string;\n\n /** When the tool call completed */\n completedAt?: string;\n\n /** Whether this tool call resulted in an error */\n isError?: boolean;\n\n /** Nested tool calls (for agent/sub-agent tools like Task) */\n nestedToolCalls?: NormalizedToolCall[];\n\n /** Current count of nested tool calls (updates during streaming) */\n nestedToolCallCount?: number;\n}\n\n// =============================================================================\n// Normalized Entry Types\n// =============================================================================\n\n/**\n * User message entry\n */\nexport interface UserMessageEntry {\n type: 'user_message';\n}\n\n/**\n * Assistant message entry\n */\nexport interface AssistantMessageEntry {\n type: 'assistant_message';\n}\n\n/**\n * Thinking/reasoning entry (extended thinking)\n */\nexport interface ThinkingEntry {\n type: 'thinking';\n}\n\n/**\n * Tool call entry with full tool call data\n */\nexport interface ToolCallEntry {\n type: 'tool_call';\n toolCall: NormalizedToolCall;\n}\n\n/**\n * Error entry\n */\nexport interface ErrorEntry {\n type: 'error';\n message: string;\n code?: string;\n}\n\n/**\n * Custom widget entry - rendered via consumer-provided render function\n *\n * Use this for interactive UI components like:\n * - Image grid selectors\n * - Product carousels\n * - Form inputs\n * - Data visualizations\n * - Any custom interactive widget\n *\n * @example\n * ```tsx\n * const entry: NormalizedEntry = {\n * id: 'widget-1',\n * entryType: {\n * type: 'widget',\n * widgetType: 'image-grid',\n * widgetData: { images: [...], selected: null },\n * },\n * content: 'Select an image',\n * };\n * ```\n */\nexport interface WidgetEntry {\n type: 'widget';\n /** Widget type identifier (e.g., 'image-grid', 'product-selector') */\n widgetType: string;\n /** Widget-specific data passed to the render function */\n widgetData: unknown;\n}\n\n/**\n * Discriminated union of all entry types\n */\nexport type NormalizedEntryType =\n | UserMessageEntry\n | AssistantMessageEntry\n | ThinkingEntry\n | ToolCallEntry\n | ErrorEntry\n | WidgetEntry;\n\n// =============================================================================\n// Normalized Entry\n// =============================================================================\n\n/**\n * A normalized conversation entry for display\n */\nexport interface NormalizedEntry {\n /** Unique entry ID */\n id: string;\n\n /** ISO timestamp */\n timestamp?: string;\n\n /** Entry type with type-specific data */\n entryType: NormalizedEntryType;\n\n /** Text content for display (plain text or markdown) */\n content: string;\n}\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport function isCommandRunAction(action: ActionType): action is CommandRunAction {\n return action.action === 'command_run';\n}\n\nexport function isFileReadAction(action: ActionType): action is FileReadAction {\n return action.action === 'file_read';\n}\n\nexport function isFileEditAction(action: ActionType): action is FileEditAction {\n return action.action === 'file_edit';\n}\n\nexport function isFileWriteAction(action: ActionType): action is FileWriteAction {\n return action.action === 'file_write';\n}\n\nexport function isSearchAction(action: ActionType): action is SearchAction {\n return action.action === 'search';\n}\n\nexport function isGlobAction(action: ActionType): action is GlobAction {\n return action.action === 'glob';\n}\n\nexport function isWebFetchAction(action: ActionType): action is WebFetchAction {\n return action.action === 'web_fetch';\n}\n\nexport function isWebSearchAction(action: ActionType): action is WebSearchAction {\n return action.action === 'web_search';\n}\n\nexport function isMcpToolAction(action: ActionType): action is McpToolAction {\n return action.action === 'mcp_tool';\n}\n\nexport function isGenericToolAction(action: ActionType): action is GenericToolAction {\n return action.action === 'generic_tool';\n}\n\nexport function isTodoWriteAction(action: ActionType): action is TodoWriteAction {\n return action.action === 'todo_write';\n}\n\nexport function isAgentToolAction(action: ActionType): action is AgentToolAction {\n return action.action === 'agent_tool';\n}\n\nexport function isToolCallEntry(entry: NormalizedEntryType): entry is ToolCallEntry {\n return entry.type === 'tool_call';\n}\n\nexport function isErrorEntry(entry: NormalizedEntryType): entry is ErrorEntry {\n return entry.type === 'error';\n}\n\nexport function isWidgetEntry(entry: NormalizedEntryType): entry is WidgetEntry {\n return entry.type === 'widget';\n}\n\n// =============================================================================\n// Widget Rendering\n// =============================================================================\n\n/**\n * Props passed to the widget render function\n */\nexport interface WidgetRenderProps<T = unknown> {\n /** The widget entry being rendered */\n entry: NormalizedEntry;\n /** Widget type identifier */\n widgetType: string;\n /** Widget-specific data */\n widgetData: T;\n /** Callback for widget interactions (e.g., selection, submit) */\n onAction?: (action: WidgetAction) => void;\n}\n\n/**\n * Action dispatched from a widget interaction\n */\nexport interface WidgetAction {\n /** Action type (e.g., 'select', 'submit', 'cancel') */\n type: string;\n /** Widget type that dispatched the action */\n widgetType: string;\n /** Entry ID of the widget */\n entryId: string;\n /** Action-specific payload */\n payload?: unknown;\n}\n\n/**\n * Function type for rendering custom widgets\n *\n * @example\n * ```tsx\n * const renderWidget: WidgetRenderFunction = ({ widgetType, widgetData, onAction }) => {\n * switch (widgetType) {\n * case 'image-grid':\n * return (\n * <ImageGrid\n * images={widgetData.images}\n * onSelect={(id) => onAction?.({ type: 'select', widgetType, entryId, payload: { id } })}\n * />\n * );\n * case 'product-selector':\n * return <ProductSelector data={widgetData} onAction={onAction} />;\n * default:\n * return null;\n * }\n * };\n *\n * <MessageList entries={entries} renderWidget={renderWidget} />\n * ```\n */\nexport type WidgetRenderFunction = (props: WidgetRenderProps) => ReactNode;\n\n// =============================================================================\n// Log Types (for SandboxLogsPanel)\n// =============================================================================\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug';\nexport type LogCategory = 'setup' | 'skills' | 'execution' | 'process' | 'startup';\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n category: LogCategory;\n message: string;\n data?: Record<string, unknown>;\n}\n\n// =============================================================================\n// File Attachment\n// =============================================================================\n\nexport interface FileAttachment {\n name: string;\n type: string;\n size: number;\n base64: string;\n}\n\n// =============================================================================\n// Rich Content (Mention Rendering)\n// =============================================================================\n\n/**\n * A plain text segment in rich content\n */\nexport interface RichTextSegment {\n type: 'text';\n content: string;\n}\n\n/**\n * A mention segment in rich content (e.g., @ProductX, @JohnDoe)\n */\nexport interface RichMentionSegment {\n type: 'mention';\n /** Display name for the mention */\n name: string;\n /** Optional color for the mention badge */\n color?: string;\n /** Optional avatar/icon URL */\n url?: string;\n /** Optional custom data (e.g., entity ID for click handling) */\n data?: Record<string, unknown>;\n}\n\n/**\n * A single segment of rich content\n */\nexport type RichContentSegment = RichTextSegment | RichMentionSegment;\n\n/**\n * Pre-parsed rich content array for custom rendering\n *\n * @example\n * ```tsx\n * const richContent: RichContent = [\n * { type: 'text', content: 'Check out ' },\n * { type: 'mention', name: 'ProductX', color: '#f59e0b', data: { id: 123 } },\n * { type: 'text', content: ' for details' },\n * ];\n * ```\n */\nexport type RichContent = RichContentSegment[];\n\n/**\n * Props for rendering a mention component\n */\nexport interface MentionProps {\n /** Display name for the mention */\n name: string;\n /** Optional color for the mention badge */\n color?: string;\n /** Optional avatar/icon URL */\n url?: string;\n /** Optional custom data (e.g., entity ID for click handling) */\n data?: Record<string, unknown>;\n}\n\n// =============================================================================\n// Display Mode Configuration\n// =============================================================================\n\n// =============================================================================\n// Theming & Customization\n// =============================================================================\n\n/**\n * Message visual style variant\n *\n * - 'bubble': Rounded card with padding and background (default for user messages)\n * - 'plain': No background, just text with subtle styling\n * - 'minimal': Bare text, no decoration\n */\nexport type MessageVariant = 'bubble' | 'plain' | 'minimal';\n\n/**\n * Typography scale/density preset\n *\n * - 'dense': Minimal spacing, smallest fonts (12px base) - for maximum information density\n * - 'compact': Tighter spacing, smaller fonts (13px base)\n * - 'default': Standard sizing (14px base)\n * - 'comfortable': More generous spacing (15px base)\n */\nexport type TypographyScale = 'dense' | 'compact' | 'default' | 'comfortable';\n\n/**\n * Message role for data attribute targeting\n */\nexport type MessageRole = 'user' | 'assistant' | 'thinking' | 'tool' | 'error' | 'widget';\n\n/**\n * Metadata to display with a message\n */\nexport interface MessageMetadata {\n /** Timestamp to display */\n timestamp?: string;\n /** Model name/info to display */\n model?: string;\n /** Custom label */\n label?: string;\n /** Any additional metadata */\n extra?: Record<string, unknown>;\n}\n\n/**\n * Function to render custom message metadata\n */\nexport type RenderMetadataFunction = (props: {\n entry: NormalizedEntry;\n metadata?: MessageMetadata;\n}) => ReactNode;\n\n/**\n * Custom markdown component overrides\n *\n * @example\n * ```tsx\n * const components: MarkdownComponents = {\n * h2: ({ children }) => <h2 className=\"custom-h2\">{children}</h2>,\n * code: ({ children, className }) => <CustomCode className={className}>{children}</CustomCode>,\n * };\n * ```\n */\nexport interface MarkdownComponents {\n h1?: React.ComponentType<{ children?: ReactNode }>;\n h2?: React.ComponentType<{ children?: ReactNode }>;\n h3?: React.ComponentType<{ children?: ReactNode }>;\n h4?: React.ComponentType<{ children?: ReactNode }>;\n h5?: React.ComponentType<{ children?: ReactNode }>;\n h6?: React.ComponentType<{ children?: ReactNode }>;\n p?: React.ComponentType<{ children?: ReactNode }>;\n a?: React.ComponentType<{ children?: ReactNode; href?: string }>;\n ul?: React.ComponentType<{ children?: ReactNode }>;\n ol?: React.ComponentType<{ children?: ReactNode }>;\n li?: React.ComponentType<{ children?: ReactNode }>;\n code?: React.ComponentType<{ children?: ReactNode; className?: string }>;\n pre?: React.ComponentType<{ children?: ReactNode }>;\n blockquote?: React.ComponentType<{ children?: ReactNode }>;\n strong?: React.ComponentType<{ children?: ReactNode }>;\n em?: React.ComponentType<{ children?: ReactNode }>;\n hr?: React.ComponentType<Record<string, never>>;\n img?: React.ComponentType<{ src?: string; alt?: string }>;\n table?: React.ComponentType<{ children?: ReactNode }>;\n thead?: React.ComponentType<{ children?: ReactNode }>;\n tbody?: React.ComponentType<{ children?: ReactNode }>;\n tr?: React.ComponentType<{ children?: ReactNode }>;\n th?: React.ComponentType<{ children?: ReactNode }>;\n td?: React.ComponentType<{ children?: ReactNode }>;\n}\n\n/**\n * Style configuration for message display\n */\nexport interface MessageStyleConfig {\n /** Variant for user messages */\n userVariant?: MessageVariant;\n /** Variant for assistant messages */\n assistantVariant?: MessageVariant;\n /** Typography/density scale */\n scale?: TypographyScale;\n /** Show timestamps with messages */\n showTimestamp?: boolean;\n /** Show avatars */\n showAvatars?: boolean;\n /** Custom class name for messages */\n messageClassName?: string;\n}\n\n/**\n * Default style configuration\n */\nexport const DEFAULT_STYLE_CONFIG: MessageStyleConfig = {\n userVariant: 'bubble',\n assistantVariant: 'bubble',\n scale: 'compact',\n showTimestamp: true,\n showAvatars: true,\n}\n\n// =============================================================================\n// AI SDK Compatible Types\n// =============================================================================\n\n/**\n * Tool invocation status - matches AI SDK ToolInvocation\n */\nexport type ToolInvocationState = 'partial-call' | 'call' | 'result';\n\n/**\n * Tool invocation - matches AI SDK ToolInvocation type\n */\nexport interface ToolInvocation {\n /** Tool invocation state */\n state: ToolInvocationState;\n /** Unique tool call ID */\n toolCallId: string;\n /** Tool name */\n toolName: string;\n /** Arguments passed to the tool (parsed JSON) */\n args: Record<string, unknown>;\n /** Result from tool execution (only present when state is 'result') */\n result?: unknown;\n}\n\n/**\n * AI SDK message role - matches AI SDK Message role\n */\nexport type AIMessageRole = 'user' | 'assistant' | 'system' | 'data';\n\n/**\n * AI SDK compatible message type\n * This is the primary type used by the new useChat hook\n */\nexport interface Message {\n /** Unique message ID */\n id: string;\n /** Message role */\n role: AIMessageRole;\n /** Message content (text) */\n content: string;\n /** Tool invocations for this message */\n toolInvocations?: ToolInvocation[];\n /** When the message was created */\n createdAt?: Date;\n /** Optional reasoning/thinking content */\n reasoning?: string;\n /** Experimental attachments (for file uploads) */\n experimental_attachments?: MessageAttachment[];\n}\n\n/**\n * Message attachment for file uploads\n */\nexport interface MessageAttachment {\n /** Attachment name */\n name: string;\n /** MIME type */\n contentType: string;\n /** URL to the attachment */\n url: string;\n}\n\n// =============================================================================\n// Type Conversion Functions\n// =============================================================================\n\n/**\n * Convert a NormalizedEntry to an AI SDK Message\n */\nexport function normalizedEntryToMessage(entry: NormalizedEntry): Message | null {\n const { id, entryType, content, timestamp } = entry;\n const createdAt = timestamp ? new Date(timestamp) : undefined;\n\n switch (entryType.type) {\n case 'user_message':\n return {\n id,\n role: 'user',\n content,\n createdAt,\n };\n\n case 'assistant_message':\n return {\n id,\n role: 'assistant',\n content,\n createdAt,\n };\n\n case 'thinking':\n // Thinking is represented as reasoning on the previous assistant message\n // Return as assistant message with reasoning\n return {\n id,\n role: 'assistant',\n content: '',\n reasoning: content,\n createdAt,\n };\n\n case 'tool_call': {\n const { toolCall } = entryType;\n const toolInvocation: ToolInvocation = {\n state: toolCall.status === 'pending' ? 'call' : 'result',\n toolCallId: toolCall.id,\n toolName: toolCall.toolName,\n args: (toolCall.input as Record<string, unknown>) || {},\n result: toolCall.output,\n };\n // Tool calls are attached to assistant messages\n return {\n id,\n role: 'assistant',\n content: '',\n toolInvocations: [toolInvocation],\n createdAt,\n };\n }\n\n case 'error':\n // Errors can be represented as system messages\n return {\n id,\n role: 'system',\n content: `Error: ${entryType.message}${entryType.code ? ` (${entryType.code})` : ''}`,\n createdAt,\n };\n\n case 'widget':\n // Widgets are data messages\n return {\n id,\n role: 'data',\n content: JSON.stringify({\n widgetType: entryType.widgetType,\n widgetData: entryType.widgetData,\n }),\n createdAt,\n };\n\n default:\n return null;\n }\n}\n\n/**\n * Convert an AI SDK Message to a NormalizedEntry\n */\nexport function messageToNormalizedEntry(message: Message): NormalizedEntry {\n const { id, role, content, createdAt, toolInvocations, reasoning } = message;\n const timestamp = createdAt?.toISOString();\n\n // If there are tool invocations, create tool call entries\n if (toolInvocations && toolInvocations.length > 0) {\n // For simplicity, take the first tool invocation\n // In practice, multiple tool invocations would need multiple entries\n const inv = toolInvocations[0]!;\n const toolCall: NormalizedToolCall = {\n id: inv.toolCallId,\n toolName: inv.toolName,\n actionType: {\n action: 'generic_tool',\n toolName: inv.toolName,\n arguments: inv.args,\n result: inv.result ? { type: 'json', value: inv.result } : undefined,\n },\n status: inv.state === 'result' ? 'success' : 'pending',\n summary: `${inv.toolName}(${Object.keys(inv.args).join(', ')})`,\n input: inv.args,\n output: inv.result,\n };\n\n return {\n id,\n timestamp,\n entryType: { type: 'tool_call', toolCall },\n content: toolCall.summary,\n };\n }\n\n // If there's reasoning, create a thinking entry\n if (reasoning) {\n return {\n id,\n timestamp,\n entryType: { type: 'thinking' },\n content: reasoning,\n };\n }\n\n // Standard message types based on role\n if (role === 'user') {\n return {\n id,\n timestamp,\n entryType: { type: 'user_message' },\n content,\n };\n }\n\n if (role === 'assistant') {\n return {\n id,\n timestamp,\n entryType: { type: 'assistant_message' },\n content,\n };\n }\n\n if (role === 'system') {\n // System messages that look like errors\n if (content.startsWith('Error:')) {\n return {\n id,\n timestamp,\n entryType: { type: 'error', message: content.replace('Error: ', '') },\n content,\n };\n }\n // Otherwise treat as assistant message\n return {\n id,\n timestamp,\n entryType: { type: 'assistant_message' },\n content,\n };\n }\n\n if (role === 'data') {\n // Try to parse as widget\n try {\n const data = JSON.parse(content);\n if (data.widgetType) {\n return {\n id,\n timestamp,\n entryType: {\n type: 'widget',\n widgetType: data.widgetType,\n widgetData: data.widgetData,\n },\n content: '',\n };\n }\n } catch {\n // Not valid JSON, treat as assistant message\n }\n return {\n id,\n timestamp,\n entryType: { type: 'assistant_message' },\n content,\n };\n }\n\n // Default fallback\n return {\n id,\n timestamp,\n entryType: { type: 'assistant_message' },\n content,\n };\n}\n\n/**\n * Convert an array of NormalizedEntry to AI SDK Messages\n * Merges consecutive assistant entries (text + tool calls) into single messages\n */\nexport function normalizedEntriesToMessages(entries: NormalizedEntry[]): Message[] {\n const messages: Message[] = [];\n let currentAssistantMessage: Message | null = null;\n\n for (const entry of entries) {\n const message = normalizedEntryToMessage(entry);\n if (!message) continue;\n\n if (message.role === 'assistant') {\n // Check if we should merge with current assistant message\n if (currentAssistantMessage) {\n // Merge tool invocations\n if (message.toolInvocations) {\n currentAssistantMessage.toolInvocations = [\n ...(currentAssistantMessage.toolInvocations || []),\n ...message.toolInvocations,\n ];\n }\n // Merge content\n if (message.content) {\n currentAssistantMessage.content = currentAssistantMessage.content\n ? `${currentAssistantMessage.content}\\n${message.content}`\n : message.content;\n }\n // Merge reasoning\n if (message.reasoning) {\n currentAssistantMessage.reasoning = currentAssistantMessage.reasoning\n ? `${currentAssistantMessage.reasoning}\\n${message.reasoning}`\n : message.reasoning;\n }\n } else {\n currentAssistantMessage = { ...message };\n }\n } else {\n // Flush current assistant message\n if (currentAssistantMessage) {\n messages.push(currentAssistantMessage);\n currentAssistantMessage = null;\n }\n messages.push(message);\n }\n }\n\n // Flush any remaining assistant message\n if (currentAssistantMessage) {\n messages.push(currentAssistantMessage);\n }\n\n return messages;\n}\n\n/**\n * Convert AI SDK Messages back to NormalizedEntry array\n * Expands tool invocations into separate entries\n */\nexport function messagesToNormalizedEntries(messages: Message[]): NormalizedEntry[] {\n const entries: NormalizedEntry[] = [];\n\n for (const message of messages) {\n // If message has reasoning, add thinking entry first\n if (message.reasoning) {\n entries.push({\n id: `${message.id}-thinking`,\n timestamp: message.createdAt?.toISOString(),\n entryType: { type: 'thinking' },\n content: message.reasoning,\n });\n }\n\n // If message has content, add the content entry\n if (message.content || !message.toolInvocations?.length) {\n entries.push(messageToNormalizedEntry({\n ...message,\n toolInvocations: undefined,\n reasoning: undefined,\n }));\n }\n\n // Add separate entries for each tool invocation\n if (message.toolInvocations) {\n for (const inv of message.toolInvocations) {\n const toolMessage: Message = {\n id: inv.toolCallId,\n role: 'assistant',\n content: '',\n toolInvocations: [inv],\n createdAt: message.createdAt,\n };\n entries.push(messageToNormalizedEntry(toolMessage));\n }\n }\n }\n\n return entries;\n}\n"]}
package/dist/types.d.cts CHANGED
@@ -369,6 +369,57 @@ interface FileAttachment {
369
369
  size: number;
370
370
  base64: string;
371
371
  }
372
+ /**
373
+ * A plain text segment in rich content
374
+ */
375
+ interface RichTextSegment {
376
+ type: 'text';
377
+ content: string;
378
+ }
379
+ /**
380
+ * A mention segment in rich content (e.g., @ProductX, @JohnDoe)
381
+ */
382
+ interface RichMentionSegment {
383
+ type: 'mention';
384
+ /** Display name for the mention */
385
+ name: string;
386
+ /** Optional color for the mention badge */
387
+ color?: string;
388
+ /** Optional avatar/icon URL */
389
+ url?: string;
390
+ /** Optional custom data (e.g., entity ID for click handling) */
391
+ data?: Record<string, unknown>;
392
+ }
393
+ /**
394
+ * A single segment of rich content
395
+ */
396
+ type RichContentSegment = RichTextSegment | RichMentionSegment;
397
+ /**
398
+ * Pre-parsed rich content array for custom rendering
399
+ *
400
+ * @example
401
+ * ```tsx
402
+ * const richContent: RichContent = [
403
+ * { type: 'text', content: 'Check out ' },
404
+ * { type: 'mention', name: 'ProductX', color: '#f59e0b', data: { id: 123 } },
405
+ * { type: 'text', content: ' for details' },
406
+ * ];
407
+ * ```
408
+ */
409
+ type RichContent = RichContentSegment[];
410
+ /**
411
+ * Props for rendering a mention component
412
+ */
413
+ interface MentionProps {
414
+ /** Display name for the mention */
415
+ name: string;
416
+ /** Optional color for the mention badge */
417
+ color?: string;
418
+ /** Optional avatar/icon URL */
419
+ url?: string;
420
+ /** Optional custom data (e.g., entity ID for click handling) */
421
+ data?: Record<string, unknown>;
422
+ }
372
423
  /**
373
424
  * Message visual style variant
374
425
  *
@@ -590,4 +641,4 @@ declare function normalizedEntriesToMessages(entries: NormalizedEntry[]): Messag
590
641
  */
591
642
  declare function messagesToNormalizedEntries(messages: Message[]): NormalizedEntry[];
592
643
 
593
- export { type AIMessageRole, type ActionType, type AgentToolAction, type AssistantMessageEntry, type CommandRunAction, type CommandRunResult, DEFAULT_STYLE_CONFIG, type ErrorEntry, type FileAttachment, type FileEditAction, type FileReadAction, type FileWriteAction, type GenericToolAction, type GlobAction, type LogCategory, type LogEntry, type LogLevel, type MarkdownComponents, type McpToolAction, type Message, type MessageAttachment, type MessageMetadata, type MessageRole, type MessageStyleConfig, type MessageVariant, type NormalizedEntry, type NormalizedEntryType, type NormalizedToolCall, type RenderMetadataFunction, type SearchAction, type ThinkingEntry, type TodoItem, type TodoStatus, type TodoWriteAction, type ToolCallEntry, type ToolInvocation, type ToolInvocationState, type ToolResult, type ToolStatus, type TypographyScale, type UserMessageEntry, type WebFetchAction, type WebSearchAction, type WidgetAction, type WidgetEntry, type WidgetRenderFunction, type WidgetRenderProps, isAgentToolAction, isCommandRunAction, isErrorEntry, isFileEditAction, isFileReadAction, isFileWriteAction, isGenericToolAction, isGlobAction, isMcpToolAction, isSearchAction, isTodoWriteAction, isToolCallEntry, isWebFetchAction, isWebSearchAction, isWidgetEntry, messageToNormalizedEntry, messagesToNormalizedEntries, normalizedEntriesToMessages, normalizedEntryToMessage };
644
+ export { type AIMessageRole, type ActionType, type AgentToolAction, type AssistantMessageEntry, type CommandRunAction, type CommandRunResult, DEFAULT_STYLE_CONFIG, type ErrorEntry, type FileAttachment, type FileEditAction, type FileReadAction, type FileWriteAction, type GenericToolAction, type GlobAction, type LogCategory, type LogEntry, type LogLevel, type MarkdownComponents, type McpToolAction, type MentionProps, type Message, type MessageAttachment, type MessageMetadata, type MessageRole, type MessageStyleConfig, type MessageVariant, type NormalizedEntry, type NormalizedEntryType, type NormalizedToolCall, type RenderMetadataFunction, type RichContent, type RichContentSegment, type RichMentionSegment, type RichTextSegment, type SearchAction, type ThinkingEntry, type TodoItem, type TodoStatus, type TodoWriteAction, type ToolCallEntry, type ToolInvocation, type ToolInvocationState, type ToolResult, type ToolStatus, type TypographyScale, type UserMessageEntry, type WebFetchAction, type WebSearchAction, type WidgetAction, type WidgetEntry, type WidgetRenderFunction, type WidgetRenderProps, isAgentToolAction, isCommandRunAction, isErrorEntry, isFileEditAction, isFileReadAction, isFileWriteAction, isGenericToolAction, isGlobAction, isMcpToolAction, isSearchAction, isTodoWriteAction, isToolCallEntry, isWebFetchAction, isWebSearchAction, isWidgetEntry, messageToNormalizedEntry, messagesToNormalizedEntries, normalizedEntriesToMessages, normalizedEntryToMessage };