From 1c0a3de4c0b4acab3cb86b157bd002564ff80b9c Mon Sep 17 00:00:00 2001 From: argenis de la rosa Date: Thu, 5 Mar 2026 14:40:19 -0500 Subject: [PATCH] feat(web): display ZeroClaw logo in dashboard sidebar - Replace electric-brand-mark placeholder with actual logo image - Update dist assets with new build Co-Authored-By: Claude Opus 4.6 --- web/dist/assets/index-CKdA0Apd.css | 1 - .../assets/{index-DsBWCyCx.js => index-CW3l40cv.js} | 2 +- web/dist/assets/index-twVS6v4N.css | 1 + web/dist/index.html | 4 ++-- web/src/components/layout/Sidebar.tsx | 12 +++++------- 5 files changed, 9 insertions(+), 11 deletions(-) delete mode 100644 web/dist/assets/index-CKdA0Apd.css rename web/dist/assets/{index-DsBWCyCx.js => index-CW3l40cv.js} (92%) create mode 100644 web/dist/assets/index-twVS6v4N.css diff --git a/web/dist/assets/index-CKdA0Apd.css b/web/dist/assets/index-CKdA0Apd.css deleted file mode 100644 index ff9aa8d54..000000000 --- a/web/dist/assets/index-CKdA0Apd.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.2.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-900:oklch(37.8% .077 168.94);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-900:oklch(38.1% .176 304.987);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-500:oklch(64.5% .246 16.439);--color-slate-500:oklch(55.4% .046 257.417);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-bounce:bounce 1s infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}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;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.right-2{right:calc(var(--spacing) * 2)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-auto{margin-top:auto}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-32{height:calc(var(--spacing) * 32)}.h-64{height:calc(var(--spacing) * 64)}.h-\[calc\(100dvh-8\.5rem\)\]{height:calc(100dvh - 8.5rem)}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[4\.5rem\]{min-height:4.5rem}.min-h-\[28rem\]{min-height:28rem}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing) * 0)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-20{width:calc(var(--spacing) * 20)}.w-\[86vw\]{width:86vw}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[17\.5rem\]{max-width:17.5rem}.max-w-\[75\%\]{max-width:75%}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-3{--tw-translate-x:calc(var(--spacing) * -3);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-1{--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-6{--tw-translate-x:calc(var(--spacing) * 6);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-0{rotate:none}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-bounce{animation:var(--animate-bounce)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[\#1a2d5e\]{border-color:#1a2d5e}.border-\[\#1a3670\]{border-color:#1a3670}.border-\[\#1b3670\]{border-color:#1b3670}.border-\[\#1b3770\]{border-color:#1b3770}.border-\[\#1d3770\]{border-color:#1d3770}.border-\[\#1e2f5d\]{border-color:#1e2f5d}.border-\[\#1e3a78\]{border-color:#1e3a78}.border-\[\#1f3d76\]{border-color:#1f3d76}.border-\[\#2b4f97\]{border-color:#2b4f97}.border-\[\#2c4e97\]{border-color:#2c4e97}.border-\[\#2f5ea0\]{border-color:#2f5ea0}.border-\[\#2f63c8\]{border-color:#2f63c8}.border-\[\#3a6de0\]{border-color:#3a6de0}.border-\[\#5f6080\]{border-color:#5f6080}.border-\[\#294a8f\]{border-color:#294a8f}.border-\[\#18356f\]{border-color:#18356f}.border-\[\#29509c\]{border-color:#29509c}.border-amber-400\/30{border-color:#fcbb004d}@supports (color:color-mix(in lab,red,red)){.border-amber-400\/30{border-color:color-mix(in oklab,var(--color-amber-400) 30%,transparent)}}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-700\/50{border-color:#1447e680}@supports (color:color-mix(in lab,red,red)){.border-blue-700\/50{border-color:color-mix(in oklab,var(--color-blue-700) 50%,transparent)}}.border-blue-700\/70{border-color:#1447e6b3}@supports (color:color-mix(in lab,red,red)){.border-blue-700\/70{border-color:color-mix(in oklab,var(--color-blue-700) 70%,transparent)}}.border-blue-800{border-color:var(--color-blue-800)}.border-blue-800\/50{border-color:#193cb880}@supports (color:color-mix(in lab,red,red)){.border-blue-800\/50{border-color:color-mix(in oklab,var(--color-blue-800) 50%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-emerald-700\/60{border-color:#00795699}@supports (color:color-mix(in lab,red,red)){.border-emerald-700\/60{border-color:color-mix(in oklab,var(--color-emerald-700) 60%,transparent)}}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-gray-800\/50{border-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.border-gray-800\/50{border-color:color-mix(in oklab,var(--color-gray-800) 50%,transparent)}}.border-green-700{border-color:var(--color-green-700)}.border-green-700\/40{border-color:#00813866}@supports (color:color-mix(in lab,red,red)){.border-green-700\/40{border-color:color-mix(in oklab,var(--color-green-700) 40%,transparent)}}.border-green-700\/50{border-color:#00813880}@supports (color:color-mix(in lab,red,red)){.border-green-700\/50{border-color:color-mix(in oklab,var(--color-green-700) 50%,transparent)}}.border-green-700\/70{border-color:#008138b3}@supports (color:color-mix(in lab,red,red)){.border-green-700\/70{border-color:color-mix(in oklab,var(--color-green-700) 70%,transparent)}}.border-green-800{border-color:var(--color-green-800)}.border-purple-700\/50{border-color:#8200da80}@supports (color:color-mix(in lab,red,red)){.border-purple-700\/50{border-color:color-mix(in oklab,var(--color-purple-700) 50%,transparent)}}.border-red-700{border-color:var(--color-red-700)}.border-red-700\/40{border-color:#bf000f66}@supports (color:color-mix(in lab,red,red)){.border-red-700\/40{border-color:color-mix(in oklab,var(--color-red-700) 40%,transparent)}}.border-red-700\/50{border-color:#bf000f80}@supports (color:color-mix(in lab,red,red)){.border-red-700\/50{border-color:color-mix(in oklab,var(--color-red-700) 50%,transparent)}}.border-rose-500\/35{border-color:#ff235759}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/35{border-color:color-mix(in oklab,var(--color-rose-500) 35%,transparent)}}.border-transparent{border-color:#0000}.border-yellow-700\/40{border-color:#a3610066}@supports (color:color-mix(in lab,red,red)){.border-yellow-700\/40{border-color:color-mix(in oklab,var(--color-yellow-700) 40%,transparent)}}.border-yellow-700\/50{border-color:#a3610080}@supports (color:color-mix(in lab,red,red)){.border-yellow-700\/50{border-color:color-mix(in oklab,var(--color-yellow-700) 50%,transparent)}}.border-yellow-800\/50{border-color:#874b0080}@supports (color:color-mix(in lab,red,red)){.border-yellow-800\/50{border-color:color-mix(in oklab,var(--color-yellow-800) 50%,transparent)}}.border-t-transparent{border-top-color:#0000}.bg-\[\#0a1b3f\]\/60{background-color:#0a1b3f99}.bg-\[\#0a265f\]\/70{background-color:#0a265fb3}.bg-\[\#0b2f80\]\/55{background-color:#0b2f808c}.bg-\[\#050b1a\]\/95{background-color:#050b1af2}.bg-\[\#060f25\]\/85{background-color:#060f25d9}.bg-\[\#071a41\]\/80{background-color:#071a41cc}.bg-\[\#05112c\]\/80{background-color:#05112ccc}.bg-\[\#05112c\]\/90{background-color:#05112ce6}.bg-\[\#07142f\]\/85{background-color:#07142fd9}.bg-\[\#061129\]\/85{background-color:#061129d9}.bg-\[\#061230\]{background-color:#061230}.bg-\[\#071228\]\/90{background-color:#071228e6}.bg-\[\#071328\]\/80{background-color:#071328cc}.bg-\[\#081637\]\/70{background-color:#081637b3}.bg-\[\#091937\]\/75{background-color:#091937bf}.bg-\[\#141731\]\/80{background-color:#141731cc}.bg-amber-400{background-color:var(--color-amber-400)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-600\/20{background-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.bg-blue-600\/20{background-color:color-mix(in oklab,var(--color-blue-600) 20%,transparent)}}.bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab,red,red)){.bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900) 30%,transparent)}}.bg-blue-900\/40{background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.bg-blue-900\/40{background-color:color-mix(in oklab,var(--color-blue-900) 40%,transparent)}}.bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900) 50%,transparent)}}.bg-blue-950\/30{background-color:#1624564d}@supports (color:color-mix(in lab,red,red)){.bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950) 30%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-900\/40{background-color:#004e3b66}@supports (color:color-mix(in lab,red,red)){.bg-emerald-900\/40{background-color:color-mix(in oklab,var(--color-emerald-900) 40%,transparent)}}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800) 50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/80{background-color:#101828cc}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900) 80%,transparent)}}.bg-gray-950{background-color:var(--color-gray-950)}.bg-gray-950\/50{background-color:#03071280}@supports (color:color-mix(in lab,red,red)){.bg-gray-950\/50{background-color:color-mix(in oklab,var(--color-gray-950) 50%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-green-600\/20{background-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/20{background-color:color-mix(in oklab,var(--color-green-600) 20%,transparent)}}.bg-green-900\/10{background-color:#0d542b1a}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900) 10%,transparent)}}.bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900) 30%,transparent)}}.bg-green-900\/40{background-color:#0d542b66}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/40{background-color:color-mix(in oklab,var(--color-green-900) 40%,transparent)}}.bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900) 50%,transparent)}}.bg-orange-600\/20{background-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.bg-orange-600\/20{background-color:color-mix(in oklab,var(--color-orange-600) 20%,transparent)}}.bg-purple-600\/20{background-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.bg-purple-600\/20{background-color:color-mix(in oklab,var(--color-purple-600) 20%,transparent)}}.bg-purple-900\/50{background-color:#59168b80}@supports (color:color-mix(in lab,red,red)){.bg-purple-900\/50{background-color:color-mix(in oklab,var(--color-purple-900) 50%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-900\/10{background-color:#82181a1a}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900) 10%,transparent)}}.bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/30{background-color:color-mix(in oklab,var(--color-red-900) 30%,transparent)}}.bg-red-900\/40{background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/40{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900) 50%,transparent)}}.bg-rose-500{background-color:var(--color-rose-500)}.bg-slate-500{background-color:var(--color-slate-500)}.bg-white{background-color:var(--color-white)}.bg-yellow-600{background-color:var(--color-yellow-600)}.bg-yellow-900\/10{background-color:#733e0a1a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/10{background-color:color-mix(in oklab,var(--color-yellow-900) 10%,transparent)}}.bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900) 20%,transparent)}}.bg-yellow-900\/30{background-color:#733e0a4d}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/30{background-color:color-mix(in oklab,var(--color-yellow-900) 30%,transparent)}}.bg-yellow-900\/40{background-color:#733e0a66}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/40{background-color:color-mix(in oklab,var(--color-yellow-900) 40%,transparent)}}.bg-yellow-900\/50{background-color:#733e0a80}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/50{background-color:color-mix(in oklab,var(--color-yellow-900) 50%,transparent)}}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[radial-gradient\(circle_at_15\%_30\%\,rgba\(41\,148\,255\,0\.22\)\,transparent_45\%\)\,radial-gradient\(circle_at_85\%_75\%\,rgba\(0\,209\,255\,0\.14\)\,transparent_40\%\)\]{background-image:radial-gradient(circle at 15% 30%,#2994ff38,#0000 45%),radial-gradient(circle at 85% 75%,#00d1ff24,#0000 40%)}.from-green-950\/20{--tw-gradient-from:#032e1533}@supports (color:color-mix(in lab,red,red)){.from-green-950\/20{--tw-gradient-from:color-mix(in oklab, var(--color-green-950) 20%, transparent)}}.from-green-950\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-gray-900{--tw-gradient-to:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-16{padding-right:calc(var(--spacing) * 16)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.03em\]{--tw-tracking:.03em;letter-spacing:.03em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.13em\]{--tw-tracking:.13em;letter-spacing:.13em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.35em\]{--tw-tracking:.35em;letter-spacing:.35em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#5f84cc\]{color:#5f84cc}.text-\[\#7ca6de\]{color:#7ca6de}.text-\[\#7ea5eb\]{color:#7ea5eb}.text-\[\#8aa8df\]{color:#8aa8df}.text-\[\#8baee7\]{color:#8baee7}.text-\[\#8bb9ff\]{color:#8bb9ff}.text-\[\#8eb8f4\]{color:#8eb8f4}.text-\[\#8fb8ff\]{color:#8fb8ff}.text-\[\#9bb7eb\]{color:#9bb7eb}.text-\[\#9bb8e8\]{color:#9bb8e8}.text-\[\#9bb8ec\]{color:#9bb8ec}.text-\[\#9bbce8\]{color:#9bbce8}.text-\[\#9ec2ff\]{color:#9ec2ff}.text-\[\#87a9e5\]{color:#87a9e5}.text-\[\#89a9df\]{color:#89a9df}.text-\[\#97baee\]{color:#97baee}.text-\[\#a7c4f3\]{color:#a7c4f3}.text-\[\#acd0ff\]{color:#acd0ff}.text-\[\#b3cbf8\]{color:#b3cbf8}.text-\[\#c2c5e8\]{color:#c2c5e8}.text-\[\#c4d8ff\]{color:#c4d8ff}.text-\[\#c8dcff\]{color:#c8dcff}.text-\[\#cfe3ff\]{color:#cfe3ff}.text-amber-300{color:var(--color-amber-300)}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-emerald-300{color:var(--color-emerald-300)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-rose-100{color:var(--color-rose-100)}.text-rose-200{color:var(--color-rose-200)}.text-rose-200\/90{color:#ffccd3e6}@supports (color:color-mix(in lab,red,red)){.text-rose-200\/90{color:color-mix(in oklab,var(--color-rose-200) 90%,transparent)}}.text-rose-300{color:var(--color-rose-300)}.text-white{color:var(--color-white)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-400\/70{color:#fac800b3}@supports (color:color-mix(in lab,red,red)){.text-yellow-400\/70{color:color-mix(in oklab,var(--color-yellow-400) 70%,transparent)}}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow-\[0_0_12px_0_rgba\(52\,211\,153\,0\.8\)\]{--tw-shadow:0 0 12px 0 var(--tw-shadow-color,#34d399cc);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_22px_-15px_rgba\(80\,176\,255\,0\.9\)\]{--tw-shadow:0 0 22px -15px var(--tw-shadow-color,#50b0ffe6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_30px_-16px_rgba\(72\,140\,255\,0\.95\)\]{--tw-shadow:0 0 30px -16px var(--tw-shadow-color,#488cfff2);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_50px_-25px_rgba\(8\,121\,255\,0\.7\)\]{--tw-shadow:0 0 50px -25px var(--tw-shadow-color,#0879ffb3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-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,);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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[grid-template-rows\,opacity\]{transition-property:grid-template-rows,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin-left\]{transition-property:margin-left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,transform\,width\]{transition-property:opacity,transform,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,transform\]{transition-property:width,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media(hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-\[\#4f83ff\]:hover{border-color:#4f83ff}.hover\:border-\[\#294a8d\]:hover{border-color:#294a8d}.hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.hover\:bg-\[\#07132f\]:hover{background-color:#07132f}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-blue-900\/50:hover{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-900\/50:hover{background-color:color-mix(in oklab,var(--color-blue-900) 50%,transparent)}}.hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\:bg-gray-800\/30:hover{background-color:#1e29394d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/30:hover{background-color:color-mix(in oklab,var(--color-gray-800) 30%,transparent)}}.hover\:bg-gray-800\/50:hover{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/50:hover{background-color:color-mix(in oklab,var(--color-gray-800) 50%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-yellow-700:hover{background-color:var(--color-yellow-700)}.hover\:text-blue-100:hover{color:var(--color-blue-100)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-gray-200:hover{color:var(--color-gray-200)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-\[\#4f83ff\]:focus{border-color:#4f83ff}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:bg-gray-700:disabled{background-color:var(--color-gray-700)}.disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}@media(min-width:40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:gap-1\.5{gap:calc(var(--spacing) * 1.5)}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:48rem){.md\:invisible{visibility:hidden}.md\:ml-\[6\.25rem\]{margin-left:6.25rem}.md\:ml-\[17\.5rem\]{margin-left:17.5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-\[6\.25rem\]{width:6.25rem}.md\:w-\[17\.5rem\]{width:17.5rem}.md\:w-auto{width:auto}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-nowrap{flex-wrap:nowrap}.md\:gap-3{gap:calc(var(--spacing) * 3)}:where(.md\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.md\:p-4{padding:calc(var(--spacing) * 4)}.md\:px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.md\:px-5{padding-inline:calc(var(--spacing) * 5)}.md\:px-8{padding-inline:calc(var(--spacing) * 8)}.md\:py-4{padding-block:calc(var(--spacing) * 4)}.md\:pt-8{padding-top:calc(var(--spacing) * 8)}.md\:text-center{text-align:center}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&_\.cm-content\]\:px-0 .cm-content{padding-inline:calc(var(--spacing) * 0)}.\[\&_\.cm-content\]\:py-4 .cm-content{padding-block:calc(var(--spacing) * 4)}.\[\&_\.cm-editor\]\:bg-gray-950 .cm-editor{background-color:var(--color-gray-950)}.\[\&_\.cm-editor\]\:focus\:outline-none .cm-editor:focus{--tw-outline-style:none;outline-style:none}.\[\&_\.cm-focused\]\:ring-2 .cm-focused{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&_\.cm-focused\]\:ring-blue-500\/70 .cm-focused{--tw-ring-color:#3080ffb3}@supports (color:color-mix(in lab,red,red)){.\[\&_\.cm-focused\]\:ring-blue-500\/70 .cm-focused{--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 70%, transparent)}}.\[\&_\.cm-focused\]\:ring-inset .cm-focused{--tw-ring-inset:inset}.\[\&_\.cm-gutters\]\:border-r .cm-gutters{border-right-style:var(--tw-border-style);border-right-width:1px}.\[\&_\.cm-gutters\]\:border-gray-800 .cm-gutters{border-color:var(--color-gray-800)}.\[\&_\.cm-gutters\]\:bg-gray-950 .cm-gutters{background-color:var(--color-gray-950)}.\[\&_\.cm-scroller\]\:font-mono .cm-scroller{font-family:var(--font-mono)}.\[\&_\.cm-scroller\]\:leading-6 .cm-scroller{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}}html{color-scheme:dark}body{color:#edf4ff;-webkit-font-smoothing:antialiased;text-rendering:geometricprecision;background:#020813;min-height:100dvh;margin:0;font-family:Sora,Manrope,Avenir Next,Segoe UI,sans-serif;overflow-x:hidden}#root{min-height:100dvh}.app-shell{isolation:isolate;background:radial-gradient(circle at 8% 5%,#2f8fff38,#0000 35%),radial-gradient(circle at 92% 14%,#00d1ff29,#0000 32%),linear-gradient(175deg,#020816,#03091b 46%,#040e24);position:relative}.app-shell:before,.app-shell:after{content:"";pointer-events:none;z-index:-1;position:fixed;top:0;right:0;bottom:0;left:0}.app-shell:before{opacity:.35;background-image:linear-gradient(#4c76c21a 1px,#0000 1px),linear-gradient(90deg,#4c76c21a 1px,#0000 1px);background-size:34px 34px;-webkit-mask-image:radial-gradient(circle at 50% 36%,#000 22%,#0000 80%);mask-image:radial-gradient(circle at 50% 36%,#000 22%,#0000 80%)}.app-shell:after{filter:blur(4px);background:radial-gradient(circle at 16% 86%,#2a80ff57,#0000 43%),radial-gradient(circle at 84% 22%,#00d4ff33,#0000 38%),radial-gradient(circle at 52% 122%,#2876ff4d,#0000 56%);animation:28s ease-in-out infinite appGlowDrift}.glass-header{-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:linear-gradient(160deg,#06132dd9,#050e21e6);position:relative;box-shadow:0 18px 32px -28px #4491fff2,inset 0 1px #8cb7ff24}.glass-header:after{content:"";border-radius:inherit;pointer-events:none;background:linear-gradient(105deg,#0000 10%,#4f9bff3d,#0000 70%);animation:7s ease-in-out infinite topGlowSweep;position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;transform:translate(-70%)}.hero-panel{background:radial-gradient(circle at 0 0,#388fff3d,#0000 40%),linear-gradient(146deg,#081a40f2,#040d22eb);border:1px solid #21438c;border-radius:1.25rem;padding:1.15rem 1.2rem;position:relative;overflow:hidden;box-shadow:inset 0 1px #82aeff29,0 22px 50px -38px #4091fff0}.hero-panel:after{content:"";pointer-events:none;background:linear-gradient(118deg,#0000,#80b8ff1f,#0000 70%);animation:5.8s ease-in-out infinite heroSweep;position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-62%)}.hero-panel:before{content:"";filter:blur(12px);pointer-events:none;background:radial-gradient(circle,#3fa7ff6b,#0000 70%);border-radius:999px;width:19rem;height:19rem;animation:4.8s ease-in-out infinite heroGlowPulse;position:absolute;top:-10rem;right:-6rem}.status-pill{color:#c2d9ff;text-transform:uppercase;letter-spacing:.12em;background:#061d4ead;border:1px solid #2d58ac;border-radius:999px;align-items:center;gap:.35rem;padding:.35rem .65rem;font-size:.68rem;display:inline-flex;box-shadow:0 0 22px -16px #5399fff2}.electric-brand-mark{background-blend-mode:screen;background:radial-gradient(circle at 22% 18%,#5ec8ff38,#1777ff24 52%,#0a48b52e),url(/logo/background.png) 50%/cover no-repeat;justify-content:center;align-items:center;display:flex;box-shadow:inset 0 1px #ffffff3d,0 10px 25px -12px #2982fff2}.electric-card{background:linear-gradient(165deg,#08183cf2,#040e22f5);border:1px solid #1a3670;border-radius:1rem;position:relative;overflow:hidden;box-shadow:inset 0 1px #81aeff1f,0 25px 45px -36px #2f8cfff2,0 0 0 1px #3f8dff33,0 0 26px -17px #4cb0ffd1}.electric-card:after{content:"";filter:blur(16px);opacity:.45;pointer-events:none;background:radial-gradient(circle,#3b94ff40,#0000 72%);border-radius:50%;height:72%;animation:5.2s ease-in-out infinite cardGlowPulse;position:absolute;bottom:-65%;left:-20%;right:-20%}.electric-icon{color:#9bc3ff;background:radial-gradient(circle at 35% 22%,#7bc6ff61,#1d5cd652 66%,#0c2c667a);border:1px solid #568fff73;justify-content:center;align-items:center;display:flex}.metric-head{color:#91b8fb;letter-spacing:.11em;text-transform:uppercase;background:#061636bd;border:1px solid #244991;border-radius:999px;align-items:center;gap:.4rem;padding:.3rem .55rem;font-size:.66rem;display:inline-flex}.metric-value{color:#fff;letter-spacing:.02em;font-size:clamp(1.15rem,1.8vw,1.45rem);font-weight:620}.metric-sub{color:#89aee8;font-size:.78rem}.metric-pill{background:#05112cdb;border:1px solid #1d3c77;border-radius:.85rem;padding:.6rem .72rem;box-shadow:0 0 0 1px #3e89ff29,0 16px 30px -24px #2f8cffdb,0 0 18px -15px #49b0ffc7}.metric-pill span{text-transform:uppercase;letter-spacing:.1em;color:#85a9e1;font-size:.68rem;display:block}.metric-pill strong{color:#f5f9ff;margin-top:.2rem;font-size:.93rem;display:block}.electric-progress{background:linear-gradient(90deg,#1f76ff,#2f97ff 60%,#48cdff);box-shadow:0 0 18px -7px #3ea6fff2}.pairing-shell{isolation:isolate;background:radial-gradient(circle at 20% 5%,#408dff3d,#0000 35%),radial-gradient(circle at 75% 92%,#00c1ff21,#0000 35%),linear-gradient(155deg,#020816,#030c20 58%,#030915);min-height:100dvh;position:relative;overflow:hidden}.pairing-shell:after{content:"";filter:blur(12px);opacity:.7;pointer-events:none;z-index:-1;background:radial-gradient(circle at 10% 20%,#54adff40,#0000 60%),radial-gradient(circle at 85% 80%,#00ccff38,#0000 60%);animation:18s ease-in-out infinite pairingSpotlightSweep;position:absolute;top:-20%;right:-20%;bottom:-20%;left:-20%}.pairing-card{background:linear-gradient(155deg,#091b44e6,#040f23f0);border:1px solid #2956a8;position:relative;overflow:hidden;box-shadow:inset 0 1px #92beff29,0 30px 60px -44px #2f8dfffa,0 0 0 1px #4396ff33,0 0 28px -18px #4cb8ffd1}.pairing-card:before{content:"";border-radius:inherit;mix-blend-mode:screen;opacity:0;pointer-events:none;background:linear-gradient(135deg,#0000 10%,#66baff80,#0000 80%);animation:7.5s ease-in-out infinite pairingCardSweep;position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;transform:translate(-65%)}.pairing-brand{color:#0000;text-shadow:0 0 14px #60bdffcc,0 0 32px #2e8affe6,0 0 42px #fcee93d9;letter-spacing:.18em;background-image:linear-gradient(120deg,#5bc0ff,#f9e775,#5bc0ff 56%,#f9e775);background-size:260% 260%;-webkit-background-clip:text;background-clip:text;animation:5.4s ease-in-out infinite pairingElectricCharge}:is(div,section,article)[class*=bg-gray-900][class*=rounded-xl][class*=border],:is(div,section,article)[class*=bg-gray-900][class*=rounded-lg][class*=border],:is(div,section,article)[class*=bg-gray-950][class*=rounded-lg][class*=border]{box-shadow:0 0 0 1px #4390ff24,0 22px 40px -32px #2d86ffdb,0 0 22px -16px #49b4ffbf}.electric-button{background:linear-gradient(126deg,#125bdf,#1f88ff 55%,#17b4ff);border:1px solid #4a89ff;transition:transform .18s,filter .18s,box-shadow .18s;box-shadow:0 18px 30px -20px #2f8dffe6}.electric-button:hover{filter:brightness(1.05);transform:translateY(-1px);box-shadow:0 20px 34px -19px #389afff2}.electric-loader{border:3px solid #5992ff38;border-top-color:#51abff;animation:1s linear infinite spin;box-shadow:0 0 20px -12px #429dff}.motion-rise{animation:.58s both riseIn}.motion-delay-1{animation-delay:70ms}.motion-delay-2{animation-delay:.13s}.motion-delay-3{animation-delay:.19s}.motion-delay-4{animation-delay:.25s}*{scrollbar-width:thin;scrollbar-color:#244787 #081126}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#081126}::-webkit-scrollbar-thumb{background:#244787;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#3160b6}:focus-visible{outline-offset:2px;outline:2px solid #4ea4ff}@keyframes riseIn{0%{opacity:0;transform:translateY(14px)scale(.985)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes heroSweep{0%,to{opacity:0;transform:translate(-68%)}30%{opacity:.65}60%{opacity:0;transform:translate(58%)}}@keyframes heroGlowPulse{0%,to{opacity:.38;transform:scale(.94)}50%{opacity:.72;transform:scale(1.08)}}@keyframes cardGlowPulse{0%,to{opacity:.28;transform:translateY(0)scale(.96)}50%{opacity:.55;transform:translateY(-2%)scale(1.04)}}@keyframes pairingElectricCharge{0%,to{text-shadow:0 0 14px #56b1ff80,0 0 32px #247cffb3,0 0 38px #fcee9399;background-position:0%;transform:translateY(0)scale(1)}35%{text-shadow:0 0 26px #8adaff,0 0 52px #38b0ff,0 0 60px #fcee93;background-position:80%;transform:translateY(-1px)scale(1.06)}60%{text-shadow:0 0 18px #56b1ffb3,0 0 36px #247cffcc,0 0 44px #fcee93b3;background-position:50%;transform:translateY(0)scale(1.02)}}@keyframes pairingSpotlightSweep{0%{opacity:.45;transform:translate(-12%,8%)scale(1)}30%{opacity:.7;transform:translate(10%,-4%)scale(1.06)}55%{opacity:.6;transform:translate(16%,10%)scale(1.1)}80%{opacity:.5;transform:translate(-8%,-6%)scale(1.04)}to{opacity:.45;transform:translate(-12%,8%)scale(1)}}@keyframes pairingCardSweep{0%,to{opacity:0;transform:translate(-70%)}25%{opacity:.55}50%{opacity:0;transform:translate(55%)}}@keyframes topGlowSweep{0%,to{opacity:0;transform:translate(-78%)}30%{opacity:.55}58%{opacity:0;transform:translate(58%)}}@keyframes appGlowDrift{0%{opacity:.3;transform:translate(-3%,1.8%)scale(1)}25%{opacity:.5;transform:translate(2.6%,-1.2%)scale(1.04)}50%{opacity:.56;transform:translate(4.4%,-3.4%)scale(1.09)}75%{opacity:.44;transform:translate(-1.8%,-2.1%)scale(1.05)}to{opacity:.34;transform:translate(-3.6%,2.6%)scale(1.01)}}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:768px){.hero-panel{padding:.95rem}.status-pill{letter-spacing:.1em;padding:.28rem .52rem;font-size:.61rem}.metric-value{font-size:1.08rem}.metric-sub{font-size:.74rem}.electric-card{border-radius:.9rem}}@media(prefers-reduced-motion:reduce){.hero-panel:after,.hero-panel:before,.glass-header:after,.electric-card:after,.app-shell:after,.pairing-shell:after,.pairing-card:before,.motion-rise,.electric-loader{animation:none!important}.electric-button{transition:none!important}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@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}} diff --git a/web/dist/assets/index-DsBWCyCx.js b/web/dist/assets/index-CW3l40cv.js similarity index 92% rename from web/dist/assets/index-DsBWCyCx.js rename to web/dist/assets/index-CW3l40cv.js index 9780e993b..41b4e2ff3 100644 --- a/web/dist/assets/index-DsBWCyCx.js +++ b/web/dist/assets/index-CW3l40cv.js @@ -477,7 +477,7 @@ Please change the parent to 0)return os;const n=sT(Gi);if(n&&n.length>0)return os=n,n;try{const e=localStorage.getItem(Gi);if(e&&e.length>0)return os=e,F2(Gi,e),localStorage.removeItem(Gi),e}catch{}return null}function Q2(n){os=n,F2(Gi,n),X2(Gi)}function Z2(){os=null,aT(Gi),X2(Gi)}function nm(){const n=Ca();return n!==null&&n.length>0}class rT extends Error{constructor(){super("Unauthorized"),this.name="UnauthorizedError"}}async function Rt(n,e={}){const t=Ca(),i=new Headers(e.headers);t&&i.set("Authorization",`Bearer ${t}`),e.body&&typeof e.body=="string"&&!i.has("Content-Type")&&i.set("Content-Type","application/json");const s=await fetch(n,{...e,headers:i});if(s.status===401)throw Z2(),window.dispatchEvent(new Event("zeroclaw-unauthorized")),new rT;if(!s.ok){const r=await s.text().catch(()=>"");throw new Error(`API ${s.status}: ${r||s.statusText}`)}if(s.status!==204)return s.json()}function ws(n,e){if(n!==null&&typeof n=="object"&&!Array.isArray(n)&&e in n){const t=n[e];if(t!==void 0)return t}return n}async function oT(n){const e=await fetch("/pair",{method:"POST",headers:{"X-Pairing-Code":n}});if(!e.ok){const i=await e.text().catch(()=>"");throw new Error(`Pairing failed (${e.status}): ${i||e.statusText}`)}const t=await e.json();return Q2(t.token),t}async function cT(){const n=await fetch("/health");if(!n.ok)throw new Error(`Health check failed (${n.status})`);return n.json()}function $2(){return Rt("/api/status")}function uT(){return Rt("/api/config").then(n=>typeof n=="string"?n:n.content)}function hT(n){return Rt("/api/config",{method:"PUT",headers:{"Content-Type":"application/toml"},body:n})}function fT(){return Rt("/api/tools").then(n=>ws(n,"tools"))}function dT(){return Rt("/api/cron").then(n=>ws(n,"jobs"))}function mT(n){return Rt("/api/cron",{method:"POST",body:JSON.stringify(n)}).then(e=>typeof e.job=="object"?e.job:e)}function pT(n){return Rt(`/api/cron/${encodeURIComponent(n)}`,{method:"DELETE"})}function gT(){return Rt("/api/integrations").then(n=>ws(n,"integrations"))}function yT(){return Rt("/api/integrations/settings")}function ax(n,e){return Rt(`/api/integrations/${encodeURIComponent(n)}/credentials`,{method:"PUT",body:JSON.stringify(e)})}function bT(){return Rt("/api/doctor",{method:"POST",body:JSON.stringify({})}).then(n=>Array.isArray(n)?n:n.results)}function xT(n,e){const t=new URLSearchParams;n&&t.set("query",n),e&&t.set("category",e);const i=t.toString();return Rt(`/api/memory${i?`?${i}`:""}`).then(s=>ws(s,"entries"))}function vT(n,e,t){return Rt("/api/memory",{method:"POST",body:JSON.stringify({key:n,content:e,category:t})}).then(()=>{})}function wT(n){return Rt(`/api/memory/${encodeURIComponent(n)}`,{method:"DELETE"})}function ST(){return Rt("/api/pairing/devices").then(n=>ws(n,"devices"))}function kT(n){return Rt(`/api/pairing/devices/${encodeURIComponent(n)}`,{method:"DELETE"})}function J2(){return Rt("/api/cost").then(n=>ws(n,"cost"))}function CT(){return Rt("/api/cli-tools").then(n=>ws(n,"cli_tools"))}const im=["en","zh-CN","ja","ru","fr","vi","el"],AT={en:"EN",tr:"TR","zh-CN":"简体",ja:"日本語",ru:"РУ",fr:"FR",vi:"VI",el:"ΕΛ"},MT=["en","tr","zh-CN","ja","ru","fr","vi","el"],rx={en:{"nav.dashboard":"Dashboard","nav.agent":"Agent","nav.tools":"Tools","nav.cron":"Scheduled Jobs","nav.integrations":"Integrations","nav.memory":"Memory","nav.devices":"Devices","nav.config":"Configuration","nav.cost":"Cost Tracker","nav.logs":"Logs","nav.doctor":"Doctor","dashboard.title":"Dashboard","dashboard.provider":"Provider","dashboard.model":"Model","dashboard.uptime":"Uptime","dashboard.temperature":"Temperature","dashboard.gateway_port":"Gateway Port","dashboard.locale":"Locale","dashboard.memory_backend":"Memory Backend","dashboard.paired":"Paired","dashboard.channels":"Channels","dashboard.health":"Health","dashboard.status":"Status","dashboard.overview":"Overview","dashboard.system_info":"System Information","dashboard.quick_actions":"Quick Actions","agent.title":"Agent Chat","agent.send":"Send","agent.placeholder":"Type a message...","agent.connecting":"Connecting...","agent.connected":"Connected","agent.disconnected":"Disconnected","agent.reconnecting":"Reconnecting...","agent.thinking":"Thinking...","agent.tool_call":"Tool Call","agent.tool_result":"Tool Result","tools.title":"Available Tools","tools.name":"Name","tools.description":"Description","tools.parameters":"Parameters","tools.search":"Search tools...","tools.empty":"No tools available.","tools.count":"Total tools","cron.title":"Scheduled Jobs","cron.add":"Add Job","cron.delete":"Delete","cron.enable":"Enable","cron.disable":"Disable","cron.name":"Name","cron.command":"Command","cron.schedule":"Schedule","cron.next_run":"Next Run","cron.last_run":"Last Run","cron.last_status":"Last Status","cron.enabled":"Enabled","cron.empty":"No scheduled jobs.","cron.confirm_delete":"Are you sure you want to delete this job?","integrations.title":"Integrations","integrations.available":"Available","integrations.active":"Active","integrations.coming_soon":"Coming Soon","integrations.category":"Category","integrations.status":"Status","integrations.search":"Search integrations...","integrations.empty":"No integrations found.","integrations.activate":"Activate","integrations.deactivate":"Deactivate","memory.title":"Memory Store","memory.search":"Search memory...","memory.add":"Store Memory","memory.delete":"Delete","memory.key":"Key","memory.content":"Content","memory.category":"Category","memory.timestamp":"Timestamp","memory.session":"Session","memory.score":"Score","memory.empty":"No memory entries found.","memory.confirm_delete":"Are you sure you want to delete this memory entry?","memory.all_categories":"All Categories","config.title":"Configuration","config.save":"Save","config.reset":"Reset","config.saved":"Configuration saved successfully.","config.error":"Failed to save configuration.","config.loading":"Loading configuration...","config.editor_placeholder":"TOML configuration...","cost.title":"Cost Tracker","cost.session":"Session Cost","cost.daily":"Daily Cost","cost.monthly":"Monthly Cost","cost.total_tokens":"Total Tokens","cost.request_count":"Requests","cost.by_model":"Cost by Model","cost.model":"Model","cost.tokens":"Tokens","cost.requests":"Requests","cost.usd":"Cost (USD)","logs.title":"Live Logs","logs.clear":"Clear","logs.pause":"Pause","logs.resume":"Resume","logs.filter":"Filter logs...","logs.empty":"No log entries.","logs.connected":"Connected to event stream.","logs.disconnected":"Disconnected from event stream.","doctor.title":"System Diagnostics","doctor.run":"Run Diagnostics","doctor.running":"Running diagnostics...","doctor.ok":"OK","doctor.warn":"Warning","doctor.error":"Error","doctor.severity":"Severity","doctor.category":"Category","doctor.message":"Message","doctor.empty":"No diagnostics have been run yet.","doctor.summary":"Diagnostic Summary","auth.pair":"Pair Device","auth.pairing_code":"Pairing Code","auth.pair_button":"Pair","auth.logout":"Logout","auth.pairing_success":"Pairing successful!","auth.pairing_failed":"Pairing failed. Please try again.","auth.enter_code":"Enter your pairing code to connect to the agent.","common.loading":"Loading...","common.error":"An error occurred.","common.retry":"Retry","common.cancel":"Cancel","common.confirm":"Confirm","common.save":"Save","common.delete":"Delete","common.edit":"Edit","common.close":"Close","common.yes":"Yes","common.no":"No","common.search":"Search...","common.no_data":"No data available.","common.refresh":"Refresh","common.back":"Back","common.actions":"Actions","common.name":"Name","common.description":"Description","common.status":"Status","common.created":"Created","common.updated":"Updated","health.title":"System Health","health.component":"Component","health.status":"Status","health.last_ok":"Last OK","health.last_error":"Last Error","health.restart_count":"Restarts","health.pid":"Process ID","health.uptime":"Uptime","health.updated_at":"Last Updated"},tr:{"nav.dashboard":"Kontrol Paneli","nav.agent":"Ajan","nav.tools":"Araclar","nav.cron":"Zamanlanmis Gorevler","nav.integrations":"Entegrasyonlar","nav.memory":"Hafiza","nav.devices":"Cihazlar","nav.config":"Yapilandirma","nav.cost":"Maliyet Takibi","nav.logs":"Kayitlar","nav.doctor":"Doktor","dashboard.title":"Kontrol Paneli","dashboard.provider":"Saglayici","dashboard.model":"Model","dashboard.uptime":"Calisma Suresi","dashboard.temperature":"Sicaklik","dashboard.gateway_port":"Gecit Portu","dashboard.locale":"Yerel Ayar","dashboard.memory_backend":"Hafiza Motoru","dashboard.paired":"Eslestirilmis","dashboard.channels":"Kanallar","dashboard.health":"Saglik","dashboard.status":"Durum","dashboard.overview":"Genel Bakis","dashboard.system_info":"Sistem Bilgisi","dashboard.quick_actions":"Hizli Islemler","agent.title":"Ajan Sohbet","agent.send":"Gonder","agent.placeholder":"Bir mesaj yazin...","agent.connecting":"Baglaniyor...","agent.connected":"Bagli","agent.disconnected":"Baglanti Kesildi","agent.reconnecting":"Yeniden Baglaniyor...","agent.thinking":"Dusunuyor...","agent.tool_call":"Arac Cagrisi","agent.tool_result":"Arac Sonucu","tools.title":"Mevcut Araclar","tools.name":"Ad","tools.description":"Aciklama","tools.parameters":"Parametreler","tools.search":"Arac ara...","tools.empty":"Mevcut arac yok.","tools.count":"Toplam arac","cron.title":"Zamanlanmis Gorevler","cron.add":"Gorev Ekle","cron.delete":"Sil","cron.enable":"Etkinlestir","cron.disable":"Devre Disi Birak","cron.name":"Ad","cron.command":"Komut","cron.schedule":"Zamanlama","cron.next_run":"Sonraki Calistirma","cron.last_run":"Son Calistirma","cron.last_status":"Son Durum","cron.enabled":"Etkin","cron.empty":"Zamanlanmis gorev yok.","cron.confirm_delete":"Bu gorevi silmek istediginizden emin misiniz?","integrations.title":"Entegrasyonlar","integrations.available":"Mevcut","integrations.active":"Aktif","integrations.coming_soon":"Yakinda","integrations.category":"Kategori","integrations.status":"Durum","integrations.search":"Entegrasyon ara...","integrations.empty":"Entegrasyon bulunamadi.","integrations.activate":"Etkinlestir","integrations.deactivate":"Devre Disi Birak","memory.title":"Hafiza Deposu","memory.search":"Hafizada ara...","memory.add":"Hafiza Kaydet","memory.delete":"Sil","memory.key":"Anahtar","memory.content":"Icerik","memory.category":"Kategori","memory.timestamp":"Zaman Damgasi","memory.session":"Oturum","memory.score":"Skor","memory.empty":"Hafiza kaydi bulunamadi.","memory.confirm_delete":"Bu hafiza kaydini silmek istediginizden emin misiniz?","memory.all_categories":"Tum Kategoriler","config.title":"Yapilandirma","config.save":"Kaydet","config.reset":"Sifirla","config.saved":"Yapilandirma basariyla kaydedildi.","config.error":"Yapilandirma kaydedilemedi.","config.loading":"Yapilandirma yukleniyor...","config.editor_placeholder":"TOML yapilandirmasi...","cost.title":"Maliyet Takibi","cost.session":"Oturum Maliyeti","cost.daily":"Gunluk Maliyet","cost.monthly":"Aylik Maliyet","cost.total_tokens":"Toplam Token","cost.request_count":"Istekler","cost.by_model":"Modele Gore Maliyet","cost.model":"Model","cost.tokens":"Token","cost.requests":"Istekler","cost.usd":"Maliyet (USD)","logs.title":"Canli Kayitlar","logs.clear":"Temizle","logs.pause":"Duraklat","logs.resume":"Devam Et","logs.filter":"Kayitlari filtrele...","logs.empty":"Kayit girisi yok.","logs.connected":"Olay akisina baglandi.","logs.disconnected":"Olay akisi baglantisi kesildi.","doctor.title":"Sistem Teshisleri","doctor.run":"Teshis Calistir","doctor.running":"Teshisler calistiriliyor...","doctor.ok":"Tamam","doctor.warn":"Uyari","doctor.error":"Hata","doctor.severity":"Ciddiyet","doctor.category":"Kategori","doctor.message":"Mesaj","doctor.empty":"Henuz teshis calistirilmadi.","doctor.summary":"Teshis Ozeti","auth.pair":"Cihaz Esle","auth.pairing_code":"Eslestirme Kodu","auth.pair_button":"Esle","auth.logout":"Cikis Yap","auth.pairing_success":"Eslestirme basarili!","auth.pairing_failed":"Eslestirme basarisiz. Lutfen tekrar deneyin.","auth.enter_code":"Ajana baglanmak icin eslestirme kodunuzu girin.","common.loading":"Yukleniyor...","common.error":"Bir hata olustu.","common.retry":"Tekrar Dene","common.cancel":"Iptal","common.confirm":"Onayla","common.save":"Kaydet","common.delete":"Sil","common.edit":"Duzenle","common.close":"Kapat","common.yes":"Evet","common.no":"Hayir","common.search":"Ara...","common.no_data":"Veri mevcut degil.","common.refresh":"Yenile","common.back":"Geri","common.actions":"Islemler","common.name":"Ad","common.description":"Aciklama","common.status":"Durum","common.created":"Olusturulma","common.updated":"Guncellenme","health.title":"Sistem Sagligi","health.component":"Bilesen","health.status":"Durum","health.last_ok":"Son Basarili","health.last_error":"Son Hata","health.restart_count":"Yeniden Baslatmalar","health.pid":"Islem Kimligi","health.uptime":"Calisma Suresi","health.updated_at":"Son Guncelleme"},"zh-CN":{"nav.dashboard":"仪表盘","nav.agent":"智能体","nav.tools":"工具","nav.cron":"定时任务","nav.integrations":"集成","nav.memory":"记忆","nav.devices":"设备","nav.config":"配置","nav.cost":"成本追踪","nav.logs":"日志","nav.doctor":"诊断","dashboard.title":"仪表盘","dashboard.provider":"提供商","dashboard.model":"模型","dashboard.uptime":"运行时长","dashboard.temperature":"温度","dashboard.gateway_port":"网关端口","dashboard.locale":"语言区域","dashboard.memory_backend":"记忆后端","dashboard.paired":"已配对","dashboard.channels":"渠道","dashboard.health":"健康状态","dashboard.status":"状态","dashboard.overview":"总览","dashboard.system_info":"系统信息","dashboard.quick_actions":"快捷操作","agent.title":"智能体聊天","agent.send":"发送","agent.placeholder":"输入消息...","agent.connecting":"连接中...","agent.connected":"已连接","agent.disconnected":"已断开连接","agent.reconnecting":"重连中...","agent.thinking":"思考中...","agent.tool_call":"工具调用","agent.tool_result":"工具结果","tools.title":"可用工具","tools.name":"名称","tools.description":"描述","tools.parameters":"参数","tools.search":"搜索工具...","tools.empty":"暂无可用工具。","tools.count":"工具总数","cron.title":"定时任务","cron.add":"添加任务","cron.delete":"删除","cron.enable":"启用","cron.disable":"禁用","cron.name":"名称","cron.command":"命令","cron.schedule":"计划","cron.next_run":"下次运行","cron.last_run":"上次运行","cron.last_status":"上次状态","cron.enabled":"已启用","cron.empty":"暂无定时任务。","cron.confirm_delete":"确定要删除此任务吗?","integrations.title":"集成","integrations.available":"可用","integrations.active":"已激活","integrations.coming_soon":"即将推出","integrations.category":"分类","integrations.status":"状态","integrations.search":"搜索集成...","integrations.empty":"未找到集成。","integrations.activate":"激活","integrations.deactivate":"停用","memory.title":"记忆存储","memory.search":"搜索记忆...","memory.add":"存储记忆","memory.delete":"删除","memory.key":"键","memory.content":"内容","memory.category":"分类","memory.timestamp":"时间戳","memory.session":"会话","memory.score":"评分","memory.empty":"未找到记忆条目。","memory.confirm_delete":"确定要删除此记忆条目吗?","memory.all_categories":"全部分类","config.title":"配置","config.save":"保存","config.reset":"重置","config.saved":"配置保存成功。","config.error":"配置保存失败。","config.loading":"配置加载中...","config.editor_placeholder":"TOML 配置...","cost.title":"成本追踪","cost.session":"会话成本","cost.daily":"每日成本","cost.monthly":"每月成本","cost.total_tokens":"Token 总数","cost.request_count":"请求数","cost.by_model":"按模型统计成本","cost.model":"模型","cost.tokens":"Token","cost.requests":"请求","cost.usd":"成本(USD)","logs.title":"实时日志","logs.clear":"清空","logs.pause":"暂停","logs.resume":"继续","logs.filter":"筛选日志...","logs.empty":"暂无日志条目。","logs.connected":"已连接到事件流。","logs.disconnected":"与事件流断开连接。","doctor.title":"系统诊断","doctor.run":"运行诊断","doctor.running":"正在运行诊断...","doctor.ok":"正常","doctor.warn":"警告","doctor.error":"错误","doctor.severity":"严重级别","doctor.category":"分类","doctor.message":"消息","doctor.empty":"尚未运行诊断。","doctor.summary":"诊断摘要","auth.pair":"设备配对","auth.pairing_code":"配对码","auth.pair_button":"配对","auth.logout":"退出登录","auth.pairing_success":"配对成功!","auth.pairing_failed":"配对失败,请重试。","auth.enter_code":"输入配对码以连接到智能体。","common.loading":"加载中...","common.error":"发生错误。","common.retry":"重试","common.cancel":"取消","common.confirm":"确认","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.close":"关闭","common.yes":"是","common.no":"否","common.search":"搜索...","common.no_data":"暂无数据。","common.refresh":"刷新","common.back":"返回","common.actions":"操作","common.name":"名称","common.description":"描述","common.status":"状态","common.created":"创建时间","common.updated":"更新时间","health.title":"系统健康","health.component":"组件","health.status":"状态","health.last_ok":"最近正常","health.last_error":"最近错误","health.restart_count":"重启次数","health.pid":"进程 ID","health.uptime":"运行时长","health.updated_at":"最后更新"},ja:{},ru:{},fr:{},vi:{},el:{}};let ew="en";function TT(n){ew=n}function Vu(n){var e;return((e=rx[ew])==null?void 0:e[n])??rx.en[n]??n}function ox(n){if(!n)return"en";if(MT.includes(n))return n;const e=n.toLowerCase();return e.startsWith("tr")?"tr":e==="zh"||e.startsWith("zh-")?"zh-CN":e==="ja"||e.startsWith("ja-")?"ja":e==="ru"||e.startsWith("ru-")?"ru":e==="fr"||e.startsWith("fr-")?"fr":e==="vi"||e.startsWith("vi-")?"vi":e==="el"||e.startsWith("el-")?"el":"en"}const NT=1e3,ET=[{to:"/",icon:R3,labelKey:"nav.dashboard"},{to:"/agent",icon:z3,labelKey:"nav.agent"},{to:"/tools",icon:W2,labelKey:"nav.tools"},{to:"/cron",icon:no,labelKey:"nav.cron"},{to:"/integrations",icon:io,labelKey:"nav.integrations"},{to:"/memory",icon:Vm,labelKey:"nav.memory"},{to:"/devices",icon:I2,labelKey:"nav.devices"},{to:"/config",icon:Zp,labelKey:"nav.config"},{to:"/cost",icon:dh,labelKey:"nav.cost"},{to:"/logs",icon:Hu,labelKey:"nav.logs"},{to:"/doctor",icon:Pm,labelKey:"nav.doctor"}];function DT({isOpen:n,isCollapsed:e,onClose:t,onToggleCollapse:i}){const[s,r]=M.useState(!1);return M.useEffect(()=>{const o=setTimeout(()=>r(!0),NT);return()=>clearTimeout(o)},[]),y.jsxs(y.Fragment,{children:[y.jsx("button",{type:"button","aria-label":"Close navigation",onClick:t,className:["fixed inset-0 z-30 bg-black/50 transition-opacity md:hidden",n?"opacity-100":"pointer-events-none opacity-0"].join(" ")}),y.jsxs("aside",{className:["fixed left-0 top-0 z-40 flex h-screen w-[86vw] max-w-[17.5rem] flex-col border-r border-[#1e2f5d] bg-[#050b1a]/95 backdrop-blur-xl","shadow-[0_0_50px_-25px_rgba(8,121,255,0.7)]","transform transition-[width,transform] duration-300 ease-out",n?"translate-x-0":"-translate-x-full",e?"md:w-[6.25rem]":"md:w-[17.5rem]","md:translate-x-0"].join(" "),children:[y.jsxs("div",{className:"relative flex items-center justify-between border-b border-[#1a2d5e] px-4 py-4",children:[y.jsx("div",{className:"flex items-center gap-3 overflow-hidden",children:!e&&y.jsxs(y.Fragment,{children:[y.jsx("div",{className:"electric-brand-mark h-9 w-9 shrink-0 rounded-xl",role:"img","aria-label":"ZeroClaw",children:y.jsx("span",{className:"sr-only",children:"ZeroClaw"})}),y.jsx("span",{className:"text-lg font-semibold tracking-[0.1em] text-white",children:"ZeroClaw"})]})}),y.jsxs("div",{className:"flex items-center gap-2",children:[s&&y.jsx("button",{type:"button",onClick:i,"aria-label":e?"Expand navigation":"Collapse navigation",className:"hidden rounded-lg border border-[#2c4e97] bg-[#0a1b3f]/60 p-1.5 text-[#8bb9ff] transition hover:border-[#4f83ff] hover:text-white md:block",children:y.jsx(S3,{className:"h-4 w-4"})}),y.jsx("button",{type:"button",onClick:t,"aria-label":"Close navigation",className:"rounded-lg p-1.5 text-gray-300 transition-colors hover:bg-gray-800 hover:text-white md:hidden",children:y.jsx(Mo,{className:"h-4 w-4"})})]})]}),y.jsx("nav",{className:"flex-1 space-y-1 overflow-y-auto px-3 py-4",children:ET.map(({to:o,icon:u,labelKey:f})=>y.jsxs(j2,{to:o,end:o==="/",onClick:t,title:e?Vu(f):void 0,className:({isActive:d})=>["group flex items-center gap-3 overflow-hidden rounded-xl px-3 py-2.5 text-sm font-medium transition-all duration-300",d?"border border-[#3a6de0] bg-[#0b2f80]/55 text-white shadow-[0_0_30px_-16px_rgba(72,140,255,0.95)]":"border border-transparent text-[#9bb7eb] hover:border-[#294a8d] hover:bg-[#07132f] hover:text-white"].join(" "),children:[y.jsx(u,{className:"h-5 w-5 shrink-0 transition-transform duration-300 group-hover:scale-110"}),y.jsx("span",{className:["whitespace-nowrap transition-[opacity,transform,width] duration-300",e?"w-0 -translate-x-3 opacity-0 md:invisible":"w-auto opacity-100"].join(" "),children:Vu(f)})]},o))}),y.jsxs("div",{className:["mx-3 mb-4 rounded-xl border border-[#1b3670] bg-[#071328]/80 px-3 py-3 text-xs text-[#89a9df] transition-all duration-300",e?"md:px-1.5 md:text-center":""].join(" "),children:[y.jsx("p",{className:e?"hidden md:block":"",children:"Gateway + Dashboard"}),y.jsx("p",{className:e?"text-[10px] uppercase tracking-widest":"mt-1 text-[#5f84cc]",children:e?"UI":"Runtime Mode"})]})]})]})}const tw=M.createContext(null);function OT({children:n}){const[e,t]=M.useState(Ca),[i,s]=M.useState(nm),[r,o]=M.useState(!nm());M.useEffect(()=>{if(nm())return;let p=!1;return cT().then(b=>{p||b.require_pairing||s(!0)}).catch(()=>{}).finally(()=>{p||o(!1)}),()=>{p=!0}},[]),M.useEffect(()=>{const p=b=>{if(b.key===Gi){const x=Ca();t(x),s(x!==null&&x.length>0)}};return window.addEventListener("storage",p),()=>window.removeEventListener("storage",p)},[]);const u=M.useCallback(async p=>{const{token:b}=await oT(p);Q2(b),t(b),s(!0)},[]),f=M.useCallback(()=>{Z2(),t(null),s(!1)},[]),d={token:e,isAuthenticated:i,loading:r,pair:u,logout:f};return m2.createElement(tw.Provider,{value:d},n)}function nw(){const n=M.useContext(tw);if(!n)throw new Error("useAuth must be used within an ");return n}const jT={"/":"nav.dashboard","/agent":"nav.agent","/tools":"nav.tools","/cron":"nav.cron","/integrations":"nav.integrations","/memory":"nav.memory","/devices":"nav.devices","/config":"nav.config","/cost":"nav.cost","/logs":"nav.logs","/doctor":"nav.doctor"},RT="English · 简体中文 · 日本語 · Русский · Français · Tiếng Việt · Ελληνικά";function _T({isSidebarCollapsed:n,onToggleSidebar:e,onToggleSidebarCollapse:t}){const i=Zi(),{logout:s}=nw(),{locale:r,setAppLocale:o}=D6(),u=jT[i.pathname]??"nav.dashboard",f=Vu(u),d=()=>{const p=im.indexOf(r),b=im[(p+1)%im.length]??"en";o(b)};return y.jsxs("header",{className:"glass-header relative flex min-h-[4.5rem] flex-wrap items-center justify-between gap-2 rounded-2xl border border-[#1a3670] px-4 py-3 sm:px-5 sm:py-3.5 md:flex-nowrap md:px-8 md:py-4",children:[y.jsx("div",{className:"absolute inset-0 pointer-events-none opacity-70 bg-[radial-gradient(circle_at_15%_30%,rgba(41,148,255,0.22),transparent_45%),radial-gradient(circle_at_85%_75%,rgba(0,209,255,0.14),transparent_40%)]"}),y.jsxs("div",{className:"relative flex min-w-0 items-center gap-2.5 sm:gap-3",children:[y.jsx("button",{type:"button",onClick:e,"aria-label":"Open navigation",className:"rounded-lg border border-[#294a8f] bg-[#081637]/70 p-1.5 text-[#9ec2ff] transition hover:border-[#4f83ff] hover:text-white md:hidden",children:y.jsx(L3,{className:"h-5 w-5"})}),y.jsxs("div",{className:"min-w-0",children:[y.jsx("h1",{className:"truncate text-base font-semibold tracking-wide text-white sm:text-lg",children:f}),y.jsx("p",{className:"hidden text-[10px] uppercase tracking-[0.16em] text-[#7ea5eb] sm:block",children:"Electric dashboard"})]})]}),y.jsxs("div",{className:"relative flex w-full items-center justify-end gap-1.5 sm:gap-2 md:w-auto md:gap-3",children:[y.jsxs("button",{type:"button",onClick:t,className:"hidden items-center gap-1 rounded-lg border border-[#2b4f97] bg-[#091937]/75 px-2.5 py-1.5 text-xs text-[#c4d8ff] transition hover:border-[#4f83ff] hover:text-white md:flex md:text-sm",title:n?"Expand sidebar":"Collapse sidebar",children:[n?y.jsx(K3,{className:"h-4 w-4"}):y.jsx(P3,{className:"h-4 w-4"}),y.jsx("span",{children:n?"Expand":"Collapse"})]}),y.jsx("button",{type:"button",onClick:d,title:`🌐 Languages: ${RT}`,className:"rounded-lg border border-[#2b4f97] bg-[#091937]/75 px-2.5 py-1 text-xs font-medium text-[#c4d8ff] transition hover:border-[#4f83ff] hover:text-white sm:px-3 sm:text-sm",children:AT[r]??"EN"}),y.jsxs("button",{type:"button",onClick:s,className:"flex items-center gap-1 rounded-lg border border-[#2b4f97] bg-[#091937]/75 px-2.5 py-1.5 text-xs text-[#c4d8ff] transition hover:border-[#4f83ff] hover:text-white sm:gap-1.5 sm:px-3 sm:text-sm",children:[y.jsx(_3,{className:"h-4 w-4"}),y.jsx("span",{className:"hidden sm:inline",children:Vu("auth.logout")})]})]})]})}const cx="zeroclaw:sidebar-collapsed";function LT(){const[n,e]=M.useState(!1),[t,i]=M.useState(()=>typeof window>"u"?!1:window.localStorage.getItem(cx)==="1"),s=()=>{i(r=>{const o=!r;return typeof window<"u"&&window.localStorage.setItem(cx,o?"1":"0"),o})};return y.jsxs("div",{className:"app-shell min-h-screen text-white",children:[y.jsx(DT,{isOpen:n,isCollapsed:t,onClose:()=>e(!1),onToggleCollapse:s}),y.jsxs("div",{className:["flex min-h-screen flex-col transition-[margin-left] duration-300 ease-out",t?"md:ml-[6.25rem]":"md:ml-[17.5rem]"].join(" "),children:[y.jsx(_T,{isSidebarCollapsed:t,onToggleSidebar:()=>e(r=>!r),onToggleSidebarCollapse:s}),y.jsx("main",{className:"flex-1 overflow-y-auto px-4 pb-8 pt-5 md:px-8 md:pt-8",children:y.jsx(RM,{})})]})]})}function BT(n){const e=Math.floor(n/86400),t=Math.floor(n%86400/3600),i=Math.floor(n%3600/60);return e>0?`${e}d ${t}h ${i}m`:t>0?`${t}h ${i}m`:`${i}m`}function zT(n){return`$${n.toFixed(4)}`}function HT(n){switch(n.toLowerCase()){case"ok":case"healthy":return"bg-emerald-400";case"warn":case"warning":case"degraded":return"bg-amber-400";default:return"bg-rose-500"}}function VT(n){switch(n.toLowerCase()){case"ok":case"healthy":return"border-emerald-500/30";case"warn":case"warning":case"degraded":return"border-amber-400/30";default:return"border-rose-500/35"}}function lm({title:n,subtitle:e,icon:t,sectionKey:i,openState:s,onToggle:r,children:o}){const u=s[i];return y.jsxs("section",{className:"electric-card motion-rise",children:[y.jsxs("button",{type:"button",onClick:()=>r(i),"aria-expanded":u,className:"group flex w-full items-center justify-between gap-4 rounded-xl px-4 py-4 text-left md:px-5",children:[y.jsxs("div",{className:"flex items-center gap-3",children:[y.jsx("div",{className:"electric-icon h-10 w-10 rounded-xl",children:y.jsx(t,{className:"h-5 w-5"})}),y.jsxs("div",{children:[y.jsx("h2",{className:"text-base font-semibold text-white",children:n}),y.jsx("p",{className:"text-xs uppercase tracking-[0.13em] text-[#7ea5eb]",children:e})]})]}),y.jsx(hh,{className:["h-5 w-5 text-[#7ea5eb] transition-transform duration-300",u?"rotate-180":"rotate-0"].join(" ")})]}),y.jsx("div",{className:["grid overflow-hidden transition-[grid-template-rows,opacity] duration-300 ease-out",u?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0"].join(" "),children:y.jsx("div",{className:"min-h-0 border-t border-[#18356f] px-4 pb-4 pt-4 md:px-5",children:o})})]})}function UT(){const[n,e]=M.useState(null),[t,i]=M.useState(null),[s,r]=M.useState(null),[o,u]=M.useState({cost:!0,channels:!0,health:!0});M.useEffect(()=>{Promise.all([$2(),J2()]).then(([p,b])=>{e(p),i(b)}).catch(p=>{const b=p instanceof Error?p.message:"Unknown dashboard load error";r(b)})},[]);const f=p=>{u(b=>({...b,[p]:!b[p]}))};if(s)return y.jsxs("div",{className:"electric-card p-5 text-rose-200",children:[y.jsx("h2",{className:"text-lg font-semibold text-rose-100",children:"Dashboard load failed"}),y.jsx("p",{className:"mt-2 text-sm text-rose-200/90",children:s})]});if(!n||!t)return y.jsx("div",{className:"flex h-64 items-center justify-center",children:y.jsx("div",{className:"electric-loader h-12 w-12 rounded-full"})});const d=Math.max(t.session_cost_usd,t.daily_cost_usd,t.monthly_cost_usd,.001);return y.jsxs("div",{className:"space-y-5 md:space-y-6",children:[y.jsx("section",{className:"hero-panel motion-rise",children:y.jsxs("div",{className:"relative z-10 flex flex-wrap items-start justify-between gap-4",children:[y.jsxs("div",{children:[y.jsx("p",{className:"text-xs uppercase tracking-[0.22em] text-[#8fb8ff]",children:"ZeroClaw Command Deck"}),y.jsx("h1",{className:"mt-2 text-2xl font-semibold tracking-[0.03em] text-white md:text-3xl",children:"Electric Runtime Dashboard"}),y.jsx("p",{className:"mt-2 max-w-2xl text-sm text-[#b3cbf8] md:text-base",children:"Real-time telemetry, cost pulse, and operations status in a single collapsible surface."})]}),y.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[y.jsxs("span",{className:"status-pill",children:[y.jsx($p,{className:"h-3.5 w-3.5"}),"Live Gateway"]}),y.jsxs("span",{className:"status-pill",children:[y.jsx(G2,{className:"h-3.5 w-3.5"}),n.paired?"Paired":"Unpaired"]})]})]})}),y.jsxs("section",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4",children:[y.jsxs("article",{className:"electric-card motion-rise motion-delay-1 p-4",children:[y.jsxs("div",{className:"metric-head",children:[y.jsx(Nu,{className:"h-4 w-4"}),y.jsx("span",{children:"Provider / Model"})]}),y.jsx("p",{className:"metric-value mt-3",children:n.provider??"Unknown"}),y.jsx("p",{className:"metric-sub mt-1 truncate",children:n.model})]}),y.jsxs("article",{className:"electric-card motion-rise motion-delay-2 p-4",children:[y.jsxs("div",{className:"metric-head",children:[y.jsx(C3,{className:"h-4 w-4"}),y.jsx("span",{children:"Uptime"})]}),y.jsx("p",{className:"metric-value mt-3",children:BT(n.uptime_seconds)}),y.jsx("p",{className:"metric-sub mt-1",children:"Since last restart"})]}),y.jsxs("article",{className:"electric-card motion-rise motion-delay-3 p-4",children:[y.jsxs("div",{className:"metric-head",children:[y.jsx(M3,{className:"h-4 w-4"}),y.jsx("span",{children:"Gateway Port"})]}),y.jsxs("p",{className:"metric-value mt-3",children:[":",n.gateway_port]}),y.jsx("p",{className:"metric-sub mt-1",children:n.locale})]}),y.jsxs("article",{className:"electric-card motion-rise motion-delay-4 p-4",children:[y.jsxs("div",{className:"metric-head",children:[y.jsx(Um,{className:"h-4 w-4"}),y.jsx("span",{children:"Memory Backend"})]}),y.jsx("p",{className:"metric-value mt-3 capitalize",children:n.memory_backend}),y.jsx("p",{className:"metric-sub mt-1",children:n.paired?"Pairing active":"No paired devices"})]})]}),y.jsxs("div",{className:"space-y-4",children:[y.jsx(lm,{title:"Cost Pulse",subtitle:"Session, daily, and monthly runtime spend",icon:dh,sectionKey:"cost",openState:o,onToggle:f,children:y.jsxs("div",{className:"space-y-4",children:[[{label:"Session",value:t.session_cost_usd},{label:"Daily",value:t.daily_cost_usd},{label:"Monthly",value:t.monthly_cost_usd}].map(({label:p,value:b})=>y.jsxs("div",{children:[y.jsxs("div",{className:"mb-1.5 flex items-center justify-between text-sm",children:[y.jsx("span",{className:"text-[#9bb8ec]",children:p}),y.jsx("span",{className:"font-semibold text-white",children:zT(b)})]}),y.jsx("div",{className:"h-2.5 overflow-hidden rounded-full bg-[#061230]",children:y.jsx("div",{className:"electric-progress h-full rounded-full",style:{width:`${Math.max(b/d*100,3)}%`}})})]},p)),y.jsxs("div",{className:"grid grid-cols-2 gap-3 pt-2",children:[y.jsxs("div",{className:"metric-pill",children:[y.jsx("span",{children:"Total Tokens"}),y.jsx("strong",{children:t.total_tokens.toLocaleString()})]}),y.jsxs("div",{className:"metric-pill",children:[y.jsx("span",{children:"Requests"}),y.jsx("strong",{children:t.request_count.toLocaleString()})]})]})]})}),y.jsx(lm,{title:"Channel Activity",subtitle:"Live integrations and route connectivity",icon:Y3,sectionKey:"channels",openState:o,onToggle:f,children:Object.entries(n.channels).length===0?y.jsx("p",{className:"text-sm text-[#8aa8df]",children:"No channels configured."}):y.jsx("div",{className:"grid grid-cols-1 gap-2 md:grid-cols-2",children:Object.entries(n.channels).map(([p,b])=>y.jsx("div",{className:"rounded-xl border border-[#1d3770] bg-[#05112c]/90 px-3 py-2.5",children:y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{className:"text-sm capitalize text-white",children:p}),y.jsxs("span",{className:"flex items-center gap-2 text-xs text-[#8baee7]",children:[y.jsx("span",{className:["inline-block h-2.5 w-2.5 rounded-full",b?"bg-emerald-400 shadow-[0_0_12px_0_rgba(52,211,153,0.8)]":"bg-slate-500"].join(" ")}),b?"Active":"Inactive"]})]})},p))})}),y.jsx(lm,{title:"Component Health",subtitle:"Runtime heartbeat and restart awareness",icon:Hu,sectionKey:"health",openState:o,onToggle:f,children:Object.entries(n.health.components).length===0?y.jsx("p",{className:"text-sm text-[#8aa8df]",children:"No component health is currently available."}):y.jsx("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-3",children:Object.entries(n.health.components).map(([p,b])=>y.jsxs("div",{className:["rounded-xl border bg-[#05112c]/80 px-3 py-3",VT(b.status)].join(" "),children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("p",{className:"text-sm font-semibold capitalize text-white",children:p}),y.jsx("span",{className:["inline-block h-2.5 w-2.5 rounded-full",HT(b.status)].join(" ")})]}),y.jsx("p",{className:"mt-1 text-xs uppercase tracking-[0.12em] text-[#87a9e5]",children:b.status}),b.restart_count>0&&y.jsxs("p",{className:"mt-2 text-xs text-amber-300",children:["Restarts: ",b.restart_count]})]},p))})})]})]})}const qT=1e3,PT=3e4,ux="zeroclaw.ws.session_id";class KT{constructor(e={}){Xe(this,"ws",null);Xe(this,"currentDelay");Xe(this,"reconnectTimer",null);Xe(this,"intentionallyClosed",!1);Xe(this,"onMessage",null);Xe(this,"onOpen",null);Xe(this,"onClose",null);Xe(this,"onError",null);Xe(this,"baseUrl");Xe(this,"reconnectDelay");Xe(this,"maxReconnectDelay");Xe(this,"autoReconnect");Xe(this,"sessionId");const t=window.location.protocol==="https:"?"wss:":"ws:";this.baseUrl=e.baseUrl??`${t}//${window.location.host}`,this.reconnectDelay=e.reconnectDelay??qT,this.maxReconnectDelay=e.maxReconnectDelay??PT,this.autoReconnect=e.autoReconnect??!0,this.currentDelay=this.reconnectDelay,this.sessionId=this.resolveSessionId()}connect(){this.intentionallyClosed=!1,this.clearReconnectTimer();const e=Ca(),t=`${this.baseUrl}/ws/chat?session_id=${encodeURIComponent(this.sessionId)}`,i=["zeroclaw.v1"];e&&i.push(`bearer.${e}`),this.ws=new WebSocket(t,i),this.ws.onopen=()=>{var s;this.currentDelay=this.reconnectDelay,(s=this.onOpen)==null||s.call(this)},this.ws.onmessage=s=>{var r;try{const o=JSON.parse(s.data);(r=this.onMessage)==null||r.call(this,o)}catch{}},this.ws.onclose=s=>{var r;(r=this.onClose)==null||r.call(this,s),this.scheduleReconnect()},this.ws.onerror=s=>{var r;(r=this.onError)==null||r.call(this,s)}}sendMessage(e){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error("WebSocket is not connected");this.ws.send(JSON.stringify({type:"message",content:e}))}disconnect(){this.intentionallyClosed=!0,this.clearReconnectTimer(),this.ws&&(this.ws.close(),this.ws=null)}get connected(){var e;return((e=this.ws)==null?void 0:e.readyState)===WebSocket.OPEN}scheduleReconnect(){this.intentionallyClosed||!this.autoReconnect||(this.reconnectTimer=setTimeout(()=>{this.currentDelay=Math.min(this.currentDelay*2,this.maxReconnectDelay),this.connect()},this.currentDelay))}clearReconnectTimer(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}resolveSessionId(){var i,s;const e=window.localStorage.getItem(ux);if(e&&/^[A-Za-z0-9_-]{1,128}$/.test(e))return e;const t=((s=(i=globalThis.crypto)==null?void 0:i.randomUUID)==null?void 0:s.call(i).replace(/-/g,"_"))??`sess_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`;return window.localStorage.setItem(ux,t),t}}let hx=0;const GT="Tool execution completed, but no final response text was returned.";function ua(){var e,t;const n=(t=(e=globalThis.crypto)==null?void 0:e.randomUUID)==null?void 0:t.call(e);return n||(hx+=1,`msg_${Date.now().toString(36)}_${hx.toString(36)}_${Math.random().toString(36).slice(2,10)}`)}function IT(){const[n,e]=M.useState([]),[t,i]=M.useState(""),[s,r]=M.useState(!1),[o,u]=M.useState(!1),[f,d]=M.useState(null),p=M.useRef(null),b=M.useRef(null),x=M.useRef(null),w=M.useRef("");M.useEffect(()=>{const C=new KT;return C.onOpen=()=>{u(!0),d(null)},C.onClose=()=>{u(!1)},C.onError=()=>{d("Connection error. Attempting to reconnect...")},C.onMessage=T=>{switch(T.type){case"history":{const R=(T.messages??[]).filter(E=>{var q;return(q=E.content)==null?void 0:q.trim()}).map(E=>({id:ua(),role:E.role==="user"?"user":"agent",content:E.content.trim(),timestamp:new Date}));e(R),r(!1),w.current="";break}case"chunk":r(!0),w.current+=T.content??"";break;case"message":case"done":{const E=(T.full_response??T.content??w.current??"").trim()||GT;e(q=>[...q,{id:ua(),role:"agent",content:E,timestamp:new Date}]),w.current="",r(!1);break}case"tool_call":e(R=>[...R,{id:ua(),role:"agent",content:`[Tool Call] ${T.name??"unknown"}(${JSON.stringify(T.args??{})})`,timestamp:new Date}]);break;case"tool_result":e(R=>[...R,{id:ua(),role:"agent",content:`[Tool Result] ${T.output??""}`,timestamp:new Date}]);break;case"error":e(R=>[...R,{id:ua(),role:"agent",content:`[Error] ${T.message??"Unknown error"}`,timestamp:new Date}]),r(!1),w.current="";break}},C.connect(),p.current=C,()=>{C.disconnect()}},[]),M.useEffect(()=>{var C;(C=b.current)==null||C.scrollIntoView({behavior:"smooth"})},[n,s]);const S=()=>{var T,R;const C=t.trim();if(!(!C||!((T=p.current)!=null&&T.connected))){e(E=>[...E,{id:ua(),role:"user",content:C,timestamp:new Date}]);try{p.current.sendMessage(C),r(!0),w.current=""}catch{d("Failed to send message. Please try again.")}i(""),(R=x.current)==null||R.focus()}},A=C=>{C.key==="Enter"&&!C.shiftKey&&(C.preventDefault(),S())};return y.jsxs("div",{className:"flex min-h-[28rem] flex-col h-[calc(100dvh-8.5rem)]",children:[f&&y.jsxs("div",{className:"px-4 py-2 bg-red-900/30 border-b border-red-700 flex items-center gap-2 text-sm text-red-300",children:[y.jsx(B2,{className:"h-4 w-4 flex-shrink-0"}),f]}),y.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",children:[n.length===0&&y.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-gray-500",children:[y.jsx(Tu,{className:"h-12 w-12 mb-3 text-gray-600"}),y.jsx("p",{className:"text-lg font-medium",children:"ZeroClaw Agent"}),y.jsx("p",{className:"text-sm mt-1",children:"Send a message to start the conversation"})]}),n.map(C=>y.jsxs("div",{className:`flex items-start gap-3 ${C.role==="user"?"flex-row-reverse":""}`,children:[y.jsx("div",{className:`flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center ${C.role==="user"?"bg-blue-600":"bg-gray-700"}`,children:C.role==="user"?y.jsx(nT,{className:"h-4 w-4 text-white"}):y.jsx(Tu,{className:"h-4 w-4 text-white"})}),y.jsxs("div",{className:`max-w-[75%] rounded-xl px-4 py-3 ${C.role==="user"?"bg-blue-600 text-white":"bg-gray-800 text-gray-100 border border-gray-700"}`,children:[y.jsx("p",{className:"text-sm whitespace-pre-wrap break-words",children:C.content}),y.jsx("p",{className:`text-xs mt-1 ${C.role==="user"?"text-blue-200":"text-gray-500"}`,children:C.timestamp.toLocaleTimeString()})]})]},C.id)),s&&y.jsxs("div",{className:"flex items-start gap-3",children:[y.jsx("div",{className:"flex-shrink-0 w-8 h-8 rounded-full bg-gray-700 flex items-center justify-center",children:y.jsx(Tu,{className:"h-4 w-4 text-white"})}),y.jsxs("div",{className:"bg-gray-800 border border-gray-700 rounded-xl px-4 py-3",children:[y.jsxs("div",{className:"flex items-center gap-1",children:[y.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"0ms"}}),y.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"150ms"}}),y.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"300ms"}})]}),y.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Typing..."})]})]}),y.jsx("div",{ref:b})]}),y.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900 p-4",children:[y.jsxs("div",{className:"flex items-center gap-3 max-w-4xl mx-auto",children:[y.jsx("div",{className:"flex-1 relative",children:y.jsx("input",{ref:x,type:"text",value:t,onChange:C=>i(C.target.value),onKeyDown:A,placeholder:o?"Type a message...":"Connecting...",disabled:!o,className:"w-full bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50"})}),y.jsx("button",{onClick:S,disabled:!o||!t.trim(),className:"flex-shrink-0 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-700 disabled:text-gray-500 text-white rounded-xl p-3 transition-colors",children:y.jsx(K2,{className:"h-5 w-5"})})]}),y.jsxs("div",{className:"flex items-center justify-center mt-2 gap-2",children:[y.jsx("span",{className:`inline-block h-2 w-2 rounded-full ${o?"bg-green-500":"bg-red-500"}`}),y.jsx("span",{className:"text-xs text-gray-500",children:o?"Connected":"Disconnected"})]})]})]})}function YT(){const[n,e]=M.useState([]),[t,i]=M.useState([]),[s,r]=M.useState(""),[o,u]=M.useState(null),[f,d]=M.useState(!0),[p,b]=M.useState(null);M.useEffect(()=>{Promise.all([fT(),CT()]).then(([S,A])=>{e(S),i(A)}).catch(S=>b(S.message)).finally(()=>d(!1))},[]);const x=n.filter(S=>S.name.toLowerCase().includes(s.toLowerCase())||S.description.toLowerCase().includes(s.toLowerCase())),w=t.filter(S=>S.name.toLowerCase().includes(s.toLowerCase())||S.category.toLowerCase().includes(s.toLowerCase()));return p?y.jsx("div",{className:"p-6",children:y.jsxs("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-4 text-red-300",children:["Failed to load tools: ",p]})}):f?y.jsx("div",{className:"flex items-center justify-center h-64",children:y.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-blue-500 border-t-transparent"})}):y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"relative max-w-md",children:[y.jsx(mh,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500"}),y.jsx("input",{type:"text",value:s,onChange:S=>r(S.target.value),placeholder:"Search tools...",className:"w-full bg-gray-900 border border-gray-700 rounded-lg pl-10 pr-4 py-2.5 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"})]}),y.jsxs("div",{children:[y.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[y.jsx(W2,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Agent Tools (",x.length,")"]})]}),x.length===0?y.jsx("p",{className:"text-sm text-gray-500",children:"No tools match your search."}):y.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",children:x.map(S=>{const A=o===S.name;return y.jsxs("div",{className:"bg-gray-900 rounded-xl border border-gray-800 overflow-hidden",children:[y.jsxs("button",{onClick:()=>u(A?null:S.name),className:"w-full text-left p-4 hover:bg-gray-800/50 transition-colors",children:[y.jsxs("div",{className:"flex items-start justify-between gap-2",children:[y.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[y.jsx(q3,{className:"h-4 w-4 text-blue-400 flex-shrink-0 mt-0.5"}),y.jsx("h3",{className:"text-sm font-semibold text-white truncate",children:S.name})]}),A?y.jsx(hh,{className:"h-4 w-4 text-gray-400 flex-shrink-0"}):y.jsx(L2,{className:"h-4 w-4 text-gray-400 flex-shrink-0"})]}),y.jsx("p",{className:"text-sm text-gray-400 mt-2 line-clamp-2",children:S.description})]}),A&&S.parameters&&y.jsxs("div",{className:"border-t border-gray-800 p-4",children:[y.jsx("p",{className:"text-xs text-gray-500 mb-2 font-medium uppercase tracking-wider",children:"Parameter Schema"}),y.jsx("pre",{className:"text-xs text-gray-300 bg-gray-950 rounded-lg p-3 overflow-x-auto max-h-64 overflow-y-auto",children:JSON.stringify(S.parameters,null,2)})]})]},S.name)})})]}),w.length>0&&y.jsxs("div",{children:[y.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[y.jsx(J3,{className:"h-5 w-5 text-green-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["CLI Tools (",w.length,")"]})]}),y.jsx("div",{className:"bg-gray-900 rounded-xl border border-gray-800 overflow-hidden",children:y.jsxs("table",{className:"w-full text-sm",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"border-b border-gray-800",children:[y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Name"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Path"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Version"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Category"})]})}),y.jsx("tbody",{children:w.map(S=>y.jsxs("tr",{className:"border-b border-gray-800/50 hover:bg-gray-800/30 transition-colors",children:[y.jsx("td",{className:"px-4 py-3 text-white font-medium",children:S.name}),y.jsx("td",{className:"px-4 py-3 text-gray-400 font-mono text-xs truncate max-w-[200px]",children:S.path}),y.jsx("td",{className:"px-4 py-3 text-gray-400",children:S.version??"-"}),y.jsx("td",{className:"px-4 py-3",children:y.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-gray-800 text-gray-300 capitalize",children:S.category})})]},S.name))})]})})]})]})}function WT(n){return n?new Date(n).toLocaleString():"-"}function FT(){const[n,e]=M.useState([]),[t,i]=M.useState(!0),[s,r]=M.useState(null),[o,u]=M.useState(!1),[f,d]=M.useState(null),[p,b]=M.useState(""),[x,w]=M.useState(""),[S,A]=M.useState(""),[C,T]=M.useState(null),[R,E]=M.useState(!1),q=()=>{i(!0),dT().then(e).catch(Q=>r(Q.message)).finally(()=>i(!1))};M.useEffect(()=>{q()},[]);const B=async()=>{if(!x.trim()||!S.trim()){T("Schedule and command are required.");return}E(!0),T(null);try{const Q=await mT({name:p.trim()||void 0,schedule:x.trim(),command:S.trim()});e(Z=>[...Z,Q]),u(!1),b(""),w(""),A("")}catch(Q){T(Q instanceof Error?Q.message:"Failed to add job")}finally{E(!1)}},I=async Q=>{try{await pT(Q),e(Z=>Z.filter(ue=>ue.id!==Q))}catch(Z){r(Z instanceof Error?Z.message:"Failed to delete job")}finally{d(null)}},V=Q=>{if(!Q)return null;switch(Q.toLowerCase()){case"ok":case"success":return y.jsx(fh,{className:"h-4 w-4 text-green-400"});case"error":case"failed":return y.jsx(Fp,{className:"h-4 w-4 text-red-400"});default:return y.jsx(B2,{className:"h-4 w-4 text-yellow-400"})}};return s?y.jsx("div",{className:"p-6",children:y.jsxs("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-4 text-red-300",children:["Failed to load cron jobs: ",s]})}):t?y.jsx("div",{className:"flex items-center justify-center h-64",children:y.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-blue-500 border-t-transparent"})}):y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx(no,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Scheduled Tasks (",n.length,")"]})]}),y.jsxs("button",{onClick:()=>u(!0),className:"flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium px-4 py-2 rounded-lg transition-colors",children:[y.jsx(q2,{className:"h-4 w-4"}),"Add Job"]})]}),o&&y.jsx("div",{className:"fixed inset-0 bg-black/60 flex items-center justify-center z-50",children:y.jsxs("div",{className:"bg-gray-900 border border-gray-700 rounded-xl p-6 w-full max-w-md mx-4",children:[y.jsxs("div",{className:"flex items-center justify-between mb-4",children:[y.jsx("h3",{className:"text-lg font-semibold text-white",children:"Add Cron Job"}),y.jsx("button",{onClick:()=>{u(!1),T(null)},className:"text-gray-400 hover:text-white transition-colors",children:y.jsx(Mo,{className:"h-5 w-5"})})]}),C&&y.jsx("div",{className:"mb-4 rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:C}),y.jsxs("div",{className:"space-y-4",children:[y.jsxs("div",{children:[y.jsx("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:"Name (optional)"}),y.jsx("input",{type:"text",value:p,onChange:Q=>b(Q.target.value),placeholder:"e.g. Daily cleanup",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),y.jsxs("div",{children:[y.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:["Schedule ",y.jsx("span",{className:"text-red-400",children:"*"})]}),y.jsx("input",{type:"text",value:x,onChange:Q=>w(Q.target.value),placeholder:"e.g. 0 0 * * * (cron expression)",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),y.jsxs("div",{children:[y.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:["Command ",y.jsx("span",{className:"text-red-400",children:"*"})]}),y.jsx("input",{type:"text",value:S,onChange:Q=>A(Q.target.value),placeholder:"e.g. cleanup --older-than 7d",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]})]}),y.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[y.jsx("button",{onClick:()=>{u(!1),T(null)},className:"px-4 py-2 text-sm font-medium text-gray-300 hover:text-white border border-gray-700 rounded-lg hover:bg-gray-800 transition-colors",children:"Cancel"}),y.jsx("button",{onClick:B,disabled:R,className:"px-4 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-lg transition-colors disabled:opacity-50",children:R?"Adding...":"Add Job"})]})]})}),n.length===0?y.jsxs("div",{className:"bg-gray-900 rounded-xl border border-gray-800 p-8 text-center",children:[y.jsx(no,{className:"h-10 w-10 text-gray-600 mx-auto mb-3"}),y.jsx("p",{className:"text-gray-400",children:"No scheduled tasks configured."})]}):y.jsx("div",{className:"bg-gray-900 rounded-xl border border-gray-800 overflow-x-auto",children:y.jsxs("table",{className:"w-full text-sm",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"border-b border-gray-800",children:[y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"ID"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Name"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Command"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Next Run"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Last Status"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Enabled"}),y.jsx("th",{className:"text-right px-4 py-3 text-gray-400 font-medium",children:"Actions"})]})}),y.jsx("tbody",{children:n.map(Q=>y.jsxs("tr",{className:"border-b border-gray-800/50 hover:bg-gray-800/30 transition-colors",children:[y.jsx("td",{className:"px-4 py-3 text-gray-400 font-mono text-xs",children:Q.id.slice(0,8)}),y.jsx("td",{className:"px-4 py-3 text-white font-medium",children:Q.name??"-"}),y.jsx("td",{className:"px-4 py-3 text-gray-300 font-mono text-xs max-w-[200px] truncate",children:Q.command}),y.jsx("td",{className:"px-4 py-3 text-gray-400 text-xs",children:WT(Q.next_run)}),y.jsx("td",{className:"px-4 py-3",children:y.jsxs("div",{className:"flex items-center gap-1.5",children:[V(Q.last_status),y.jsx("span",{className:"text-gray-300 text-xs capitalize",children:Q.last_status??"-"})]})}),y.jsx("td",{className:"px-4 py-3",children:y.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${Q.enabled?"bg-green-900/40 text-green-400 border border-green-700/50":"bg-gray-800 text-gray-500 border border-gray-700"}`,children:Q.enabled?"Enabled":"Disabled"})}),y.jsx("td",{className:"px-4 py-3 text-right",children:f===Q.id?y.jsxs("div",{className:"flex items-center justify-end gap-2",children:[y.jsx("span",{className:"text-xs text-red-400",children:"Delete?"}),y.jsx("button",{onClick:()=>I(Q.id),className:"text-red-400 hover:text-red-300 text-xs font-medium",children:"Yes"}),y.jsx("button",{onClick:()=>d(null),className:"text-gray-400 hover:text-white text-xs font-medium",children:"No"})]}):y.jsx("button",{onClick:()=>d(Q.id),className:"text-gray-400 hover:text-red-400 transition-colors",children:y.jsx(Y2,{className:"h-4 w-4"})})})]},Q.id))})]})})]})}const fx=[{id:"bluebubbles",name:"BlueBubbles",supportLevel:"Built-in",recommended:!0,summary:"Recommended for iMessage with BlueBubbles macOS server REST API.",details:"Supports edit, unsend, effects, reactions, and group management. Edit is currently broken on macOS 26 Tahoe."},{id:"discord",name:"Discord",supportLevel:"Built-in",summary:"Discord Bot API + Gateway for servers, channels, and direct messages."},{id:"feishu",name:"Feishu",supportLevel:"Plugin",summary:"Feishu/Lark bot integration over WebSocket.",details:"Plugin track, installed separately."},{id:"google-chat",name:"Google Chat",supportLevel:"Built-in",summary:"Google Chat app integration via HTTP webhook."},{id:"imessage-legacy",name:"iMessage (legacy)",supportLevel:"Legacy",summary:"Legacy macOS integration via imsg CLI.",details:"Deprecated path for new setups; BlueBubbles is recommended."},{id:"irc",name:"IRC",supportLevel:"Built-in",summary:"Classic IRC channels and DMs with pairing and allowlist controls."},{id:"line",name:"LINE",supportLevel:"Plugin",summary:"LINE Messaging API bot integration.",details:"Plugin track, installed separately."},{id:"matrix",name:"Matrix",supportLevel:"Plugin",summary:"Matrix protocol integration for rooms and direct messaging.",details:"Plugin track, installed separately."},{id:"mattermost",name:"Mattermost",supportLevel:"Plugin",summary:"Bot API + WebSocket for channels, groups, and DMs.",details:"Plugin track, installed separately."},{id:"microsoft-teams",name:"Microsoft Teams",supportLevel:"Plugin",summary:"Enterprise support track for Teams environments.",details:"Plugin track, installed separately."},{id:"nextcloud-talk",name:"Nextcloud Talk",supportLevel:"Plugin",summary:"Self-hosted chat via Nextcloud Talk integration.",details:"Plugin track, installed separately."},{id:"nostr",name:"Nostr",supportLevel:"Plugin",summary:"Decentralized encrypted DMs via NIP-04 and modern NIP flows.",details:"Plugin track, installed separately."},{id:"signal",name:"Signal",supportLevel:"Built-in",summary:"Privacy-focused messaging through signal-cli."},{id:"synology-chat",name:"Synology Chat",supportLevel:"Plugin",summary:"Synology NAS Chat via outgoing and incoming webhooks.",details:"Plugin track, installed separately."},{id:"slack",name:"Slack",supportLevel:"Built-in",summary:"Slack workspace apps powered by Bolt SDK."},{id:"telegram",name:"Telegram",supportLevel:"Built-in",summary:"Bot API integration via grammY with strong group support."},{id:"tlon",name:"Tlon",supportLevel:"Plugin",summary:"Urbit-based messenger integration path.",details:"Plugin track, installed separately."},{id:"twitch",name:"Twitch",supportLevel:"Plugin",summary:"Twitch chat support over IRC connection.",details:"Plugin track, installed separately."},{id:"webchat",name:"WebChat",supportLevel:"Built-in",summary:"Gateway WebChat UI over WebSocket for browser-based sessions."},{id:"whatsapp",name:"WhatsApp",supportLevel:"Built-in",summary:"Baileys-backed integration with QR pairing flow."},{id:"zalo",name:"Zalo",supportLevel:"Plugin",summary:"Zalo Bot API for Vietnam's popular messenger ecosystem.",details:"Plugin track, installed separately."},{id:"zalo-personal",name:"Zalo Personal",supportLevel:"Plugin",summary:"Personal account integration with QR login.",details:"Plugin track, installed separately."}],XT=["Channels can run simultaneously; configure multiple and ZeroClaw routes per chat.","Fastest initial setup is usually Telegram with a simple bot token.","WhatsApp requires local state on disk for persistent sessions.","Group behavior varies by channel. See docs/channels-reference.md for policy details.","DM pairing and allowlists are enforced for safety. See docs/security/README.md.","Troubleshooting lives in docs/troubleshooting.md under channel guidance.","Model providers are documented separately in docs/providers-reference.md."],QT={"Built-in":"border-[#2f63c8] bg-[#0a265f]/70 text-[#acd0ff]",Plugin:"border-[#2f5ea0] bg-[#071a41]/80 text-[#8eb8f4]",Legacy:"border-[#5f6080] bg-[#141731]/80 text-[#c2c5e8]"};function ZT(){const[n,e]=M.useState(!0);return y.jsxs("section",{className:"electric-card motion-rise",children:[y.jsxs("button",{type:"button",onClick:()=>e(t=>!t),"aria-expanded":n,className:"group flex w-full items-center justify-between gap-4 rounded-xl px-4 py-4 text-left md:px-5",children:[y.jsxs("div",{className:"flex items-center gap-3",children:[y.jsx("div",{className:"electric-icon h-10 w-10 rounded-xl",children:y.jsx(B3,{className:"h-5 w-5"})}),y.jsxs("div",{children:[y.jsx("h2",{className:"text-base font-semibold text-white",children:"Supported Chat Channels"}),y.jsxs("p",{className:"text-xs uppercase tracking-[0.13em] text-[#7ea5eb]",children:[fx.length," channels listed"]})]})]}),y.jsx(hh,{className:["h-5 w-5 text-[#7ea5eb] transition-transform duration-300",n?"rotate-180":"rotate-0"].join(" ")})]}),n&&y.jsxs("div",{className:"border-t border-[#18356f] px-4 pb-5 pt-4 md:px-5",children:[y.jsx("div",{className:"rounded-xl border border-[#1e3a78] bg-[#07142f]/85 p-3 md:p-4",children:y.jsx("p",{className:"text-sm leading-relaxed text-[#c8dcff]",children:"ZeroClaw can talk to you on the chat apps you already use through Gateway. Text is supported across all channels; media and reactions vary by channel."})}),y.jsx("div",{className:"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-3",children:fx.map(t=>y.jsxs("article",{className:"rounded-xl border border-[#1f3d76] bg-[#060f25]/85 p-3 shadow-[0_0_22px_-15px_rgba(80,176,255,0.9)]",children:[y.jsxs("div",{className:"flex items-start justify-between gap-2",children:[y.jsx("h3",{className:"text-sm font-semibold text-white",children:t.name}),y.jsx("span",{className:["inline-flex items-center rounded-full border px-2 py-0.5 text-[11px] font-medium",QT[t.supportLevel]].join(" "),children:t.supportLevel})]}),y.jsx("p",{className:"mt-2 text-xs leading-relaxed text-[#97baee]",children:t.summary}),t.details&&y.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-[#7ca6de]",children:t.details}),t.recommended&&y.jsxs("p",{className:"mt-2 inline-flex items-center gap-1 text-[11px] text-[#cfe3ff]",children:[y.jsx($p,{className:"h-3 w-3"}),"Recommended"]})]},t.id))}),y.jsxs("div",{className:"mt-4 rounded-xl border border-[#1b3770] bg-[#061129]/85 p-3 md:p-4",children:[y.jsx("h3",{className:"text-sm font-semibold text-white",children:"Channel Notes"}),y.jsx("ul",{className:"mt-2 space-y-1.5 text-xs leading-relaxed text-[#9bbce8]",children:XT.map(t=>y.jsxs("li",{children:["• ",t]},t))})]})]})]})}function $T(n){switch(n){case"Active":return{icon:w3,label:"Active",classes:"bg-green-900/40 text-green-400 border-green-700/50"};case"Available":return{icon:lT,label:"Available",classes:"bg-blue-900/40 text-blue-400 border-blue-700/50"};case"ComingSoon":return{icon:no,label:"Coming Soon",classes:"bg-gray-800 text-gray-400 border-gray-700"}}}function dx(n){return n&&n.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/Ai/g,"AI")}const Lr="__keep__",tu="__custom__",mx="__clear__",JT={openrouter:["anthropic/claude-sonnet-4-6","openai/gpt-5.2","google/gemini-3.1-pro"],anthropic:["claude-sonnet-4-6","claude-opus-4-6"],openai:["gpt-5.2","gpt-5.2-codex","gpt-4o"],google:["google/gemini-3.1-pro","google/gemini-3-flash","google/gemini-2.5-pro"],deepseek:["deepseek/deepseek-reasoner","deepseek/deepseek-chat"],xai:["x-ai/grok-4","x-ai/grok-3"],mistral:["mistral-large-latest","codestral-latest","mistral-small-latest"],perplexity:["sonar-pro","sonar-reasoning-pro","sonar"],vercel:["openai/gpt-5.2","anthropic/claude-sonnet-4-6","google/gemini-3.1-pro"],bedrock:["anthropic.claude-sonnet-4-5-20250929-v1:0","anthropic.claude-opus-4-6-v1:0"],groq:["llama-3.3-70b-versatile","mixtral-8x7b-32768"],together:["meta-llama/Llama-3.3-70B-Instruct-Turbo","Qwen/Qwen2.5-72B-Instruct-Turbo","deepseek-ai/DeepSeek-R1-Distill-Llama-70B"],cohere:["command-r-plus-08-2024","command-r-08-2024"]};function px(n){return n==="openrouter"||n==="vercel"?"Format: anthropic/claude-sonnet-4-6":"Format: claude-sonnet-4-6 (or provider/model when required)"}function Br(n,e){var t;return e.key!=="default_model"?e.options??[]:(t=e.options)!=null&&t.length?e.options:JT[n]??[]}function eN(){const[n,e]=M.useState([]),[t,i]=M.useState({}),[s,r]=M.useState(""),[o,u]=M.useState(!0),[f,d]=M.useState(null),[p,b]=M.useState("all"),[x,w]=M.useState(null),[S,A]=M.useState({}),[C,T]=M.useState({}),[R,E]=M.useState({}),[q,B]=M.useState(!1),[I,V]=M.useState(null),[Q,Z]=M.useState(null),[ue,fe]=M.useState(null),[ne,pe]=M.useState(null),[J,ve]=M.useState({}),[z,K]=M.useState(null),[$,le]=M.useState(null),ge=te=>te.fields.reduce((be,ke)=>(Br(te.id,ke).length>0?be[ke.key]=ke.has_value?Lr:"":be[ke.key]="",be),{}),D=te=>te.fields.find(be=>be.key==="default_model"),P=te=>{const be=D(te);return be?Br(te.id,be)[0]??null:null},ee=(te,be)=>{var ct,Ie,me;if(be&&((ct=ue==null?void 0:ue.model)!=null&&ct.trim()))return ue.model.trim();const ke=(me=(Ie=D(te))==null?void 0:Ie.current_value)==null?void 0:me.trim();return ke||null},ae=Object.values(t).find(te=>te.id===ne),ye=async(te=!0)=>{te&&u(!0),d(null);try{const[be,ke,ct]=await Promise.all([gT(),yT(),$2().catch(()=>null)]),Ie=ke.integrations.reduce((me,et)=>(me[et.name]=et,me),{});return e(be),r(ke.revision),i(Ie),pe(ke.active_default_provider_integration_id??null),fe(ct?{model:ct.model}:null),Ie}catch(be){return d(be instanceof Error?be.message:"Failed to load integrations"),pe(null),fe(null),null}finally{te&&u(!1)}};M.useEffect(()=>{ye()},[]),M.useEffect(()=>{if(!Q)return;const te=setTimeout(()=>Z(null),4e3);return()=>clearTimeout(te)},[Q]),M.useEffect(()=>{if(!x)return;const te=be=>{be.key==="Escape"&&Ee()};return window.addEventListener("keydown",te),()=>window.removeEventListener("keydown",te)},[x,q]);const Ce=te=>{w(te),A(ge(te)),T({}),E({}),V(null)},Ee=()=>{q||(w(null),A({}),T({}),E({}),V(null))},Mt=(te,be)=>{A(ke=>({...ke,[te]:be})),E(ke=>({...ke,[te]:!0}))},ot=(te,be)=>{T(ke=>({...ke,[te]:be})),E(ke=>({...ke,[te]:!0}))},Hl=async()=>{if(!x)return;V(null),le(null);const te={};for(const be of x.fields){const ke=S[be.key]??"",ct=!!R[be.key],Ie=Br(x.id,be).length>0;let me=ke;if(Ie)if(ke===Lr){if(be.required&&!be.has_value){V(`${be.label} is required.`);return}if(ct)continue}else ke===tu?me=C[be.key]??"":ke===mx&&(me="");const et=me.trim();if(Ie&&ke===tu&&!et){V(`Enter a custom value for ${be.label} or choose a recommended model.`);return}if(be.required&&!et&&!be.has_value){V(`${be.label} is required.`);return}if(ct){if(Ie&&ke===Lr)continue;te[be.key]=me}}if(Object.keys(te).length===0&&!x.activates_default_provider){V("No changes to save.");return}if(x.activates_default_provider&&ne&&x.id!==ne){const be=(ae==null?void 0:ae.name)??"current provider";if(!window.confirm(`Switch default AI provider from ${be} to ${x.name}?`))return}B(!0);try{await ax(x.id,{revision:s,fields:te}),await ye(!1),Z(`${x.name} credentials saved.`),Ee()}catch(be){const ke=be instanceof Error?be.message:"Failed to save credentials";if(ke.includes("API 409")){const ct=await ye(!1);if(ct){const Ie=ct[x.name];Ie&&(w(Ie),A(ge(Ie)),T({}),E({}))}V("Configuration changed elsewhere. Refreshed latest settings; re-enter values and save again.")}else V(ke)}finally{B(!1)}},ks=async(te,be,ke,ct)=>{const Ie=be.trim();if(!(!Ie||Ie===ke)){if(ne&&!ct&&te.id!==ne){const me=(ae==null?void 0:ae.name)??"current provider";if(!window.confirm(`Switch default AI provider from ${me} to ${te.name} and set model to ${Ie}?`))return}K(te.id),le(null),V(null);try{await ax(te.id,{revision:s,fields:{default_model:Ie}}),await ye(!1),Z(`Model updated to ${Ie} for ${te.name}.`),ve(me=>{const et={...me};return delete et[te.id],et})}catch(me){const et=me instanceof Error?me.message:"Failed to update model";et.includes("API 409")?(await ye(!1),le("Configuration changed elsewhere. Refreshed latest settings; choose the model again.")):le(et)}finally{K(null)}}},Ha=["all",...Array.from(new Set(n.map(te=>te.category))).sort()],ei=(p==="all"?n:n.filter(te=>te.category===p)).reduce((te,be)=>{const ke=be.category;return te[ke]||(te[ke]=[]),te[ke].push(be),te},{});return f?y.jsx("div",{className:"p-6",children:y.jsxs("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-4 text-red-300",children:["Failed to load integrations: ",f]})}):o?y.jsx("div",{className:"flex items-center justify-center h-64",children:y.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-blue-500 border-t-transparent"})}):y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx(io,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Integrations (",n.length,")"]})]}),Q&&y.jsx("div",{className:"rounded-lg bg-green-900/30 border border-green-700 p-3 text-sm text-green-300",children:Q}),$&&y.jsx("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:$}),y.jsx(ZT,{}),y.jsx("div",{className:"flex flex-wrap gap-2",children:Ha.map(te=>y.jsx("button",{onClick:()=>b(te),className:`px-3 py-1.5 rounded-lg text-sm font-medium transition-colors capitalize ${p===te?"bg-blue-600 text-white":"bg-gray-900 text-gray-400 border border-gray-700 hover:bg-gray-800 hover:text-white"}`,children:te==="all"?"All":dx(te)},te))}),Object.keys(ei).length===0?y.jsxs("div",{className:"bg-gray-900 rounded-xl border border-gray-800 p-8 text-center",children:[y.jsx(io,{className:"h-10 w-10 text-gray-600 mx-auto mb-3"}),y.jsx("p",{className:"text-gray-400",children:"No integrations found."})]}):Object.entries(ei).sort(([te],[be])=>te.localeCompare(be)).map(([te,be])=>y.jsxs("div",{children:[y.jsx("h3",{className:"text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3 capitalize",children:dx(te)}),y.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",children:be.map(ke=>{const ct=$T(ke.status),Ie=ct.icon,me=t[ke.name],et=!!(me!=null&&me.activates_default_provider),ti=!!me&&et&&me.id===ne,Vl=me?D(me):void 0,St=me&&Vl?Br(me.id,Vl):[],Tt=me&&et?ee(me,ti):null,Cs=me&&et?P(me):null,Va=Tt||(Cs?`default: ${Cs}`:"default"),$i=Tt??Cs??"",As=me?J[me.id]??$i:"",Ua=[...Tt&&!St.includes(Tt)?[Tt]:[],...St],Rh=!!me&&me.configured&&et&&Ua.length>0;return y.jsxs("div",{className:`bg-gray-900 rounded-xl border p-5 transition-colors ${ti?"border-green-700/70 bg-gradient-to-b from-green-950/20 to-gray-900":"border-gray-800 hover:border-gray-700"}`,children:[y.jsxs("div",{className:"flex items-start justify-between gap-3",children:[y.jsxs("div",{className:"min-w-0",children:[y.jsx("h4",{className:"text-sm font-semibold text-white truncate",children:ke.name}),y.jsx("p",{className:"text-sm text-gray-400 mt-1 line-clamp-2",children:ke.description})]}),y.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap justify-end",children:[et&&(me==null?void 0:me.configured)&&y.jsx("span",{className:`flex-shrink-0 inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium border ${ti?"bg-emerald-900/40 text-emerald-300 border-emerald-700/60":"bg-gray-800 text-gray-300 border-gray-700"}`,children:ti?"Default":"Configured"}),y.jsxs("span",{className:`flex-shrink-0 inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium border ${ct.classes}`,children:[y.jsx(Ie,{className:"h-3 w-3"}),ct.label]})]})]}),me&&et&&me.configured&&y.jsxs("div",{className:"mt-3 rounded-lg border border-gray-800 bg-gray-950/50 p-3 space-y-2",children:[y.jsxs("div",{className:"flex items-center justify-between gap-2",children:[y.jsx("span",{className:"text-[11px] uppercase tracking-wider text-gray-500",children:"Current model"}),y.jsx("span",{className:"text-xs text-gray-200 truncate",title:Va,children:Va})]}),Rh&&me&&y.jsxs("div",{className:"space-y-1",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx("select",{value:As,onChange:Ul=>ve(ql=>({...ql,[me.id]:Ul.target.value})),disabled:z===me.id,className:"min-w-0 flex-1 px-2.5 py-1.5 rounded-lg bg-gray-950 border border-gray-700 text-xs text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50",children:Ua.map(Ul=>y.jsx("option",{value:Ul,children:Ul},Ul))}),y.jsx("button",{onClick:()=>me&&void ks(me,As,$i,ti),disabled:z===me.id||!As||As===$i,className:"px-2.5 py-1.5 rounded-lg text-xs font-medium bg-blue-600 hover:bg-blue-700 text-white transition-colors disabled:opacity-50",children:z===me.id?"Saving...":"Apply"})]}),y.jsx("p",{className:"text-[11px] text-gray-500",children:"For custom model IDs, use Edit Keys."})]})]}),me&&y.jsxs("div",{className:"mt-4 pt-4 border-t border-gray-800 flex items-center justify-between gap-3",children:[y.jsx("div",{className:"text-xs text-gray-400",children:me.configured?me.activates_default_provider?ti?"Default provider configured":"Provider configured":"Credentials configured":"Credentials not configured"}),y.jsxs("button",{onClick:()=>Ce(me),className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-blue-700/70 bg-blue-900/30 hover:bg-blue-900/50 text-blue-300 text-xs font-medium transition-colors",children:[y.jsx(V2,{className:"h-3.5 w-3.5"}),me.configured?"Edit Keys":"Configure"]})]})]},ke.name)})})]},te)),x&&y.jsx("div",{className:"fixed inset-0 z-50 bg-black/70 flex items-center justify-center p-4",onMouseDown:te=>{te.target===te.currentTarget&&Ee()},children:y.jsxs("div",{className:"w-full max-w-lg bg-gray-900 border border-gray-800 rounded-xl shadow-xl",children:[y.jsxs("div",{className:"px-5 py-4 border-b border-gray-800 flex items-center justify-between gap-3",children:[y.jsxs("div",{children:[y.jsxs("h3",{className:"text-sm font-semibold text-white",children:["Configure ",x.name]}),y.jsx("p",{className:"text-xs text-gray-400 mt-0.5",children:x.configured?"Enter only fields you want to update.":"Enter required fields to configure this integration."})]}),y.jsx("button",{onClick:Ee,disabled:q,className:"text-gray-400 hover:text-white transition-colors disabled:opacity-50","aria-label":"Close",children:y.jsx(Mo,{className:"h-4 w-4"})})]}),y.jsxs("div",{className:"p-5 space-y-4",children:[x.activates_default_provider&&y.jsxs("div",{className:"rounded-lg border border-blue-800 bg-blue-950/30 p-3 text-xs text-blue-200",children:["Saving here updates credentials and switches your default AI provider to"," ",y.jsx("strong",{children:x.name}),". For advanced provider settings, use"," ",y.jsx(Wp,{to:"/config",className:"underline underline-offset-2 hover:text-blue-100",children:"Configuration"}),"."]}),x.fields.map(te=>(()=>{var Vl,St;const be=Br(x.id,te),ke=be.length>0,ct=te.input_type==="secret",Ie=ct?te.masked_value||(te.has_value?"••••••••":void 0):void 0,me=x.activates_default_provider&&x.id===ne,et=((Vl=te.current_value)==null?void 0:Vl.trim())||me&&((St=ue==null?void 0:ue.model)==null?void 0:St.trim())||"",ti=et?`Keep current model (${et})`:"Keep current model";return y.jsxs("div",{children:[y.jsxs("label",{className:"flex items-center gap-2 text-sm font-medium text-gray-300 mb-1.5",children:[y.jsx("span",{children:te.label}),te.required&&y.jsx("span",{className:"text-red-400",children:"*"}),te.has_value&&y.jsx("span",{className:"text-[11px] text-green-400 bg-green-900/30 border border-green-800 px-1.5 py-0.5 rounded",children:"Configured"})]}),ke?y.jsxs("div",{className:"space-y-2",children:[y.jsxs("select",{value:S[te.key]??(te.has_value?Lr:""),onChange:Tt=>Mt(te.key,Tt.target.value),className:"w-full px-3 py-2 rounded-lg bg-gray-950 border border-gray-700 text-sm text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent",children:[te.has_value?y.jsx("option",{value:Lr,children:ti}):y.jsx("option",{value:"",disabled:!0,children:"Select a recommended model"}),be.map(Tt=>y.jsx("option",{value:Tt,children:Tt},Tt)),y.jsx("option",{value:tu,children:"Custom model..."}),te.has_value&&y.jsx("option",{value:mx,children:"Clear current model"})]}),S[te.key]===tu&&y.jsx("input",{type:"text",value:C[te.key]??"",onChange:Tt=>ot(te.key,Tt.target.value),placeholder:px(x.id),className:"w-full px-3 py-2 rounded-lg bg-gray-950 border border-gray-700 text-sm text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"}),y.jsxs("p",{className:"text-[11px] text-gray-500",children:["Pick a recommended model or choose Custom model. ",px(x.id),"."]})]}):y.jsxs("div",{className:"space-y-2",children:[Ie&&y.jsxs("p",{className:"text-[11px] text-gray-500",children:["Current value: ",y.jsx("span",{className:"font-mono text-gray-300",children:Ie})]}),y.jsx("input",{type:ct?"password":"text",value:S[te.key]??"",onChange:Tt=>Mt(te.key,Tt.target.value),placeholder:te.required?te.has_value?"Enter a new value to replace current":"Enter value":te.has_value?"Type new value, or leave empty to keep current":"Optional",className:"w-full px-3 py-2 rounded-lg bg-gray-950 border border-gray-700 text-sm text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"})]})]},te.key)})()),I&&y.jsx("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:I})]}),y.jsxs("div",{className:"px-5 py-4 border-t border-gray-800 flex items-center justify-end gap-2",children:[y.jsx("button",{onClick:Ee,disabled:q,className:"px-4 py-2 rounded-lg text-sm border border-gray-700 text-gray-300 hover:bg-gray-800 transition-colors disabled:opacity-50",children:"Cancel"}),y.jsx("button",{onClick:Hl,disabled:q,className:"px-4 py-2 rounded-lg text-sm font-medium bg-blue-600 hover:bg-blue-700 text-white transition-colors disabled:opacity-50",children:q?"Saving...":x.activates_default_provider?"Save & Activate":"Save Keys"})]})]})})]})}function tN(n,e){return n.length<=e?n:n.slice(0,e)+"..."}function nN(n){return new Date(n).toLocaleString()}function iN(){const[n,e]=M.useState([]),[t,i]=M.useState(!0),[s,r]=M.useState(null),[o,u]=M.useState(""),[f,d]=M.useState(""),[p,b]=M.useState(!1),[x,w]=M.useState(null),[S,A]=M.useState(""),[C,T]=M.useState(""),[R,E]=M.useState(""),[q,B]=M.useState(null),[I,V]=M.useState(!1),Q=(J,ve)=>{i(!0),xT(J||void 0,ve||void 0).then(e).catch(z=>r(z.message)).finally(()=>i(!1))};M.useEffect(()=>{Q()},[]);const Z=()=>{Q(o,f)},ue=J=>{J.key==="Enter"&&Z()},fe=Array.from(new Set(n.map(J=>J.category))).sort(),ne=async()=>{if(!S.trim()||!C.trim()){B("Key and content are required.");return}V(!0),B(null);try{await vT(S.trim(),C.trim(),R.trim()||void 0),Q(o,f),b(!1),A(""),T(""),E("")}catch(J){B(J instanceof Error?J.message:"Failed to store memory")}finally{V(!1)}},pe=async J=>{try{await wT(J),e(ve=>ve.filter(z=>z.key!==J))}catch(ve){r(ve instanceof Error?ve.message:"Failed to delete memory")}finally{w(null)}};return s&&n.length===0?y.jsx("div",{className:"p-6",children:y.jsxs("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-4 text-red-300",children:["Failed to load memory: ",s]})}):y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx(Vm,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Memory (",n.length,")"]})]}),y.jsxs("button",{onClick:()=>b(!0),className:"flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium px-4 py-2 rounded-lg transition-colors",children:[y.jsx(q2,{className:"h-4 w-4"}),"Add Memory"]})]}),y.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[y.jsxs("div",{className:"relative flex-1",children:[y.jsx(mh,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500"}),y.jsx("input",{type:"text",value:o,onChange:J=>u(J.target.value),onKeyDown:ue,placeholder:"Search memory entries...",className:"w-full bg-gray-900 border border-gray-700 rounded-lg pl-10 pr-4 py-2.5 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),y.jsxs("div",{className:"relative",children:[y.jsx(Xp,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500"}),y.jsxs("select",{value:f,onChange:J=>d(J.target.value),className:"bg-gray-900 border border-gray-700 rounded-lg pl-10 pr-8 py-2.5 text-sm text-white appearance-none focus:outline-none focus:ring-2 focus:ring-blue-500 cursor-pointer",children:[y.jsx("option",{value:"",children:"All Categories"}),fe.map(J=>y.jsx("option",{value:J,children:J},J))]})]}),y.jsx("button",{onClick:Z,className:"px-4 py-2.5 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium rounded-lg transition-colors",children:"Search"})]}),s&&y.jsx("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:s}),p&&y.jsx("div",{className:"fixed inset-0 bg-black/60 flex items-center justify-center z-50",children:y.jsxs("div",{className:"bg-gray-900 border border-gray-700 rounded-xl p-6 w-full max-w-md mx-4",children:[y.jsxs("div",{className:"flex items-center justify-between mb-4",children:[y.jsx("h3",{className:"text-lg font-semibold text-white",children:"Add Memory"}),y.jsx("button",{onClick:()=>{b(!1),B(null)},className:"text-gray-400 hover:text-white transition-colors",children:y.jsx(Mo,{className:"h-5 w-5"})})]}),q&&y.jsx("div",{className:"mb-4 rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:q}),y.jsxs("div",{className:"space-y-4",children:[y.jsxs("div",{children:[y.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:["Key ",y.jsx("span",{className:"text-red-400",children:"*"})]}),y.jsx("input",{type:"text",value:S,onChange:J=>A(J.target.value),placeholder:"e.g. user_preferences",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),y.jsxs("div",{children:[y.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:["Content ",y.jsx("span",{className:"text-red-400",children:"*"})]}),y.jsx("textarea",{value:C,onChange:J=>T(J.target.value),placeholder:"Memory content...",rows:4,className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 resize-none"})]}),y.jsxs("div",{children:[y.jsx("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:"Category (optional)"}),y.jsx("input",{type:"text",value:R,onChange:J=>E(J.target.value),placeholder:"e.g. preferences, context, facts",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]})]}),y.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[y.jsx("button",{onClick:()=>{b(!1),B(null)},className:"px-4 py-2 text-sm font-medium text-gray-300 hover:text-white border border-gray-700 rounded-lg hover:bg-gray-800 transition-colors",children:"Cancel"}),y.jsx("button",{onClick:ne,disabled:I,className:"px-4 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-lg transition-colors disabled:opacity-50",children:I?"Saving...":"Save"})]})]})}),t?y.jsx("div",{className:"flex items-center justify-center h-32",children:y.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-blue-500 border-t-transparent"})}):n.length===0?y.jsxs("div",{className:"bg-gray-900 rounded-xl border border-gray-800 p-8 text-center",children:[y.jsx(Vm,{className:"h-10 w-10 text-gray-600 mx-auto mb-3"}),y.jsx("p",{className:"text-gray-400",children:"No memory entries found."})]}):y.jsx("div",{className:"bg-gray-900 rounded-xl border border-gray-800 overflow-x-auto",children:y.jsxs("table",{className:"w-full text-sm",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"border-b border-gray-800",children:[y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Key"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Content"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Category"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Timestamp"}),y.jsx("th",{className:"text-right px-4 py-3 text-gray-400 font-medium",children:"Actions"})]})}),y.jsx("tbody",{children:n.map(J=>y.jsxs("tr",{className:"border-b border-gray-800/50 hover:bg-gray-800/30 transition-colors",children:[y.jsx("td",{className:"px-4 py-3 text-white font-medium font-mono text-xs",children:J.key}),y.jsx("td",{className:"px-4 py-3 text-gray-300 max-w-[300px]",children:y.jsx("span",{title:J.content,children:tN(J.content,80)})}),y.jsx("td",{className:"px-4 py-3",children:y.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-gray-800 text-gray-300 capitalize",children:J.category})}),y.jsx("td",{className:"px-4 py-3 text-gray-400 text-xs whitespace-nowrap",children:nN(J.timestamp)}),y.jsx("td",{className:"px-4 py-3 text-right",children:x===J.key?y.jsxs("div",{className:"flex items-center justify-end gap-2",children:[y.jsx("span",{className:"text-xs text-red-400",children:"Delete?"}),y.jsx("button",{onClick:()=>pe(J.key),className:"text-red-400 hover:text-red-300 text-xs font-medium",children:"Yes"}),y.jsx("button",{onClick:()=>w(null),className:"text-gray-400 hover:text-white text-xs font-medium",children:"No"})]}):y.jsx("button",{onClick:()=>w(J.key),className:"text-gray-400 hover:text-red-400 transition-colors",children:y.jsx(Y2,{className:"h-4 w-4"})})})]},J.id))})]})})]})}function gx(n){if(!n)return"Unknown";const e=new Date(n);return Number.isNaN(e.getTime())?n:e.toLocaleString()}function lN(){const[n,e]=M.useState([]),[t,i]=M.useState(!0),[s,r]=M.useState(!1),[o,u]=M.useState(null),[f,d]=M.useState(null),p=async(x=!1)=>{x?r(!0):i(!0),u(null);try{const w=await ST();e(w)}catch(w){u(w instanceof Error?w.message:"Failed to load paired devices")}finally{x?r(!1):i(!1)}};M.useEffect(()=>{p(!1)},[]);const b=async x=>{try{await kT(x),e(w=>w.filter(S=>S.id!==x)),d(null)}catch(w){u(w instanceof Error?w.message:"Failed to revoke paired device"),d(null)}};return y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx(I2,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Paired Devices (",n.length,")"]})]}),y.jsxs("button",{onClick:()=>{p(!0)},disabled:s,className:"inline-flex items-center gap-2 rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700 disabled:opacity-60",children:[y.jsx(P2,{className:`h-4 w-4 ${s?"animate-spin":""}`}),"Refresh"]})]}),o&&y.jsx("div",{className:"rounded-lg border border-red-700 bg-red-900/30 p-3 text-sm text-red-300",children:o}),t?y.jsx("div",{className:"flex h-32 items-center justify-center",children:y.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-2 border-blue-500 border-t-transparent"})}):n.length===0?y.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900 p-8 text-center",children:[y.jsx(Q3,{className:"mx-auto mb-3 h-10 w-10 text-gray-600"}),y.jsx("p",{className:"text-gray-400",children:"No paired devices found."})]}):y.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-800 bg-gray-900",children:y.jsxs("table",{className:"w-full text-sm",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"border-b border-gray-800",children:[y.jsx("th",{className:"px-4 py-3 text-left font-medium text-gray-400",children:"Device ID"}),y.jsx("th",{className:"px-4 py-3 text-left font-medium text-gray-400",children:"Paired By"}),y.jsx("th",{className:"px-4 py-3 text-left font-medium text-gray-400",children:"Created"}),y.jsx("th",{className:"px-4 py-3 text-left font-medium text-gray-400",children:"Last Seen"}),y.jsx("th",{className:"px-4 py-3 text-right font-medium text-gray-400",children:"Actions"})]})}),y.jsx("tbody",{children:n.map(x=>y.jsxs("tr",{className:"border-b border-gray-800/50 transition-colors hover:bg-gray-800/30",children:[y.jsx("td",{className:"px-4 py-3 font-mono text-xs text-white",children:x.token_fingerprint}),y.jsx("td",{className:"px-4 py-3 text-gray-300",children:x.paired_by??"Unknown"}),y.jsx("td",{className:"px-4 py-3 whitespace-nowrap text-xs text-gray-400",children:gx(x.created_at)}),y.jsx("td",{className:"px-4 py-3 whitespace-nowrap text-xs text-gray-400",children:gx(x.last_seen_at)}),y.jsx("td",{className:"px-4 py-3 text-right",children:f===x.id?y.jsxs("div",{className:"inline-flex items-center gap-2",children:[y.jsx("span",{className:"text-xs text-red-400",children:"Revoke?"}),y.jsx("button",{onClick:()=>{b(x.id)},className:"text-xs font-medium text-red-400 hover:text-red-300",children:"Yes"}),y.jsx("button",{onClick:()=>d(null),className:"text-xs font-medium text-gray-400 hover:text-white",children:"No"})]}):y.jsx("button",{onClick:()=>d(x.id),className:"text-xs font-medium text-red-400 hover:text-red-300",children:"Revoke"})})]},x.id))})]})})]})}/*! + */const lT=ie("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),Gi="zeroclaw_token";let os=null;function sT(n){try{return sessionStorage.getItem(n)}catch{return null}}function F2(n,e){try{sessionStorage.setItem(n,e)}catch{}}function aT(n){try{sessionStorage.removeItem(n)}catch{}}function X2(n){try{localStorage.removeItem(n)}catch{}}function Ca(){if(os&&os.length>0)return os;const n=sT(Gi);if(n&&n.length>0)return os=n,n;try{const e=localStorage.getItem(Gi);if(e&&e.length>0)return os=e,F2(Gi,e),localStorage.removeItem(Gi),e}catch{}return null}function Q2(n){os=n,F2(Gi,n),X2(Gi)}function Z2(){os=null,aT(Gi),X2(Gi)}function nm(){const n=Ca();return n!==null&&n.length>0}class rT extends Error{constructor(){super("Unauthorized"),this.name="UnauthorizedError"}}async function Rt(n,e={}){const t=Ca(),i=new Headers(e.headers);t&&i.set("Authorization",`Bearer ${t}`),e.body&&typeof e.body=="string"&&!i.has("Content-Type")&&i.set("Content-Type","application/json");const s=await fetch(n,{...e,headers:i});if(s.status===401)throw Z2(),window.dispatchEvent(new Event("zeroclaw-unauthorized")),new rT;if(!s.ok){const r=await s.text().catch(()=>"");throw new Error(`API ${s.status}: ${r||s.statusText}`)}if(s.status!==204)return s.json()}function ws(n,e){if(n!==null&&typeof n=="object"&&!Array.isArray(n)&&e in n){const t=n[e];if(t!==void 0)return t}return n}async function oT(n){const e=await fetch("/pair",{method:"POST",headers:{"X-Pairing-Code":n}});if(!e.ok){const i=await e.text().catch(()=>"");throw new Error(`Pairing failed (${e.status}): ${i||e.statusText}`)}const t=await e.json();return Q2(t.token),t}async function cT(){const n=await fetch("/health");if(!n.ok)throw new Error(`Health check failed (${n.status})`);return n.json()}function $2(){return Rt("/api/status")}function uT(){return Rt("/api/config").then(n=>typeof n=="string"?n:n.content)}function hT(n){return Rt("/api/config",{method:"PUT",headers:{"Content-Type":"application/toml"},body:n})}function fT(){return Rt("/api/tools").then(n=>ws(n,"tools"))}function dT(){return Rt("/api/cron").then(n=>ws(n,"jobs"))}function mT(n){return Rt("/api/cron",{method:"POST",body:JSON.stringify(n)}).then(e=>typeof e.job=="object"?e.job:e)}function pT(n){return Rt(`/api/cron/${encodeURIComponent(n)}`,{method:"DELETE"})}function gT(){return Rt("/api/integrations").then(n=>ws(n,"integrations"))}function yT(){return Rt("/api/integrations/settings")}function ax(n,e){return Rt(`/api/integrations/${encodeURIComponent(n)}/credentials`,{method:"PUT",body:JSON.stringify(e)})}function bT(){return Rt("/api/doctor",{method:"POST",body:JSON.stringify({})}).then(n=>Array.isArray(n)?n:n.results)}function xT(n,e){const t=new URLSearchParams;n&&t.set("query",n),e&&t.set("category",e);const i=t.toString();return Rt(`/api/memory${i?`?${i}`:""}`).then(s=>ws(s,"entries"))}function vT(n,e,t){return Rt("/api/memory",{method:"POST",body:JSON.stringify({key:n,content:e,category:t})}).then(()=>{})}function wT(n){return Rt(`/api/memory/${encodeURIComponent(n)}`,{method:"DELETE"})}function ST(){return Rt("/api/pairing/devices").then(n=>ws(n,"devices"))}function kT(n){return Rt(`/api/pairing/devices/${encodeURIComponent(n)}`,{method:"DELETE"})}function J2(){return Rt("/api/cost").then(n=>ws(n,"cost"))}function CT(){return Rt("/api/cli-tools").then(n=>ws(n,"cli_tools"))}const im=["en","zh-CN","ja","ru","fr","vi","el"],AT={en:"EN",tr:"TR","zh-CN":"简体",ja:"日本語",ru:"РУ",fr:"FR",vi:"VI",el:"ΕΛ"},MT=["en","tr","zh-CN","ja","ru","fr","vi","el"],rx={en:{"nav.dashboard":"Dashboard","nav.agent":"Agent","nav.tools":"Tools","nav.cron":"Scheduled Jobs","nav.integrations":"Integrations","nav.memory":"Memory","nav.devices":"Devices","nav.config":"Configuration","nav.cost":"Cost Tracker","nav.logs":"Logs","nav.doctor":"Doctor","dashboard.title":"Dashboard","dashboard.provider":"Provider","dashboard.model":"Model","dashboard.uptime":"Uptime","dashboard.temperature":"Temperature","dashboard.gateway_port":"Gateway Port","dashboard.locale":"Locale","dashboard.memory_backend":"Memory Backend","dashboard.paired":"Paired","dashboard.channels":"Channels","dashboard.health":"Health","dashboard.status":"Status","dashboard.overview":"Overview","dashboard.system_info":"System Information","dashboard.quick_actions":"Quick Actions","agent.title":"Agent Chat","agent.send":"Send","agent.placeholder":"Type a message...","agent.connecting":"Connecting...","agent.connected":"Connected","agent.disconnected":"Disconnected","agent.reconnecting":"Reconnecting...","agent.thinking":"Thinking...","agent.tool_call":"Tool Call","agent.tool_result":"Tool Result","tools.title":"Available Tools","tools.name":"Name","tools.description":"Description","tools.parameters":"Parameters","tools.search":"Search tools...","tools.empty":"No tools available.","tools.count":"Total tools","cron.title":"Scheduled Jobs","cron.add":"Add Job","cron.delete":"Delete","cron.enable":"Enable","cron.disable":"Disable","cron.name":"Name","cron.command":"Command","cron.schedule":"Schedule","cron.next_run":"Next Run","cron.last_run":"Last Run","cron.last_status":"Last Status","cron.enabled":"Enabled","cron.empty":"No scheduled jobs.","cron.confirm_delete":"Are you sure you want to delete this job?","integrations.title":"Integrations","integrations.available":"Available","integrations.active":"Active","integrations.coming_soon":"Coming Soon","integrations.category":"Category","integrations.status":"Status","integrations.search":"Search integrations...","integrations.empty":"No integrations found.","integrations.activate":"Activate","integrations.deactivate":"Deactivate","memory.title":"Memory Store","memory.search":"Search memory...","memory.add":"Store Memory","memory.delete":"Delete","memory.key":"Key","memory.content":"Content","memory.category":"Category","memory.timestamp":"Timestamp","memory.session":"Session","memory.score":"Score","memory.empty":"No memory entries found.","memory.confirm_delete":"Are you sure you want to delete this memory entry?","memory.all_categories":"All Categories","config.title":"Configuration","config.save":"Save","config.reset":"Reset","config.saved":"Configuration saved successfully.","config.error":"Failed to save configuration.","config.loading":"Loading configuration...","config.editor_placeholder":"TOML configuration...","cost.title":"Cost Tracker","cost.session":"Session Cost","cost.daily":"Daily Cost","cost.monthly":"Monthly Cost","cost.total_tokens":"Total Tokens","cost.request_count":"Requests","cost.by_model":"Cost by Model","cost.model":"Model","cost.tokens":"Tokens","cost.requests":"Requests","cost.usd":"Cost (USD)","logs.title":"Live Logs","logs.clear":"Clear","logs.pause":"Pause","logs.resume":"Resume","logs.filter":"Filter logs...","logs.empty":"No log entries.","logs.connected":"Connected to event stream.","logs.disconnected":"Disconnected from event stream.","doctor.title":"System Diagnostics","doctor.run":"Run Diagnostics","doctor.running":"Running diagnostics...","doctor.ok":"OK","doctor.warn":"Warning","doctor.error":"Error","doctor.severity":"Severity","doctor.category":"Category","doctor.message":"Message","doctor.empty":"No diagnostics have been run yet.","doctor.summary":"Diagnostic Summary","auth.pair":"Pair Device","auth.pairing_code":"Pairing Code","auth.pair_button":"Pair","auth.logout":"Logout","auth.pairing_success":"Pairing successful!","auth.pairing_failed":"Pairing failed. Please try again.","auth.enter_code":"Enter your pairing code to connect to the agent.","common.loading":"Loading...","common.error":"An error occurred.","common.retry":"Retry","common.cancel":"Cancel","common.confirm":"Confirm","common.save":"Save","common.delete":"Delete","common.edit":"Edit","common.close":"Close","common.yes":"Yes","common.no":"No","common.search":"Search...","common.no_data":"No data available.","common.refresh":"Refresh","common.back":"Back","common.actions":"Actions","common.name":"Name","common.description":"Description","common.status":"Status","common.created":"Created","common.updated":"Updated","health.title":"System Health","health.component":"Component","health.status":"Status","health.last_ok":"Last OK","health.last_error":"Last Error","health.restart_count":"Restarts","health.pid":"Process ID","health.uptime":"Uptime","health.updated_at":"Last Updated"},tr:{"nav.dashboard":"Kontrol Paneli","nav.agent":"Ajan","nav.tools":"Araclar","nav.cron":"Zamanlanmis Gorevler","nav.integrations":"Entegrasyonlar","nav.memory":"Hafiza","nav.devices":"Cihazlar","nav.config":"Yapilandirma","nav.cost":"Maliyet Takibi","nav.logs":"Kayitlar","nav.doctor":"Doktor","dashboard.title":"Kontrol Paneli","dashboard.provider":"Saglayici","dashboard.model":"Model","dashboard.uptime":"Calisma Suresi","dashboard.temperature":"Sicaklik","dashboard.gateway_port":"Gecit Portu","dashboard.locale":"Yerel Ayar","dashboard.memory_backend":"Hafiza Motoru","dashboard.paired":"Eslestirilmis","dashboard.channels":"Kanallar","dashboard.health":"Saglik","dashboard.status":"Durum","dashboard.overview":"Genel Bakis","dashboard.system_info":"Sistem Bilgisi","dashboard.quick_actions":"Hizli Islemler","agent.title":"Ajan Sohbet","agent.send":"Gonder","agent.placeholder":"Bir mesaj yazin...","agent.connecting":"Baglaniyor...","agent.connected":"Bagli","agent.disconnected":"Baglanti Kesildi","agent.reconnecting":"Yeniden Baglaniyor...","agent.thinking":"Dusunuyor...","agent.tool_call":"Arac Cagrisi","agent.tool_result":"Arac Sonucu","tools.title":"Mevcut Araclar","tools.name":"Ad","tools.description":"Aciklama","tools.parameters":"Parametreler","tools.search":"Arac ara...","tools.empty":"Mevcut arac yok.","tools.count":"Toplam arac","cron.title":"Zamanlanmis Gorevler","cron.add":"Gorev Ekle","cron.delete":"Sil","cron.enable":"Etkinlestir","cron.disable":"Devre Disi Birak","cron.name":"Ad","cron.command":"Komut","cron.schedule":"Zamanlama","cron.next_run":"Sonraki Calistirma","cron.last_run":"Son Calistirma","cron.last_status":"Son Durum","cron.enabled":"Etkin","cron.empty":"Zamanlanmis gorev yok.","cron.confirm_delete":"Bu gorevi silmek istediginizden emin misiniz?","integrations.title":"Entegrasyonlar","integrations.available":"Mevcut","integrations.active":"Aktif","integrations.coming_soon":"Yakinda","integrations.category":"Kategori","integrations.status":"Durum","integrations.search":"Entegrasyon ara...","integrations.empty":"Entegrasyon bulunamadi.","integrations.activate":"Etkinlestir","integrations.deactivate":"Devre Disi Birak","memory.title":"Hafiza Deposu","memory.search":"Hafizada ara...","memory.add":"Hafiza Kaydet","memory.delete":"Sil","memory.key":"Anahtar","memory.content":"Icerik","memory.category":"Kategori","memory.timestamp":"Zaman Damgasi","memory.session":"Oturum","memory.score":"Skor","memory.empty":"Hafiza kaydi bulunamadi.","memory.confirm_delete":"Bu hafiza kaydini silmek istediginizden emin misiniz?","memory.all_categories":"Tum Kategoriler","config.title":"Yapilandirma","config.save":"Kaydet","config.reset":"Sifirla","config.saved":"Yapilandirma basariyla kaydedildi.","config.error":"Yapilandirma kaydedilemedi.","config.loading":"Yapilandirma yukleniyor...","config.editor_placeholder":"TOML yapilandirmasi...","cost.title":"Maliyet Takibi","cost.session":"Oturum Maliyeti","cost.daily":"Gunluk Maliyet","cost.monthly":"Aylik Maliyet","cost.total_tokens":"Toplam Token","cost.request_count":"Istekler","cost.by_model":"Modele Gore Maliyet","cost.model":"Model","cost.tokens":"Token","cost.requests":"Istekler","cost.usd":"Maliyet (USD)","logs.title":"Canli Kayitlar","logs.clear":"Temizle","logs.pause":"Duraklat","logs.resume":"Devam Et","logs.filter":"Kayitlari filtrele...","logs.empty":"Kayit girisi yok.","logs.connected":"Olay akisina baglandi.","logs.disconnected":"Olay akisi baglantisi kesildi.","doctor.title":"Sistem Teshisleri","doctor.run":"Teshis Calistir","doctor.running":"Teshisler calistiriliyor...","doctor.ok":"Tamam","doctor.warn":"Uyari","doctor.error":"Hata","doctor.severity":"Ciddiyet","doctor.category":"Kategori","doctor.message":"Mesaj","doctor.empty":"Henuz teshis calistirilmadi.","doctor.summary":"Teshis Ozeti","auth.pair":"Cihaz Esle","auth.pairing_code":"Eslestirme Kodu","auth.pair_button":"Esle","auth.logout":"Cikis Yap","auth.pairing_success":"Eslestirme basarili!","auth.pairing_failed":"Eslestirme basarisiz. Lutfen tekrar deneyin.","auth.enter_code":"Ajana baglanmak icin eslestirme kodunuzu girin.","common.loading":"Yukleniyor...","common.error":"Bir hata olustu.","common.retry":"Tekrar Dene","common.cancel":"Iptal","common.confirm":"Onayla","common.save":"Kaydet","common.delete":"Sil","common.edit":"Duzenle","common.close":"Kapat","common.yes":"Evet","common.no":"Hayir","common.search":"Ara...","common.no_data":"Veri mevcut degil.","common.refresh":"Yenile","common.back":"Geri","common.actions":"Islemler","common.name":"Ad","common.description":"Aciklama","common.status":"Durum","common.created":"Olusturulma","common.updated":"Guncellenme","health.title":"Sistem Sagligi","health.component":"Bilesen","health.status":"Durum","health.last_ok":"Son Basarili","health.last_error":"Son Hata","health.restart_count":"Yeniden Baslatmalar","health.pid":"Islem Kimligi","health.uptime":"Calisma Suresi","health.updated_at":"Son Guncelleme"},"zh-CN":{"nav.dashboard":"仪表盘","nav.agent":"智能体","nav.tools":"工具","nav.cron":"定时任务","nav.integrations":"集成","nav.memory":"记忆","nav.devices":"设备","nav.config":"配置","nav.cost":"成本追踪","nav.logs":"日志","nav.doctor":"诊断","dashboard.title":"仪表盘","dashboard.provider":"提供商","dashboard.model":"模型","dashboard.uptime":"运行时长","dashboard.temperature":"温度","dashboard.gateway_port":"网关端口","dashboard.locale":"语言区域","dashboard.memory_backend":"记忆后端","dashboard.paired":"已配对","dashboard.channels":"渠道","dashboard.health":"健康状态","dashboard.status":"状态","dashboard.overview":"总览","dashboard.system_info":"系统信息","dashboard.quick_actions":"快捷操作","agent.title":"智能体聊天","agent.send":"发送","agent.placeholder":"输入消息...","agent.connecting":"连接中...","agent.connected":"已连接","agent.disconnected":"已断开连接","agent.reconnecting":"重连中...","agent.thinking":"思考中...","agent.tool_call":"工具调用","agent.tool_result":"工具结果","tools.title":"可用工具","tools.name":"名称","tools.description":"描述","tools.parameters":"参数","tools.search":"搜索工具...","tools.empty":"暂无可用工具。","tools.count":"工具总数","cron.title":"定时任务","cron.add":"添加任务","cron.delete":"删除","cron.enable":"启用","cron.disable":"禁用","cron.name":"名称","cron.command":"命令","cron.schedule":"计划","cron.next_run":"下次运行","cron.last_run":"上次运行","cron.last_status":"上次状态","cron.enabled":"已启用","cron.empty":"暂无定时任务。","cron.confirm_delete":"确定要删除此任务吗?","integrations.title":"集成","integrations.available":"可用","integrations.active":"已激活","integrations.coming_soon":"即将推出","integrations.category":"分类","integrations.status":"状态","integrations.search":"搜索集成...","integrations.empty":"未找到集成。","integrations.activate":"激活","integrations.deactivate":"停用","memory.title":"记忆存储","memory.search":"搜索记忆...","memory.add":"存储记忆","memory.delete":"删除","memory.key":"键","memory.content":"内容","memory.category":"分类","memory.timestamp":"时间戳","memory.session":"会话","memory.score":"评分","memory.empty":"未找到记忆条目。","memory.confirm_delete":"确定要删除此记忆条目吗?","memory.all_categories":"全部分类","config.title":"配置","config.save":"保存","config.reset":"重置","config.saved":"配置保存成功。","config.error":"配置保存失败。","config.loading":"配置加载中...","config.editor_placeholder":"TOML 配置...","cost.title":"成本追踪","cost.session":"会话成本","cost.daily":"每日成本","cost.monthly":"每月成本","cost.total_tokens":"Token 总数","cost.request_count":"请求数","cost.by_model":"按模型统计成本","cost.model":"模型","cost.tokens":"Token","cost.requests":"请求","cost.usd":"成本(USD)","logs.title":"实时日志","logs.clear":"清空","logs.pause":"暂停","logs.resume":"继续","logs.filter":"筛选日志...","logs.empty":"暂无日志条目。","logs.connected":"已连接到事件流。","logs.disconnected":"与事件流断开连接。","doctor.title":"系统诊断","doctor.run":"运行诊断","doctor.running":"正在运行诊断...","doctor.ok":"正常","doctor.warn":"警告","doctor.error":"错误","doctor.severity":"严重级别","doctor.category":"分类","doctor.message":"消息","doctor.empty":"尚未运行诊断。","doctor.summary":"诊断摘要","auth.pair":"设备配对","auth.pairing_code":"配对码","auth.pair_button":"配对","auth.logout":"退出登录","auth.pairing_success":"配对成功!","auth.pairing_failed":"配对失败,请重试。","auth.enter_code":"输入配对码以连接到智能体。","common.loading":"加载中...","common.error":"发生错误。","common.retry":"重试","common.cancel":"取消","common.confirm":"确认","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.close":"关闭","common.yes":"是","common.no":"否","common.search":"搜索...","common.no_data":"暂无数据。","common.refresh":"刷新","common.back":"返回","common.actions":"操作","common.name":"名称","common.description":"描述","common.status":"状态","common.created":"创建时间","common.updated":"更新时间","health.title":"系统健康","health.component":"组件","health.status":"状态","health.last_ok":"最近正常","health.last_error":"最近错误","health.restart_count":"重启次数","health.pid":"进程 ID","health.uptime":"运行时长","health.updated_at":"最后更新"},ja:{},ru:{},fr:{},vi:{},el:{}};let ew="en";function TT(n){ew=n}function Vu(n){var e;return((e=rx[ew])==null?void 0:e[n])??rx.en[n]??n}function ox(n){if(!n)return"en";if(MT.includes(n))return n;const e=n.toLowerCase();return e.startsWith("tr")?"tr":e==="zh"||e.startsWith("zh-")?"zh-CN":e==="ja"||e.startsWith("ja-")?"ja":e==="ru"||e.startsWith("ru-")?"ru":e==="fr"||e.startsWith("fr-")?"fr":e==="vi"||e.startsWith("vi-")?"vi":e==="el"||e.startsWith("el-")?"el":"en"}const NT=1e3,ET=[{to:"/",icon:R3,labelKey:"nav.dashboard"},{to:"/agent",icon:z3,labelKey:"nav.agent"},{to:"/tools",icon:W2,labelKey:"nav.tools"},{to:"/cron",icon:no,labelKey:"nav.cron"},{to:"/integrations",icon:io,labelKey:"nav.integrations"},{to:"/memory",icon:Vm,labelKey:"nav.memory"},{to:"/devices",icon:I2,labelKey:"nav.devices"},{to:"/config",icon:Zp,labelKey:"nav.config"},{to:"/cost",icon:dh,labelKey:"nav.cost"},{to:"/logs",icon:Hu,labelKey:"nav.logs"},{to:"/doctor",icon:Pm,labelKey:"nav.doctor"}];function DT({isOpen:n,isCollapsed:e,onClose:t,onToggleCollapse:i}){const[s,r]=M.useState(!1);return M.useEffect(()=>{const o=setTimeout(()=>r(!0),NT);return()=>clearTimeout(o)},[]),y.jsxs(y.Fragment,{children:[y.jsx("button",{type:"button","aria-label":"Close navigation",onClick:t,className:["fixed inset-0 z-30 bg-black/50 transition-opacity md:hidden",n?"opacity-100":"pointer-events-none opacity-0"].join(" ")}),y.jsxs("aside",{className:["fixed left-0 top-0 z-40 flex h-screen w-[86vw] max-w-[17.5rem] flex-col border-r border-[#1e2f5d] bg-[#050b1a]/95 backdrop-blur-xl","shadow-[0_0_50px_-25px_rgba(8,121,255,0.7)]","transform transition-[width,transform] duration-300 ease-out",n?"translate-x-0":"-translate-x-full",e?"md:w-[6.25rem]":"md:w-[17.5rem]","md:translate-x-0"].join(" "),children:[y.jsxs("div",{className:"relative flex items-center justify-between border-b border-[#1a2d5e] px-4 py-4",children:[y.jsx("div",{className:"flex items-center gap-3 overflow-hidden",children:!e&&y.jsxs(y.Fragment,{children:[y.jsx("img",{src:"/_app/logo.png",alt:"ZeroClaw",className:"h-9 w-9 shrink-0 rounded-xl object-contain"}),y.jsx("span",{className:"text-lg font-semibold tracking-[0.1em] text-white",children:"ZeroClaw"})]})}),y.jsxs("div",{className:"flex items-center gap-2",children:[s&&y.jsx("button",{type:"button",onClick:i,"aria-label":e?"Expand navigation":"Collapse navigation",className:"hidden rounded-lg border border-[#2c4e97] bg-[#0a1b3f]/60 p-1.5 text-[#8bb9ff] transition hover:border-[#4f83ff] hover:text-white md:block",children:y.jsx(S3,{className:"h-4 w-4"})}),y.jsx("button",{type:"button",onClick:t,"aria-label":"Close navigation",className:"rounded-lg p-1.5 text-gray-300 transition-colors hover:bg-gray-800 hover:text-white md:hidden",children:y.jsx(Mo,{className:"h-4 w-4"})})]})]}),y.jsx("nav",{className:"flex-1 space-y-1 overflow-y-auto px-3 py-4",children:ET.map(({to:o,icon:u,labelKey:f})=>y.jsxs(j2,{to:o,end:o==="/",onClick:t,title:e?Vu(f):void 0,className:({isActive:d})=>["group flex items-center gap-3 overflow-hidden rounded-xl px-3 py-2.5 text-sm font-medium transition-all duration-300",d?"border border-[#3a6de0] bg-[#0b2f80]/55 text-white shadow-[0_0_30px_-16px_rgba(72,140,255,0.95)]":"border border-transparent text-[#9bb7eb] hover:border-[#294a8d] hover:bg-[#07132f] hover:text-white"].join(" "),children:[y.jsx(u,{className:"h-5 w-5 shrink-0 transition-transform duration-300 group-hover:scale-110"}),y.jsx("span",{className:["whitespace-nowrap transition-[opacity,transform,width] duration-300",e?"w-0 -translate-x-3 opacity-0 md:invisible":"w-auto opacity-100"].join(" "),children:Vu(f)})]},o))}),y.jsxs("div",{className:["mx-3 mb-4 rounded-xl border border-[#1b3670] bg-[#071328]/80 px-3 py-3 text-xs text-[#89a9df] transition-all duration-300",e?"md:px-1.5 md:text-center":""].join(" "),children:[y.jsx("p",{className:e?"hidden md:block":"",children:"Gateway + Dashboard"}),y.jsx("p",{className:e?"text-[10px] uppercase tracking-widest":"mt-1 text-[#5f84cc]",children:e?"UI":"Runtime Mode"})]})]})]})}const tw=M.createContext(null);function OT({children:n}){const[e,t]=M.useState(Ca),[i,s]=M.useState(nm),[r,o]=M.useState(!nm());M.useEffect(()=>{if(nm())return;let p=!1;return cT().then(b=>{p||b.require_pairing||s(!0)}).catch(()=>{}).finally(()=>{p||o(!1)}),()=>{p=!0}},[]),M.useEffect(()=>{const p=b=>{if(b.key===Gi){const x=Ca();t(x),s(x!==null&&x.length>0)}};return window.addEventListener("storage",p),()=>window.removeEventListener("storage",p)},[]);const u=M.useCallback(async p=>{const{token:b}=await oT(p);Q2(b),t(b),s(!0)},[]),f=M.useCallback(()=>{Z2(),t(null),s(!1)},[]),d={token:e,isAuthenticated:i,loading:r,pair:u,logout:f};return m2.createElement(tw.Provider,{value:d},n)}function nw(){const n=M.useContext(tw);if(!n)throw new Error("useAuth must be used within an ");return n}const jT={"/":"nav.dashboard","/agent":"nav.agent","/tools":"nav.tools","/cron":"nav.cron","/integrations":"nav.integrations","/memory":"nav.memory","/devices":"nav.devices","/config":"nav.config","/cost":"nav.cost","/logs":"nav.logs","/doctor":"nav.doctor"},RT="English · 简体中文 · 日本語 · Русский · Français · Tiếng Việt · Ελληνικά";function _T({isSidebarCollapsed:n,onToggleSidebar:e,onToggleSidebarCollapse:t}){const i=Zi(),{logout:s}=nw(),{locale:r,setAppLocale:o}=D6(),u=jT[i.pathname]??"nav.dashboard",f=Vu(u),d=()=>{const p=im.indexOf(r),b=im[(p+1)%im.length]??"en";o(b)};return y.jsxs("header",{className:"glass-header relative flex min-h-[4.5rem] flex-wrap items-center justify-between gap-2 rounded-2xl border border-[#1a3670] px-4 py-3 sm:px-5 sm:py-3.5 md:flex-nowrap md:px-8 md:py-4",children:[y.jsx("div",{className:"absolute inset-0 pointer-events-none opacity-70 bg-[radial-gradient(circle_at_15%_30%,rgba(41,148,255,0.22),transparent_45%),radial-gradient(circle_at_85%_75%,rgba(0,209,255,0.14),transparent_40%)]"}),y.jsxs("div",{className:"relative flex min-w-0 items-center gap-2.5 sm:gap-3",children:[y.jsx("button",{type:"button",onClick:e,"aria-label":"Open navigation",className:"rounded-lg border border-[#294a8f] bg-[#081637]/70 p-1.5 text-[#9ec2ff] transition hover:border-[#4f83ff] hover:text-white md:hidden",children:y.jsx(L3,{className:"h-5 w-5"})}),y.jsxs("div",{className:"min-w-0",children:[y.jsx("h1",{className:"truncate text-base font-semibold tracking-wide text-white sm:text-lg",children:f}),y.jsx("p",{className:"hidden text-[10px] uppercase tracking-[0.16em] text-[#7ea5eb] sm:block",children:"Electric dashboard"})]})]}),y.jsxs("div",{className:"relative flex w-full items-center justify-end gap-1.5 sm:gap-2 md:w-auto md:gap-3",children:[y.jsxs("button",{type:"button",onClick:t,className:"hidden items-center gap-1 rounded-lg border border-[#2b4f97] bg-[#091937]/75 px-2.5 py-1.5 text-xs text-[#c4d8ff] transition hover:border-[#4f83ff] hover:text-white md:flex md:text-sm",title:n?"Expand sidebar":"Collapse sidebar",children:[n?y.jsx(K3,{className:"h-4 w-4"}):y.jsx(P3,{className:"h-4 w-4"}),y.jsx("span",{children:n?"Expand":"Collapse"})]}),y.jsx("button",{type:"button",onClick:d,title:`🌐 Languages: ${RT}`,className:"rounded-lg border border-[#2b4f97] bg-[#091937]/75 px-2.5 py-1 text-xs font-medium text-[#c4d8ff] transition hover:border-[#4f83ff] hover:text-white sm:px-3 sm:text-sm",children:AT[r]??"EN"}),y.jsxs("button",{type:"button",onClick:s,className:"flex items-center gap-1 rounded-lg border border-[#2b4f97] bg-[#091937]/75 px-2.5 py-1.5 text-xs text-[#c4d8ff] transition hover:border-[#4f83ff] hover:text-white sm:gap-1.5 sm:px-3 sm:text-sm",children:[y.jsx(_3,{className:"h-4 w-4"}),y.jsx("span",{className:"hidden sm:inline",children:Vu("auth.logout")})]})]})]})}const cx="zeroclaw:sidebar-collapsed";function LT(){const[n,e]=M.useState(!1),[t,i]=M.useState(()=>typeof window>"u"?!1:window.localStorage.getItem(cx)==="1"),s=()=>{i(r=>{const o=!r;return typeof window<"u"&&window.localStorage.setItem(cx,o?"1":"0"),o})};return y.jsxs("div",{className:"app-shell min-h-screen text-white",children:[y.jsx(DT,{isOpen:n,isCollapsed:t,onClose:()=>e(!1),onToggleCollapse:s}),y.jsxs("div",{className:["flex min-h-screen flex-col transition-[margin-left] duration-300 ease-out",t?"md:ml-[6.25rem]":"md:ml-[17.5rem]"].join(" "),children:[y.jsx(_T,{isSidebarCollapsed:t,onToggleSidebar:()=>e(r=>!r),onToggleSidebarCollapse:s}),y.jsx("main",{className:"flex-1 overflow-y-auto px-4 pb-8 pt-5 md:px-8 md:pt-8",children:y.jsx(RM,{})})]})]})}function BT(n){const e=Math.floor(n/86400),t=Math.floor(n%86400/3600),i=Math.floor(n%3600/60);return e>0?`${e}d ${t}h ${i}m`:t>0?`${t}h ${i}m`:`${i}m`}function zT(n){return`$${n.toFixed(4)}`}function HT(n){switch(n.toLowerCase()){case"ok":case"healthy":return"bg-emerald-400";case"warn":case"warning":case"degraded":return"bg-amber-400";default:return"bg-rose-500"}}function VT(n){switch(n.toLowerCase()){case"ok":case"healthy":return"border-emerald-500/30";case"warn":case"warning":case"degraded":return"border-amber-400/30";default:return"border-rose-500/35"}}function lm({title:n,subtitle:e,icon:t,sectionKey:i,openState:s,onToggle:r,children:o}){const u=s[i];return y.jsxs("section",{className:"electric-card motion-rise",children:[y.jsxs("button",{type:"button",onClick:()=>r(i),"aria-expanded":u,className:"group flex w-full items-center justify-between gap-4 rounded-xl px-4 py-4 text-left md:px-5",children:[y.jsxs("div",{className:"flex items-center gap-3",children:[y.jsx("div",{className:"electric-icon h-10 w-10 rounded-xl",children:y.jsx(t,{className:"h-5 w-5"})}),y.jsxs("div",{children:[y.jsx("h2",{className:"text-base font-semibold text-white",children:n}),y.jsx("p",{className:"text-xs uppercase tracking-[0.13em] text-[#7ea5eb]",children:e})]})]}),y.jsx(hh,{className:["h-5 w-5 text-[#7ea5eb] transition-transform duration-300",u?"rotate-180":"rotate-0"].join(" ")})]}),y.jsx("div",{className:["grid overflow-hidden transition-[grid-template-rows,opacity] duration-300 ease-out",u?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0"].join(" "),children:y.jsx("div",{className:"min-h-0 border-t border-[#18356f] px-4 pb-4 pt-4 md:px-5",children:o})})]})}function UT(){const[n,e]=M.useState(null),[t,i]=M.useState(null),[s,r]=M.useState(null),[o,u]=M.useState({cost:!0,channels:!0,health:!0});M.useEffect(()=>{Promise.all([$2(),J2()]).then(([p,b])=>{e(p),i(b)}).catch(p=>{const b=p instanceof Error?p.message:"Unknown dashboard load error";r(b)})},[]);const f=p=>{u(b=>({...b,[p]:!b[p]}))};if(s)return y.jsxs("div",{className:"electric-card p-5 text-rose-200",children:[y.jsx("h2",{className:"text-lg font-semibold text-rose-100",children:"Dashboard load failed"}),y.jsx("p",{className:"mt-2 text-sm text-rose-200/90",children:s})]});if(!n||!t)return y.jsx("div",{className:"flex h-64 items-center justify-center",children:y.jsx("div",{className:"electric-loader h-12 w-12 rounded-full"})});const d=Math.max(t.session_cost_usd,t.daily_cost_usd,t.monthly_cost_usd,.001);return y.jsxs("div",{className:"space-y-5 md:space-y-6",children:[y.jsx("section",{className:"hero-panel motion-rise",children:y.jsxs("div",{className:"relative z-10 flex flex-wrap items-start justify-between gap-4",children:[y.jsxs("div",{children:[y.jsx("p",{className:"text-xs uppercase tracking-[0.22em] text-[#8fb8ff]",children:"ZeroClaw Command Deck"}),y.jsx("h1",{className:"mt-2 text-2xl font-semibold tracking-[0.03em] text-white md:text-3xl",children:"Electric Runtime Dashboard"}),y.jsx("p",{className:"mt-2 max-w-2xl text-sm text-[#b3cbf8] md:text-base",children:"Real-time telemetry, cost pulse, and operations status in a single collapsible surface."})]}),y.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[y.jsxs("span",{className:"status-pill",children:[y.jsx($p,{className:"h-3.5 w-3.5"}),"Live Gateway"]}),y.jsxs("span",{className:"status-pill",children:[y.jsx(G2,{className:"h-3.5 w-3.5"}),n.paired?"Paired":"Unpaired"]})]})]})}),y.jsxs("section",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4",children:[y.jsxs("article",{className:"electric-card motion-rise motion-delay-1 p-4",children:[y.jsxs("div",{className:"metric-head",children:[y.jsx(Nu,{className:"h-4 w-4"}),y.jsx("span",{children:"Provider / Model"})]}),y.jsx("p",{className:"metric-value mt-3",children:n.provider??"Unknown"}),y.jsx("p",{className:"metric-sub mt-1 truncate",children:n.model})]}),y.jsxs("article",{className:"electric-card motion-rise motion-delay-2 p-4",children:[y.jsxs("div",{className:"metric-head",children:[y.jsx(C3,{className:"h-4 w-4"}),y.jsx("span",{children:"Uptime"})]}),y.jsx("p",{className:"metric-value mt-3",children:BT(n.uptime_seconds)}),y.jsx("p",{className:"metric-sub mt-1",children:"Since last restart"})]}),y.jsxs("article",{className:"electric-card motion-rise motion-delay-3 p-4",children:[y.jsxs("div",{className:"metric-head",children:[y.jsx(M3,{className:"h-4 w-4"}),y.jsx("span",{children:"Gateway Port"})]}),y.jsxs("p",{className:"metric-value mt-3",children:[":",n.gateway_port]}),y.jsx("p",{className:"metric-sub mt-1",children:n.locale})]}),y.jsxs("article",{className:"electric-card motion-rise motion-delay-4 p-4",children:[y.jsxs("div",{className:"metric-head",children:[y.jsx(Um,{className:"h-4 w-4"}),y.jsx("span",{children:"Memory Backend"})]}),y.jsx("p",{className:"metric-value mt-3 capitalize",children:n.memory_backend}),y.jsx("p",{className:"metric-sub mt-1",children:n.paired?"Pairing active":"No paired devices"})]})]}),y.jsxs("div",{className:"space-y-4",children:[y.jsx(lm,{title:"Cost Pulse",subtitle:"Session, daily, and monthly runtime spend",icon:dh,sectionKey:"cost",openState:o,onToggle:f,children:y.jsxs("div",{className:"space-y-4",children:[[{label:"Session",value:t.session_cost_usd},{label:"Daily",value:t.daily_cost_usd},{label:"Monthly",value:t.monthly_cost_usd}].map(({label:p,value:b})=>y.jsxs("div",{children:[y.jsxs("div",{className:"mb-1.5 flex items-center justify-between text-sm",children:[y.jsx("span",{className:"text-[#9bb8ec]",children:p}),y.jsx("span",{className:"font-semibold text-white",children:zT(b)})]}),y.jsx("div",{className:"h-2.5 overflow-hidden rounded-full bg-[#061230]",children:y.jsx("div",{className:"electric-progress h-full rounded-full",style:{width:`${Math.max(b/d*100,3)}%`}})})]},p)),y.jsxs("div",{className:"grid grid-cols-2 gap-3 pt-2",children:[y.jsxs("div",{className:"metric-pill",children:[y.jsx("span",{children:"Total Tokens"}),y.jsx("strong",{children:t.total_tokens.toLocaleString()})]}),y.jsxs("div",{className:"metric-pill",children:[y.jsx("span",{children:"Requests"}),y.jsx("strong",{children:t.request_count.toLocaleString()})]})]})]})}),y.jsx(lm,{title:"Channel Activity",subtitle:"Live integrations and route connectivity",icon:Y3,sectionKey:"channels",openState:o,onToggle:f,children:Object.entries(n.channels).length===0?y.jsx("p",{className:"text-sm text-[#8aa8df]",children:"No channels configured."}):y.jsx("div",{className:"grid grid-cols-1 gap-2 md:grid-cols-2",children:Object.entries(n.channels).map(([p,b])=>y.jsx("div",{className:"rounded-xl border border-[#1d3770] bg-[#05112c]/90 px-3 py-2.5",children:y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{className:"text-sm capitalize text-white",children:p}),y.jsxs("span",{className:"flex items-center gap-2 text-xs text-[#8baee7]",children:[y.jsx("span",{className:["inline-block h-2.5 w-2.5 rounded-full",b?"bg-emerald-400 shadow-[0_0_12px_0_rgba(52,211,153,0.8)]":"bg-slate-500"].join(" ")}),b?"Active":"Inactive"]})]})},p))})}),y.jsx(lm,{title:"Component Health",subtitle:"Runtime heartbeat and restart awareness",icon:Hu,sectionKey:"health",openState:o,onToggle:f,children:Object.entries(n.health.components).length===0?y.jsx("p",{className:"text-sm text-[#8aa8df]",children:"No component health is currently available."}):y.jsx("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-3",children:Object.entries(n.health.components).map(([p,b])=>y.jsxs("div",{className:["rounded-xl border bg-[#05112c]/80 px-3 py-3",VT(b.status)].join(" "),children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("p",{className:"text-sm font-semibold capitalize text-white",children:p}),y.jsx("span",{className:["inline-block h-2.5 w-2.5 rounded-full",HT(b.status)].join(" ")})]}),y.jsx("p",{className:"mt-1 text-xs uppercase tracking-[0.12em] text-[#87a9e5]",children:b.status}),b.restart_count>0&&y.jsxs("p",{className:"mt-2 text-xs text-amber-300",children:["Restarts: ",b.restart_count]})]},p))})})]})]})}const qT=1e3,PT=3e4,ux="zeroclaw.ws.session_id";class KT{constructor(e={}){Xe(this,"ws",null);Xe(this,"currentDelay");Xe(this,"reconnectTimer",null);Xe(this,"intentionallyClosed",!1);Xe(this,"onMessage",null);Xe(this,"onOpen",null);Xe(this,"onClose",null);Xe(this,"onError",null);Xe(this,"baseUrl");Xe(this,"reconnectDelay");Xe(this,"maxReconnectDelay");Xe(this,"autoReconnect");Xe(this,"sessionId");const t=window.location.protocol==="https:"?"wss:":"ws:";this.baseUrl=e.baseUrl??`${t}//${window.location.host}`,this.reconnectDelay=e.reconnectDelay??qT,this.maxReconnectDelay=e.maxReconnectDelay??PT,this.autoReconnect=e.autoReconnect??!0,this.currentDelay=this.reconnectDelay,this.sessionId=this.resolveSessionId()}connect(){this.intentionallyClosed=!1,this.clearReconnectTimer();const e=Ca(),t=`${this.baseUrl}/ws/chat?session_id=${encodeURIComponent(this.sessionId)}`,i=["zeroclaw.v1"];e&&i.push(`bearer.${e}`),this.ws=new WebSocket(t,i),this.ws.onopen=()=>{var s;this.currentDelay=this.reconnectDelay,(s=this.onOpen)==null||s.call(this)},this.ws.onmessage=s=>{var r;try{const o=JSON.parse(s.data);(r=this.onMessage)==null||r.call(this,o)}catch{}},this.ws.onclose=s=>{var r;(r=this.onClose)==null||r.call(this,s),this.scheduleReconnect()},this.ws.onerror=s=>{var r;(r=this.onError)==null||r.call(this,s)}}sendMessage(e){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error("WebSocket is not connected");this.ws.send(JSON.stringify({type:"message",content:e}))}disconnect(){this.intentionallyClosed=!0,this.clearReconnectTimer(),this.ws&&(this.ws.close(),this.ws=null)}get connected(){var e;return((e=this.ws)==null?void 0:e.readyState)===WebSocket.OPEN}scheduleReconnect(){this.intentionallyClosed||!this.autoReconnect||(this.reconnectTimer=setTimeout(()=>{this.currentDelay=Math.min(this.currentDelay*2,this.maxReconnectDelay),this.connect()},this.currentDelay))}clearReconnectTimer(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}resolveSessionId(){var i,s;const e=window.localStorage.getItem(ux);if(e&&/^[A-Za-z0-9_-]{1,128}$/.test(e))return e;const t=((s=(i=globalThis.crypto)==null?void 0:i.randomUUID)==null?void 0:s.call(i).replace(/-/g,"_"))??`sess_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`;return window.localStorage.setItem(ux,t),t}}let hx=0;const GT="Tool execution completed, but no final response text was returned.";function ua(){var e,t;const n=(t=(e=globalThis.crypto)==null?void 0:e.randomUUID)==null?void 0:t.call(e);return n||(hx+=1,`msg_${Date.now().toString(36)}_${hx.toString(36)}_${Math.random().toString(36).slice(2,10)}`)}function IT(){const[n,e]=M.useState([]),[t,i]=M.useState(""),[s,r]=M.useState(!1),[o,u]=M.useState(!1),[f,d]=M.useState(null),p=M.useRef(null),b=M.useRef(null),x=M.useRef(null),w=M.useRef("");M.useEffect(()=>{const C=new KT;return C.onOpen=()=>{u(!0),d(null)},C.onClose=()=>{u(!1)},C.onError=()=>{d("Connection error. Attempting to reconnect...")},C.onMessage=T=>{switch(T.type){case"history":{const R=(T.messages??[]).filter(E=>{var q;return(q=E.content)==null?void 0:q.trim()}).map(E=>({id:ua(),role:E.role==="user"?"user":"agent",content:E.content.trim(),timestamp:new Date}));e(R),r(!1),w.current="";break}case"chunk":r(!0),w.current+=T.content??"";break;case"message":case"done":{const E=(T.full_response??T.content??w.current??"").trim()||GT;e(q=>[...q,{id:ua(),role:"agent",content:E,timestamp:new Date}]),w.current="",r(!1);break}case"tool_call":e(R=>[...R,{id:ua(),role:"agent",content:`[Tool Call] ${T.name??"unknown"}(${JSON.stringify(T.args??{})})`,timestamp:new Date}]);break;case"tool_result":e(R=>[...R,{id:ua(),role:"agent",content:`[Tool Result] ${T.output??""}`,timestamp:new Date}]);break;case"error":e(R=>[...R,{id:ua(),role:"agent",content:`[Error] ${T.message??"Unknown error"}`,timestamp:new Date}]),r(!1),w.current="";break}},C.connect(),p.current=C,()=>{C.disconnect()}},[]),M.useEffect(()=>{var C;(C=b.current)==null||C.scrollIntoView({behavior:"smooth"})},[n,s]);const S=()=>{var T,R;const C=t.trim();if(!(!C||!((T=p.current)!=null&&T.connected))){e(E=>[...E,{id:ua(),role:"user",content:C,timestamp:new Date}]);try{p.current.sendMessage(C),r(!0),w.current=""}catch{d("Failed to send message. Please try again.")}i(""),(R=x.current)==null||R.focus()}},A=C=>{C.key==="Enter"&&!C.shiftKey&&(C.preventDefault(),S())};return y.jsxs("div",{className:"flex min-h-[28rem] flex-col h-[calc(100dvh-8.5rem)]",children:[f&&y.jsxs("div",{className:"px-4 py-2 bg-red-900/30 border-b border-red-700 flex items-center gap-2 text-sm text-red-300",children:[y.jsx(B2,{className:"h-4 w-4 flex-shrink-0"}),f]}),y.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",children:[n.length===0&&y.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-gray-500",children:[y.jsx(Tu,{className:"h-12 w-12 mb-3 text-gray-600"}),y.jsx("p",{className:"text-lg font-medium",children:"ZeroClaw Agent"}),y.jsx("p",{className:"text-sm mt-1",children:"Send a message to start the conversation"})]}),n.map(C=>y.jsxs("div",{className:`flex items-start gap-3 ${C.role==="user"?"flex-row-reverse":""}`,children:[y.jsx("div",{className:`flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center ${C.role==="user"?"bg-blue-600":"bg-gray-700"}`,children:C.role==="user"?y.jsx(nT,{className:"h-4 w-4 text-white"}):y.jsx(Tu,{className:"h-4 w-4 text-white"})}),y.jsxs("div",{className:`max-w-[75%] rounded-xl px-4 py-3 ${C.role==="user"?"bg-blue-600 text-white":"bg-gray-800 text-gray-100 border border-gray-700"}`,children:[y.jsx("p",{className:"text-sm whitespace-pre-wrap break-words",children:C.content}),y.jsx("p",{className:`text-xs mt-1 ${C.role==="user"?"text-blue-200":"text-gray-500"}`,children:C.timestamp.toLocaleTimeString()})]})]},C.id)),s&&y.jsxs("div",{className:"flex items-start gap-3",children:[y.jsx("div",{className:"flex-shrink-0 w-8 h-8 rounded-full bg-gray-700 flex items-center justify-center",children:y.jsx(Tu,{className:"h-4 w-4 text-white"})}),y.jsxs("div",{className:"bg-gray-800 border border-gray-700 rounded-xl px-4 py-3",children:[y.jsxs("div",{className:"flex items-center gap-1",children:[y.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"0ms"}}),y.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"150ms"}}),y.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"300ms"}})]}),y.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Typing..."})]})]}),y.jsx("div",{ref:b})]}),y.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900 p-4",children:[y.jsxs("div",{className:"flex items-center gap-3 max-w-4xl mx-auto",children:[y.jsx("div",{className:"flex-1 relative",children:y.jsx("input",{ref:x,type:"text",value:t,onChange:C=>i(C.target.value),onKeyDown:A,placeholder:o?"Type a message...":"Connecting...",disabled:!o,className:"w-full bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50"})}),y.jsx("button",{onClick:S,disabled:!o||!t.trim(),className:"flex-shrink-0 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-700 disabled:text-gray-500 text-white rounded-xl p-3 transition-colors",children:y.jsx(K2,{className:"h-5 w-5"})})]}),y.jsxs("div",{className:"flex items-center justify-center mt-2 gap-2",children:[y.jsx("span",{className:`inline-block h-2 w-2 rounded-full ${o?"bg-green-500":"bg-red-500"}`}),y.jsx("span",{className:"text-xs text-gray-500",children:o?"Connected":"Disconnected"})]})]})]})}function YT(){const[n,e]=M.useState([]),[t,i]=M.useState([]),[s,r]=M.useState(""),[o,u]=M.useState(null),[f,d]=M.useState(!0),[p,b]=M.useState(null);M.useEffect(()=>{Promise.all([fT(),CT()]).then(([S,A])=>{e(S),i(A)}).catch(S=>b(S.message)).finally(()=>d(!1))},[]);const x=n.filter(S=>S.name.toLowerCase().includes(s.toLowerCase())||S.description.toLowerCase().includes(s.toLowerCase())),w=t.filter(S=>S.name.toLowerCase().includes(s.toLowerCase())||S.category.toLowerCase().includes(s.toLowerCase()));return p?y.jsx("div",{className:"p-6",children:y.jsxs("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-4 text-red-300",children:["Failed to load tools: ",p]})}):f?y.jsx("div",{className:"flex items-center justify-center h-64",children:y.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-blue-500 border-t-transparent"})}):y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"relative max-w-md",children:[y.jsx(mh,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500"}),y.jsx("input",{type:"text",value:s,onChange:S=>r(S.target.value),placeholder:"Search tools...",className:"w-full bg-gray-900 border border-gray-700 rounded-lg pl-10 pr-4 py-2.5 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"})]}),y.jsxs("div",{children:[y.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[y.jsx(W2,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Agent Tools (",x.length,")"]})]}),x.length===0?y.jsx("p",{className:"text-sm text-gray-500",children:"No tools match your search."}):y.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",children:x.map(S=>{const A=o===S.name;return y.jsxs("div",{className:"bg-gray-900 rounded-xl border border-gray-800 overflow-hidden",children:[y.jsxs("button",{onClick:()=>u(A?null:S.name),className:"w-full text-left p-4 hover:bg-gray-800/50 transition-colors",children:[y.jsxs("div",{className:"flex items-start justify-between gap-2",children:[y.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[y.jsx(q3,{className:"h-4 w-4 text-blue-400 flex-shrink-0 mt-0.5"}),y.jsx("h3",{className:"text-sm font-semibold text-white truncate",children:S.name})]}),A?y.jsx(hh,{className:"h-4 w-4 text-gray-400 flex-shrink-0"}):y.jsx(L2,{className:"h-4 w-4 text-gray-400 flex-shrink-0"})]}),y.jsx("p",{className:"text-sm text-gray-400 mt-2 line-clamp-2",children:S.description})]}),A&&S.parameters&&y.jsxs("div",{className:"border-t border-gray-800 p-4",children:[y.jsx("p",{className:"text-xs text-gray-500 mb-2 font-medium uppercase tracking-wider",children:"Parameter Schema"}),y.jsx("pre",{className:"text-xs text-gray-300 bg-gray-950 rounded-lg p-3 overflow-x-auto max-h-64 overflow-y-auto",children:JSON.stringify(S.parameters,null,2)})]})]},S.name)})})]}),w.length>0&&y.jsxs("div",{children:[y.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[y.jsx(J3,{className:"h-5 w-5 text-green-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["CLI Tools (",w.length,")"]})]}),y.jsx("div",{className:"bg-gray-900 rounded-xl border border-gray-800 overflow-hidden",children:y.jsxs("table",{className:"w-full text-sm",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"border-b border-gray-800",children:[y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Name"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Path"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Version"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Category"})]})}),y.jsx("tbody",{children:w.map(S=>y.jsxs("tr",{className:"border-b border-gray-800/50 hover:bg-gray-800/30 transition-colors",children:[y.jsx("td",{className:"px-4 py-3 text-white font-medium",children:S.name}),y.jsx("td",{className:"px-4 py-3 text-gray-400 font-mono text-xs truncate max-w-[200px]",children:S.path}),y.jsx("td",{className:"px-4 py-3 text-gray-400",children:S.version??"-"}),y.jsx("td",{className:"px-4 py-3",children:y.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-gray-800 text-gray-300 capitalize",children:S.category})})]},S.name))})]})})]})]})}function WT(n){return n?new Date(n).toLocaleString():"-"}function FT(){const[n,e]=M.useState([]),[t,i]=M.useState(!0),[s,r]=M.useState(null),[o,u]=M.useState(!1),[f,d]=M.useState(null),[p,b]=M.useState(""),[x,w]=M.useState(""),[S,A]=M.useState(""),[C,T]=M.useState(null),[R,E]=M.useState(!1),q=()=>{i(!0),dT().then(e).catch(Q=>r(Q.message)).finally(()=>i(!1))};M.useEffect(()=>{q()},[]);const B=async()=>{if(!x.trim()||!S.trim()){T("Schedule and command are required.");return}E(!0),T(null);try{const Q=await mT({name:p.trim()||void 0,schedule:x.trim(),command:S.trim()});e(Z=>[...Z,Q]),u(!1),b(""),w(""),A("")}catch(Q){T(Q instanceof Error?Q.message:"Failed to add job")}finally{E(!1)}},I=async Q=>{try{await pT(Q),e(Z=>Z.filter(ue=>ue.id!==Q))}catch(Z){r(Z instanceof Error?Z.message:"Failed to delete job")}finally{d(null)}},V=Q=>{if(!Q)return null;switch(Q.toLowerCase()){case"ok":case"success":return y.jsx(fh,{className:"h-4 w-4 text-green-400"});case"error":case"failed":return y.jsx(Fp,{className:"h-4 w-4 text-red-400"});default:return y.jsx(B2,{className:"h-4 w-4 text-yellow-400"})}};return s?y.jsx("div",{className:"p-6",children:y.jsxs("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-4 text-red-300",children:["Failed to load cron jobs: ",s]})}):t?y.jsx("div",{className:"flex items-center justify-center h-64",children:y.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-blue-500 border-t-transparent"})}):y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx(no,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Scheduled Tasks (",n.length,")"]})]}),y.jsxs("button",{onClick:()=>u(!0),className:"flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium px-4 py-2 rounded-lg transition-colors",children:[y.jsx(q2,{className:"h-4 w-4"}),"Add Job"]})]}),o&&y.jsx("div",{className:"fixed inset-0 bg-black/60 flex items-center justify-center z-50",children:y.jsxs("div",{className:"bg-gray-900 border border-gray-700 rounded-xl p-6 w-full max-w-md mx-4",children:[y.jsxs("div",{className:"flex items-center justify-between mb-4",children:[y.jsx("h3",{className:"text-lg font-semibold text-white",children:"Add Cron Job"}),y.jsx("button",{onClick:()=>{u(!1),T(null)},className:"text-gray-400 hover:text-white transition-colors",children:y.jsx(Mo,{className:"h-5 w-5"})})]}),C&&y.jsx("div",{className:"mb-4 rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:C}),y.jsxs("div",{className:"space-y-4",children:[y.jsxs("div",{children:[y.jsx("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:"Name (optional)"}),y.jsx("input",{type:"text",value:p,onChange:Q=>b(Q.target.value),placeholder:"e.g. Daily cleanup",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),y.jsxs("div",{children:[y.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:["Schedule ",y.jsx("span",{className:"text-red-400",children:"*"})]}),y.jsx("input",{type:"text",value:x,onChange:Q=>w(Q.target.value),placeholder:"e.g. 0 0 * * * (cron expression)",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),y.jsxs("div",{children:[y.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:["Command ",y.jsx("span",{className:"text-red-400",children:"*"})]}),y.jsx("input",{type:"text",value:S,onChange:Q=>A(Q.target.value),placeholder:"e.g. cleanup --older-than 7d",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]})]}),y.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[y.jsx("button",{onClick:()=>{u(!1),T(null)},className:"px-4 py-2 text-sm font-medium text-gray-300 hover:text-white border border-gray-700 rounded-lg hover:bg-gray-800 transition-colors",children:"Cancel"}),y.jsx("button",{onClick:B,disabled:R,className:"px-4 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-lg transition-colors disabled:opacity-50",children:R?"Adding...":"Add Job"})]})]})}),n.length===0?y.jsxs("div",{className:"bg-gray-900 rounded-xl border border-gray-800 p-8 text-center",children:[y.jsx(no,{className:"h-10 w-10 text-gray-600 mx-auto mb-3"}),y.jsx("p",{className:"text-gray-400",children:"No scheduled tasks configured."})]}):y.jsx("div",{className:"bg-gray-900 rounded-xl border border-gray-800 overflow-x-auto",children:y.jsxs("table",{className:"w-full text-sm",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"border-b border-gray-800",children:[y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"ID"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Name"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Command"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Next Run"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Last Status"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Enabled"}),y.jsx("th",{className:"text-right px-4 py-3 text-gray-400 font-medium",children:"Actions"})]})}),y.jsx("tbody",{children:n.map(Q=>y.jsxs("tr",{className:"border-b border-gray-800/50 hover:bg-gray-800/30 transition-colors",children:[y.jsx("td",{className:"px-4 py-3 text-gray-400 font-mono text-xs",children:Q.id.slice(0,8)}),y.jsx("td",{className:"px-4 py-3 text-white font-medium",children:Q.name??"-"}),y.jsx("td",{className:"px-4 py-3 text-gray-300 font-mono text-xs max-w-[200px] truncate",children:Q.command}),y.jsx("td",{className:"px-4 py-3 text-gray-400 text-xs",children:WT(Q.next_run)}),y.jsx("td",{className:"px-4 py-3",children:y.jsxs("div",{className:"flex items-center gap-1.5",children:[V(Q.last_status),y.jsx("span",{className:"text-gray-300 text-xs capitalize",children:Q.last_status??"-"})]})}),y.jsx("td",{className:"px-4 py-3",children:y.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${Q.enabled?"bg-green-900/40 text-green-400 border border-green-700/50":"bg-gray-800 text-gray-500 border border-gray-700"}`,children:Q.enabled?"Enabled":"Disabled"})}),y.jsx("td",{className:"px-4 py-3 text-right",children:f===Q.id?y.jsxs("div",{className:"flex items-center justify-end gap-2",children:[y.jsx("span",{className:"text-xs text-red-400",children:"Delete?"}),y.jsx("button",{onClick:()=>I(Q.id),className:"text-red-400 hover:text-red-300 text-xs font-medium",children:"Yes"}),y.jsx("button",{onClick:()=>d(null),className:"text-gray-400 hover:text-white text-xs font-medium",children:"No"})]}):y.jsx("button",{onClick:()=>d(Q.id),className:"text-gray-400 hover:text-red-400 transition-colors",children:y.jsx(Y2,{className:"h-4 w-4"})})})]},Q.id))})]})})]})}const fx=[{id:"bluebubbles",name:"BlueBubbles",supportLevel:"Built-in",recommended:!0,summary:"Recommended for iMessage with BlueBubbles macOS server REST API.",details:"Supports edit, unsend, effects, reactions, and group management. Edit is currently broken on macOS 26 Tahoe."},{id:"discord",name:"Discord",supportLevel:"Built-in",summary:"Discord Bot API + Gateway for servers, channels, and direct messages."},{id:"feishu",name:"Feishu",supportLevel:"Plugin",summary:"Feishu/Lark bot integration over WebSocket.",details:"Plugin track, installed separately."},{id:"google-chat",name:"Google Chat",supportLevel:"Built-in",summary:"Google Chat app integration via HTTP webhook."},{id:"imessage-legacy",name:"iMessage (legacy)",supportLevel:"Legacy",summary:"Legacy macOS integration via imsg CLI.",details:"Deprecated path for new setups; BlueBubbles is recommended."},{id:"irc",name:"IRC",supportLevel:"Built-in",summary:"Classic IRC channels and DMs with pairing and allowlist controls."},{id:"line",name:"LINE",supportLevel:"Plugin",summary:"LINE Messaging API bot integration.",details:"Plugin track, installed separately."},{id:"matrix",name:"Matrix",supportLevel:"Plugin",summary:"Matrix protocol integration for rooms and direct messaging.",details:"Plugin track, installed separately."},{id:"mattermost",name:"Mattermost",supportLevel:"Plugin",summary:"Bot API + WebSocket for channels, groups, and DMs.",details:"Plugin track, installed separately."},{id:"microsoft-teams",name:"Microsoft Teams",supportLevel:"Plugin",summary:"Enterprise support track for Teams environments.",details:"Plugin track, installed separately."},{id:"nextcloud-talk",name:"Nextcloud Talk",supportLevel:"Plugin",summary:"Self-hosted chat via Nextcloud Talk integration.",details:"Plugin track, installed separately."},{id:"nostr",name:"Nostr",supportLevel:"Plugin",summary:"Decentralized encrypted DMs via NIP-04 and modern NIP flows.",details:"Plugin track, installed separately."},{id:"signal",name:"Signal",supportLevel:"Built-in",summary:"Privacy-focused messaging through signal-cli."},{id:"synology-chat",name:"Synology Chat",supportLevel:"Plugin",summary:"Synology NAS Chat via outgoing and incoming webhooks.",details:"Plugin track, installed separately."},{id:"slack",name:"Slack",supportLevel:"Built-in",summary:"Slack workspace apps powered by Bolt SDK."},{id:"telegram",name:"Telegram",supportLevel:"Built-in",summary:"Bot API integration via grammY with strong group support."},{id:"tlon",name:"Tlon",supportLevel:"Plugin",summary:"Urbit-based messenger integration path.",details:"Plugin track, installed separately."},{id:"twitch",name:"Twitch",supportLevel:"Plugin",summary:"Twitch chat support over IRC connection.",details:"Plugin track, installed separately."},{id:"webchat",name:"WebChat",supportLevel:"Built-in",summary:"Gateway WebChat UI over WebSocket for browser-based sessions."},{id:"whatsapp",name:"WhatsApp",supportLevel:"Built-in",summary:"Baileys-backed integration with QR pairing flow."},{id:"zalo",name:"Zalo",supportLevel:"Plugin",summary:"Zalo Bot API for Vietnam's popular messenger ecosystem.",details:"Plugin track, installed separately."},{id:"zalo-personal",name:"Zalo Personal",supportLevel:"Plugin",summary:"Personal account integration with QR login.",details:"Plugin track, installed separately."}],XT=["Channels can run simultaneously; configure multiple and ZeroClaw routes per chat.","Fastest initial setup is usually Telegram with a simple bot token.","WhatsApp requires local state on disk for persistent sessions.","Group behavior varies by channel. See docs/channels-reference.md for policy details.","DM pairing and allowlists are enforced for safety. See docs/security/README.md.","Troubleshooting lives in docs/troubleshooting.md under channel guidance.","Model providers are documented separately in docs/providers-reference.md."],QT={"Built-in":"border-[#2f63c8] bg-[#0a265f]/70 text-[#acd0ff]",Plugin:"border-[#2f5ea0] bg-[#071a41]/80 text-[#8eb8f4]",Legacy:"border-[#5f6080] bg-[#141731]/80 text-[#c2c5e8]"};function ZT(){const[n,e]=M.useState(!0);return y.jsxs("section",{className:"electric-card motion-rise",children:[y.jsxs("button",{type:"button",onClick:()=>e(t=>!t),"aria-expanded":n,className:"group flex w-full items-center justify-between gap-4 rounded-xl px-4 py-4 text-left md:px-5",children:[y.jsxs("div",{className:"flex items-center gap-3",children:[y.jsx("div",{className:"electric-icon h-10 w-10 rounded-xl",children:y.jsx(B3,{className:"h-5 w-5"})}),y.jsxs("div",{children:[y.jsx("h2",{className:"text-base font-semibold text-white",children:"Supported Chat Channels"}),y.jsxs("p",{className:"text-xs uppercase tracking-[0.13em] text-[#7ea5eb]",children:[fx.length," channels listed"]})]})]}),y.jsx(hh,{className:["h-5 w-5 text-[#7ea5eb] transition-transform duration-300",n?"rotate-180":"rotate-0"].join(" ")})]}),n&&y.jsxs("div",{className:"border-t border-[#18356f] px-4 pb-5 pt-4 md:px-5",children:[y.jsx("div",{className:"rounded-xl border border-[#1e3a78] bg-[#07142f]/85 p-3 md:p-4",children:y.jsx("p",{className:"text-sm leading-relaxed text-[#c8dcff]",children:"ZeroClaw can talk to you on the chat apps you already use through Gateway. Text is supported across all channels; media and reactions vary by channel."})}),y.jsx("div",{className:"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-3",children:fx.map(t=>y.jsxs("article",{className:"rounded-xl border border-[#1f3d76] bg-[#060f25]/85 p-3 shadow-[0_0_22px_-15px_rgba(80,176,255,0.9)]",children:[y.jsxs("div",{className:"flex items-start justify-between gap-2",children:[y.jsx("h3",{className:"text-sm font-semibold text-white",children:t.name}),y.jsx("span",{className:["inline-flex items-center rounded-full border px-2 py-0.5 text-[11px] font-medium",QT[t.supportLevel]].join(" "),children:t.supportLevel})]}),y.jsx("p",{className:"mt-2 text-xs leading-relaxed text-[#97baee]",children:t.summary}),t.details&&y.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-[#7ca6de]",children:t.details}),t.recommended&&y.jsxs("p",{className:"mt-2 inline-flex items-center gap-1 text-[11px] text-[#cfe3ff]",children:[y.jsx($p,{className:"h-3 w-3"}),"Recommended"]})]},t.id))}),y.jsxs("div",{className:"mt-4 rounded-xl border border-[#1b3770] bg-[#061129]/85 p-3 md:p-4",children:[y.jsx("h3",{className:"text-sm font-semibold text-white",children:"Channel Notes"}),y.jsx("ul",{className:"mt-2 space-y-1.5 text-xs leading-relaxed text-[#9bbce8]",children:XT.map(t=>y.jsxs("li",{children:["• ",t]},t))})]})]})]})}function $T(n){switch(n){case"Active":return{icon:w3,label:"Active",classes:"bg-green-900/40 text-green-400 border-green-700/50"};case"Available":return{icon:lT,label:"Available",classes:"bg-blue-900/40 text-blue-400 border-blue-700/50"};case"ComingSoon":return{icon:no,label:"Coming Soon",classes:"bg-gray-800 text-gray-400 border-gray-700"}}}function dx(n){return n&&n.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/Ai/g,"AI")}const Lr="__keep__",tu="__custom__",mx="__clear__",JT={openrouter:["anthropic/claude-sonnet-4-6","openai/gpt-5.2","google/gemini-3.1-pro"],anthropic:["claude-sonnet-4-6","claude-opus-4-6"],openai:["gpt-5.2","gpt-5.2-codex","gpt-4o"],google:["google/gemini-3.1-pro","google/gemini-3-flash","google/gemini-2.5-pro"],deepseek:["deepseek/deepseek-reasoner","deepseek/deepseek-chat"],xai:["x-ai/grok-4","x-ai/grok-3"],mistral:["mistral-large-latest","codestral-latest","mistral-small-latest"],perplexity:["sonar-pro","sonar-reasoning-pro","sonar"],vercel:["openai/gpt-5.2","anthropic/claude-sonnet-4-6","google/gemini-3.1-pro"],bedrock:["anthropic.claude-sonnet-4-5-20250929-v1:0","anthropic.claude-opus-4-6-v1:0"],groq:["llama-3.3-70b-versatile","mixtral-8x7b-32768"],together:["meta-llama/Llama-3.3-70B-Instruct-Turbo","Qwen/Qwen2.5-72B-Instruct-Turbo","deepseek-ai/DeepSeek-R1-Distill-Llama-70B"],cohere:["command-r-plus-08-2024","command-r-08-2024"]};function px(n){return n==="openrouter"||n==="vercel"?"Format: anthropic/claude-sonnet-4-6":"Format: claude-sonnet-4-6 (or provider/model when required)"}function Br(n,e){var t;return e.key!=="default_model"?e.options??[]:(t=e.options)!=null&&t.length?e.options:JT[n]??[]}function eN(){const[n,e]=M.useState([]),[t,i]=M.useState({}),[s,r]=M.useState(""),[o,u]=M.useState(!0),[f,d]=M.useState(null),[p,b]=M.useState("all"),[x,w]=M.useState(null),[S,A]=M.useState({}),[C,T]=M.useState({}),[R,E]=M.useState({}),[q,B]=M.useState(!1),[I,V]=M.useState(null),[Q,Z]=M.useState(null),[ue,fe]=M.useState(null),[ne,pe]=M.useState(null),[J,ve]=M.useState({}),[z,K]=M.useState(null),[$,le]=M.useState(null),ge=te=>te.fields.reduce((be,ke)=>(Br(te.id,ke).length>0?be[ke.key]=ke.has_value?Lr:"":be[ke.key]="",be),{}),D=te=>te.fields.find(be=>be.key==="default_model"),P=te=>{const be=D(te);return be?Br(te.id,be)[0]??null:null},ee=(te,be)=>{var ct,Ie,me;if(be&&((ct=ue==null?void 0:ue.model)!=null&&ct.trim()))return ue.model.trim();const ke=(me=(Ie=D(te))==null?void 0:Ie.current_value)==null?void 0:me.trim();return ke||null},ae=Object.values(t).find(te=>te.id===ne),ye=async(te=!0)=>{te&&u(!0),d(null);try{const[be,ke,ct]=await Promise.all([gT(),yT(),$2().catch(()=>null)]),Ie=ke.integrations.reduce((me,et)=>(me[et.name]=et,me),{});return e(be),r(ke.revision),i(Ie),pe(ke.active_default_provider_integration_id??null),fe(ct?{model:ct.model}:null),Ie}catch(be){return d(be instanceof Error?be.message:"Failed to load integrations"),pe(null),fe(null),null}finally{te&&u(!1)}};M.useEffect(()=>{ye()},[]),M.useEffect(()=>{if(!Q)return;const te=setTimeout(()=>Z(null),4e3);return()=>clearTimeout(te)},[Q]),M.useEffect(()=>{if(!x)return;const te=be=>{be.key==="Escape"&&Ee()};return window.addEventListener("keydown",te),()=>window.removeEventListener("keydown",te)},[x,q]);const Ce=te=>{w(te),A(ge(te)),T({}),E({}),V(null)},Ee=()=>{q||(w(null),A({}),T({}),E({}),V(null))},Mt=(te,be)=>{A(ke=>({...ke,[te]:be})),E(ke=>({...ke,[te]:!0}))},ot=(te,be)=>{T(ke=>({...ke,[te]:be})),E(ke=>({...ke,[te]:!0}))},Hl=async()=>{if(!x)return;V(null),le(null);const te={};for(const be of x.fields){const ke=S[be.key]??"",ct=!!R[be.key],Ie=Br(x.id,be).length>0;let me=ke;if(Ie)if(ke===Lr){if(be.required&&!be.has_value){V(`${be.label} is required.`);return}if(ct)continue}else ke===tu?me=C[be.key]??"":ke===mx&&(me="");const et=me.trim();if(Ie&&ke===tu&&!et){V(`Enter a custom value for ${be.label} or choose a recommended model.`);return}if(be.required&&!et&&!be.has_value){V(`${be.label} is required.`);return}if(ct){if(Ie&&ke===Lr)continue;te[be.key]=me}}if(Object.keys(te).length===0&&!x.activates_default_provider){V("No changes to save.");return}if(x.activates_default_provider&&ne&&x.id!==ne){const be=(ae==null?void 0:ae.name)??"current provider";if(!window.confirm(`Switch default AI provider from ${be} to ${x.name}?`))return}B(!0);try{await ax(x.id,{revision:s,fields:te}),await ye(!1),Z(`${x.name} credentials saved.`),Ee()}catch(be){const ke=be instanceof Error?be.message:"Failed to save credentials";if(ke.includes("API 409")){const ct=await ye(!1);if(ct){const Ie=ct[x.name];Ie&&(w(Ie),A(ge(Ie)),T({}),E({}))}V("Configuration changed elsewhere. Refreshed latest settings; re-enter values and save again.")}else V(ke)}finally{B(!1)}},ks=async(te,be,ke,ct)=>{const Ie=be.trim();if(!(!Ie||Ie===ke)){if(ne&&!ct&&te.id!==ne){const me=(ae==null?void 0:ae.name)??"current provider";if(!window.confirm(`Switch default AI provider from ${me} to ${te.name} and set model to ${Ie}?`))return}K(te.id),le(null),V(null);try{await ax(te.id,{revision:s,fields:{default_model:Ie}}),await ye(!1),Z(`Model updated to ${Ie} for ${te.name}.`),ve(me=>{const et={...me};return delete et[te.id],et})}catch(me){const et=me instanceof Error?me.message:"Failed to update model";et.includes("API 409")?(await ye(!1),le("Configuration changed elsewhere. Refreshed latest settings; choose the model again.")):le(et)}finally{K(null)}}},Ha=["all",...Array.from(new Set(n.map(te=>te.category))).sort()],ei=(p==="all"?n:n.filter(te=>te.category===p)).reduce((te,be)=>{const ke=be.category;return te[ke]||(te[ke]=[]),te[ke].push(be),te},{});return f?y.jsx("div",{className:"p-6",children:y.jsxs("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-4 text-red-300",children:["Failed to load integrations: ",f]})}):o?y.jsx("div",{className:"flex items-center justify-center h-64",children:y.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-blue-500 border-t-transparent"})}):y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx(io,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Integrations (",n.length,")"]})]}),Q&&y.jsx("div",{className:"rounded-lg bg-green-900/30 border border-green-700 p-3 text-sm text-green-300",children:Q}),$&&y.jsx("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:$}),y.jsx(ZT,{}),y.jsx("div",{className:"flex flex-wrap gap-2",children:Ha.map(te=>y.jsx("button",{onClick:()=>b(te),className:`px-3 py-1.5 rounded-lg text-sm font-medium transition-colors capitalize ${p===te?"bg-blue-600 text-white":"bg-gray-900 text-gray-400 border border-gray-700 hover:bg-gray-800 hover:text-white"}`,children:te==="all"?"All":dx(te)},te))}),Object.keys(ei).length===0?y.jsxs("div",{className:"bg-gray-900 rounded-xl border border-gray-800 p-8 text-center",children:[y.jsx(io,{className:"h-10 w-10 text-gray-600 mx-auto mb-3"}),y.jsx("p",{className:"text-gray-400",children:"No integrations found."})]}):Object.entries(ei).sort(([te],[be])=>te.localeCompare(be)).map(([te,be])=>y.jsxs("div",{children:[y.jsx("h3",{className:"text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3 capitalize",children:dx(te)}),y.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",children:be.map(ke=>{const ct=$T(ke.status),Ie=ct.icon,me=t[ke.name],et=!!(me!=null&&me.activates_default_provider),ti=!!me&&et&&me.id===ne,Vl=me?D(me):void 0,St=me&&Vl?Br(me.id,Vl):[],Tt=me&&et?ee(me,ti):null,Cs=me&&et?P(me):null,Va=Tt||(Cs?`default: ${Cs}`:"default"),$i=Tt??Cs??"",As=me?J[me.id]??$i:"",Ua=[...Tt&&!St.includes(Tt)?[Tt]:[],...St],Rh=!!me&&me.configured&&et&&Ua.length>0;return y.jsxs("div",{className:`bg-gray-900 rounded-xl border p-5 transition-colors ${ti?"border-green-700/70 bg-gradient-to-b from-green-950/20 to-gray-900":"border-gray-800 hover:border-gray-700"}`,children:[y.jsxs("div",{className:"flex items-start justify-between gap-3",children:[y.jsxs("div",{className:"min-w-0",children:[y.jsx("h4",{className:"text-sm font-semibold text-white truncate",children:ke.name}),y.jsx("p",{className:"text-sm text-gray-400 mt-1 line-clamp-2",children:ke.description})]}),y.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap justify-end",children:[et&&(me==null?void 0:me.configured)&&y.jsx("span",{className:`flex-shrink-0 inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium border ${ti?"bg-emerald-900/40 text-emerald-300 border-emerald-700/60":"bg-gray-800 text-gray-300 border-gray-700"}`,children:ti?"Default":"Configured"}),y.jsxs("span",{className:`flex-shrink-0 inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium border ${ct.classes}`,children:[y.jsx(Ie,{className:"h-3 w-3"}),ct.label]})]})]}),me&&et&&me.configured&&y.jsxs("div",{className:"mt-3 rounded-lg border border-gray-800 bg-gray-950/50 p-3 space-y-2",children:[y.jsxs("div",{className:"flex items-center justify-between gap-2",children:[y.jsx("span",{className:"text-[11px] uppercase tracking-wider text-gray-500",children:"Current model"}),y.jsx("span",{className:"text-xs text-gray-200 truncate",title:Va,children:Va})]}),Rh&&me&&y.jsxs("div",{className:"space-y-1",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx("select",{value:As,onChange:Ul=>ve(ql=>({...ql,[me.id]:Ul.target.value})),disabled:z===me.id,className:"min-w-0 flex-1 px-2.5 py-1.5 rounded-lg bg-gray-950 border border-gray-700 text-xs text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50",children:Ua.map(Ul=>y.jsx("option",{value:Ul,children:Ul},Ul))}),y.jsx("button",{onClick:()=>me&&void ks(me,As,$i,ti),disabled:z===me.id||!As||As===$i,className:"px-2.5 py-1.5 rounded-lg text-xs font-medium bg-blue-600 hover:bg-blue-700 text-white transition-colors disabled:opacity-50",children:z===me.id?"Saving...":"Apply"})]}),y.jsx("p",{className:"text-[11px] text-gray-500",children:"For custom model IDs, use Edit Keys."})]})]}),me&&y.jsxs("div",{className:"mt-4 pt-4 border-t border-gray-800 flex items-center justify-between gap-3",children:[y.jsx("div",{className:"text-xs text-gray-400",children:me.configured?me.activates_default_provider?ti?"Default provider configured":"Provider configured":"Credentials configured":"Credentials not configured"}),y.jsxs("button",{onClick:()=>Ce(me),className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-blue-700/70 bg-blue-900/30 hover:bg-blue-900/50 text-blue-300 text-xs font-medium transition-colors",children:[y.jsx(V2,{className:"h-3.5 w-3.5"}),me.configured?"Edit Keys":"Configure"]})]})]},ke.name)})})]},te)),x&&y.jsx("div",{className:"fixed inset-0 z-50 bg-black/70 flex items-center justify-center p-4",onMouseDown:te=>{te.target===te.currentTarget&&Ee()},children:y.jsxs("div",{className:"w-full max-w-lg bg-gray-900 border border-gray-800 rounded-xl shadow-xl",children:[y.jsxs("div",{className:"px-5 py-4 border-b border-gray-800 flex items-center justify-between gap-3",children:[y.jsxs("div",{children:[y.jsxs("h3",{className:"text-sm font-semibold text-white",children:["Configure ",x.name]}),y.jsx("p",{className:"text-xs text-gray-400 mt-0.5",children:x.configured?"Enter only fields you want to update.":"Enter required fields to configure this integration."})]}),y.jsx("button",{onClick:Ee,disabled:q,className:"text-gray-400 hover:text-white transition-colors disabled:opacity-50","aria-label":"Close",children:y.jsx(Mo,{className:"h-4 w-4"})})]}),y.jsxs("div",{className:"p-5 space-y-4",children:[x.activates_default_provider&&y.jsxs("div",{className:"rounded-lg border border-blue-800 bg-blue-950/30 p-3 text-xs text-blue-200",children:["Saving here updates credentials and switches your default AI provider to"," ",y.jsx("strong",{children:x.name}),". For advanced provider settings, use"," ",y.jsx(Wp,{to:"/config",className:"underline underline-offset-2 hover:text-blue-100",children:"Configuration"}),"."]}),x.fields.map(te=>(()=>{var Vl,St;const be=Br(x.id,te),ke=be.length>0,ct=te.input_type==="secret",Ie=ct?te.masked_value||(te.has_value?"••••••••":void 0):void 0,me=x.activates_default_provider&&x.id===ne,et=((Vl=te.current_value)==null?void 0:Vl.trim())||me&&((St=ue==null?void 0:ue.model)==null?void 0:St.trim())||"",ti=et?`Keep current model (${et})`:"Keep current model";return y.jsxs("div",{children:[y.jsxs("label",{className:"flex items-center gap-2 text-sm font-medium text-gray-300 mb-1.5",children:[y.jsx("span",{children:te.label}),te.required&&y.jsx("span",{className:"text-red-400",children:"*"}),te.has_value&&y.jsx("span",{className:"text-[11px] text-green-400 bg-green-900/30 border border-green-800 px-1.5 py-0.5 rounded",children:"Configured"})]}),ke?y.jsxs("div",{className:"space-y-2",children:[y.jsxs("select",{value:S[te.key]??(te.has_value?Lr:""),onChange:Tt=>Mt(te.key,Tt.target.value),className:"w-full px-3 py-2 rounded-lg bg-gray-950 border border-gray-700 text-sm text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent",children:[te.has_value?y.jsx("option",{value:Lr,children:ti}):y.jsx("option",{value:"",disabled:!0,children:"Select a recommended model"}),be.map(Tt=>y.jsx("option",{value:Tt,children:Tt},Tt)),y.jsx("option",{value:tu,children:"Custom model..."}),te.has_value&&y.jsx("option",{value:mx,children:"Clear current model"})]}),S[te.key]===tu&&y.jsx("input",{type:"text",value:C[te.key]??"",onChange:Tt=>ot(te.key,Tt.target.value),placeholder:px(x.id),className:"w-full px-3 py-2 rounded-lg bg-gray-950 border border-gray-700 text-sm text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"}),y.jsxs("p",{className:"text-[11px] text-gray-500",children:["Pick a recommended model or choose Custom model. ",px(x.id),"."]})]}):y.jsxs("div",{className:"space-y-2",children:[Ie&&y.jsxs("p",{className:"text-[11px] text-gray-500",children:["Current value: ",y.jsx("span",{className:"font-mono text-gray-300",children:Ie})]}),y.jsx("input",{type:ct?"password":"text",value:S[te.key]??"",onChange:Tt=>Mt(te.key,Tt.target.value),placeholder:te.required?te.has_value?"Enter a new value to replace current":"Enter value":te.has_value?"Type new value, or leave empty to keep current":"Optional",className:"w-full px-3 py-2 rounded-lg bg-gray-950 border border-gray-700 text-sm text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"})]})]},te.key)})()),I&&y.jsx("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:I})]}),y.jsxs("div",{className:"px-5 py-4 border-t border-gray-800 flex items-center justify-end gap-2",children:[y.jsx("button",{onClick:Ee,disabled:q,className:"px-4 py-2 rounded-lg text-sm border border-gray-700 text-gray-300 hover:bg-gray-800 transition-colors disabled:opacity-50",children:"Cancel"}),y.jsx("button",{onClick:Hl,disabled:q,className:"px-4 py-2 rounded-lg text-sm font-medium bg-blue-600 hover:bg-blue-700 text-white transition-colors disabled:opacity-50",children:q?"Saving...":x.activates_default_provider?"Save & Activate":"Save Keys"})]})]})})]})}function tN(n,e){return n.length<=e?n:n.slice(0,e)+"..."}function nN(n){return new Date(n).toLocaleString()}function iN(){const[n,e]=M.useState([]),[t,i]=M.useState(!0),[s,r]=M.useState(null),[o,u]=M.useState(""),[f,d]=M.useState(""),[p,b]=M.useState(!1),[x,w]=M.useState(null),[S,A]=M.useState(""),[C,T]=M.useState(""),[R,E]=M.useState(""),[q,B]=M.useState(null),[I,V]=M.useState(!1),Q=(J,ve)=>{i(!0),xT(J||void 0,ve||void 0).then(e).catch(z=>r(z.message)).finally(()=>i(!1))};M.useEffect(()=>{Q()},[]);const Z=()=>{Q(o,f)},ue=J=>{J.key==="Enter"&&Z()},fe=Array.from(new Set(n.map(J=>J.category))).sort(),ne=async()=>{if(!S.trim()||!C.trim()){B("Key and content are required.");return}V(!0),B(null);try{await vT(S.trim(),C.trim(),R.trim()||void 0),Q(o,f),b(!1),A(""),T(""),E("")}catch(J){B(J instanceof Error?J.message:"Failed to store memory")}finally{V(!1)}},pe=async J=>{try{await wT(J),e(ve=>ve.filter(z=>z.key!==J))}catch(ve){r(ve instanceof Error?ve.message:"Failed to delete memory")}finally{w(null)}};return s&&n.length===0?y.jsx("div",{className:"p-6",children:y.jsxs("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-4 text-red-300",children:["Failed to load memory: ",s]})}):y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx(Vm,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Memory (",n.length,")"]})]}),y.jsxs("button",{onClick:()=>b(!0),className:"flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium px-4 py-2 rounded-lg transition-colors",children:[y.jsx(q2,{className:"h-4 w-4"}),"Add Memory"]})]}),y.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[y.jsxs("div",{className:"relative flex-1",children:[y.jsx(mh,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500"}),y.jsx("input",{type:"text",value:o,onChange:J=>u(J.target.value),onKeyDown:ue,placeholder:"Search memory entries...",className:"w-full bg-gray-900 border border-gray-700 rounded-lg pl-10 pr-4 py-2.5 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),y.jsxs("div",{className:"relative",children:[y.jsx(Xp,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500"}),y.jsxs("select",{value:f,onChange:J=>d(J.target.value),className:"bg-gray-900 border border-gray-700 rounded-lg pl-10 pr-8 py-2.5 text-sm text-white appearance-none focus:outline-none focus:ring-2 focus:ring-blue-500 cursor-pointer",children:[y.jsx("option",{value:"",children:"All Categories"}),fe.map(J=>y.jsx("option",{value:J,children:J},J))]})]}),y.jsx("button",{onClick:Z,className:"px-4 py-2.5 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium rounded-lg transition-colors",children:"Search"})]}),s&&y.jsx("div",{className:"rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:s}),p&&y.jsx("div",{className:"fixed inset-0 bg-black/60 flex items-center justify-center z-50",children:y.jsxs("div",{className:"bg-gray-900 border border-gray-700 rounded-xl p-6 w-full max-w-md mx-4",children:[y.jsxs("div",{className:"flex items-center justify-between mb-4",children:[y.jsx("h3",{className:"text-lg font-semibold text-white",children:"Add Memory"}),y.jsx("button",{onClick:()=>{b(!1),B(null)},className:"text-gray-400 hover:text-white transition-colors",children:y.jsx(Mo,{className:"h-5 w-5"})})]}),q&&y.jsx("div",{className:"mb-4 rounded-lg bg-red-900/30 border border-red-700 p-3 text-sm text-red-300",children:q}),y.jsxs("div",{className:"space-y-4",children:[y.jsxs("div",{children:[y.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:["Key ",y.jsx("span",{className:"text-red-400",children:"*"})]}),y.jsx("input",{type:"text",value:S,onChange:J=>A(J.target.value),placeholder:"e.g. user_preferences",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),y.jsxs("div",{children:[y.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:["Content ",y.jsx("span",{className:"text-red-400",children:"*"})]}),y.jsx("textarea",{value:C,onChange:J=>T(J.target.value),placeholder:"Memory content...",rows:4,className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 resize-none"})]}),y.jsxs("div",{children:[y.jsx("label",{className:"block text-sm font-medium text-gray-300 mb-1",children:"Category (optional)"}),y.jsx("input",{type:"text",value:R,onChange:J=>E(J.target.value),placeholder:"e.g. preferences, context, facts",className:"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500"})]})]}),y.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[y.jsx("button",{onClick:()=>{b(!1),B(null)},className:"px-4 py-2 text-sm font-medium text-gray-300 hover:text-white border border-gray-700 rounded-lg hover:bg-gray-800 transition-colors",children:"Cancel"}),y.jsx("button",{onClick:ne,disabled:I,className:"px-4 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-lg transition-colors disabled:opacity-50",children:I?"Saving...":"Save"})]})]})}),t?y.jsx("div",{className:"flex items-center justify-center h-32",children:y.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-blue-500 border-t-transparent"})}):n.length===0?y.jsxs("div",{className:"bg-gray-900 rounded-xl border border-gray-800 p-8 text-center",children:[y.jsx(Vm,{className:"h-10 w-10 text-gray-600 mx-auto mb-3"}),y.jsx("p",{className:"text-gray-400",children:"No memory entries found."})]}):y.jsx("div",{className:"bg-gray-900 rounded-xl border border-gray-800 overflow-x-auto",children:y.jsxs("table",{className:"w-full text-sm",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"border-b border-gray-800",children:[y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Key"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Content"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Category"}),y.jsx("th",{className:"text-left px-4 py-3 text-gray-400 font-medium",children:"Timestamp"}),y.jsx("th",{className:"text-right px-4 py-3 text-gray-400 font-medium",children:"Actions"})]})}),y.jsx("tbody",{children:n.map(J=>y.jsxs("tr",{className:"border-b border-gray-800/50 hover:bg-gray-800/30 transition-colors",children:[y.jsx("td",{className:"px-4 py-3 text-white font-medium font-mono text-xs",children:J.key}),y.jsx("td",{className:"px-4 py-3 text-gray-300 max-w-[300px]",children:y.jsx("span",{title:J.content,children:tN(J.content,80)})}),y.jsx("td",{className:"px-4 py-3",children:y.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-gray-800 text-gray-300 capitalize",children:J.category})}),y.jsx("td",{className:"px-4 py-3 text-gray-400 text-xs whitespace-nowrap",children:nN(J.timestamp)}),y.jsx("td",{className:"px-4 py-3 text-right",children:x===J.key?y.jsxs("div",{className:"flex items-center justify-end gap-2",children:[y.jsx("span",{className:"text-xs text-red-400",children:"Delete?"}),y.jsx("button",{onClick:()=>pe(J.key),className:"text-red-400 hover:text-red-300 text-xs font-medium",children:"Yes"}),y.jsx("button",{onClick:()=>w(null),className:"text-gray-400 hover:text-white text-xs font-medium",children:"No"})]}):y.jsx("button",{onClick:()=>w(J.key),className:"text-gray-400 hover:text-red-400 transition-colors",children:y.jsx(Y2,{className:"h-4 w-4"})})})]},J.id))})]})})]})}function gx(n){if(!n)return"Unknown";const e=new Date(n);return Number.isNaN(e.getTime())?n:e.toLocaleString()}function lN(){const[n,e]=M.useState([]),[t,i]=M.useState(!0),[s,r]=M.useState(!1),[o,u]=M.useState(null),[f,d]=M.useState(null),p=async(x=!1)=>{x?r(!0):i(!0),u(null);try{const w=await ST();e(w)}catch(w){u(w instanceof Error?w.message:"Failed to load paired devices")}finally{x?r(!1):i(!1)}};M.useEffect(()=>{p(!1)},[]);const b=async x=>{try{await kT(x),e(w=>w.filter(S=>S.id!==x)),d(null)}catch(w){u(w instanceof Error?w.message:"Failed to revoke paired device"),d(null)}};return y.jsxs("div",{className:"p-6 space-y-6",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx(I2,{className:"h-5 w-5 text-blue-400"}),y.jsxs("h2",{className:"text-base font-semibold text-white",children:["Paired Devices (",n.length,")"]})]}),y.jsxs("button",{onClick:()=>{p(!0)},disabled:s,className:"inline-flex items-center gap-2 rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700 disabled:opacity-60",children:[y.jsx(P2,{className:`h-4 w-4 ${s?"animate-spin":""}`}),"Refresh"]})]}),o&&y.jsx("div",{className:"rounded-lg border border-red-700 bg-red-900/30 p-3 text-sm text-red-300",children:o}),t?y.jsx("div",{className:"flex h-32 items-center justify-center",children:y.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-2 border-blue-500 border-t-transparent"})}):n.length===0?y.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900 p-8 text-center",children:[y.jsx(Q3,{className:"mx-auto mb-3 h-10 w-10 text-gray-600"}),y.jsx("p",{className:"text-gray-400",children:"No paired devices found."})]}):y.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-800 bg-gray-900",children:y.jsxs("table",{className:"w-full text-sm",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"border-b border-gray-800",children:[y.jsx("th",{className:"px-4 py-3 text-left font-medium text-gray-400",children:"Device ID"}),y.jsx("th",{className:"px-4 py-3 text-left font-medium text-gray-400",children:"Paired By"}),y.jsx("th",{className:"px-4 py-3 text-left font-medium text-gray-400",children:"Created"}),y.jsx("th",{className:"px-4 py-3 text-left font-medium text-gray-400",children:"Last Seen"}),y.jsx("th",{className:"px-4 py-3 text-right font-medium text-gray-400",children:"Actions"})]})}),y.jsx("tbody",{children:n.map(x=>y.jsxs("tr",{className:"border-b border-gray-800/50 transition-colors hover:bg-gray-800/30",children:[y.jsx("td",{className:"px-4 py-3 font-mono text-xs text-white",children:x.token_fingerprint}),y.jsx("td",{className:"px-4 py-3 text-gray-300",children:x.paired_by??"Unknown"}),y.jsx("td",{className:"px-4 py-3 whitespace-nowrap text-xs text-gray-400",children:gx(x.created_at)}),y.jsx("td",{className:"px-4 py-3 whitespace-nowrap text-xs text-gray-400",children:gx(x.last_seen_at)}),y.jsx("td",{className:"px-4 py-3 text-right",children:f===x.id?y.jsxs("div",{className:"inline-flex items-center gap-2",children:[y.jsx("span",{className:"text-xs text-red-400",children:"Revoke?"}),y.jsx("button",{onClick:()=>{b(x.id)},className:"text-xs font-medium text-red-400 hover:text-red-300",children:"Yes"}),y.jsx("button",{onClick:()=>d(null),className:"text-xs font-medium text-gray-400 hover:text-white",children:"No"})]}):y.jsx("button",{onClick:()=>d(x.id),className:"text-xs font-medium text-red-400 hover:text-red-300",children:"Revoke"})})]},x.id))})]})})]})}/*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause * diff --git a/web/dist/assets/index-twVS6v4N.css b/web/dist/assets/index-twVS6v4N.css new file mode 100644 index 000000000..5bfefb0e6 --- /dev/null +++ b/web/dist/assets/index-twVS6v4N.css @@ -0,0 +1 @@ +/*! tailwindcss v4.2.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-900:oklch(37.8% .077 168.94);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-900:oklch(38.1% .176 304.987);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-500:oklch(64.5% .246 16.439);--color-slate-500:oklch(55.4% .046 257.417);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-bounce:bounce 1s infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}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;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.right-2{right:calc(var(--spacing) * 2)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-auto{margin-top:auto}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-32{height:calc(var(--spacing) * 32)}.h-64{height:calc(var(--spacing) * 64)}.h-\[calc\(100dvh-8\.5rem\)\]{height:calc(100dvh - 8.5rem)}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[4\.5rem\]{min-height:4.5rem}.min-h-\[28rem\]{min-height:28rem}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing) * 0)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-20{width:calc(var(--spacing) * 20)}.w-\[86vw\]{width:86vw}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[17\.5rem\]{max-width:17.5rem}.max-w-\[75\%\]{max-width:75%}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-3{--tw-translate-x:calc(var(--spacing) * -3);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-1{--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-6{--tw-translate-x:calc(var(--spacing) * 6);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-0{rotate:none}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-bounce{animation:var(--animate-bounce)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[\#1a2d5e\]{border-color:#1a2d5e}.border-\[\#1a3670\]{border-color:#1a3670}.border-\[\#1b3670\]{border-color:#1b3670}.border-\[\#1b3770\]{border-color:#1b3770}.border-\[\#1d3770\]{border-color:#1d3770}.border-\[\#1e2f5d\]{border-color:#1e2f5d}.border-\[\#1e3a78\]{border-color:#1e3a78}.border-\[\#1f3d76\]{border-color:#1f3d76}.border-\[\#2b4f97\]{border-color:#2b4f97}.border-\[\#2c4e97\]{border-color:#2c4e97}.border-\[\#2f5ea0\]{border-color:#2f5ea0}.border-\[\#2f63c8\]{border-color:#2f63c8}.border-\[\#3a6de0\]{border-color:#3a6de0}.border-\[\#5f6080\]{border-color:#5f6080}.border-\[\#294a8f\]{border-color:#294a8f}.border-\[\#18356f\]{border-color:#18356f}.border-\[\#29509c\]{border-color:#29509c}.border-amber-400\/30{border-color:#fcbb004d}@supports (color:color-mix(in lab,red,red)){.border-amber-400\/30{border-color:color-mix(in oklab,var(--color-amber-400) 30%,transparent)}}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-700\/50{border-color:#1447e680}@supports (color:color-mix(in lab,red,red)){.border-blue-700\/50{border-color:color-mix(in oklab,var(--color-blue-700) 50%,transparent)}}.border-blue-700\/70{border-color:#1447e6b3}@supports (color:color-mix(in lab,red,red)){.border-blue-700\/70{border-color:color-mix(in oklab,var(--color-blue-700) 70%,transparent)}}.border-blue-800{border-color:var(--color-blue-800)}.border-blue-800\/50{border-color:#193cb880}@supports (color:color-mix(in lab,red,red)){.border-blue-800\/50{border-color:color-mix(in oklab,var(--color-blue-800) 50%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-emerald-700\/60{border-color:#00795699}@supports (color:color-mix(in lab,red,red)){.border-emerald-700\/60{border-color:color-mix(in oklab,var(--color-emerald-700) 60%,transparent)}}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-gray-800\/50{border-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.border-gray-800\/50{border-color:color-mix(in oklab,var(--color-gray-800) 50%,transparent)}}.border-green-700{border-color:var(--color-green-700)}.border-green-700\/40{border-color:#00813866}@supports (color:color-mix(in lab,red,red)){.border-green-700\/40{border-color:color-mix(in oklab,var(--color-green-700) 40%,transparent)}}.border-green-700\/50{border-color:#00813880}@supports (color:color-mix(in lab,red,red)){.border-green-700\/50{border-color:color-mix(in oklab,var(--color-green-700) 50%,transparent)}}.border-green-700\/70{border-color:#008138b3}@supports (color:color-mix(in lab,red,red)){.border-green-700\/70{border-color:color-mix(in oklab,var(--color-green-700) 70%,transparent)}}.border-green-800{border-color:var(--color-green-800)}.border-purple-700\/50{border-color:#8200da80}@supports (color:color-mix(in lab,red,red)){.border-purple-700\/50{border-color:color-mix(in oklab,var(--color-purple-700) 50%,transparent)}}.border-red-700{border-color:var(--color-red-700)}.border-red-700\/40{border-color:#bf000f66}@supports (color:color-mix(in lab,red,red)){.border-red-700\/40{border-color:color-mix(in oklab,var(--color-red-700) 40%,transparent)}}.border-red-700\/50{border-color:#bf000f80}@supports (color:color-mix(in lab,red,red)){.border-red-700\/50{border-color:color-mix(in oklab,var(--color-red-700) 50%,transparent)}}.border-rose-500\/35{border-color:#ff235759}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/35{border-color:color-mix(in oklab,var(--color-rose-500) 35%,transparent)}}.border-transparent{border-color:#0000}.border-yellow-700\/40{border-color:#a3610066}@supports (color:color-mix(in lab,red,red)){.border-yellow-700\/40{border-color:color-mix(in oklab,var(--color-yellow-700) 40%,transparent)}}.border-yellow-700\/50{border-color:#a3610080}@supports (color:color-mix(in lab,red,red)){.border-yellow-700\/50{border-color:color-mix(in oklab,var(--color-yellow-700) 50%,transparent)}}.border-yellow-800\/50{border-color:#874b0080}@supports (color:color-mix(in lab,red,red)){.border-yellow-800\/50{border-color:color-mix(in oklab,var(--color-yellow-800) 50%,transparent)}}.border-t-transparent{border-top-color:#0000}.bg-\[\#0a1b3f\]\/60{background-color:#0a1b3f99}.bg-\[\#0a265f\]\/70{background-color:#0a265fb3}.bg-\[\#0b2f80\]\/55{background-color:#0b2f808c}.bg-\[\#050b1a\]\/95{background-color:#050b1af2}.bg-\[\#060f25\]\/85{background-color:#060f25d9}.bg-\[\#071a41\]\/80{background-color:#071a41cc}.bg-\[\#05112c\]\/80{background-color:#05112ccc}.bg-\[\#05112c\]\/90{background-color:#05112ce6}.bg-\[\#07142f\]\/85{background-color:#07142fd9}.bg-\[\#061129\]\/85{background-color:#061129d9}.bg-\[\#061230\]{background-color:#061230}.bg-\[\#071228\]\/90{background-color:#071228e6}.bg-\[\#071328\]\/80{background-color:#071328cc}.bg-\[\#081637\]\/70{background-color:#081637b3}.bg-\[\#091937\]\/75{background-color:#091937bf}.bg-\[\#141731\]\/80{background-color:#141731cc}.bg-amber-400{background-color:var(--color-amber-400)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-600\/20{background-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.bg-blue-600\/20{background-color:color-mix(in oklab,var(--color-blue-600) 20%,transparent)}}.bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab,red,red)){.bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900) 30%,transparent)}}.bg-blue-900\/40{background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.bg-blue-900\/40{background-color:color-mix(in oklab,var(--color-blue-900) 40%,transparent)}}.bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900) 50%,transparent)}}.bg-blue-950\/30{background-color:#1624564d}@supports (color:color-mix(in lab,red,red)){.bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950) 30%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-900\/40{background-color:#004e3b66}@supports (color:color-mix(in lab,red,red)){.bg-emerald-900\/40{background-color:color-mix(in oklab,var(--color-emerald-900) 40%,transparent)}}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800) 50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/80{background-color:#101828cc}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900) 80%,transparent)}}.bg-gray-950{background-color:var(--color-gray-950)}.bg-gray-950\/50{background-color:#03071280}@supports (color:color-mix(in lab,red,red)){.bg-gray-950\/50{background-color:color-mix(in oklab,var(--color-gray-950) 50%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-green-600\/20{background-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/20{background-color:color-mix(in oklab,var(--color-green-600) 20%,transparent)}}.bg-green-900\/10{background-color:#0d542b1a}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900) 10%,transparent)}}.bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900) 30%,transparent)}}.bg-green-900\/40{background-color:#0d542b66}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/40{background-color:color-mix(in oklab,var(--color-green-900) 40%,transparent)}}.bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900) 50%,transparent)}}.bg-orange-600\/20{background-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.bg-orange-600\/20{background-color:color-mix(in oklab,var(--color-orange-600) 20%,transparent)}}.bg-purple-600\/20{background-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.bg-purple-600\/20{background-color:color-mix(in oklab,var(--color-purple-600) 20%,transparent)}}.bg-purple-900\/50{background-color:#59168b80}@supports (color:color-mix(in lab,red,red)){.bg-purple-900\/50{background-color:color-mix(in oklab,var(--color-purple-900) 50%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-900\/10{background-color:#82181a1a}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900) 10%,transparent)}}.bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/30{background-color:color-mix(in oklab,var(--color-red-900) 30%,transparent)}}.bg-red-900\/40{background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/40{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900) 50%,transparent)}}.bg-rose-500{background-color:var(--color-rose-500)}.bg-slate-500{background-color:var(--color-slate-500)}.bg-white{background-color:var(--color-white)}.bg-yellow-600{background-color:var(--color-yellow-600)}.bg-yellow-900\/10{background-color:#733e0a1a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/10{background-color:color-mix(in oklab,var(--color-yellow-900) 10%,transparent)}}.bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900) 20%,transparent)}}.bg-yellow-900\/30{background-color:#733e0a4d}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/30{background-color:color-mix(in oklab,var(--color-yellow-900) 30%,transparent)}}.bg-yellow-900\/40{background-color:#733e0a66}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/40{background-color:color-mix(in oklab,var(--color-yellow-900) 40%,transparent)}}.bg-yellow-900\/50{background-color:#733e0a80}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/50{background-color:color-mix(in oklab,var(--color-yellow-900) 50%,transparent)}}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[radial-gradient\(circle_at_15\%_30\%\,rgba\(41\,148\,255\,0\.22\)\,transparent_45\%\)\,radial-gradient\(circle_at_85\%_75\%\,rgba\(0\,209\,255\,0\.14\)\,transparent_40\%\)\]{background-image:radial-gradient(circle at 15% 30%,#2994ff38,#0000 45%),radial-gradient(circle at 85% 75%,#00d1ff24,#0000 40%)}.from-green-950\/20{--tw-gradient-from:#032e1533}@supports (color:color-mix(in lab,red,red)){.from-green-950\/20{--tw-gradient-from:color-mix(in oklab, var(--color-green-950) 20%, transparent)}}.from-green-950\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-gray-900{--tw-gradient-to:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-16{padding-right:calc(var(--spacing) * 16)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.03em\]{--tw-tracking:.03em;letter-spacing:.03em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.13em\]{--tw-tracking:.13em;letter-spacing:.13em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.35em\]{--tw-tracking:.35em;letter-spacing:.35em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#5f84cc\]{color:#5f84cc}.text-\[\#7ca6de\]{color:#7ca6de}.text-\[\#7ea5eb\]{color:#7ea5eb}.text-\[\#8aa8df\]{color:#8aa8df}.text-\[\#8baee7\]{color:#8baee7}.text-\[\#8bb9ff\]{color:#8bb9ff}.text-\[\#8eb8f4\]{color:#8eb8f4}.text-\[\#8fb8ff\]{color:#8fb8ff}.text-\[\#9bb7eb\]{color:#9bb7eb}.text-\[\#9bb8e8\]{color:#9bb8e8}.text-\[\#9bb8ec\]{color:#9bb8ec}.text-\[\#9bbce8\]{color:#9bbce8}.text-\[\#9ec2ff\]{color:#9ec2ff}.text-\[\#87a9e5\]{color:#87a9e5}.text-\[\#89a9df\]{color:#89a9df}.text-\[\#97baee\]{color:#97baee}.text-\[\#a7c4f3\]{color:#a7c4f3}.text-\[\#acd0ff\]{color:#acd0ff}.text-\[\#b3cbf8\]{color:#b3cbf8}.text-\[\#c2c5e8\]{color:#c2c5e8}.text-\[\#c4d8ff\]{color:#c4d8ff}.text-\[\#c8dcff\]{color:#c8dcff}.text-\[\#cfe3ff\]{color:#cfe3ff}.text-amber-300{color:var(--color-amber-300)}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-emerald-300{color:var(--color-emerald-300)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-rose-100{color:var(--color-rose-100)}.text-rose-200{color:var(--color-rose-200)}.text-rose-200\/90{color:#ffccd3e6}@supports (color:color-mix(in lab,red,red)){.text-rose-200\/90{color:color-mix(in oklab,var(--color-rose-200) 90%,transparent)}}.text-rose-300{color:var(--color-rose-300)}.text-white{color:var(--color-white)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-400\/70{color:#fac800b3}@supports (color:color-mix(in lab,red,red)){.text-yellow-400\/70{color:color-mix(in oklab,var(--color-yellow-400) 70%,transparent)}}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow-\[0_0_12px_0_rgba\(52\,211\,153\,0\.8\)\]{--tw-shadow:0 0 12px 0 var(--tw-shadow-color,#34d399cc);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_22px_-15px_rgba\(80\,176\,255\,0\.9\)\]{--tw-shadow:0 0 22px -15px var(--tw-shadow-color,#50b0ffe6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_30px_-16px_rgba\(72\,140\,255\,0\.95\)\]{--tw-shadow:0 0 30px -16px var(--tw-shadow-color,#488cfff2);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_50px_-25px_rgba\(8\,121\,255\,0\.7\)\]{--tw-shadow:0 0 50px -25px var(--tw-shadow-color,#0879ffb3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-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,);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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[grid-template-rows\,opacity\]{transition-property:grid-template-rows,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin-left\]{transition-property:margin-left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,transform\,width\]{transition-property:opacity,transform,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,transform\]{transition-property:width,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media(hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-\[\#4f83ff\]:hover{border-color:#4f83ff}.hover\:border-\[\#294a8d\]:hover{border-color:#294a8d}.hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.hover\:bg-\[\#07132f\]:hover{background-color:#07132f}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-blue-900\/50:hover{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-900\/50:hover{background-color:color-mix(in oklab,var(--color-blue-900) 50%,transparent)}}.hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\:bg-gray-800\/30:hover{background-color:#1e29394d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/30:hover{background-color:color-mix(in oklab,var(--color-gray-800) 30%,transparent)}}.hover\:bg-gray-800\/50:hover{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/50:hover{background-color:color-mix(in oklab,var(--color-gray-800) 50%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-yellow-700:hover{background-color:var(--color-yellow-700)}.hover\:text-blue-100:hover{color:var(--color-blue-100)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-gray-200:hover{color:var(--color-gray-200)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-\[\#4f83ff\]:focus{border-color:#4f83ff}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:bg-gray-700:disabled{background-color:var(--color-gray-700)}.disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}@media(min-width:40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:gap-1\.5{gap:calc(var(--spacing) * 1.5)}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:48rem){.md\:invisible{visibility:hidden}.md\:ml-\[6\.25rem\]{margin-left:6.25rem}.md\:ml-\[17\.5rem\]{margin-left:17.5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-\[6\.25rem\]{width:6.25rem}.md\:w-\[17\.5rem\]{width:17.5rem}.md\:w-auto{width:auto}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-nowrap{flex-wrap:nowrap}.md\:gap-3{gap:calc(var(--spacing) * 3)}:where(.md\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.md\:p-4{padding:calc(var(--spacing) * 4)}.md\:px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.md\:px-5{padding-inline:calc(var(--spacing) * 5)}.md\:px-8{padding-inline:calc(var(--spacing) * 8)}.md\:py-4{padding-block:calc(var(--spacing) * 4)}.md\:pt-8{padding-top:calc(var(--spacing) * 8)}.md\:text-center{text-align:center}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&_\.cm-content\]\:px-0 .cm-content{padding-inline:calc(var(--spacing) * 0)}.\[\&_\.cm-content\]\:py-4 .cm-content{padding-block:calc(var(--spacing) * 4)}.\[\&_\.cm-editor\]\:bg-gray-950 .cm-editor{background-color:var(--color-gray-950)}.\[\&_\.cm-editor\]\:focus\:outline-none .cm-editor:focus{--tw-outline-style:none;outline-style:none}.\[\&_\.cm-focused\]\:ring-2 .cm-focused{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&_\.cm-focused\]\:ring-blue-500\/70 .cm-focused{--tw-ring-color:#3080ffb3}@supports (color:color-mix(in lab,red,red)){.\[\&_\.cm-focused\]\:ring-blue-500\/70 .cm-focused{--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 70%, transparent)}}.\[\&_\.cm-focused\]\:ring-inset .cm-focused{--tw-ring-inset:inset}.\[\&_\.cm-gutters\]\:border-r .cm-gutters{border-right-style:var(--tw-border-style);border-right-width:1px}.\[\&_\.cm-gutters\]\:border-gray-800 .cm-gutters{border-color:var(--color-gray-800)}.\[\&_\.cm-gutters\]\:bg-gray-950 .cm-gutters{background-color:var(--color-gray-950)}.\[\&_\.cm-scroller\]\:font-mono .cm-scroller{font-family:var(--font-mono)}.\[\&_\.cm-scroller\]\:leading-6 .cm-scroller{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}}html{color-scheme:dark}body{color:#edf4ff;-webkit-font-smoothing:antialiased;text-rendering:geometricprecision;background:#020813;min-height:100dvh;margin:0;font-family:Sora,Manrope,Avenir Next,Segoe UI,sans-serif;overflow-x:hidden}#root{min-height:100dvh}.app-shell{isolation:isolate;background:radial-gradient(circle at 8% 5%,#2f8fff38,#0000 35%),radial-gradient(circle at 92% 14%,#00d1ff29,#0000 32%),linear-gradient(175deg,#020816,#03091b 46%,#040e24);position:relative}.app-shell:before,.app-shell:after{content:"";pointer-events:none;z-index:-1;position:fixed;top:0;right:0;bottom:0;left:0}.app-shell:before{opacity:.35;background-image:linear-gradient(#4c76c21a 1px,#0000 1px),linear-gradient(90deg,#4c76c21a 1px,#0000 1px);background-size:34px 34px;-webkit-mask-image:radial-gradient(circle at 50% 36%,#000 22%,#0000 80%);mask-image:radial-gradient(circle at 50% 36%,#000 22%,#0000 80%)}.app-shell:after{filter:blur(4px);background:radial-gradient(circle at 16% 86%,#2a80ff57,#0000 43%),radial-gradient(circle at 84% 22%,#00d4ff33,#0000 38%),radial-gradient(circle at 52% 122%,#2876ff4d,#0000 56%);animation:28s ease-in-out infinite appGlowDrift}.glass-header{-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:linear-gradient(160deg,#06132dd9,#050e21e6);position:relative;box-shadow:0 18px 32px -28px #4491fff2,inset 0 1px #8cb7ff24}.glass-header:after{content:"";border-radius:inherit;pointer-events:none;background:linear-gradient(105deg,#0000 10%,#4f9bff3d,#0000 70%);animation:7s ease-in-out infinite topGlowSweep;position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;transform:translate(-70%)}.hero-panel{background:radial-gradient(circle at 0 0,#388fff3d,#0000 40%),linear-gradient(146deg,#081a40f2,#040d22eb);border:1px solid #21438c;border-radius:1.25rem;padding:1.15rem 1.2rem;position:relative;overflow:hidden;box-shadow:inset 0 1px #82aeff29,0 22px 50px -38px #4091fff0}.hero-panel:after{content:"";pointer-events:none;background:linear-gradient(118deg,#0000,#80b8ff1f,#0000 70%);animation:5.8s ease-in-out infinite heroSweep;position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-62%)}.hero-panel:before{content:"";filter:blur(12px);pointer-events:none;background:radial-gradient(circle,#3fa7ff6b,#0000 70%);border-radius:999px;width:19rem;height:19rem;animation:4.8s ease-in-out infinite heroGlowPulse;position:absolute;top:-10rem;right:-6rem}.status-pill{color:#c2d9ff;text-transform:uppercase;letter-spacing:.12em;background:#061d4ead;border:1px solid #2d58ac;border-radius:999px;align-items:center;gap:.35rem;padding:.35rem .65rem;font-size:.68rem;display:inline-flex;box-shadow:0 0 22px -16px #5399fff2}.electric-brand-mark{background-blend-mode:screen;background:radial-gradient(circle at 22% 18%,#5ec8ff38,#1777ff24 52%,#0a48b52e),url(/logo/background.png) 50%/cover no-repeat;justify-content:center;align-items:center;display:flex;box-shadow:inset 0 1px #ffffff3d,0 10px 25px -12px #2982fff2}.electric-card{background:linear-gradient(165deg,#08183cf2,#040e22f5);border:1px solid #1a3670;border-radius:1rem;position:relative;overflow:hidden;box-shadow:inset 0 1px #81aeff1f,0 25px 45px -36px #2f8cfff2,0 0 0 1px #3f8dff33,0 0 26px -17px #4cb0ffd1}.electric-card:after{content:"";filter:blur(16px);opacity:.45;pointer-events:none;background:radial-gradient(circle,#3b94ff40,#0000 72%);border-radius:50%;height:72%;animation:5.2s ease-in-out infinite cardGlowPulse;position:absolute;bottom:-65%;left:-20%;right:-20%}.electric-icon{color:#9bc3ff;background:radial-gradient(circle at 35% 22%,#7bc6ff61,#1d5cd652 66%,#0c2c667a);border:1px solid #568fff73;justify-content:center;align-items:center;display:flex}.metric-head{color:#91b8fb;letter-spacing:.11em;text-transform:uppercase;background:#061636bd;border:1px solid #244991;border-radius:999px;align-items:center;gap:.4rem;padding:.3rem .55rem;font-size:.66rem;display:inline-flex}.metric-value{color:#fff;letter-spacing:.02em;font-size:clamp(1.15rem,1.8vw,1.45rem);font-weight:620}.metric-sub{color:#89aee8;font-size:.78rem}.metric-pill{background:#05112cdb;border:1px solid #1d3c77;border-radius:.85rem;padding:.6rem .72rem;box-shadow:0 0 0 1px #3e89ff29,0 16px 30px -24px #2f8cffdb,0 0 18px -15px #49b0ffc7}.metric-pill span{text-transform:uppercase;letter-spacing:.1em;color:#85a9e1;font-size:.68rem;display:block}.metric-pill strong{color:#f5f9ff;margin-top:.2rem;font-size:.93rem;display:block}.electric-progress{background:linear-gradient(90deg,#1f76ff,#2f97ff 60%,#48cdff);box-shadow:0 0 18px -7px #3ea6fff2}.pairing-shell{isolation:isolate;background:radial-gradient(circle at 20% 5%,#408dff3d,#0000 35%),radial-gradient(circle at 75% 92%,#00c1ff21,#0000 35%),linear-gradient(155deg,#020816,#030c20 58%,#030915);min-height:100dvh;position:relative;overflow:hidden}.pairing-shell:after{content:"";filter:blur(12px);opacity:.7;pointer-events:none;z-index:-1;background:radial-gradient(circle at 10% 20%,#54adff40,#0000 60%),radial-gradient(circle at 85% 80%,#00ccff38,#0000 60%);animation:18s ease-in-out infinite pairingSpotlightSweep;position:absolute;top:-20%;right:-20%;bottom:-20%;left:-20%}.pairing-card{background:linear-gradient(155deg,#091b44e6,#040f23f0);border:1px solid #2956a8;position:relative;overflow:hidden;box-shadow:inset 0 1px #92beff29,0 30px 60px -44px #2f8dfffa,0 0 0 1px #4396ff33,0 0 28px -18px #4cb8ffd1}.pairing-card:before{content:"";border-radius:inherit;mix-blend-mode:screen;opacity:0;pointer-events:none;background:linear-gradient(135deg,#0000 10%,#66baff80,#0000 80%);animation:7.5s ease-in-out infinite pairingCardSweep;position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;transform:translate(-65%)}.pairing-brand{color:#0000;text-shadow:0 0 14px #60bdffcc,0 0 32px #2e8affe6,0 0 42px #fcee93d9;letter-spacing:.18em;background-image:linear-gradient(120deg,#5bc0ff,#f9e775,#5bc0ff 56%,#f9e775);background-size:260% 260%;-webkit-background-clip:text;background-clip:text;animation:5.4s ease-in-out infinite pairingElectricCharge}:is(div,section,article)[class*=bg-gray-900][class*=rounded-xl][class*=border],:is(div,section,article)[class*=bg-gray-900][class*=rounded-lg][class*=border],:is(div,section,article)[class*=bg-gray-950][class*=rounded-lg][class*=border]{box-shadow:0 0 0 1px #4390ff24,0 22px 40px -32px #2d86ffdb,0 0 22px -16px #49b4ffbf}.electric-button{background:linear-gradient(126deg,#125bdf,#1f88ff 55%,#17b4ff);border:1px solid #4a89ff;transition:transform .18s,filter .18s,box-shadow .18s;box-shadow:0 18px 30px -20px #2f8dffe6}.electric-button:hover{filter:brightness(1.05);transform:translateY(-1px);box-shadow:0 20px 34px -19px #389afff2}.electric-loader{border:3px solid #5992ff38;border-top-color:#51abff;animation:1s linear infinite spin;box-shadow:0 0 20px -12px #429dff}.motion-rise{animation:.58s both riseIn}.motion-delay-1{animation-delay:70ms}.motion-delay-2{animation-delay:.13s}.motion-delay-3{animation-delay:.19s}.motion-delay-4{animation-delay:.25s}*{scrollbar-width:thin;scrollbar-color:#244787 #081126}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#081126}::-webkit-scrollbar-thumb{background:#244787;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#3160b6}:focus-visible{outline-offset:2px;outline:2px solid #4ea4ff}@keyframes riseIn{0%{opacity:0;transform:translateY(14px)scale(.985)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes heroSweep{0%,to{opacity:0;transform:translate(-68%)}30%{opacity:.65}60%{opacity:0;transform:translate(58%)}}@keyframes heroGlowPulse{0%,to{opacity:.38;transform:scale(.94)}50%{opacity:.72;transform:scale(1.08)}}@keyframes cardGlowPulse{0%,to{opacity:.28;transform:translateY(0)scale(.96)}50%{opacity:.55;transform:translateY(-2%)scale(1.04)}}@keyframes pairingElectricCharge{0%,to{text-shadow:0 0 14px #56b1ff80,0 0 32px #247cffb3,0 0 38px #fcee9399;background-position:0%;transform:translateY(0)scale(1)}35%{text-shadow:0 0 26px #8adaff,0 0 52px #38b0ff,0 0 60px #fcee93;background-position:80%;transform:translateY(-1px)scale(1.06)}60%{text-shadow:0 0 18px #56b1ffb3,0 0 36px #247cffcc,0 0 44px #fcee93b3;background-position:50%;transform:translateY(0)scale(1.02)}}@keyframes pairingSpotlightSweep{0%{opacity:.45;transform:translate(-12%,8%)scale(1)}30%{opacity:.7;transform:translate(10%,-4%)scale(1.06)}55%{opacity:.6;transform:translate(16%,10%)scale(1.1)}80%{opacity:.5;transform:translate(-8%,-6%)scale(1.04)}to{opacity:.45;transform:translate(-12%,8%)scale(1)}}@keyframes pairingCardSweep{0%,to{opacity:0;transform:translate(-70%)}25%{opacity:.55}50%{opacity:0;transform:translate(55%)}}@keyframes topGlowSweep{0%,to{opacity:0;transform:translate(-78%)}30%{opacity:.55}58%{opacity:0;transform:translate(58%)}}@keyframes appGlowDrift{0%{opacity:.3;transform:translate(-3%,1.8%)scale(1)}25%{opacity:.5;transform:translate(2.6%,-1.2%)scale(1.04)}50%{opacity:.56;transform:translate(4.4%,-3.4%)scale(1.09)}75%{opacity:.44;transform:translate(-1.8%,-2.1%)scale(1.05)}to{opacity:.34;transform:translate(-3.6%,2.6%)scale(1.01)}}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:768px){.hero-panel{padding:.95rem}.status-pill{letter-spacing:.1em;padding:.28rem .52rem;font-size:.61rem}.metric-value{font-size:1.08rem}.metric-sub{font-size:.74rem}.electric-card{border-radius:.9rem}}@media(prefers-reduced-motion:reduce){.hero-panel:after,.hero-panel:before,.glass-header:after,.electric-card:after,.app-shell:after,.pairing-shell:after,.pairing-card:before,.motion-rise,.electric-loader{animation:none!important}.electric-button{transition:none!important}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@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}} diff --git a/web/dist/index.html b/web/dist/index.html index 36376f925..a7a36b124 100644 --- a/web/dist/index.html +++ b/web/dist/index.html @@ -9,8 +9,8 @@ /> ZeroClaw - - + +
diff --git a/web/src/components/layout/Sidebar.tsx b/web/src/components/layout/Sidebar.tsx index 7870885e6..e88842b6c 100644 --- a/web/src/components/layout/Sidebar.tsx +++ b/web/src/components/layout/Sidebar.tsx @@ -78,13 +78,11 @@ export default function Sidebar({
{!isCollapsed && ( <> -
- ZeroClaw -
+ ZeroClaw ZeroClaw