0?R:0,v.style.justifyContent="flex-end")}}}h.current=y.scrollTop})})})]})});HC.displayName=Bp;var VC="SelectGroup",[LO,zO]=_s(VC),PO=f.forwardRef((e,n)=>{const{__scopeSelect:a,...o}=e,l=Dt();return c.jsx(LO,{scope:a,id:l,children:c.jsx(Cn.div,{role:"group","aria-labelledby":l,...o,ref:n})})});PO.displayName=VC;var GC="SelectLabel",FC=f.forwardRef((e,n)=>{const{__scopeSelect:a,...o}=e,l=zO(GC,a);return c.jsx(Cn.div,{id:l.id,...o,ref:n})});FC.displayName=GC;var yu="SelectItem",[BO,YC]=_s(yu),WC=f.forwardRef((e,n)=>{const{__scopeSelect:a,value:o,disabled:l=!1,textValue:i,...d}=e,m=xa(yu,a),h=Sa(yu,a),p=m.value===o,[y,v]=f.useState(i??""),[x,S]=f.useState(!1),j=Le(n,k=>{var A;return(A=h.itemRefCallback)==null?void 0:A.call(h,k,o,l)}),C=Dt(),N=f.useRef("touch"),E=()=>{l||(m.onValueChange(o),m.onOpenChange(!1))};if(o==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return c.jsx(BO,{scope:a,value:o,disabled:l,textId:C,isSelected:p,onItemTextChange:f.useCallback(k=>{v(A=>A||((k==null?void 0:k.textContent)??"").trim())},[]),children:c.jsx(sd.ItemSlot,{scope:a,value:o,disabled:l,textValue:y,children:c.jsx(Cn.div,{role:"option","aria-labelledby":C,"data-highlighted":x?"":void 0,"aria-selected":p&&x,"data-state":p?"checked":"unchecked","aria-disabled":l||void 0,"data-disabled":l?"":void 0,tabIndex:l?void 0:-1,...d,ref:j,onFocus:ve(d.onFocus,()=>S(!0)),onBlur:ve(d.onBlur,()=>S(!1)),onClick:ve(d.onClick,()=>{N.current!=="mouse"&&E()}),onPointerUp:ve(d.onPointerUp,()=>{N.current==="mouse"&&E()}),onPointerDown:ve(d.onPointerDown,k=>{N.current=k.pointerType}),onPointerMove:ve(d.onPointerMove,k=>{var A;N.current=k.pointerType,l?(A=h.onItemLeave)==null||A.call(h):N.current==="mouse"&&k.currentTarget.focus({preventScroll:!0})}),onPointerLeave:ve(d.onPointerLeave,k=>{var A;k.currentTarget===document.activeElement&&((A=h.onItemLeave)==null||A.call(h))}),onKeyDown:ve(d.onKeyDown,k=>{var R;((R=h.searchRef)==null?void 0:R.current)!==""&&k.key===" "||(CO.includes(k.key)&&E(),k.key===" "&&k.preventDefault())})})})})});WC.displayName=yu;var Ol="SelectItemText",qC=f.forwardRef((e,n)=>{const{__scopeSelect:a,className:o,style:l,...i}=e,d=xa(Ol,a),m=Sa(Ol,a),h=YC(Ol,a),p=kO(Ol,a),[y,v]=f.useState(null),x=Le(n,E=>v(E),h.onItemTextChange,E=>{var k;return(k=m.itemTextRefCallback)==null?void 0:k.call(m,E,h.value,h.disabled)}),S=y==null?void 0:y.textContent,j=f.useMemo(()=>c.jsx("option",{value:h.value,disabled:h.disabled,children:S},h.value),[h.disabled,h.value,S]),{onNativeOptionAdd:C,onNativeOptionRemove:N}=p;return Ct(()=>(C(j),()=>N(j)),[C,N,j]),c.jsxs(c.Fragment,{children:[c.jsx(Cn.span,{id:h.textId,...i,ref:x}),h.isSelected&&d.valueNode&&!d.valueNodeHasChildren?so.createPortal(i.children,d.valueNode):null]})});qC.displayName=Ol;var KC="SelectItemIndicator",XC=f.forwardRef((e,n)=>{const{__scopeSelect:a,...o}=e;return YC(KC,a).isSelected?c.jsx(Cn.span,{"aria-hidden":!0,...o,ref:n}):null});XC.displayName=KC;var $p="SelectScrollUpButton",ZC=f.forwardRef((e,n)=>{const a=Sa($p,e.__scopeSelect),o=sg($p,e.__scopeSelect),[l,i]=f.useState(!1),d=Le(n,o.onScrollButtonChange);return Ct(()=>{if(a.viewport&&a.isPositioned){let m=function(){const p=h.scrollTop>0;i(p)};const h=a.viewport;return m(),h.addEventListener("scroll",m),()=>h.removeEventListener("scroll",m)}},[a.viewport,a.isPositioned]),l?c.jsx(JC,{...e,ref:d,onAutoScroll:()=>{const{viewport:m,selectedItem:h}=a;m&&h&&(m.scrollTop=m.scrollTop-h.offsetHeight)}}):null});ZC.displayName=$p;var Ip="SelectScrollDownButton",QC=f.forwardRef((e,n)=>{const a=Sa(Ip,e.__scopeSelect),o=sg(Ip,e.__scopeSelect),[l,i]=f.useState(!1),d=Le(n,o.onScrollButtonChange);return Ct(()=>{if(a.viewport&&a.isPositioned){let m=function(){const p=h.scrollHeight-h.clientHeight,y=Math.ceil(h.scrollTop)h.removeEventListener("scroll",m)}},[a.viewport,a.isPositioned]),l?c.jsx(JC,{...e,ref:d,onAutoScroll:()=>{const{viewport:m,selectedItem:h}=a;m&&h&&(m.scrollTop=m.scrollTop+h.offsetHeight)}}):null});QC.displayName=Ip;var JC=f.forwardRef((e,n)=>{const{__scopeSelect:a,onAutoScroll:o,...l}=e,i=Sa("SelectScrollButton",a),d=f.useRef(null),m=ld(a),h=f.useCallback(()=>{d.current!==null&&(window.clearInterval(d.current),d.current=null)},[]);return f.useEffect(()=>()=>h(),[h]),Ct(()=>{var y;const p=m().find(v=>v.ref.current===document.activeElement);(y=p==null?void 0:p.ref.current)==null||y.scrollIntoView({block:"nearest"})},[m]),c.jsx(Cn.div,{"aria-hidden":!0,...l,ref:n,style:{flexShrink:0,...l.style},onPointerDown:ve(l.onPointerDown,()=>{d.current===null&&(d.current=window.setInterval(o,50))}),onPointerMove:ve(l.onPointerMove,()=>{var p;(p=i.onItemLeave)==null||p.call(i),d.current===null&&(d.current=window.setInterval(o,50))}),onPointerLeave:ve(l.onPointerLeave,()=>{h()})})}),$O="SelectSeparator",ej=f.forwardRef((e,n)=>{const{__scopeSelect:a,...o}=e;return c.jsx(Cn.div,{"aria-hidden":!0,...o,ref:n})});ej.displayName=$O;var Up="SelectArrow",IO=f.forwardRef((e,n)=>{const{__scopeSelect:a,...o}=e,l=id(a),i=xa(Up,a),d=Sa(Up,a);return i.open&&d.position==="popper"?c.jsx(Uu,{...l,...o,ref:n}):null});IO.displayName=Up;var UO="SelectBubbleInput",tj=f.forwardRef(({__scopeSelect:e,value:n,...a},o)=>{const l=f.useRef(null),i=Le(o,l),d=wC(n);return f.useEffect(()=>{const m=l.current;if(!m)return;const h=window.HTMLSelectElement.prototype,y=Object.getOwnPropertyDescriptor(h,"value").set;if(d!==n&&y){const v=new Event("change",{bubbles:!0});y.call(m,n),m.dispatchEvent(v)}},[d,n]),c.jsx(Cn.select,{...a,style:{...cw,...a.style},ref:i,defaultValue:n})});tj.displayName=UO;function nj(e){return e===""||e===void 0}function rj(e){const n=Ot(e),a=f.useRef(""),o=f.useRef(0),l=f.useCallback(d=>{const m=a.current+d;n(m),(function h(p){a.current=p,window.clearTimeout(o.current),p!==""&&(o.current=window.setTimeout(()=>h(""),1e3))})(m)},[n]),i=f.useCallback(()=>{a.current="",window.clearTimeout(o.current)},[]);return f.useEffect(()=>()=>window.clearTimeout(o.current),[]),[a,l,i]}function aj(e,n,a){const l=n.length>1&&Array.from(n).every(p=>p===n[0])?n[0]:n,i=a?e.indexOf(a):-1;let d=HO(e,Math.max(i,0));l.length===1&&(d=d.filter(p=>p!==a));const h=d.find(p=>p.textValue.toLowerCase().startsWith(l.toLowerCase()));return h!==a?h:void 0}function HO(e,n){return e.map((a,o)=>e[(n+o)%e.length])}var VO=_C,oj=OC,GO=LC,FO=zC,YO=PC,sj=BC,WO=HC,lj=FC,ij=WC,qO=qC,KO=XC,cj=ZC,uj=QC,dj=ej;const cd=VO,ud=GO,gi=f.forwardRef(({className:e,children:n,...a},o)=>c.jsxs(oj,{ref:o,className:ie("flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...a,children:[n,c.jsx(FO,{asChild:!0,children:c.jsx(LS,{className:"h-4 w-4 opacity-50"})})]}));gi.displayName=oj.displayName;const fj=f.forwardRef(({className:e,...n},a)=>c.jsx(cj,{ref:a,className:ie("flex cursor-default items-center justify-center py-1",e),...n,children:c.jsx(uA,{className:"h-4 w-4"})}));fj.displayName=cj.displayName;const mj=f.forwardRef(({className:e,...n},a)=>c.jsx(uj,{ref:a,className:ie("flex cursor-default items-center justify-center py-1",e),...n,children:c.jsx(LS,{className:"h-4 w-4"})}));mj.displayName=uj.displayName;const vi=f.forwardRef(({className:e,children:n,position:a="popper",...o},l)=>c.jsx(YO,{children:c.jsxs(sj,{ref:l,className:ie("relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",a==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:a,...o,children:[c.jsx(fj,{}),c.jsx(WO,{className:ie("p-1",a==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:n}),c.jsx(mj,{})]})}));vi.displayName=sj.displayName;const XO=f.forwardRef(({className:e,...n},a)=>c.jsx(lj,{ref:a,className:ie("px-2 py-1.5 text-sm font-semibold",e),...n}));XO.displayName=lj.displayName;const no=f.forwardRef(({className:e,children:n,...a},o)=>c.jsxs(ij,{ref:o,className:ie("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...a,children:[c.jsx("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:c.jsx(KO,{children:c.jsx(DS,{className:"h-4 w-4"})})}),c.jsx(qO,{children:n})]}));no.displayName=ij.displayName;const ZO=f.forwardRef(({className:e,...n},a)=>c.jsx(dj,{ref:a,className:ie("-mx-1 my-1 h-px bg-muted",e),...n}));ZO.displayName=dj.displayName;function dd(){return(dd=Object.assign||function(e){for(var n=1;n=0||(l[a]=e[a]);return l}function zl(e){var n=f.useRef(e),a=f.useRef(function(o){n.current&&n.current(o)});return n.current=e,a.current}var ql=function(e,n,a){return n===void 0&&(n=0),a===void 0&&(a=1),e>a?a:e0:A.buttons>0)&&i.current?d(Ex(i.current,A,p.current)):(k(!1),h())},E=function(){k(!1),h()};function k(A){var R=y.current,L=Hp(i.current),z=A?L.addEventListener:L.removeEventListener;z(R?"touchmove":"mousemove",N),z(R?"touchend":"mouseup",E)}return[function(A){var R=A.nativeEvent,L=i.current;if(L&&(Nx(R),!(function(B,U){return U&&!Pl(B)})(R,y.current)&&L)){if(Pl(R)){y.current=!0;var z=R.changedTouches||[];z.length&&(p.current=z[0].identifier)}L.focus(),d(Ex(L,R,p.current)),k(!0)}},function(A){var R=A.which||A.keyCode;R<37||R>40||(A.preventDefault(),m({left:R===39?.05:R===37?-.05:0,top:R===40?.05:R===38?-.05:0}))},function(A){var R=A.which||A.keyCode;R>=37&&R<=40&&h()},k]},[m,d,h]),x=v[0],S=v[1],j=v[2],C=v[3];return f.useEffect(function(){return C},[C]),ue.createElement("div",dd({},l,{onTouchStart:x,onMouseDown:x,className:"react-colorful__interactive",ref:i,onKeyDown:S,onKeyUp:j,tabIndex:0,role:"slider"}))}),lg=function(e){return e.filter(Boolean).join(" ")},gj=function(e){var n=e.color,a=e.left,o=e.top,l=o===void 0?.5:o,i=lg(["react-colorful__pointer",e.className]);return ue.createElement("div",{className:i,style:{top:100*l+"%",left:100*a+"%"}},ue.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:n}}))},It=function(e,n,a){return n===void 0&&(n=0),a===void 0&&(a=Math.pow(10,n)),Math.round(a*e)/a},QO=function(e){return rD(Vp(e))},Vp=function(e){return e[0]==="#"&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?It(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:e.length===8?It(parseInt(e.substring(6,8),16)/255,2):1}},JO=function(e){return nD(tD(e))},eD=function(e){var n=e.s,a=e.v,o=e.a,l=(200-n)*a/100;return{h:It(e.h),s:It(l>0&&l<200?n*a/100/(l<=100?l:200-l)*100:0),l:It(l/2),a:It(o,2)}},Gp=function(e){var n=eD(e);return"hsl("+n.h+", "+n.s+"%, "+n.l+"%)"},tD=function(e){var n=e.h,a=e.s,o=e.v,l=e.a;n=n/360*6,a/=100,o/=100;var i=Math.floor(n),d=o*(1-a),m=o*(1-(n-i)*a),h=o*(1-(1-n+i)*a),p=i%6;return{r:It(255*[o,m,d,d,h,o][p]),g:It(255*[h,o,o,m,d,d][p]),b:It(255*[d,d,h,o,o,m][p]),a:It(l,2)}},Vc=function(e){var n=e.toString(16);return n.length<2?"0"+n:n},nD=function(e){var n=e.r,a=e.g,o=e.b,l=e.a,i=l<1?Vc(It(255*l)):"";return"#"+Vc(n)+Vc(a)+Vc(o)+i},rD=function(e){var n=e.r,a=e.g,o=e.b,l=e.a,i=Math.max(n,a,o),d=i-Math.min(n,a,o),m=d?i===n?(a-o)/d:i===a?2+(o-n)/d:4+(n-a)/d:0;return{h:It(60*(m<0?m+6:m)),s:It(i?d/i*100:0),v:It(i/255*100),a:l}},aD=ue.memo(function(e){var n=e.hue,a=e.onChange,o=e.onChangeEnd,l=lg(["react-colorful__hue",e.className]);return ue.createElement("div",{className:l},ue.createElement(hj,{onMove:function(i){a({h:360*i.left})},onKey:function(i){a({h:ql(n+360*i.left,0,360)})},onEnd:o,"aria-label":"Hue","aria-valuenow":It(n),"aria-valuemax":"360","aria-valuemin":"0"},ue.createElement(gj,{className:"react-colorful__hue-pointer",left:n/360,color:Gp({h:n,s:100,v:100,a:1})})))}),oD=ue.memo(function(e){var n=e.hsva,a=e.onChange,o=e.onChangeEnd,l={backgroundColor:Gp({h:n.h,s:100,v:100,a:1})};return ue.createElement("div",{className:"react-colorful__saturation",style:l},ue.createElement(hj,{onMove:function(i){a({s:100*i.left,v:100-100*i.top})},onKey:function(i){a({s:ql(n.s+100*i.left,0,100),v:ql(n.v-100*i.top,0,100)})},onEnd:o,"aria-label":"Color","aria-valuetext":"Saturation "+It(n.s)+"%, Brightness "+It(n.v)+"%"},ue.createElement(gj,{className:"react-colorful__saturation-pointer",top:1-n.v/100,left:n.s/100,color:Gp(n)})))}),vj=function(e,n){if(e===n)return!0;for(var a in e)if(e[a]!==n[a])return!1;return!0},sD=function(e,n){return e.toLowerCase()===n.toLowerCase()||vj(Vp(e),Vp(n))};function lD(e,n,a,o){var l=zl(a),i=zl(o),d=f.useState(function(){return e.toHsva(n)}),m=d[0],h=d[1],p=f.useRef({color:n,hsva:m}),y=f.useRef(!1);f.useEffect(function(){if(!e.equal(n,p.current.color)){var S=e.toHsva(n);p.current={hsva:S,color:n},h(S),y.current=!1}},[n,e]),f.useEffect(function(){var S;vj(m,p.current.hsva)||e.equal(S=e.fromHsva(m),p.current.color)||(p.current={hsva:m,color:S},l(S),y.current=!0)},[m,e,l]);var v=f.useCallback(function(S){h(function(j){return Object.assign({},j,S)})},[]),x=f.useCallback(function(){y.current&&(y.current=!1,i(p.current.color))},[i]);return[m,v,x]}var iD=typeof window<"u"?f.useLayoutEffect:f.useEffect,cD=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},kx=new Map,uD=function(e){iD(function(){var n=e.current?e.current.ownerDocument:document;if(n!==void 0&&!kx.has(n)){var a=n.createElement("style");a.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,kx.set(n,a);var o=cD();o&&a.setAttribute("nonce",o),n.head.appendChild(a)}},[])},dD=function(e){var n=e.className,a=e.colorModel,o=e.color,l=o===void 0?a.defaultColor:o,i=e.onChange,d=e.onChangeEnd,m=pj(e,["className","colorModel","color","onChange","onChangeEnd"]),h=f.useRef(null);uD(h);var p=lD(a,l,i,d),y=p[0],v=p[1],x=p[2],S=lg(["react-colorful",n]);return ue.createElement("div",dd({},m,{ref:h,className:S}),ue.createElement(oD,{hsva:y,onChange:v,onChangeEnd:x}),ue.createElement(aD,{hue:y.h,onChange:v,onChangeEnd:x,className:"react-colorful__last-control"}))},fD={defaultColor:"000",toHsva:QO,fromHsva:function(e){return JO({h:e.h,s:e.s,v:e.v,a:1})},equal:sD},mD=function(e){return ue.createElement(dD,dd({},e,{colorModel:fD}))};function lr(e,n="#000000"){let a=String(e??"").trim();if(!a)return n;a.startsWith("#")||(a=`#${a}`);const o=a.slice(1);return/^[0-9a-fA-F]{3}$/.test(o)?`#${o.split("").map(l=>l+l).join("").toLowerCase()}`:/^[0-9a-fA-F]{6}$/.test(o)?`#${o.toLowerCase()}`:n}function Fp(e){const n=String(e??"").trim();return/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(n)||/^[0-9a-fA-F]{6}$/.test(n)}function pD(e){const n=f.useRef(null);return f.useEffect(()=>{e&&(typeof e=="function"?e(n.current):e.current=n.current)}),n}function hD(e,n=[]){let a=[];function o(i,d){const m=f.createContext(d),h=a.length;a=[...a,d];const p=v=>{var E;const{scope:x,children:S,...j}=v,C=((E=x==null?void 0:x[e])==null?void 0:E[h])||m,N=f.useMemo(()=>j,Object.values(j));return c.jsx(C.Provider,{value:N,children:S})};p.displayName=i+"Provider";function y(v,x){var C;const S=((C=x==null?void 0:x[e])==null?void 0:C[h])||m,j=f.useContext(S);if(j)return j;if(d!==void 0)return d;throw new Error(`\`${v}\` must be used within \`${i}\``)}return[p,y]}const l=()=>{const i=a.map(d=>f.createContext(d));return function(m){const h=(m==null?void 0:m[e])||i;return f.useMemo(()=>({[`__scope${e}`]:{...m,[e]:h}}),[m,h])}};return l.scopeName=e,[o,gD(l,...n)]}function gD(...e){const n=e[0];if(e.length===1)return n;const a=()=>{const o=e.map(l=>({useScope:l(),scopeName:l.scopeName}));return function(i){const d=o.reduce((m,{useScope:h,scopeName:p})=>{const v=h(i)[`__scope${p}`];return{...m,...v}},{});return f.useMemo(()=>({[`__scope${n.scopeName}`]:d}),[d])}};return a.scopeName=n.scopeName,a}function bj(e){const n=vD(e),a=f.forwardRef((o,l)=>{const{children:i,...d}=o,m=f.Children.toArray(i),h=m.find(yD);if(h){const p=h.props.children,y=m.map(v=>v===h?f.Children.count(p)>1?f.Children.only(null):f.isValidElement(p)?p.props.children:null:v);return c.jsx(n,{...d,ref:l,children:f.isValidElement(p)?f.cloneElement(p,void 0,y):null})}return c.jsx(n,{...d,ref:l,children:i})});return a.displayName=`${e}.Slot`,a}function vD(e){const n=f.forwardRef((a,o)=>{const{children:l,...i}=a;if(f.isValidElement(l)){const d=SD(l),m=xD(i,l.props);return l.type!==f.Fragment&&(m.ref=o?st(o,d):d),f.cloneElement(l,m)}return f.Children.count(l)>1?f.Children.only(null):null});return n.displayName=`${e}.SlotClone`,n}var bD=Symbol("radix.slottable");function yD(e){return f.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===bD}function xD(e,n){const a={...n};for(const o in n){const l=e[o],i=n[o];/^on[A-Z]/.test(o)?l&&i?a[o]=(...m)=>{const h=i(...m);return l(...m),h}:l&&(a[o]=l):o==="style"?a[o]={...l,...i}:o==="className"&&(a[o]=[l,i].filter(Boolean).join(" "))}return{...e,...a}}function SD(e){var o,l;let n=(o=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:o.get,a=n&&"isReactWarning"in n&&n.isReactWarning;return a?e.ref:(n=(l=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:l.get,a=n&&"isReactWarning"in n&&n.isReactWarning,a?e.props.ref:e.props.ref||e.ref)}var wD=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],yj=wD.reduce((e,n)=>{const a=bj(`Primitive.${n}`),o=f.forwardRef((l,i)=>{const{asChild:d,...m}=l,h=d?a:n;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),c.jsx(h,{...m,ref:i})});return o.displayName=`Primitive.${n}`,{...e,[n]:o}},{}),fd="Popover",[xj]=hD(fd,[ba]),bi=ba(),[CD,wa]=xj(fd),Sj=e=>{const{__scopePopover:n,children:a,open:o,defaultOpen:l,onOpenChange:i,modal:d=!1}=e,m=bi(n),h=f.useRef(null),[p,y]=f.useState(!1),[v,x]=Dr({prop:o,defaultProp:l??!1,onChange:i,caller:fd});return c.jsx($u,{...m,children:c.jsx(CD,{scope:n,contentId:Dt(),triggerRef:h,open:v,onOpenChange:x,onOpenToggle:f.useCallback(()=>x(S=>!S),[x]),hasCustomAnchor:p,onCustomAnchorAdd:f.useCallback(()=>y(!0),[]),onCustomAnchorRemove:f.useCallback(()=>y(!1),[]),modal:d,children:a})})};Sj.displayName=fd;var wj="PopoverAnchor",jD=f.forwardRef((e,n)=>{const{__scopePopover:a,...o}=e,l=wa(wj,a),i=bi(a),{onCustomAnchorAdd:d,onCustomAnchorRemove:m}=l;return f.useEffect(()=>(d(),()=>m()),[d,m]),c.jsx(ri,{...i,...o,ref:n})});jD.displayName=wj;var Cj="PopoverTrigger",jj=f.forwardRef((e,n)=>{const{__scopePopover:a,...o}=e,l=wa(Cj,a),i=bi(a),d=Le(n,l.triggerRef),m=c.jsx(yj.button,{type:"button","aria-haspopup":"dialog","aria-expanded":l.open,"aria-controls":l.contentId,"data-state":Rj(l.open),...o,ref:d,onClick:ve(e.onClick,l.onOpenToggle)});return l.hasCustomAnchor?m:c.jsx(ri,{asChild:!0,...i,children:m})});jj.displayName=Cj;var ig="PopoverPortal",[ED,ND]=xj(ig,{forceMount:void 0}),Ej=e=>{const{__scopePopover:n,forceMount:a,children:o,container:l}=e,i=wa(ig,n);return c.jsx(ED,{scope:n,forceMount:a,children:c.jsx(Ut,{present:a||i.open,children:c.jsx(As,{asChild:!0,container:l,children:o})})})};Ej.displayName=ig;var xs="PopoverContent",Nj=f.forwardRef((e,n)=>{const a=ND(xs,e.__scopePopover),{forceMount:o=a.forceMount,...l}=e,i=wa(xs,e.__scopePopover);return c.jsx(Ut,{present:o||i.open,children:i.modal?c.jsx(TD,{...l,ref:n}):c.jsx(RD,{...l,ref:n})})});Nj.displayName=xs;var kD=bj("PopoverContent.RemoveScroll"),TD=f.forwardRef((e,n)=>{const a=wa(xs,e.__scopePopover),o=f.useRef(null),l=Le(n,o),i=f.useRef(!1);return f.useEffect(()=>{const d=o.current;if(d)return Vu(d)},[]),c.jsx(si,{as:kD,allowPinchZoom:!0,children:c.jsx(kj,{...e,ref:l,trapFocus:a.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:ve(e.onCloseAutoFocus,d=>{var m;d.preventDefault(),i.current||(m=a.triggerRef.current)==null||m.focus()}),onPointerDownOutside:ve(e.onPointerDownOutside,d=>{const m=d.detail.originalEvent,h=m.button===0&&m.ctrlKey===!0,p=m.button===2||h;i.current=p},{checkForDefaultPrevented:!1}),onFocusOutside:ve(e.onFocusOutside,d=>d.preventDefault(),{checkForDefaultPrevented:!1})})})}),RD=f.forwardRef((e,n)=>{const a=wa(xs,e.__scopePopover),o=f.useRef(!1),l=f.useRef(!1);return c.jsx(kj,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:i=>{var d,m;(d=e.onCloseAutoFocus)==null||d.call(e,i),i.defaultPrevented||(o.current||(m=a.triggerRef.current)==null||m.focus(),i.preventDefault()),o.current=!1,l.current=!1},onInteractOutside:i=>{var h,p;(h=e.onInteractOutside)==null||h.call(e,i),i.defaultPrevented||(o.current=!0,i.detail.originalEvent.type==="pointerdown"&&(l.current=!0));const d=i.target;((p=a.triggerRef.current)==null?void 0:p.contains(d))&&i.preventDefault(),i.detail.originalEvent.type==="focusin"&&l.current&&i.preventDefault()}})}),kj=f.forwardRef((e,n)=>{const{__scopePopover:a,trapFocus:o,onOpenAutoFocus:l,onCloseAutoFocus:i,disableOutsidePointerEvents:d,onEscapeKeyDown:m,onPointerDownOutside:h,onFocusOutside:p,onInteractOutside:y,...v}=e,x=wa(xs,a),S=bi(a);return Du(),c.jsx(ti,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:l,onUnmountAutoFocus:i,children:c.jsx(ks,{asChild:!0,disableOutsidePointerEvents:d,onInteractOutside:y,onEscapeKeyDown:m,onPointerDownOutside:h,onFocusOutside:p,onDismiss:()=>x.onOpenChange(!1),children:c.jsx(Iu,{"data-state":Rj(x.open),role:"dialog",id:x.contentId,...S,...v,ref:n,style:{...v.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),Tj="PopoverClose",AD=f.forwardRef((e,n)=>{const{__scopePopover:a,...o}=e,l=wa(Tj,a);return c.jsx(yj.button,{type:"button",...o,ref:n,onClick:ve(e.onClick,()=>l.onOpenChange(!1))})});AD.displayName=Tj;var _D="PopoverArrow",MD=f.forwardRef((e,n)=>{const{__scopePopover:a,...o}=e,l=bi(a);return c.jsx(Uu,{...l,...o,ref:n})});MD.displayName=_D;function Rj(e){return e?"open":"closed"}var OD=Sj,DD=jj,LD=Ej,Aj=Nj;const zD=OD,PD=DD,_j=f.forwardRef(({className:e,align:n="center",sideOffset:a=4,...o},l)=>c.jsx(LD,{children:c.jsx(Aj,{ref:l,align:n,sideOffset:a,className:ie("z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",e),...o})}));_j.displayName=Aj.displayName;const cg=f.forwardRef(({disabled:e,value:n,onChange:a,onBlur:o,name:l,className:i,size:d,...m},h)=>{const p=pD(h),[y,v]=f.useState(!1),[x,S]=f.useState(""),j=f.useMemo(()=>lr(n,"#ffffff"),[n]),C=y&&x?x:j;function N(E){Fp(E)&&a(lr(E)),S("")}return c.jsxs(zD,{open:y,onOpenChange:E=>{E||N(x||j),v(E)},children:[c.jsx(PD,{asChild:!0,disabled:e,onBlur:o,children:c.jsx(be,{...m,type:"button",className:ie("size-10 shrink-0 overflow-hidden rounded-md border border-border p-0 shadow-sm",i),name:l,onClick:()=>v(!0),size:d??"icon",style:{backgroundColor:j},variant:"outline","aria-label":"Pick colour",children:c.jsx("span",{className:"sr-only",children:j})})}),c.jsxs(_j,{className:"w-auto border-border bg-card p-3",align:"start",children:[c.jsx(mD,{className:"color-picker-swatch",color:j,onChange:E=>{S(""),a(lr(E))}}),c.jsx(rt,{ref:p,maxLength:7,value:C,onChange:E=>{const k=E.currentTarget.value;S(k),Fp(k)&&a(lr(k))},onBlur:()=>N(x||j),onKeyDown:E=>{E.key==="Enter"&&(N(x||j),v(!1))},className:"mt-3 border-border bg-secondary/30 font-mono text-sm uppercase",placeholder:"#000000"})]})]})});cg.displayName="ColorPicker";function BD({value:e,onChange:n,placeholder:a="Add item…"}){const o=Array.isArray(e)?e:[];return c.jsxs("div",{className:"space-y-2",children:[o.map((l,i)=>c.jsxs("div",{className:"flex gap-2",children:[c.jsx(rt,{value:l,onChange:d=>{const m=[...o];m[i]=d.target.value,n(m)},placeholder:a,className:"border-border bg-secondary/30"}),c.jsx(be,{type:"button",variant:"ghost",size:"icon",className:"shrink-0 text-destructive hover:bg-destructive/10",onClick:()=>n(o.filter((d,m)=>m!==i)),children:c.jsx(xe,{icon:hh,size:16})})]},i)),c.jsxs(be,{type:"button",variant:"outline",size:"sm",className:"w-full border-dashed border-border",onClick:()=>n([...o,""]),children:[c.jsx(xe,{icon:su,size:16,className:"mr-2"}),"Add line"]})]})}const Kl="system",ug=[{id:"Inter",label:"Inter"},{id:"Roboto",label:"Roboto"},{id:"Open Sans",label:"Open Sans"},{id:"Lato",label:"Lato"},{id:"Montserrat",label:"Montserrat"},{id:"Poppins",label:"Poppins"},{id:"Nunito",label:"Nunito"},{id:"Raleway",label:"Raleway"},{id:"Work Sans",label:"Work Sans"},{id:"Source Sans 3",label:"Source Sans 3"},{id:"DM Sans",label:"DM Sans"},{id:"Manrope",label:"Manrope"},{id:"Outfit",label:"Outfit"},{id:"Rubik",label:"Rubik"},{id:"Ubuntu",label:"Ubuntu"},{id:"Fira Sans",label:"Fira Sans"},{id:"PT Sans",label:"PT Sans"},{id:"Noto Sans",label:"Noto Sans"},{id:"Oswald",label:"Oswald"},{id:"Merriweather",label:"Merriweather"},{id:"Playfair Display",label:"Playfair Display"},{id:"Libre Baskerville",label:"Libre Baskerville"},{id:"JetBrains Mono",label:"JetBrains Mono"},{id:"Fira Code",label:"Fira Code"}],Tx=new Set(ug.map(e=>e.id));function $D(e){return`https://fonts.googleapis.com/css2?${e.map(a=>`family=${encodeURIComponent(a).replace(/%20/g,"+")}:wght@400;600;700;800`).join("&")}&display=swap`}function ID(){const e="supportbot-google-fonts";if(document.getElementById(e))return;const n=document.createElement("link");n.id=e,n.rel="stylesheet",n.href=$D(ug.map(a=>a.id)),document.head.appendChild(n)}function Mj(e){var l;if(!e||typeof e!="string")return"Inter";const n=e.trim();if(n===Kl)return Kl;if(!n.includes(","))return Tx.has(n)?n:"Inter";const a=n.match(/^["']?([^"',]+)["']?/),o=(l=a==null?void 0:a[1])==null?void 0:l.trim();return o&&Tx.has(o)?o:"Inter"}function ap(e){return e===Kl?'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif':`"${e}", ui-sans-serif, system-ui, sans-serif`}function UD({field:e,value:n,onChange:a,readOnly:o}){const l=e.path.replace(/\./g,"-"),i=Mj(n);return f.useEffect(()=>{ID()},[]),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsxs(cd,{value:i,disabled:o,onValueChange:a,children:[c.jsx(gi,{id:l,className:"border-border bg-secondary/30",style:{fontFamily:ap(i)},children:c.jsx(ud,{placeholder:"Choose a font…"})}),c.jsxs(vi,{className:"max-h-[min(320px,50vh)]",children:[c.jsx(no,{value:Kl,style:{fontFamily:ap(Kl)},children:"System default"}),ug.map(d=>c.jsx(no,{value:d.id,style:{fontFamily:ap(d.id)},children:d.label},d.id))]})]})]})}function HD({id:e,label:n,description:a,kind:o,value:l,onChange:i,readOnly:d}){const[m,h]=f.useState(null),[p,y]=f.useState(""),[v,x]=f.useState(!0);f.useEffect(()=>{let N=!1;return x(!0),ke.getGuildResources().then(E=>{N||E.data&&(h(E.data),y(""))}).catch(E=>{N||y(E instanceof Error?E.message:"Could not load server list")}).finally(()=>{N||x(!1)}),()=>{N=!0}},[]);const S=f.useMemo(()=>m?o==="role"?m.roles:o==="category"?m.categories:m.channels:[],[m,o]),j=String(l??""),C=S.find(N=>N.id===j);return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:e,children:n}),a?c.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,m?c.jsxs(cd,{value:C?j:"",disabled:d||v,onValueChange:N=>i(N),children:[c.jsx(gi,{id:e,className:"border-border bg-secondary/30",children:c.jsx(ud,{placeholder:v?"Loading…":`Select ${o} from ${m.guildName}…`})}),c.jsx(vi,{className:"max-h-64",children:S.map(N=>c.jsxs(no,{value:N.id,children:[N.name,c.jsx("span",{className:"ml-2 font-mono text-xs text-muted-foreground",children:N.id})]},N.id))})]}):null,c.jsx(rt,{value:j,disabled:d,onChange:N=>i(N.target.value),placeholder:o==="role"?"Role ID (ROLE_ID)":o==="category"?"Category ID":"Channel ID",className:"border-border bg-secondary/30 font-mono text-sm"}),p?c.jsx("p",{className:"text-xs text-amber-500",children:p}):null,!p&&!m&&!v?c.jsx("p",{className:"text-xs text-muted-foreground",children:"Set General.GuildId and invite the bot to pick from a list."}):null]})}function VD(e,n=[]){let a=[];function o(i,d){const m=f.createContext(d),h=a.length;a=[...a,d];const p=v=>{var E;const{scope:x,children:S,...j}=v,C=((E=x==null?void 0:x[e])==null?void 0:E[h])||m,N=f.useMemo(()=>j,Object.values(j));return c.jsx(C.Provider,{value:N,children:S})};p.displayName=i+"Provider";function y(v,x){var C;const S=((C=x==null?void 0:x[e])==null?void 0:C[h])||m,j=f.useContext(S);if(j)return j;if(d!==void 0)return d;throw new Error(`\`${v}\` must be used within \`${i}\``)}return[p,y]}const l=()=>{const i=a.map(d=>f.createContext(d));return function(m){const h=(m==null?void 0:m[e])||i;return f.useMemo(()=>({[`__scope${e}`]:{...m,[e]:h}}),[m,h])}};return l.scopeName=e,[o,GD(l,...n)]}function GD(...e){const n=e[0];if(e.length===1)return n;const a=()=>{const o=e.map(l=>({useScope:l(),scopeName:l.scopeName}));return function(i){const d=o.reduce((m,{useScope:h,scopeName:p})=>{const v=h(i)[`__scope${p}`];return{...m,...v}},{});return f.useMemo(()=>({[`__scope${n.scopeName}`]:d}),[d])}};return a.scopeName=n.scopeName,a}function FD(e){const n=YD(e),a=f.forwardRef((o,l)=>{const{children:i,...d}=o,m=f.Children.toArray(i),h=m.find(qD);if(h){const p=h.props.children,y=m.map(v=>v===h?f.Children.count(p)>1?f.Children.only(null):f.isValidElement(p)?p.props.children:null:v);return c.jsx(n,{...d,ref:l,children:f.isValidElement(p)?f.cloneElement(p,void 0,y):null})}return c.jsx(n,{...d,ref:l,children:i})});return a.displayName=`${e}.Slot`,a}function YD(e){const n=f.forwardRef((a,o)=>{const{children:l,...i}=a;if(f.isValidElement(l)){const d=XD(l),m=KD(i,l.props);return l.type!==f.Fragment&&(m.ref=o?st(o,d):d),f.cloneElement(l,m)}return f.Children.count(l)>1?f.Children.only(null):null});return n.displayName=`${e}.SlotClone`,n}var WD=Symbol("radix.slottable");function qD(e){return f.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===WD}function KD(e,n){const a={...n};for(const o in n){const l=e[o],i=n[o];/^on[A-Z]/.test(o)?l&&i?a[o]=(...m)=>{const h=i(...m);return l(...m),h}:l&&(a[o]=l):o==="style"?a[o]={...l,...i}:o==="className"&&(a[o]=[l,i].filter(Boolean).join(" "))}return{...e,...a}}function XD(e){var o,l;let n=(o=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:o.get,a=n&&"isReactWarning"in n&&n.isReactWarning;return a?e.ref:(n=(l=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:l.get,a=n&&"isReactWarning"in n&&n.isReactWarning,a?e.props.ref:e.props.ref||e.ref)}var ZD=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],md=ZD.reduce((e,n)=>{const a=FD(`Primitive.${n}`),o=f.forwardRef((l,i)=>{const{asChild:d,...m}=l,h=d?a:n;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),c.jsx(h,{...m,ref:i})});return o.displayName=`Primitive.${n}`,{...e,[n]:o}},{}),pd="Tabs",[QD]=VD(pd,[Hu]),Oj=Hu(),[JD,dg]=QD(pd),Dj=f.forwardRef((e,n)=>{const{__scopeTabs:a,value:o,onValueChange:l,defaultValue:i,orientation:d="horizontal",dir:m,activationMode:h="automatic",...p}=e,y=ei(m),[v,x]=Dr({prop:o,onChange:l,defaultProp:i??"",caller:pd});return c.jsx(JD,{scope:a,baseId:Dt(),value:v,onValueChange:x,orientation:d,dir:y,activationMode:h,children:c.jsx(md.div,{dir:y,"data-orientation":d,...p,ref:n})})});Dj.displayName=pd;var Lj="TabsList",zj=f.forwardRef((e,n)=>{const{__scopeTabs:a,loop:o=!0,...l}=e,i=dg(Lj,a),d=Oj(a);return c.jsx(A2,{asChild:!0,...d,orientation:i.orientation,dir:i.dir,loop:o,children:c.jsx(md.div,{role:"tablist","aria-orientation":i.orientation,...l,ref:n})})});zj.displayName=Lj;var Pj="TabsTrigger",Bj=f.forwardRef((e,n)=>{const{__scopeTabs:a,value:o,disabled:l=!1,...i}=e,d=dg(Pj,a),m=Oj(a),h=Uj(d.baseId,o),p=Hj(d.baseId,o),y=o===d.value;return c.jsx(_2,{asChild:!0,...m,focusable:!l,active:y,children:c.jsx(md.button,{type:"button",role:"tab","aria-selected":y,"aria-controls":p,"data-state":y?"active":"inactive","data-disabled":l?"":void 0,disabled:l,id:h,...i,ref:n,onMouseDown:ve(e.onMouseDown,v=>{!l&&v.button===0&&v.ctrlKey===!1?d.onValueChange(o):v.preventDefault()}),onKeyDown:ve(e.onKeyDown,v=>{[" ","Enter"].includes(v.key)&&d.onValueChange(o)}),onFocus:ve(e.onFocus,()=>{const v=d.activationMode!=="manual";!y&&!l&&v&&d.onValueChange(o)})})})});Bj.displayName=Pj;var $j="TabsContent",Ij=f.forwardRef((e,n)=>{const{__scopeTabs:a,value:o,forceMount:l,children:i,...d}=e,m=dg($j,a),h=Uj(m.baseId,o),p=Hj(m.baseId,o),y=o===m.value,v=f.useRef(y);return f.useEffect(()=>{const x=requestAnimationFrame(()=>v.current=!1);return()=>cancelAnimationFrame(x)},[]),c.jsx(Ut,{present:l||y,children:({present:x})=>c.jsx(md.div,{"data-state":y?"active":"inactive","data-orientation":m.orientation,role:"tabpanel","aria-labelledby":h,hidden:!x,id:p,tabIndex:0,...d,ref:n,style:{...e.style,animationDuration:v.current?"0s":void 0},children:x&&i})})});Ij.displayName=$j;function Uj(e,n){return`${e}-trigger-${n}`}function Hj(e,n){return`${e}-content-${n}`}var eL=Dj,Vj=zj,Gj=Bj,Fj=Ij;const Yj=eL,fg=f.forwardRef(({className:e,...n},a)=>c.jsx(Vj,{ref:a,className:ie("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",e),...n}));fg.displayName=Vj.displayName;const Ka=f.forwardRef(({className:e,...n},a)=>c.jsx(Gj,{ref:a,className:ie("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",e),...n}));Ka.displayName=Gj.displayName;const Yp=f.forwardRef(({className:e,...n},a)=>c.jsx(Fj,{ref:a,className:ie("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...n}));Yp.displayName=Fj.displayName;function Gc(e){if(typeof e!="string"||!e)throw new Error("expected a non-empty string, got: "+e)}function op(e){if(typeof e!="number")throw new Error("expected a number, got: "+e)}const tL=1,nL=1,uo="emoji",Ss="keyvalue",mg="favorites",rL="tokens",Wj="tokens",aL="unicode",qj="count",oL="group",sL="order",Kj="group-order",Wp="eTag",xu="url",Rx="skinTone",Ms="readonly",pg="readwrite",Xj="skinUnicodes",lL="skinUnicodes",iL="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",cL="en";function uL(e,n){const a=new Set,o=[];for(const l of e){const i=n(l);a.has(i)||(a.add(i),o.push(l))}return o}function Ax(e){return uL(e,n=>n.unicode)}function dL(e){function n(a,o,l){const i=o?e.createObjectStore(a,{keyPath:o}):e.createObjectStore(a);if(l)for(const[d,[m,h]]of Object.entries(l))i.createIndex(d,m,{multiEntry:h});return i}n(Ss),n(uo,aL,{[Wj]:[rL,!0],[Kj]:[[oL,sL]],[Xj]:[lL,!0]}),n(mg,void 0,{[qj]:[""]})}const qp={},eu={},Su={};function Zj(e,n,a){a.onerror=()=>n(a.error),a.onblocked=()=>n(new Error("IDB blocked")),a.onsuccess=()=>e(a.result)}async function fL(e){const n=await new Promise((a,o)=>{const l=indexedDB.open(e,tL);qp[e]=l,l.onupgradeneeded=i=>{i.oldVersionhg(e),n}function mL(e){return eu[e]||(eu[e]=fL(e)),eu[e]}function Br(e,n,a,o){return new Promise((l,i)=>{const d=e.transaction(n,a,{durability:"relaxed"}),m=typeof n=="string"?d.objectStore(n):n.map(p=>d.objectStore(p));let h;o(m,d,p=>{h=p}),d.oncomplete=()=>l(h),d.onerror=()=>i(d.error)})}function hg(e){const n=qp[e],a=n&&n.result;if(a){a.close();const o=Su[e];if(o)for(const l of o)l()}delete qp[e],delete eu[e],delete Su[e]}function pL(e){return new Promise((n,a)=>{hg(e);const o=indexedDB.deleteDatabase(e);Zj(n,a,o)})}function hL(e,n){let a=Su[e];a||(a=Su[e]=[]),a.push(n)}const gL=new Set([":D","XD",":'D","O:)",":X",":P",";P","XP",":L",":Z",":j","8D","XO","8)",":B",":O",":S",":'o","Dx","X(","D:",":C",">0)",":3","3","<3","\\M/",":E","8#"]);function ds(e){return e.split(/[\s_]+/).map(n=>!n.match(/\w/)||gL.has(n)?n.toLowerCase():n.replace(/[)(:,]/g,"").replace(/’/g,"'").toLowerCase()).filter(Boolean)}const vL=2;function Qj(e){return e.filter(Boolean).map(n=>n.toLowerCase()).filter(n=>n.length>=vL)}function bL(e){return e.map(({annotation:a,emoticon:o,group:l,order:i,shortcodes:d,skins:m,tags:h,emoji:p,version:y})=>{const v=[...new Set(Qj([...(d||[]).map(ds).flat(),...(h||[]).map(ds).flat(),...ds(a),o]))].sort(),x={annotation:a,group:l,order:i,tags:h,tokens:v,unicode:p,version:y};if(o&&(x.emoticon=o),d&&(x.shortcodes=d),m){x.skinTones=[],x.skinUnicodes=[],x.skinVersions=[];for(const{tone:S,emoji:j,version:C}of m)x.skinTones.push(S),x.skinUnicodes.push(j),x.skinVersions.push(C)}return x})}function Jj(e,n,a,o){e[n](a).onsuccess=l=>o&&o(l.target.result)}function ro(e,n,a){Jj(e,"get",n,a)}function e5(e,n,a){Jj(e,"getAll",n,a)}function gg(e){e.commit&&e.commit()}function yL(e,n){let a=e[0];for(let o=1;on(l)&&(a=l)}return a}function t5(e,n){const a=yL(e,l=>l.length),o=[];for(const l of a)e.some(i=>i.findIndex(d=>n(d)===n(l))===-1)||o.push(l);return o}async function xL(e){return!await vg(e,Ss,xu)}async function SL(e,n,a){const[o,l]=await Promise.all([Wp,xu].map(i=>vg(e,Ss,i)));return o===a&&l===n}async function wL(e,n){return Br(e,uo,Ms,(o,l,i)=>{let d;const m=()=>{o.getAll(d&&IDBKeyRange.lowerBound(d,!0),50).onsuccess=h=>{const p=h.target.result;for(const y of p)if(d=y.unicode,n(y))return i(y);if(p.length<50)return i();m()}};m()})}async function n5(e,n,a,o){try{const l=bL(n);await Br(e,[uo,Ss],pg,([i,d],m)=>{let h,p,y=0;function v(){++y===2&&x()}function x(){if(!(h===o&&p===a)){i.clear();for(const S of l)i.put(S);d.put(o,Wp),d.put(a,xu),gg(m)}}ro(d,Wp,S=>{h=S,v()}),ro(d,xu,S=>{p=S,v()})})}finally{}}async function CL(e,n){return Br(e,uo,Ms,(a,o,l)=>{const i=IDBKeyRange.bound([n,0],[n+1,0],!1,!0);e5(a.index(Kj),i,l)})}async function r5(e,n){const a=Qj(ds(n));return a.length?Br(e,uo,Ms,(o,l,i)=>{const d=[],m=()=>{d.length===a.length&&h()},h=()=>{const p=t5(d,y=>y.unicode);i(p.sort((y,v)=>y.order{d.push(x),m()})}}):[]}async function jL(e,n){const a=await r5(e,n);return a.length?a.filter(o=>(o.shortcodes||[]).map(i=>i.toLowerCase()).includes(n.toLowerCase()))[0]||null:await wL(e,l=>(l.shortcodes||[]).includes(n.toLowerCase()))||null}async function EL(e,n){return Br(e,uo,Ms,(a,o,l)=>ro(a,n,i=>{if(i)return l(i);ro(a.index(Xj),n,d=>l(d||null))}))}function vg(e,n,a){return Br(e,n,Ms,(o,l,i)=>ro(o,a,i))}function NL(e,n,a,o){return Br(e,n,pg,(l,i)=>{l.put(o,a),gg(i)})}function kL(e,n){return Br(e,mg,pg,(a,o)=>ro(a,n,l=>{a.put((l||0)+1,n),gg(o)}))}function TL(e,n,a){return a===0?[]:Br(e,[mg,uo],Ms,([o,l],i,d)=>{const m=[];o.index(qj).openCursor(void 0,"prev").onsuccess=h=>{const p=h.target.result;if(!p)return d(m);function y(S){if(m.push(S),m.length===a)return d(m);p.continue()}const v=p.primaryKey,x=n.byName(v);if(x)return y(x);ro(l,v,S=>{if(S)return y(S);p.continue()})}})}const Fc="";function RL(e,n){const a=new Map;for(const l of e){const i=n(l);for(const d of i){let m=a;for(let p=0;p{let d=a;for(let p=0;pv[0]!(o in e[0])));if(!n||a)throw new Error("Custom emojis are in the wrong format")}function _x(e){_L(e);const n=(x,S)=>x.name.toLowerCase(){const S=new Set;if(x.shortcodes)for(const j of x.shortcodes)for(const C of ds(j))S.add(C);return S}),i=x=>l(x,!0),d=x=>l(x,!1),m=x=>{const S=ds(x),j=S.map((C,N)=>(NC.name).sort(n)},h=new Map,p=new Map;for(const x of e){p.set(x.name.toLowerCase(),x);for(const S of x.shortcodes||[])h.set(S.toLowerCase(),x)}return{all:a,search:m,byShortcode:x=>h.get(x.toLowerCase()),byName:x=>p.get(x.toLowerCase())}}const ML=typeof wrappedJSObject<"u";function _l(e){if(!e)return e;if(ML&&(e=structuredClone(e)),delete e.tokens,e.skinTones){const n=e.skinTones.length;e.skins=Array(n);for(let a=0;a!(n in e[0])))throw new Error("Emoji data is in the wrong format")}function o5(e,n){if(Math.floor(e.status/100)!==2)throw new Error("Failed to fetch: "+n+": "+e.status)}async function LL(e){const n=await fetch(e,{method:"HEAD"});o5(n,e);const a=n.headers.get("etag");return a5(a),a}async function Kp(e){const n=await fetch(e);o5(n,e);const a=n.headers.get("etag");a5(a);const o=await n.json();return DL(o),[a,o]}function zL(e){for(var n="",a=new Uint8Array(e),o=a.byteLength,l=-1;++l(this._ready||(this._ready=this._init()),this._ready);await n(),this._db||await n()}async getEmojiByGroup(n){return op(n),await this.ready(),Ax(await CL(this._db,n)).map(_l)}async getEmojiBySearchQuery(n){Gc(n),await this.ready();const a=this._custom.search(n),o=Ax(await r5(this._db,n)).map(_l);return[...a,...o]}async getEmojiByShortcode(n){Gc(n),await this.ready();const a=this._custom.byShortcode(n);return a||_l(await jL(this._db,n))}async getEmojiByUnicodeOrName(n){Gc(n),await this.ready();const a=this._custom.byName(n);return a||_l(await EL(this._db,n))}async getPreferredSkinTone(){return await this.ready(),await vg(this._db,Ss,Rx)||0}async setPreferredSkinTone(n){return op(n),await this.ready(),NL(this._db,Ss,Rx,n)}async incrementFavoriteEmojiCount(n){return Gc(n),await this.ready(),kL(this._db,n)}async getTopFavoriteEmoji(n){return op(n),await this.ready(),(await TL(this._db,this._custom,n)).map(_l)}set customEmoji(n){this._custom=_x(n)}get customEmoji(){return this._custom.all}async _shutdown(){await this.ready();try{await this._lazyUpdate}catch{}}_clear(){this._db=this._ready=this._lazyUpdate=void 0}async close(){await this._shutdown(),await hg(this._dbName)}async delete(){await this._shutdown(),await pL(this._dbName)}}const Xp=[[-1,"✨","custom"],[0,"😀","smileys-emotion"],[1,"👋","people-body"],[3,"🐱","animals-nature"],[4,"🍎","food-drink"],[5,"🏠️","travel-places"],[6,"⚽","activities"],[7,"📝","objects"],[8,"⛔️","symbols"],[9,"🏁","flags"]].map(([e,n,a])=>({id:e,emoji:n,name:a})),sp=Xp.slice(1),HL=2,Mx=6,l5=typeof requestIdleCallback=="function"?requestIdleCallback:setTimeout;function Ox(e){return e.unicode.includes("")}const VL={"":17,"":16,"🫨":15.1,"🫠":14,"🥲":13.1,"🥻":12.1,"🥰":11,"🤩":5,"👱♀️":4,"🤣":3,"👁️🗨️":2,"😀":1,"😐️":.7,"😃":.6},GL=1e3,FL="🖐️",YL=8,WL=["😊","😒","❤️","👍️","😍","😂","😭","☺️","😔","😩","😏","💕","🙌","😘"],i5='"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif',qL=(e,n)=>en?1:0,Dx=(e,n)=>{const a=document.createElement("canvas");a.width=a.height=1;const o=a.getContext("2d",{willReadFrequently:!0});return o.textBaseline="top",o.font=`100px ${i5}`,o.fillStyle=n,o.scale(.01,.01),o.fillText(e,0,0),o.getImageData(0,0,1,1).data},KL=(e,n)=>{const a=[...e].join(","),o=[...n].join(",");return a===o&&!a.startsWith("0,0,0,")};function XL(e){const n=Dx(e,"#000"),a=Dx(e,"#fff");return n&&a&&KL(n,a)}function ZL(){const e=Object.entries(VL);try{for(const[n,a]of e)if(XL(n))return a}catch{}finally{}return e[0][1]}let lp;const ip=()=>(lp||(lp=new Promise(e=>l5(()=>e(ZL())))),lp),Zp=new Map,QL="️",JL="\uD83C",ez="",tz=127995,nz=57339;function rz(e,n){if(n===0)return e;const a=e.indexOf(ez);return a!==-1?e.substring(0,a)+String.fromCodePoint(tz+n-1)+e.substring(a):(e.endsWith(QL)&&(e=e.substring(0,e.length-1)),e+JL+String.fromCodePoint(nz+n-1))}function rr(e){e.preventDefault(),e.stopPropagation()}function cp(e,n,a){return n+=e?-1:1,n<0?n=a.length-1:n>=a.length&&(n=0),n}function c5(e,n){const a=new Set,o=[];for(const l of e){const i=n(l);a.has(i)||(a.add(i),o.push(l))}return o}function az(e,n){const a=o=>{const l={};for(const i of o)typeof i.tone=="number"&&i.version<=n&&(l[i.tone]=i.unicode);return l};return e.map(({unicode:o,skins:l,shortcodes:i,url:d,name:m,category:h,annotation:p})=>({unicode:o,name:m,shortcodes:i,url:d,category:h,annotation:p,id:o||m,skins:l&&a(l)}))}const tu=requestAnimationFrame;let oz=typeof ResizeObserver=="function";function sz(e,n,a){let o;oz?(o=new ResizeObserver(a),o.observe(e)):tu(a),n.addEventListener("abort",()=>{o&&o.disconnect()})}function Lx(e){{const n=document.createRange();return n.selectNode(e.firstChild),n.getBoundingClientRect().width}}const lz="😀";let up,qa;function zx(e,n,a){const o=Lx(n);if(!o){if(!qa){qa=a.cloneNode(!0);const l=getComputedStyle(a);for(const i of["font-family","line-height","width","height","font-size","display","align-items","justify-content"])qa.style.setProperty(i,l.getPropertyValue(i),"important")}try{return document.body.appendChild(qa),qa.firstChild.nodeValue=e,Lx(qa)}finally{qa.remove()}}return o}function iz(e,n,a){let o=!0;for(const l of e){const i=a(l);if(!i)continue;typeof up>"u"&&(up=zx(lz,n,n));const m=zx(l.unicode,i,n)/1.8n)}function uz(e){e&&(e.scrollTop=0)}function Bl(e,n,a){let o=e.get(n);return o||(o=a(),e.set(n,o)),o}function Px(e){return""+e}function dz(e){const n=document.createElement("template");return n.innerHTML=e,n}const fz=new WeakMap,mz=new WeakMap,pz=Symbol("un-keyed"),hz="replaceChildren"in Element.prototype;function gz(e,n){hz?e.replaceChildren(...n):(e.innerHTML="",e.append(...n))}function vz(e,n){let a=e.firstChild,o=0;for(;a;){if(n[o]!==a)return!0;a=a.nextSibling,o++}return o!==n.length}function bz(e,n){const{targetNode:a}=n;let{targetParentNode:o}=n,l=!1;o?l=vz(o,e):(l=!0,n.targetNode=void 0,n.targetParentNode=o=a.parentNode),l&&gz(o,e)}function yz(e,n){for(const a of n){const{targetNode:o,currentExpression:l,binding:{expressionIndex:i,attributeName:d,attributeValuePre:m,attributeValuePost:h}}=a,p=e[i];if(l!==p)if(a.currentExpression=p,d)if(p===null)o.removeAttribute(d);else{const y=m+Px(p)+h;o.setAttribute(d,y)}else{let y;Array.isArray(p)?bz(p,a):p instanceof Element?(y=p,o.replaceWith(y)):o.nodeValue=Px(p),y&&(a.targetNode=y)}}}function xz(e){let n="",a=!1,o=!1,l=-1;const i=new Map,d=[];let m=0;for(let p=0,y=e.length;p":{a=!1,o=!1;break}case"=":{o=!0;break}}const x=d[d.length-1],S=Bl(i,x,()=>[]);let j,C,N;if(o){const k=/(\S+)="?([^"=]*)$/.exec(v);j=k[1],C=k[2];const A=/^([^">]*)("?)/.exec(e[p+1]);N=A[1],n=n.slice(0,-1*k[0].length),m=A[0].length}else m=0;const E={attributeName:j,attributeValuePre:C,attributeValuePost:N,expressionIndex:p};S.push(E),!a&&!o&&(n+=" ")}return{template:dz(n),elementsToBindings:i}}function Bx(e,n,a){for(let o=0;oxz(e)),o=n.cloneNode(!0).content.firstElementChild,l=Sz(o,a);return function(d){return yz(d,l),o}}function Cz(e){const n=Bl(mz,e,()=>new Map);let a=pz;function o(i,...d){const m=Bl(n,i,()=>new Map);return Bl(m,a,()=>wz(i))(d)}function l(i,d,m){return i.map((h,p)=>{const y=a;a=m(h);try{return d(h,p)}finally{a=y}})}return{map:l,html:o}}function jz(e,n,a,o,l,i,d,m,h){const{labelWithSkin:p,titleForEmoji:y,unicodeWithSkin:v}=a,{html:x,map:S}=Cz(n);function j(k,A,R){return S(k,(L,z)=>x``,L=>`${R}-${L.id}`)}const N=x` ${n.i18n.searchDescription}
${n.i18n.skinToneDescription}${S(n.skinTones,(k,A)=>x`
${k}
`,k=>k)}
${S(n.groups,k=>x`
`,k=>k.id)}
${n.message||""}
${S(n.currentEmojisWithCategories,(k,A)=>x`
`,k=>k.category)}
`,E=(k,A)=>{for(const R of e.querySelectorAll(`[${k}]`))A(R,R.getAttribute(k))};if(h){e.appendChild(N);for(const k of["click","focusout","input","keydown","keyup"])E(`data-on-${k}`,(A,R)=>{A.addEventListener(k,o[R])});E("data-ref",(k,A)=>{i[A]=k}),d.addEventListener("abort",()=>{e.removeChild(N)})}E("data-action",(k,A)=>{let R=m.get(A);R||m.set(A,R=new WeakSet),R.has(k)||(R.add(k),l[A](k))})}const wu=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function Ez(e){let n=!1,a;const o=new Map,l=new Set;let i;const d=()=>{if(n)return;const p=[...l];l.clear();try{for(const y of p)y()}finally{i=!1,l.size&&(i=!0,wu(d))}},m=new Proxy({},{get(p,y){if(a){let v=o.get(y);v||(v=new Set,o.set(y,v)),v.add(a)}return p[y]},set(p,y,v){if(p[y]!==v){p[y]=v;const x=o.get(y);if(x){for(const S of x)l.add(S);i||(i=!0,wu(d))}}return!0}}),h=p=>{const y=()=>{const v=a;a=y;try{return p()}finally{a=v}};return y()};return e.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:h}}function dp(e,n,a){if(e.length!==n.length)return!1;for(let o=0;o{l.disconnect()})),l.observe(e)}}const fp=[],{assign:Yc}=Object;function kz(e,n){const a={},o=new AbortController,l=o.signal,{state:i,createEffect:d}=Ez(l),m=new Map;Yc(i,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),Yc(i,n),Yc(i,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:YL,isRtl:!1,currentGroupIndex:0,groups:sp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{i.currentGroup!==i.groups[i.currentGroupIndex]&&(i.currentGroup=i.groups[i.currentGroupIndex])});const h=G=>{e.getElementById(G).focus()},p=G=>e.getElementById(`emo-${G.id}`),y=(G,se)=>{a.rootElement.dispatchEvent(new CustomEvent(G,{detail:se,bubbles:!0,composed:!0}))},v=(G,se)=>G.id===se.id,x=(G,se)=>{const{category:ge,emojis:je}=G,{category:Ae,emojis:Qe}=se;return ge!==Ae?!1:dp(je,Qe,v)},S=G=>{dp(i.currentEmojis,G,v)||(i.currentEmojis=G)},j=G=>{i.searchMode!==G&&(i.searchMode=G)},C=G=>{dp(i.currentEmojisWithCategories,G,x)||(i.currentEmojisWithCategories=G)},N=(G,se)=>se&&G.skins&&G.skins[se]||G.unicode,A={labelWithSkin:(G,se)=>cz([G.name||N(G,se),G.annotation,...G.shortcodes||fp].filter(Boolean)).join(", "),titleForEmoji:G=>G.annotation||(G.shortcodes||fp).join(", "),unicodeWithSkin:N},R={onClickSkinToneButton:V,onEmojiClick:O,onNavClick:re,onNavKeydown:oe,onSearchKeydown:K,onSkinToneOptionsClick:I,onSkinToneOptionsFocusOut:me,onSkinToneOptionsKeydown:ne,onSkinToneOptionsKeyup:J,onSearchInput:pe},L={calculateEmojiGridStyle:U,updateOnIntersection:q};let z=!0;d(()=>{jz(e,i,A,R,L,a,l,m,z),z=!1}),i.emojiVersion||ip().then(G=>{G||(i.message=i.i18n.emojiUnsupportedMessage)}),d(()=>{async function G(){let se=!1;const ge=setTimeout(()=>{se=!0,i.message=i.i18n.loadingMessage},GL);try{await i.database.ready(),i.databaseLoaded=!0}catch(je){console.error(je),i.message=i.i18n.networkErrorMessage}finally{clearTimeout(ge),se&&(se=!1,i.message="")}}i.database&&G()}),d(()=>{i.pickerStyle=`
+ --num-groups: ${i.groups.length};
+ --indicator-opacity: ${i.searchMode?0:1};
+ --num-skintones: ${Mx};`}),d(()=>{i.customEmoji&&i.database&&B()}),d(()=>{i.customEmoji&&i.customEmoji.length?i.groups!==Xp&&(i.groups=Xp):i.groups!==sp&&(i.currentGroupIndex&&i.currentGroupIndex--,i.groups=sp)}),d(()=>{async function G(){i.databaseLoaded&&(i.currentSkinTone=await i.database.getPreferredSkinTone())}G()}),d(()=>{i.skinTones=Array(Mx).fill().map((G,se)=>rz(i.skinToneEmoji,se))}),d(()=>{i.skinToneButtonText=i.skinTones[i.currentSkinTone]}),d(()=>{i.skinToneButtonLabel=i.i18n.skinToneLabel.replace("{skinTone}",i.i18n.skinTones[i.currentSkinTone])}),d(()=>{async function G(){const{database:se}=i,ge=(await Promise.all(WL.map(je=>se.getEmojiByUnicodeOrName(je)))).filter(Boolean);i.defaultFavoriteEmojis=ge}i.databaseLoaded&&G()});function B(){const{customEmoji:G,database:se}=i,ge=G||fp;se.customEmoji!==ge&&(se.customEmoji=ge)}d(()=>{async function G(){B();const{database:se,defaultFavoriteEmojis:ge,numColumns:je}=i,Ae=await se.getTopFavoriteEmoji(je),Qe=await ce(c5([...Ae,...ge],ct=>ct.unicode||ct.name).slice(0,je));i.currentFavorites=Qe}i.databaseLoaded&&i.defaultFavoriteEmojis&&G()});function U(G){sz(G,l,()=>{{const se=getComputedStyle(a.rootElement),ge=parseInt(se.getPropertyValue("--num-columns"),10),je=se.getPropertyValue("direction")==="rtl";i.numColumns=ge,i.isRtl=je}})}function q(G){Nz(G,l,se=>{for(const{target:ge,isIntersecting:je}of se)ge.classList.toggle("onscreen",je)})}d(()=>{async function G(){const{searchText:se,currentGroup:ge,databaseLoaded:je,customEmoji:Ae}=i;if(!je)i.currentEmojis=[],i.searchMode=!1;else if(se.length>=HL){const Qe=await M(se);i.searchText===se&&(S(Qe),j(!0))}else{const{id:Qe}=ge;if(Qe!==-1||Ae&&Ae.length){const ct=await he(Qe);i.currentGroup.id===Qe&&(S(ct),j(!1))}}}G()});const Z=()=>{tu(()=>uz(a.tabpanelElement))};d(()=>{const{currentEmojis:G,emojiVersion:se}=i,ge=G.filter(je=>je.unicode).filter(je=>Ox(je)&&!Zp.has(je.unicode));if(!se&&ge.length)S(G),tu(()=>Q(ge));else{const je=se?G:G.filter(fe);S(je),Z()}});function Q(G){iz(G,a.baselineEmoji,p)?Z():i.currentEmojis=[...i.currentEmojis]}function fe(G){return!G.unicode||!Ox(G)||Zp.get(G.unicode)}async function de(G){const se=i.emojiVersion||await ip();return G.filter(({version:ge})=>!ge||ge<=se)}async function ce(G){return az(G,i.emojiVersion||await ip())}async function he(G){const se=G===-1?i.customEmoji:await i.database.getEmojiByGroup(G);return ce(await de(se))}async function M(G){return ce(await de(await i.database.getEmojiBySearchQuery(G)))}d(()=>{}),d(()=>{function G(){const{searchMode:ge,currentEmojis:je}=i;if(ge)return[{category:"",emojis:je}];const Ae=new Map;for(const Qe of je){const ct=Qe.category||"";let Tt=Ae.get(ct);Tt||(Tt=[],Ae.set(ct,Tt)),Tt.push(Qe)}return[...Ae.entries()].map(([Qe,ct])=>({category:Qe,emojis:ct})).sort((Qe,ct)=>i.customCategorySorting(Qe.category,ct.category))}const se=G();C(se)}),d(()=>{i.activeSearchItemId=i.activeSearchItem!==-1&&i.currentEmojis[i.activeSearchItem].id}),d(()=>{const{rawSearchText:G}=i;l5(()=>{i.searchText=(G||"").trim(),i.activeSearchItem=-1})});function K(G){if(!i.searchMode||!i.currentEmojis.length)return;const se=ge=>{rr(G),i.activeSearchItem=cp(ge,i.activeSearchItem,i.currentEmojis)};switch(G.key){case"ArrowDown":return se(!1);case"ArrowUp":return se(!0);case"Enter":if(i.activeSearchItem===-1)i.activeSearchItem=0;else return rr(G),_(i.currentEmojis[i.activeSearchItem].id)}}function re(G){const{target:se}=G,ge=se.closest(".nav-button");if(!ge)return;const je=parseInt(ge.dataset.groupId,10);a.searchElement.value="",i.rawSearchText="",i.searchText="",i.activeSearchItem=-1,i.currentGroupIndex=i.groups.findIndex(Ae=>Ae.id===je)}function oe(G){const{target:se,key:ge}=G,je=Ae=>{Ae&&(rr(G),Ae.focus())};switch(ge){case"ArrowLeft":return je(se.previousElementSibling);case"ArrowRight":return je(se.nextElementSibling);case"Home":return je(se.parentElement.firstElementChild);case"End":return je(se.parentElement.lastElementChild)}}async function ee(G){const se=await i.database.getEmojiByUnicodeOrName(G),ge=[...i.currentEmojis,...i.currentFavorites].find(Ae=>Ae.id===G),je=ge.unicode&&N(ge,i.currentSkinTone);return await i.database.incrementFavoriteEmojiCount(G),{emoji:se,skinTone:i.currentSkinTone,...je&&{unicode:je},...ge.name&&{name:ge.name}}}async function _(G){const se=ee(G);y("emoji-click-sync",se),y("emoji-click",await se)}function O(G){const{target:se}=G;if(!se.classList.contains("emoji"))return;rr(G);const ge=se.id.substring(4);_(ge)}function H(G){i.currentSkinTone=G,i.skinTonePickerExpanded=!1,h("skintone-button"),y("skin-tone-change",{skinTone:G}),i.database.setPreferredSkinTone(G)}function I(G){const{target:{id:se}}=G,ge=se&&se.match(/^skintone-(\d)/);if(!ge)return;rr(G);const je=parseInt(ge[1],10);H(je)}function V(G){i.skinTonePickerExpanded=!i.skinTonePickerExpanded,i.activeSkinTone=i.currentSkinTone,i.skinTonePickerExpanded&&(rr(G),tu(()=>h("skintone-list")))}d(()=>{i.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{i.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):i.skinTonePickerExpandedAfterAnimation=!1});function ne(G){if(!i.skinTonePickerExpanded)return;const se=async ge=>{rr(G),i.activeSkinTone=ge};switch(G.key){case"ArrowUp":return se(cp(!0,i.activeSkinTone,i.skinTones));case"ArrowDown":return se(cp(!1,i.activeSkinTone,i.skinTones));case"Home":return se(0);case"End":return se(i.skinTones.length-1);case"Enter":return rr(G),H(i.activeSkinTone);case"Escape":return rr(G),i.skinTonePickerExpanded=!1,h("skintone-button")}}function J(G){if(i.skinTonePickerExpanded)switch(G.key){case" ":return rr(G),H(i.activeSkinTone)}}async function me(G){const{relatedTarget:se}=G;(!se||se.id!=="skintone-list")&&(i.skinTonePickerExpanded=!1)}function pe(G){i.rawSearchText=G.target.value}return{$set(G){Yc(i,G)},$destroy(){o.abort()}}}const Tz="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",Rz="en";var Az={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},_z=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const u5=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],Mz=`:host{--emoji-font-family:${i5}}`;class bg extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=_z+Mz,this.shadowRoot.appendChild(a),this._ctx={locale:Rz,dataSource:Tz,skinToneEmoji:FL,customCategorySorting:qL,customEmoji:null,i18n:Az,emojiVersion:null,...n};for(const o of u5)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){Ix(this),this._cmp||(this._cmp=kz(this.shadowRoot,this._ctx))}disconnectedCallback(){Ix(this),wu(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(l,i)=>i.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new UL({locale:n,dataSource:a}))}_dbFlush(){wu(()=>this._dbCreate())}}const d5={};for(const e of u5)d5[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(n){if(e==="database")throw new Error("database is read-only");this._set(e,n)}};Object.defineProperties(bg.prototype,d5);function Ix(e){e instanceof bg||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",bg);function Oz({onPick:e}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const l=i=>{var h;const d=i.detail,m=(d==null?void 0:d.unicode)??((h=d==null?void 0:d.emoji)==null?void 0:h.unicode);m&&e(m)};return o.addEventListener("emoji-click",l),a.appendChild(o),()=>{o.removeEventListener("emoji-click",l),o.remove()}},[e]),c.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const Dz=/^<(a?):([^:>]+):(\d{17,20})>$/;function nu(e,n,a=!1){return`${a?"`}function f5(e){const n=String(e??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(Dz);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function m5(e,n=!1){return`https://cdn.discordapp.com/emojis/${e}.${n?"gif":"png"}?size=64`}function Lz(e,n=[]){const a=f5(e);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(l=>l.id===a.id);if(o)return{kind:"custom",value:nu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(l=>l.id===a.id);if(o&&a.value!==nu(o.name,o.id,o.animated))return{kind:"custom",value:nu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function zz({value:e,guildEmojis:n,size:a="md"}){const o=Lz(e,n),l=a==="lg"?"size-10":"size-7",i=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?c.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?c.jsxs("span",{className:"inline-flex items-center gap-3",children:[c.jsx("img",{src:m5(o.id,o.animated),alt:o.name??"custom emoji",className:ie(l,"shrink-0 rounded-md"),loading:"lazy"}),c.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[c.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),c.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):c.jsx("span",{className:ie(i,"leading-none"),title:o.value,children:o.value})}function Pz({id:e,label:n,description:a,value:o,onChange:l,readOnly:i}){const[d,m]=f.useState(!1),[h,p]=f.useState("server"),[y,v]=f.useState(null),[x,S]=f.useState(""),[j,C]=f.useState(!1),[N,E]=f.useState(""),k=f.useCallback(async(Z=!1)=>{C(!0),S("");try{const Q=await ke.getGuildResources(Z);Q.data?(v(Q.data),Array.isArray(Q.data.emojis)||S("Server response is missing emojis. Restart the bot after updating.")):S("No guild data returned.")}catch(Q){S(Q instanceof Error?Q.message:"Could not load server emojis")}finally{C(!1)}},[]);f.useEffect(()=>{d&&k(!0)},[d,k]);const A=f.useMemo(()=>Array.isArray(y==null?void 0:y.emojis)?y.emojis:[],[y]),R=f.useMemo(()=>{const Z=N.trim().toLowerCase();return Z?A.filter(Q=>Q.name.toLowerCase().includes(Z)):A},[A,N]),L=String(o??""),z=f5(L);function B(Z){l(Z),m(!1)}function U(Z){l(nu(Z.name,Z.id,Z.animated)),m(!1)}function q(){l("")}return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:e,children:n}),a?c.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,c.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("div",{className:"min-w-0 flex-1",children:c.jsx(zz,{value:o,guildEmojis:A,size:"lg"})}),c.jsxs("div",{className:"flex shrink-0 gap-2",children:[c.jsx(be,{type:"button",variant:"secondary",size:"sm",disabled:i,onClick:()=>m(!0),children:"Choose emoji"}),L?c.jsx(be,{type:"button",variant:"ghost",size:"sm",disabled:i,onClick:q,children:"Clear"}):null]})]}),c.jsx($w,{open:d,onOpenChange:m,children:c.jsxs(Zh,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[c.jsxs(Qh,{className:"space-y-1 border-b border-border px-5 py-4",children:[c.jsx(Jh,{children:"Choose emoji"}),c.jsxs(eg,{children:["Server emojis save as"," ",c.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),c.jsxs(Yj,{value:h,onValueChange:Z=>p(Z),className:"flex min-h-0 flex-1 flex-col",children:[c.jsxs(fg,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[c.jsx(Ka,{value:"server",children:"Server"}),c.jsx(Ka,{value:"unicode",children:"All emojis"})]}),c.jsxs(Yp,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[c.jsxs("div",{className:"relative mb-3",children:[c.jsx(xe,{icon:Au,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Search by name…",value:N,onChange:Z=>E(Z.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),y?c.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[y.guildName," · ",A.length," custom emoji",A.length===1?"":"s"]}):null,c.jsx(hi,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:j?c.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((Z,Q)=>c.jsx(Fe,{className:"aspect-square rounded-lg"},Q))}):x?c.jsxs("div",{className:"space-y-3 p-4 text-center",children:[c.jsx("p",{className:"text-sm text-destructive",children:x}),c.jsx(be,{type:"button",variant:"outline",size:"sm",onClick:()=>void k(!0),children:"Retry"})]}):R.length===0?c.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:A.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):c.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:R.map(Z=>{const Q=z.kind==="custom"&&z.id===Z.id;return c.jsx("button",{type:"button",title:`:${Z.name}:`,className:ie("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",Q&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>U(Z),children:c.jsx("img",{src:Z.url??m5(Z.id,Z.animated),alt:Z.name,className:"size-8 object-contain",loading:"lazy"})},Z.id)})})})]}),c.jsx(Yp,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:c.jsx(Oz,{onPick:B})})]})]})}),c.jsx(rt,{value:L,disabled:i,onChange:Z=>l(Z.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const Ux="BOT_TOKEN",Bz="MODEL_API_KEY";function yg({field:e,value:n,onChange:a,readOnly:o}){const l=e.path.replace(/\./g,"-");if(e.type==="googleFont")return c.jsx(UD,{field:e,value:n,onChange:a,readOnly:o});if(e.type==="boolean")return c.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[c.jsxs("div",{children:[c.jsx(Ze,{htmlFor:l,className:"font-medium",children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null]}),c.jsx(Dn,{id:l,checked:!!n,disabled:o,onCheckedChange:a})]});if(e.type==="stringList")return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(BD,{value:Array.isArray(n)?n:[],onChange:a})]});if(e.type==="select"&&e.options)return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),c.jsxs(cd,{value:String(n??""),disabled:o,onValueChange:a,children:[c.jsx(gi,{id:l,className:"border-border bg-secondary/30",children:c.jsx(ud,{placeholder:"Select…"})}),c.jsx(vi,{children:e.options.map(d=>c.jsx(no,{value:d.value,children:d.label},d.value))})]})]});if(e.type==="color"){const d=lr(String(n??"#000000"));return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsxs("div",{className:"flex gap-2",children:[c.jsx(cg,{value:d,onChange:a}),c.jsx(rt,{id:l,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(lr(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(e.type==="emoji")return c.jsx(Pz,{id:l,label:e.label,description:e.description,value:n,onChange:a,readOnly:o});if(e.type==="discordChannel"||e.type==="discordRole"||e.type==="discordCategory"){const d=e.type==="discordRole"?"role":e.type==="discordCategory"?"category":"channel";return c.jsx(HD,{id:l,label:e.label,description:e.description,kind:d,value:n,onChange:a,readOnly:o})}if(e.type==="secret"){const d=n===Ux||n===Bz||!n?"":"••••••••••••";return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(rt,{id:l,type:"password",value:d,disabled:o,placeholder:e.placeholder??"Unchanged if empty",onChange:m=>{const h=m.target.value;a(h||(e.placeholder??Ux))},className:"border-border bg-secondary/30"})]})}const i="border-border bg-secondary/30";return e.type==="textarea"?c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),c.jsx(od,{id:l,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${i}`})]}):c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(rt,{id:l,type:e.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(e.type==="number"?Number(d.target.value):d.target.value),placeholder:e.placeholder??(e.type==="discordId"?"Discord snowflake ID":void 0),className:i})]})}const We=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("rounded-xl border border-border bg-card text-card-foreground shadow-none",e),...n}));We.displayName="Card";const at=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("flex flex-col space-y-1.5 p-6",e),...n}));at.displayName="CardHeader";const ot=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("font-semibold leading-none tracking-tight",e),...n}));ot.displayName="CardTitle";const Nt=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("text-sm text-muted-foreground",e),...n}));Nt.displayName="CardDescription";const qe=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("p-6 pt-0",e),...n}));qe.displayName="CardContent";const p5=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("flex items-center p-6 pt-0",e),...n}));p5.displayName="CardFooter";function Hx(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function $z(e,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=e.toLowerCase();return/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function xg(e,n=""){const a=[];for(const[o,l]of Object.entries(e)){const i=n?`${n}.${o}`:o;if(Array.isArray(l)){if(l.length>0&&typeof l[0]=="object"&&l[0]!==null&&!Array.isArray(l[0]))continue;a.push({path:i,label:Hx(o),type:"stringList"});continue}if(l&&typeof l=="object"&&Object.keys(l).length>0){a.push(...xg(l,i));continue}a.push({path:i,label:Hx(o),type:$z(o,l)})}return a}function Iz(e){const n=xg(e);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function ao(e,n){const a=n.split(".");let o=e;for(const l of a){if(o==null||typeof o!="object")return;o=o[l]}return o}function Xl(e,n,a){const o=n.split("."),l=structuredClone(e);let i=l;for(let d=0;d"u")return;let n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}const Hz=e=>{switch(e){case"success":return Fz;case"info":return Wz;case"warning":return Yz;case"error":return qz;default:return null}},Vz=Array(12).fill(0),Gz=({visible:e,className:n})=>ue.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},ue.createElement("div",{className:"sonner-spinner"},Vz.map((a,o)=>ue.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),Fz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Yz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Wz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),qz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),Kz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ue.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ue.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Xz=()=>{const[e,n]=ue.useState(document.hidden);return ue.useEffect(()=>{const a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e};let Qp=1;class Zz{constructor(){this.subscribe=n=>(this.subscribers.push(n),()=>{const a=this.subscribers.indexOf(n);this.subscribers.splice(a,1)}),this.publish=n=>{this.subscribers.forEach(a=>a(n))},this.addToast=n=>{this.publish(n),this.toasts=[...this.toasts,n]},this.create=n=>{var a;const{message:o,...l}=n,i=typeof(n==null?void 0:n.id)=="number"||((a=n.id)==null?void 0:a.length)>0?n.id:Qp++,d=this.toasts.find(h=>h.id===i),m=n.dismissible===void 0?!0:n.dismissible;return this.dismissedToasts.has(i)&&this.dismissedToasts.delete(i),d?this.toasts=this.toasts.map(h=>h.id===i?(this.publish({...h,...n,id:i,title:o}),{...h,...n,id:i,dismissible:m,title:o}):h):this.addToast({title:o,...l,dismissible:m,id:i}),i},this.dismiss=n=>(n?(this.dismissedToasts.add(n),requestAnimationFrame(()=>this.subscribers.forEach(a=>a({id:n,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(o=>o({id:a.id,dismiss:!0}))}),n),this.message=(n,a)=>this.create({...a,message:n}),this.error=(n,a)=>this.create({...a,message:n,type:"error"}),this.success=(n,a)=>this.create({...a,type:"success",message:n}),this.info=(n,a)=>this.create({...a,type:"info",message:n}),this.warning=(n,a)=>this.create({...a,type:"warning",message:n}),this.loading=(n,a)=>this.create({...a,type:"loading",message:n}),this.promise=(n,a)=>{if(!a)return;let o;a.loading!==void 0&&(o=this.create({...a,promise:n,type:"loading",message:a.loading,description:typeof a.description!="function"?a.description:void 0}));const l=Promise.resolve(n instanceof Function?n():n);let i=o!==void 0,d;const m=l.then(async p=>{if(d=["resolve",p],ue.isValidElement(p))i=!1,this.create({id:o,type:"default",message:p});else if(Jz(p)&&!p.ok){i=!1;const v=typeof a.error=="function"?await a.error(`HTTP error! status: ${p.status}`):a.error,x=typeof a.description=="function"?await a.description(`HTTP error! status: ${p.status}`):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(p instanceof Error){i=!1;const v=typeof a.error=="function"?await a.error(p):a.error,x=typeof a.description=="function"?await a.description(p):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(a.success!==void 0){i=!1;const v=typeof a.success=="function"?await a.success(p):a.success,x=typeof a.description=="function"?await a.description(p):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"success",description:x,...j})}}).catch(async p=>{if(d=["reject",p],a.error!==void 0){i=!1;const y=typeof a.error=="function"?await a.error(p):a.error,v=typeof a.description=="function"?await a.description(p):a.description,S=typeof y=="object"&&!ue.isValidElement(y)?y:{message:y};this.create({id:o,type:"error",description:v,...S})}}).finally(()=>{i&&(this.dismiss(o),o=void 0),a.finally==null||a.finally.call(a)}),h=()=>new Promise((p,y)=>m.then(()=>d[0]==="reject"?y(d[1]):p(d[1])).catch(y));return typeof o!="string"&&typeof o!="number"?{unwrap:h}:Object.assign(o,{unwrap:h})},this.custom=(n,a)=>{const o=(a==null?void 0:a.id)||Qp++;return this.create({jsx:n(o),id:o,...a}),o},this.getActiveToasts=()=>this.toasts.filter(n=>!this.dismissedToasts.has(n.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const cn=new Zz,Qz=(e,n)=>{const a=(n==null?void 0:n.id)||Qp++;return cn.addToast({title:e,...n,id:a}),a},Jz=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",eP=Qz,tP=()=>cn.toasts,nP=()=>cn.getActiveToasts(),rs=Object.assign(eP,{success:cn.success,info:cn.info,warning:cn.warning,error:cn.error,custom:cn.custom,message:cn.message,promise:cn.promise,dismiss:cn.dismiss,loading:cn.loading},{getHistory:tP,getToasts:nP});Uz("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function Wc(e){return e.label!==void 0}const rP=3,aP="24px",oP="16px",Vx=4e3,sP=356,lP=14,iP=45,cP=200;function ar(...e){return e.filter(Boolean).join(" ")}function uP(e){const[n,a]=e.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}const dP=e=>{var n,a,o,l,i,d,m,h,p;const{invert:y,toast:v,unstyled:x,interacting:S,setHeights:j,visibleToasts:C,heights:N,index:E,toasts:k,expanded:A,removeToast:R,defaultRichColors:L,closeButton:z,style:B,cancelButtonStyle:U,actionButtonStyle:q,className:Z="",descriptionClassName:Q="",duration:fe,position:de,gap:ce,expandByDefault:he,classNames:M,icons:K,closeButtonAriaLabel:re="Close toast"}=e,[oe,ee]=ue.useState(null),[_,O]=ue.useState(null),[H,I]=ue.useState(!1),[V,ne]=ue.useState(!1),[J,me]=ue.useState(!1),[pe,G]=ue.useState(!1),[se,ge]=ue.useState(!1),[je,Ae]=ue.useState(0),[Qe,ct]=ue.useState(0),Tt=ue.useRef(v.duration||fe||Vx),Ca=ue.useRef(null),Rt=ue.useRef(null),Os=E===0,Ds=E+1<=C,Yt=v.type,$r=v.dismissible!==!1,Wt=v.className||"",hd=v.descriptionClassName||"",ja=ue.useMemo(()=>N.findIndex(Te=>Te.toastId===v.id)||0,[N,v.id]),xi=ue.useMemo(()=>{var Te;return(Te=v.closeButton)!=null?Te:z},[v.closeButton,z]),Ea=ue.useMemo(()=>v.duration||fe||Vx,[v.duration,fe]),Ls=ue.useRef(0),dr=ue.useRef(0),Si=ue.useRef(0),Ir=ue.useRef(null),[Na,qt]=de.split("-"),$n=ue.useMemo(()=>N.reduce((Te,ut,At)=>At>=ja?Te:Te+ut.height,0),[N,ja]),Ht=Xz(),gd=v.invert||y,zs=Yt==="loading";dr.current=ue.useMemo(()=>ja*ce+$n,[ja,$n]),ue.useEffect(()=>{Tt.current=Ea},[Ea]),ue.useEffect(()=>{I(!0)},[]),ue.useEffect(()=>{const Te=Rt.current;if(Te){const ut=Te.getBoundingClientRect().height;return ct(ut),j(At=>[{toastId:v.id,height:ut,position:v.position},...At]),()=>j(At=>At.filter(Vt=>Vt.toastId!==v.id))}},[j,v.id]),ue.useLayoutEffect(()=>{if(!H)return;const Te=Rt.current,ut=Te.style.height;Te.style.height="auto";const At=Te.getBoundingClientRect().height;Te.style.height=ut,ct(At),j(Vt=>Vt.find(mt=>mt.toastId===v.id)?Vt.map(mt=>mt.toastId===v.id?{...mt,height:At}:mt):[{toastId:v.id,height:At,position:v.position},...Vt])},[H,v.title,v.description,j,v.id,v.jsx,v.action,v.cancel]);const Xn=ue.useCallback(()=>{ne(!0),Ae(dr.current),j(Te=>Te.filter(ut=>ut.toastId!==v.id)),setTimeout(()=>{R(v)},cP)},[v,R,j,dr]);ue.useEffect(()=>{if(v.promise&&Yt==="loading"||v.duration===1/0||v.type==="loading")return;let Te;return A||S||Ht?(()=>{if(Si.current{Tt.current!==1/0&&(Ls.current=new Date().getTime(),Te=setTimeout(()=>{v.onAutoClose==null||v.onAutoClose.call(v,v),Xn()},Tt.current))})(),()=>clearTimeout(Te)},[A,S,v,Yt,Ht,Xn]),ue.useEffect(()=>{v.delete&&(Xn(),v.onDismiss==null||v.onDismiss.call(v,v))},[Xn,v.delete]);function fo(){var Te;if(K!=null&&K.loading){var ut;return ue.createElement("div",{className:ar(M==null?void 0:M.loader,v==null||(ut=v.classNames)==null?void 0:ut.loader,"sonner-loader"),"data-visible":Yt==="loading"},K.loading)}return ue.createElement(Gz,{className:ar(M==null?void 0:M.loader,v==null||(Te=v.classNames)==null?void 0:Te.loader),visible:Yt==="loading"})}const mo=v.icon||(K==null?void 0:K[Yt])||Hz(Yt);var ka,Zn;return ue.createElement("li",{tabIndex:0,ref:Rt,className:ar(Z,Wt,M==null?void 0:M.toast,v==null||(n=v.classNames)==null?void 0:n.toast,M==null?void 0:M.default,M==null?void 0:M[Yt],v==null||(a=v.classNames)==null?void 0:a[Yt]),"data-sonner-toast":"","data-rich-colors":(ka=v.richColors)!=null?ka:L,"data-styled":!(v.jsx||v.unstyled||x),"data-mounted":H,"data-promise":!!v.promise,"data-swiped":se,"data-removed":V,"data-visible":Ds,"data-y-position":Na,"data-x-position":qt,"data-index":E,"data-front":Os,"data-swiping":J,"data-dismissible":$r,"data-type":Yt,"data-invert":gd,"data-swipe-out":pe,"data-swipe-direction":_,"data-expanded":!!(A||he&&H),"data-testid":v.testId,style:{"--index":E,"--toasts-before":E,"--z-index":k.length-E,"--offset":`${V?je:dr.current}px`,"--initial-height":he?"auto":`${Qe}px`,...B,...v.style},onDragEnd:()=>{me(!1),ee(null),Ir.current=null},onPointerDown:Te=>{Te.button!==2&&(zs||!$r||(Ca.current=new Date,Ae(dr.current),Te.target.setPointerCapture(Te.pointerId),Te.target.tagName!=="BUTTON"&&(me(!0),Ir.current={x:Te.clientX,y:Te.clientY})))},onPointerUp:()=>{var Te,ut,At;if(pe||!$r)return;Ir.current=null;const Vt=Number(((Te=Rt.current)==null?void 0:Te.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Ur=Number(((ut=Rt.current)==null?void 0:ut.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),mt=new Date().getTime()-((At=Ca.current)==null?void 0:At.getTime()),Zt=oe==="x"?Vt:Ur,Ta=Math.abs(Zt)/mt;if(Math.abs(Zt)>=iP||Ta>.11){Ae(dr.current),v.onDismiss==null||v.onDismiss.call(v,v),O(oe==="x"?Vt>0?"right":"left":Ur>0?"down":"up"),Xn(),G(!0);return}else{var Qt,Jt;(Qt=Rt.current)==null||Qt.style.setProperty("--swipe-amount-x","0px"),(Jt=Rt.current)==null||Jt.style.setProperty("--swipe-amount-y","0px")}ge(!1),me(!1),ee(null)},onPointerMove:Te=>{var ut,At,Vt;if(!Ir.current||!$r||((ut=window.getSelection())==null?void 0:ut.toString().length)>0)return;const mt=Te.clientY-Ir.current.y,Zt=Te.clientX-Ir.current.x;var Ta;const Qt=(Ta=e.swipeDirections)!=null?Ta:uP(de);!oe&&(Math.abs(Zt)>1||Math.abs(mt)>1)&&ee(Math.abs(Zt)>Math.abs(mt)?"x":"y");let Jt={x:0,y:0};const po=In=>1/(1.5+Math.abs(In)/20);if(oe==="y"){if(Qt.includes("top")||Qt.includes("bottom"))if(Qt.includes("top")&&mt<0||Qt.includes("bottom")&&mt>0)Jt.y=mt;else{const In=mt*po(mt);Jt.y=Math.abs(In)0)Jt.x=Zt;else{const In=Zt*po(Zt);Jt.x=Math.abs(In)0||Math.abs(Jt.y)>0)&&ge(!0),(At=Rt.current)==null||At.style.setProperty("--swipe-amount-x",`${Jt.x}px`),(Vt=Rt.current)==null||Vt.style.setProperty("--swipe-amount-y",`${Jt.y}px`)}},xi&&!v.jsx&&Yt!=="loading"?ue.createElement("button",{"aria-label":re,"data-disabled":zs,"data-close-button":!0,onClick:zs||!$r?()=>{}:()=>{Xn(),v.onDismiss==null||v.onDismiss.call(v,v)},className:ar(M==null?void 0:M.closeButton,v==null||(o=v.classNames)==null?void 0:o.closeButton)},(Zn=K==null?void 0:K.close)!=null?Zn:Kz):null,(Yt||v.icon||v.promise)&&v.icon!==null&&((K==null?void 0:K[Yt])!==null||v.icon)?ue.createElement("div",{"data-icon":"",className:ar(M==null?void 0:M.icon,v==null||(l=v.classNames)==null?void 0:l.icon)},v.promise||v.type==="loading"&&!v.icon?v.icon||fo():null,v.type!=="loading"?mo:null):null,ue.createElement("div",{"data-content":"",className:ar(M==null?void 0:M.content,v==null||(i=v.classNames)==null?void 0:i.content)},ue.createElement("div",{"data-title":"",className:ar(M==null?void 0:M.title,v==null||(d=v.classNames)==null?void 0:d.title)},v.jsx?v.jsx:typeof v.title=="function"?v.title():v.title),v.description?ue.createElement("div",{"data-description":"",className:ar(Q,hd,M==null?void 0:M.description,v==null||(m=v.classNames)==null?void 0:m.description)},typeof v.description=="function"?v.description():v.description):null),ue.isValidElement(v.cancel)?v.cancel:v.cancel&&Wc(v.cancel)?ue.createElement("button",{"data-button":!0,"data-cancel":!0,style:v.cancelButtonStyle||U,onClick:Te=>{Wc(v.cancel)&&$r&&(v.cancel.onClick==null||v.cancel.onClick.call(v.cancel,Te),Xn())},className:ar(M==null?void 0:M.cancelButton,v==null||(h=v.classNames)==null?void 0:h.cancelButton)},v.cancel.label):null,ue.isValidElement(v.action)?v.action:v.action&&Wc(v.action)?ue.createElement("button",{"data-button":!0,"data-action":!0,style:v.actionButtonStyle||q,onClick:Te=>{Wc(v.action)&&(v.action.onClick==null||v.action.onClick.call(v.action,Te),!Te.defaultPrevented&&Xn())},className:ar(M==null?void 0:M.actionButton,v==null||(p=v.classNames)==null?void 0:p.actionButton)},v.action.label):null)};function Gx(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function fP(e,n){const a={};return[e,n].forEach((o,l)=>{const i=l===1,d=i?"--mobile-offset":"--offset",m=i?oP:aP;function h(p){["top","right","bottom","left"].forEach(y=>{a[`${d}-${y}`]=typeof p=="number"?`${p}px`:p})}typeof o=="number"||typeof o=="string"?h(o):typeof o=="object"?["top","right","bottom","left"].forEach(p=>{o[p]===void 0?a[`${d}-${p}`]=m:a[`${d}-${p}`]=typeof o[p]=="number"?`${o[p]}px`:o[p]}):h(m)}),a}const mP=ue.forwardRef(function(n,a){const{id:o,invert:l,position:i="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:h,className:p,offset:y,mobileOffset:v,theme:x="light",richColors:S,duration:j,style:C,visibleToasts:N=rP,toastOptions:E,dir:k=Gx(),gap:A=lP,icons:R,containerAriaLabel:L="Notifications"}=n,[z,B]=ue.useState([]),U=ue.useMemo(()=>o?z.filter(H=>H.toasterId===o):z.filter(H=>!H.toasterId),[z,o]),q=ue.useMemo(()=>Array.from(new Set([i].concat(U.filter(H=>H.position).map(H=>H.position)))),[U,i]),[Z,Q]=ue.useState([]),[fe,de]=ue.useState(!1),[ce,he]=ue.useState(!1),[M,K]=ue.useState(x!=="system"?x:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),re=ue.useRef(null),oe=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),ee=ue.useRef(null),_=ue.useRef(!1),O=ue.useCallback(H=>{B(I=>{var V;return(V=I.find(ne=>ne.id===H.id))!=null&&V.delete||cn.dismiss(H.id),I.filter(({id:ne})=>ne!==H.id)})},[]);return ue.useEffect(()=>cn.subscribe(H=>{if(H.dismiss){requestAnimationFrame(()=>{B(I=>I.map(V=>V.id===H.id?{...V,delete:!0}:V))});return}setTimeout(()=>{g0.flushSync(()=>{B(I=>{const V=I.findIndex(ne=>ne.id===H.id);return V!==-1?[...I.slice(0,V),{...I[V],...H},...I.slice(V+1)]:[H,...I]})})})}),[z]),ue.useEffect(()=>{if(x!=="system"){K(x);return}if(x==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?K("dark"):K("light")),typeof window>"u")return;const H=window.matchMedia("(prefers-color-scheme: dark)");try{H.addEventListener("change",({matches:I})=>{K(I?"dark":"light")})}catch{H.addListener(({matches:V})=>{try{K(V?"dark":"light")}catch(ne){console.error(ne)}})}},[x]),ue.useEffect(()=>{z.length<=1&&de(!1)},[z]),ue.useEffect(()=>{const H=I=>{var V;if(d.every(me=>I[me]||I.code===me)){var J;de(!0),(J=re.current)==null||J.focus()}I.code==="Escape"&&(document.activeElement===re.current||(V=re.current)!=null&&V.contains(document.activeElement))&&de(!1)};return document.addEventListener("keydown",H),()=>document.removeEventListener("keydown",H)},[d]),ue.useEffect(()=>{if(re.current)return()=>{ee.current&&(ee.current.focus({preventScroll:!0}),ee.current=null,_.current=!1)}},[re.current]),ue.createElement("section",{ref:a,"aria-label":`${L} ${oe}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},q.map((H,I)=>{var V;const[ne,J]=H.split("-");return U.length?ue.createElement("ol",{key:H,dir:k==="auto"?Gx():k,tabIndex:-1,ref:re,className:p,"data-sonner-toaster":!0,"data-sonner-theme":M,"data-y-position":ne,"data-x-position":J,style:{"--front-toast-height":`${((V=Z[0])==null?void 0:V.height)||0}px`,"--width":`${sP}px`,"--gap":`${A}px`,...C,...fP(y,v)},onBlur:me=>{_.current&&!me.currentTarget.contains(me.relatedTarget)&&(_.current=!1,ee.current&&(ee.current.focus({preventScroll:!0}),ee.current=null))},onFocus:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||_.current||(_.current=!0,ee.current=me.relatedTarget)},onMouseEnter:()=>de(!0),onMouseMove:()=>de(!0),onMouseLeave:()=>{ce||de(!1)},onDragEnd:()=>de(!1),onPointerDown:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||he(!0)},onPointerUp:()=>he(!1)},U.filter(me=>!me.position&&I===0||me.position===H).map((me,pe)=>{var G,se;return ue.createElement(dP,{key:me.id,icons:R,index:pe,toast:me,defaultRichColors:S,duration:(G=E==null?void 0:E.duration)!=null?G:j,className:E==null?void 0:E.className,descriptionClassName:E==null?void 0:E.descriptionClassName,invert:l,visibleToasts:N,closeButton:(se=E==null?void 0:E.closeButton)!=null?se:h,interacting:ce,position:H,style:E==null?void 0:E.style,unstyled:E==null?void 0:E.unstyled,classNames:E==null?void 0:E.classNames,cancelButtonStyle:E==null?void 0:E.cancelButtonStyle,actionButtonStyle:E==null?void 0:E.actionButtonStyle,closeButtonAriaLabel:E==null?void 0:E.closeButtonAriaLabel,removeToast:O,toasts:U.filter(ge=>ge.position==me.position),heights:Z.filter(ge=>ge.position==me.position),setHeights:Q,expandByDefault:m,gap:A,expanded:fe,swipeDirections:n.swipeDirections})})):null}))});async function ru(e){const n=rs.loading("Saving changes…");try{const a=await e();if(rs.success("Changes saved",{id:n}),a.botRestart){const o=rs.loading("Restarting bot…");a.botRestart.success?rs.success("Bot started",{id:o}):rs.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw rs.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function pP({filename:e}){const{canEditConfig:n}=Ft(),a=!n("supportbot"),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{h(!0),x(""),j("");try{const L=(await ke.getAddonConfigJson(e)).data??{};l(L),d(structuredClone(L))}catch(R){x(R instanceof Error?R.message:"Failed to load config")}finally{h(!1)}},[e]);f.useEffect(()=>{C()},[C]);const N=o?Iz(o):null;function E(R,L){l(z=>z&&Xl(z,R,L))}async function k(){if(!(a||!o)){y(!0),x(""),j("");try{const R=await ru(()=>ke.saveAddonConfig(e,o));j(R.message||"Saved."),await C()}catch(R){x(R instanceof Error?R.message:"Save failed")}finally{y(!1)}}}if(m)return c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-24 w-full rounded-xl"}),c.jsx(Fe,{className:"h-48 w-full rounded-xl"})]});if(!o||!N)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load"})});const A=i&&JSON.stringify(o)!==JSON.stringify(i);return c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[A?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,c.jsx(be,{variant:"outline",size:"sm",onClick:C,disabled:m||p,children:"Reload"}),a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:k,disabled:p||!A,children:[c.jsx(xe,{icon:Ru,size:16,className:"mr-1.5"}),p?"Saving…":"Save"]})]}),v?c.jsxs(Ue,{variant:"destructive",children:[c.jsx(xe,{icon:fh,size:18}),c.jsx(He,{children:v})]}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,N.map(R=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:R.title}),R.description?c.jsx(Nt,{children:R.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:R.fields.map(L=>c.jsx("div",{className:L.type==="textarea"||L.type==="stringList"?"sm:col-span-2":"",children:c.jsx(yg,{field:L,value:ao(o,L.path),readOnly:a,onChange:z=>E(L.path,z)})},L.path))})]},R.title))]})}function hP(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function gP(e,n){const a=new Set(e.flatMap(d=>d.fields.map(m=>m.path))),o=xg(n).filter(d=>!a.has(d.path));if(o.length===0)return e;const l=new Map;for(const d of o){const m=d.path.split(".")[0]??"Other",h=l.get(m)??[];h.push(d),l.set(m,h)}const i=[...l.entries()].sort(([d],[m])=>d.localeCompare(m)).map(([d,m])=>({title:hP(d),description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((h,p)=>h.path.localeCompare(p.path))}));return[...e,...i]}function vP(e){return e!==null&&typeof e=="object"&&"Command"in e}function bP(e){return Object.entries(e).filter(([,n])=>vP(n)).map(([n,a])=>({key:n,...a}))}function yP({data:e,onChange:n}){const a=bP(e);function o(l,i){const d=e[l];n({...e,[l]:{...d,...i}})}return a.length===0?c.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(l=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[c.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:c.jsx(xe,{icon:ms,size:18})}),c.jsx(ot,{className:"text-base",children:l.key})]}),c.jsxs(qe,{className:"space-y-3",children:[c.jsxs("div",{className:"flex items-center justify-between",children:[c.jsx(Ze,{htmlFor:`${l.key}-enabled`,children:"Enabled"}),c.jsx(Dn,{id:`${l.key}-enabled`,checked:l.Enabled!==!1,onCheckedChange:i=>o(l.key,{Enabled:i})})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx(Ze,{children:"Slash command"}),c.jsx(rt,{value:l.Command??"",onChange:i=>o(l.key,{Command:i.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx(Ze,{children:"Description"}),c.jsx(rt,{value:l.Description??"",onChange:i=>o(l.key,{Description:i.target.value}),className:"border-border bg-secondary/30"})]})]})]},l.key))})}function xP(e,n){let a=structuredClone(n);if(e==="supportbot"){const o=ao(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=Xl(a,"General.Token","BOT_TOKEN"))}if(e==="supportbot-ai"){const o=ao(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=Xl(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function SP(e,n,a,o){const l={};for(const i of n)for(const d of i.fields){const m=ao(a,d.path),h=ao(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(h)&&(l[`${e}:${d.path}`]=m)}return l}function wP({configFile:e}){const{canEditConfig:n}=Ft(),a=!n(e),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState("visual"),[E,k]=f.useState(""),[A,R]=f.useState(""),L=V_(e),z=f.useMemo(()=>!L||L==="commands"||!o?L:gP(L,o),[L,o]),B=f.useCallback(async()=>{h(!0),x(""),j("");try{const he=(await ke.getConfigJson(e)).data??{},M=xP(e,he);l(M),d(M);const re=(await ke.getConfigRaw(e)).data??"",oe=D4(re,e);k(oe),R(oe)}catch(ce){x(ce instanceof Error?ce.message:"Failed to load config")}finally{h(!1)}},[e]);f.useEffect(()=>{B()},[B]);function U(ce,he){l(M=>M&&Xl(M,ce,he))}async function q(){if(!(a||E===A)){y(!0),x(""),j("");try{const ce=await ru(()=>ke.saveConfigRaw(e,E));j(ce.message||"Config saved."),await B()}catch(ce){x(ce instanceof Error?ce.message:"Save failed")}finally{y(!1)}}}async function Z(){if(!(a||!o||!i)){if(C==="yaml"){await q();return}y(!0),x(""),j("");try{if(L==="commands"){const ce={};for(const M of Object.keys(o))JSON.stringify(o[M])!==JSON.stringify(i[M])&&(ce[`${e}:${M}`]=o[M]);if(Object.keys(ce).length===0){j("No changes to save.");return}const he=await ru(()=>ke.updateConfigFields(ce));j(he.message||"")}else if(z&&z!=="commands"){const ce=SP(e,z,o,i);if(Object.keys(ce).length===0){j("No changes to save.");return}const he=await ru(()=>ke.updateConfigFields(ce));j(he.message||"")}await B()}catch(ce){x(ce instanceof Error?ce.message:"Save failed")}finally{y(!1)}}}if(L===null)return c.jsx(Ue,{children:c.jsx(He,{children:"No visual editor available for this file."})});if(m)return c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-24 w-full rounded-xl"}),c.jsx(Fe,{className:"h-48 w-full rounded-xl"})]});if(!o)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load"})});const Q=i&&JSON.stringify(o)!==JSON.stringify(i),de=C==="yaml"?E!==A:Q;return c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[c.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[c.jsx(be,{type:"button",variant:C==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("visual"),children:"Visual"}),c.jsx(be,{type:"button",variant:C==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("yaml"),children:"YAML"})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[de?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,c.jsx(be,{variant:"outline",size:"sm",onClick:B,disabled:m||p,children:"Reload"}),a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:Z,disabled:p||!de,children:[c.jsx(xe,{icon:Ru,size:16,className:"mr-1.5"}),p?"Saving…":"Save"]})]})]}),v?c.jsxs(Ue,{variant:"destructive",children:[c.jsx(xe,{icon:fh,size:18}),c.jsx(He,{children:v})]}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,C==="yaml"?c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:"Raw YAML"}),c.jsx(Nt,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),c.jsx(qe,{children:c.jsx(od,{value:E,disabled:a,onChange:ce=>k(ce.target.value),className:"min-h-[min(520px,60vh)] font-mono text-xs leading-relaxed",spellCheck:!1})})]}):L==="commands"?c.jsx(yP,{data:o,onChange:ce=>l(ce)}):z&&z!=="commands"?z.map(ce=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:ce.title}),ce.description?c.jsx(Nt,{children:ce.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:ce.fields.map(he=>c.jsx("div",{className:he.type==="textarea"||he.type==="stringList"?"sm:col-span-2":"",children:c.jsx(yg,{field:he,value:ao(o,he.path),readOnly:a,onChange:M=>U(he.path,M)})},he.path))})]},ce.title)):null]})}const CP=ke.listConfigs(),jP={supportbot:"Bot config","ticket-panel":"Ticket system",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function EP(){var R,L;const{permissions:e,canViewConfig:n}=Ft(),{files:a}=R0(),[o,l]=uh(),i=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>CP.filter(z=>n(z)),[n]),h=f.useMemo(()=>d?a:[],[d,a]),p=f.useMemo(()=>[...m,...h.map(z=>is(z))],[m,h]),y=p[0]??"",[v,x]=f.useState(()=>i&&p.includes(i)?i:y);if(f.useEffect(()=>{i&&p.includes(i)?x(i):p.includes(v)||(x(y),y&&l({file:y}))},[i,p,v,y,l]),p.length===0)return c.jsx(Mr,{to:Sh(e),replace:!0});function S(z){x(z),l({file:z})}const j=V4(v),C=(j==null?void 0:j.type)==="addon",N=C?j.file:null,E=C?A0(N):jP[v]??"Configuration",k=C?!!((R=e==null?void 0:e.configs.supportbot)!=null&&R.edit):e?!!((L=e.configs[v])!=null&&L.edit):!1,A=C?N:`${v}.yml`;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:E}),c.jsx("p",{className:"text-muted-foreground",children:k?`Edit ${A} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${A} — you do not have permission to save changes.`})]}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-[220px_1fr]",children:[c.jsxs(We,{className:"h-fit border-border bg-card",children:[c.jsx(at,{className:"pb-2",children:c.jsx(ot,{className:"text-sm font-medium text-muted-foreground",children:"Configuration files"})}),c.jsx(qe,{className:"p-0",children:c.jsx(hi,{className:"h-[min(400px,50vh)]",children:c.jsxs("ul",{className:"space-y-3 p-2",children:[m.length>0?c.jsxs("li",{children:[c.jsx("p",{className:"px-3 pb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:"Core"}),c.jsx("ul",{className:"space-y-0.5",children:m.map(z=>c.jsx("li",{children:c.jsxs("button",{type:"button",onClick:()=>S(z),className:ie("w-full rounded-lg px-3 py-2.5 text-left text-sm transition-colors",z===v?"bg-primary/15 font-medium text-primary":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[z,".yml"]})},z))})]}):null,h.length>0?c.jsxs("li",{children:[c.jsx("p",{className:"px-3 pb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:"Addons"}),c.jsx("ul",{className:"space-y-0.5",children:h.map(z=>{const B=is(z);return c.jsx("li",{children:c.jsx("button",{type:"button",onClick:()=>S(B),className:ie("w-full rounded-lg px-3 py-2.5 text-left text-sm transition-colors",B===v?"bg-primary/15 font-medium text-primary":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:z})},z)})})]}):null]})})})]}),c.jsx("div",{className:"min-w-0",children:C&&N?c.jsx(pP,{filename:N},N):c.jsx(wP,{configFile:v},v)})]})]})}const NP={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function kP(e){return e?NP[e]||"Sign-in failed. Please try again.":""}function TP(){const{branding:e}=Mu(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Ft(),[l]=uh(),i=f.useMemo(()=>kP(l.get("error")),[l]);return!a&&n?c.jsx(Mr,{to:"/",replace:!0}):c.jsxs("div",{className:"relative flex min-h-svh items-center justify-center bg-[#0c0c10] p-4 overflow-hidden",children:[c.jsx("div",{className:"absolute top-1/4 left-1/4 h-[500px] w-[500px] -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary/20 blur-[120px] animate-pulse"}),c.jsx("div",{className:"absolute bottom-1/4 right-1/4 h-[400px] w-[400px] translate-x-1/2 translate-y-1/2 rounded-full bg-accent/20 blur-[100px] animate-pulse",style:{animationDelay:"2s"}}),c.jsx("div",{className:"absolute top-1/2 left-1/2 h-[300px] w-[300px] -translate-x-1/2 -translate-y-1/2 rounded-full bg-indigo-500/10 blur-[80px] animate-pulse",style:{animationDelay:"4s"}}),c.jsxs(We,{className:"relative z-10 w-full max-w-md overflow-hidden rounded-3xl border border-white/10 bg-card/30 p-2 shadow-2xl backdrop-blur-2xl",children:[c.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-white/5 to-transparent pointer-events-none"}),c.jsxs(at,{className:"space-y-6 pt-10 pb-4 text-center",children:[c.jsx("div",{className:"mx-auto flex size-28 items-center justify-center overflow-hidden rounded-3xl bg-white/5 p-4 shadow-inner ring-1 ring-white/10 transition-transform duration-500 hover:scale-105",children:c.jsx("img",{src:"/logo.png",alt:"SupportBot Logo",className:"h-full w-full object-contain drop-shadow-xl"})}),c.jsxs("div",{children:[c.jsx(ot,{className:"bg-gradient-to-br from-white to-white/50 bg-clip-text text-3xl font-extrabold tracking-tight text-transparent",children:e.title||"SupportBot"}),c.jsx(Nt,{className:"mt-2 text-base font-medium text-white/50",children:"Sign in to your dashboard"})]})]}),c.jsxs(qe,{className:"space-y-6 pb-10",children:[c.jsx("p",{className:"text-center text-sm font-medium text-white/40",children:"Securely authenticate using your Discord account."}),i?c.jsx(Ue,{variant:"destructive",className:"border-red-500/50 bg-red-500/10 text-red-200 backdrop-blur-md",children:c.jsx(He,{className:"font-medium",children:i})}):null,c.jsxs(be,{type:"button",className:"group relative w-full overflow-hidden rounded-2xl bg-primary px-8 py-6 text-base font-bold text-primary-foreground shadow-[0_0_20px_rgba(var(--primary),0.3)] transition-all duration-300 hover:scale-[1.02] hover:shadow-[0_0_30px_rgba(var(--primary),0.5)] active:scale-95",disabled:a,onClick:o,children:[c.jsx("div",{className:"absolute inset-0 translate-x-[-100%] bg-gradient-to-r from-transparent via-white/20 to-transparent transition-transform duration-1000 group-hover:translate-x-[100%]"}),c.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"22",height:"22",viewBox:"0 0 127.14 96.36",fill:"currentColor",children:c.jsx("path",{d:"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1,105.25,105.25,0,0,0,32.19-16.14c2.64-27.38-4.51-51.11-19.32-72.15ZM42.68,68.22c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C52.34,63.32,48.09,68.22,42.68,68.22Zm41.76,0c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C84.44,63.32,80.19,68.22,84.44,68.22Z"})}),a?"Authenticating...":"Continue with Discord"]})]})]})]})]})}const fs=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:ph},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:M4},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:N4},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:gh},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:yh}];function RP(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function AP({brandingTitle:e,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:l}){return c.jsx("div",{className:"min-h-svh bg-background",children:c.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[c.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?c.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):c.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:c.jsx(xe,{icon:ph,size:24})}),c.jsxs("div",{children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),c.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:e})]})]}),l]})})}function _P({currentIndex:e,validation:n}){const a=(e+1)/fs.length*100;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[c.jsxs("span",{children:["Step ",e+1," of ",fs.length]}),c.jsxs("span",{children:[Math.round(a),"%"]})]}),c.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:c.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),c.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:fs.map((o,l)=>{var p;const i=RP(o.id),d=(p=n[i])==null?void 0:p.ok,m=l===e,h=lc.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx(xe,{icon:ku,size:14}),o.globalName||o.username,c.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!e.bot&&!((a=e.users)!=null&&a.length)?c.jsx("p",{children:e.warning||"Verified successfully."}):null]})}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:e.error})}):null}function OP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",c.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",c.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"botToken",children:"Bot token"}),c.jsx(rt,{id:"botToken",type:"password",autoComplete:"off",value:e.botToken,onChange:i=>n({...e,botToken:i.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),c.jsx(yi,{result:a.botToken}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.botToken,onClick:l,children:o?"Checking with Discord…":"Verify bot token"})})]})}function DP({values:e,setValues:n,validation:a,validating:o,onValidate:l,onGenerate:i}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"secretKey",children:"Session secret"}),c.jsx(rt,{id:"secretKey",type:"password",autoComplete:"off",value:e.secretKey,onChange:d=>n({...e,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),c.jsx(yi,{result:a.secretKey}),c.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[c.jsx(be,{type:"button",variant:"outline",onClick:i,children:"Generate secure secret"}),c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.secretKey,onClick:l,children:o?"Checking…":"Validate"})]})]})}function LP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",c.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[c.jsx(Ze,{htmlFor:"clientId",children:"Client ID"}),c.jsx(rt,{id:"clientId",value:e.clientId,onChange:i=>n({...e,clientId:i.target.value}),className:"h-11 font-mono text-sm"})]}),c.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[c.jsx(Ze,{htmlFor:"clientSecret",children:"Client Secret"}),c.jsx(rt,{id:"clientSecret",type:"password",autoComplete:"off",value:e.clientSecret,onChange:i=>n({...e,clientSecret:i.target.value}),className:"h-11 font-mono text-sm"})]})]}),c.jsx(yi,{result:a.oauth}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.clientId||!e.clientSecret,onClick:l,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function zP({values:e,setValues:n,validation:a}){async function o(){if(e.redirectUri)try{await navigator.clipboard.writeText(e.redirectUri)}catch{}}return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",c.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"redirectUri",children:"Redirect URI"}),c.jsxs("div",{className:"flex gap-2",children:[c.jsx(rt,{id:"redirectUri",value:e.redirectUri,onChange:l=>n({...e,redirectUri:l.target.value}),className:"h-11 flex-1 font-mono text-xs"}),c.jsx(be,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:c.jsx(xe,{icon:x0,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?c.jsx(yi,{result:a.redirectUri}):c.jsx(Ue,{className:"border-border bg-secondary",children:c.jsx(He,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function PP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",c.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",c.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"owners",children:"Owner user IDs"}),c.jsx(od,{id:"owners",value:e.ownerUserIds,onChange:i=>n({...e,ownerUserIds:i.target.value}),placeholder:`829112572816130058
+987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),c.jsx(yi,{result:a.owners}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.ownerUserIds.trim(),onClick:l,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function BP({onContinue:e}){return c.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:c.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[c.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:c.jsx(xe,{icon:ku,size:40})}),c.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),c.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",c.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),c.jsx(Ue,{className:"mt-6 text-left",children:c.jsx(He,{children:"After restarting, sign in with Discord to open the dashboard."})}),c.jsx(be,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:e,children:"Continue to sign in"})]})})}function $P({currentIndex:e,validating:n,saving:a,onBack:o,onNext:l,onFinish:i}){const d=e===fs.length-1;return c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[c.jsxs(be,{type:"button",variant:"ghost",disabled:e===0||a,onClick:o,children:[c.jsx(xe,{icon:b0,size:18,className:"mr-1"}),"Back"]}),c.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?c.jsx(be,{type:"button",size:"lg",disabled:a||n,onClick:i,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):c.jsxs(be,{type:"button",size:"lg",disabled:n||a,onClick:l,children:["Continue",c.jsx(xe,{icon:mh,size:18,className:"ml-1"})]})})]})}function IP(){const e=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return e+n}function UP(e){return e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function Fx(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function HP(){const e=oo(),{branding:n}=Mu(),{loading:a,error:o,refresh:l,status:i}=yC(),[d,m]=f.useState(0),[h,p]=f.useState({botToken:"",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:""}),[y,v]=f.useState({}),[x,S]=f.useState(!1),[j,C]=f.useState(!1),[N,E]=f.useState(""),[k,A]=f.useState(!1),R=fs[d];f.useEffect(()=>{i!=null&&i.suggestedRedirectUri&&!h.redirectUri&&p(Q=>({...Q,redirectUri:i.suggestedRedirectUri}))},[i==null?void 0:i.suggestedRedirectUri,h.redirectUri]);const L=f.useMemo(()=>({botToken:h.botToken,secretKey:h.secretKey,clientId:h.clientId,clientSecret:h.clientSecret,redirectUri:h.redirectUri,ownerUserIds:UP(h.ownerUserIds)}),[h]);async function z(){S(!0),E("");try{const Q=await ke.validateSetup(L);return v(fe=>{var de;return{...fe,...(de=Q.data)==null?void 0:de.results}}),Q.data}catch(Q){return E(Q instanceof Error?Q.message:"Validation failed"),null}finally{S(!1)}}async function B(){var de,ce;const Q=Fx(R.id),fe=await z();return!!((ce=(de=fe==null?void 0:fe.results)==null?void 0:de[Q])!=null&&ce.ok)}async function U(){const Q=Fx(R.id),fe=y[Q];!(fe!=null&&fe.ok)&&!await B()||m(de=>Math.min(de+1,fs.length-1))}async function q(){C(!0),E("");try{const Q=await z();if(!(Q!=null&&Q.ok)){E("Fix the steps marked with errors before finishing.");return}await ke.completeSetup(L),A(!0)}catch(Q){E(Q instanceof Error?Q.message:"Could not save setup")}finally{C(!1)}}function Z(){const Q={values:h,setValues:p,validation:y,validating:x};switch(R.id){case"botToken":return c.jsx(OP,{...Q,onValidate:()=>void B()});case"secretKey":return c.jsx(DP,{...Q,onGenerate:()=>p(fe=>({...fe,secretKey:IP()})),onValidate:()=>void B()});case"oauth":return c.jsx(LP,{...Q,onValidate:()=>void B()});case"redirectUri":return c.jsx(zP,{values:h,setValues:p,validation:y});case"owners":return c.jsx(PP,{...Q,onValidate:()=>void B()})}}return a?c.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:c.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[c.jsx(Fe,{className:"h-14 w-64"}),c.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[c.jsx(Fe,{className:"hidden h-80 lg:block"}),c.jsx(Fe,{className:"h-[520px] rounded-2xl"})]})]})}):c.jsxs(AP,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt,hasFavicon:n.hasFavicon,children:[o?c.jsx(Ue,{variant:"destructive",className:"mb-6",children:c.jsx(He,{children:o})}):null,N?c.jsx(Ue,{variant:"destructive",className:"mb-6",children:c.jsx(He,{children:N})}):null,k?c.jsx(BP,{onContinue:async()=>{await l(),e("/login",{replace:!0})}}):c.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[c.jsx(_P,{currentIndex:d,validation:y}),c.jsx(MP,{step:R,footer:c.jsx($P,{currentIndex:d,validating:x,saving:j,onBack:()=>m(Q=>Math.max(0,Q-1)),onNext:()=>void U(),onFinish:()=>void q()}),children:Z()})]})]})}const VP={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function GP({title:e,icon:n,href:a,badge:o="Configured",status:l="done"}){return c.jsxs(kt,{to:a,className:ie("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[c.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:c.jsx(xe,{icon:n,size:20})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("p",{className:"truncate font-semibold",children:e}),c.jsx("span",{className:ie("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",VP[l]),children:o})]})]})}function FP({percent:e,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:l="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,e)),h=d-m/100*d;return c.jsxs("div",{className:ie("relative inline-flex",a),children:[c.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[c.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),c.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:h,className:l})]}),c.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[c.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),c.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const YP={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function WP({title:e,subtitle:n,icon:a,href:o,status:l,meta:i="Open in dashboard"}){const d=YP[l];return c.jsxs(kt,{to:o,className:ie("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[c.jsxs("div",{className:"flex items-start justify-between gap-2",children:[c.jsx("span",{className:ie("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),c.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),c.jsxs("div",{children:[c.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:e}),c.jsx("span",{className:ie("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),c.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:c.jsx(xe,{icon:a,size:16})}),c.jsx("span",{className:"text-xs text-muted-foreground",children:i})]}),c.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[c.jsx(xe,{icon:gh,size:14,className:"opacity-60"}),c.jsx(xe,{icon:Xa,size:14,className:"opacity-60 group-hover:text-primary"}),c.jsx(xe,{icon:mh,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function qP({stats:e}){const n=[{id:"ping",label:"Gateway latency",detail:`${e.bot.ping}ms`,badge:e.bot.ping<200?"Good":"High",badgeClass:e.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:j0(e.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${e.hosting.ram_used} / ${e.hosting.ram_total}`,badge:`${e.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return c.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[c.jsxs(ot,{className:"text-sm font-semibold",children:["Connected servers (",e.servers,")"]}),c.jsx(be,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:c.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),c.jsxs(qe,{className:"pt-0",children:[c.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,e.servers)}).map((a,o)=>c.jsxs(gs,{className:"size-9 border-2 border-card ring-0",children:[c.jsx(vs,{src:e.bot.avatar,alt:""}),c.jsx(bs,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),e.servers>6?c.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",e.servers-6]}):null]}),c.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[e.users.toLocaleString()," members across your guilds"]})]})]}),c.jsx(We,{className:"overflow-hidden border-border bg-secondary",children:c.jsx(qe,{className:"p-5",children:c.jsxs("div",{className:"space-y-3",children:[c.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:c.jsx(xe,{icon:_4,size:22})}),c.jsxs("div",{children:[c.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),c.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),c.jsx(be,{asChild:!0,size:"sm",className:"w-full",children:c.jsxs(kt,{to:"/settings",children:[c.jsx(xe,{icon:Tu,size:16,className:"mr-2"}),"Open settings"]})})]})})}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[c.jsx(ot,{className:"text-sm font-semibold",children:"System activity"}),c.jsx(be,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:c.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),c.jsxs(qe,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>c.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[c.jsxs(gs,{className:"size-9",children:[c.jsx(vs,{src:e.bot.avatar,alt:e.bot.username}),c.jsx(bs,{className:"bg-secondary text-xs",children:"SB"})]}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),c.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),c.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),c.jsx(be,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:c.jsxs(kt,{to:"/system",children:["All system details",c.jsx(xe,{icon:mh,size:14})]})})]})]}),c.jsx(We,{className:"border-border bg-card",children:c.jsxs(qe,{className:"flex items-center gap-3 p-4",children:[c.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:c.jsx(xe,{icon:Xa,size:18})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsxs("p",{className:"text-sm font-medium",children:["v",e.bot.version]}),c.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",e.hosting.cpu_load]})]})]})})]})}const h5={todo:"Needs setup",progress:"In progress",done:"Active"};function Jp(e,n,a="Configure module"){const o=n==null?void 0:n[e];return o||{status:"todo",subtitle:a}}function KP(){return c.jsxs("div",{className:"flex gap-6",children:[c.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-44 rounded-2xl"}),c.jsx(Fe,{className:"h-44 rounded-2xl"})]}),c.jsx(Fe,{className:"h-8 w-48"}),c.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((e,n)=>c.jsx(Fe,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),c.jsx(Fe,{className:"h-8 w-56"}),c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((e,n)=>c.jsx(Fe,{className:"h-20 rounded-2xl"},n))})]}),c.jsx(Fe,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function XP(){const{stats:e,loading:n,error:a}=Ou(),[o,l]=f.useState("all"),i=f.useMemo(()=>{if(!e)return 0;const y=e.tickets.total||0;return y===0?100:Math.round(e.tickets.closed/y*100)},[e]),d=f.useMemo(()=>o==="open"||o==="closed"?ls.filter(y=>y.category==="tickets"):o==="all"?ls:ls.filter(y=>y.category===o),[o]);if(n)return c.jsx(KP,{});if(a||!e)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:a||"No stats available"})});const m=e.tickets.open,h=e.tickets.closed,p=e.tickets.total;return c.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[c.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(We,{className:"overflow-hidden border-border bg-card",children:c.jsxs(qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",c.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),c.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),c.jsx(be,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:c.jsx(kt,{to:"/transcripts",children:"Review"})})]}),c.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[c.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),c.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),c.jsx(We,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:c.jsxs(qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),c.jsxs("ul",{className:"space-y-1.5 text-sm",children:[c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[p," total"]})]}),c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[h," closed"]})]}),c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),c.jsx(FP,{percent:i,size:120})]})})]}),c.jsxs("section",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),c.jsx(Yj,{value:o,onValueChange:y=>l(y),children:c.jsxs(fg,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[c.jsx(Ka,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),c.jsx(Ka,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),c.jsx(Ka,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),G_.filter(y=>y.id!=="all").map(y=>c.jsx(Ka,{value:y.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:y.label},y.id))]})})]}),c.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:_u,href:"/transcripts",status:"todo",meta:"View transcripts"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${h} resolved`,icon:ku,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(y=>{const v=Jp(y.id,e.modules,y.description);return{id:y.id,title:y.title,subtitle:v.subtitle,icon:y.icon,href:y.href,status:v.status,meta:v.status==="done"?"View settings":"Configure"}})).map(y=>c.jsx(WP,{title:y.title,subtitle:y.subtitle,icon:y.icon,href:y.href,status:y.status,meta:y.meta},y.id))})]}),c.jsxs("section",{className:"space-y-4",children:[c.jsxs("div",{className:"flex items-center justify-between",children:[c.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),c.jsx(kt,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ls.slice(0,4).map(y=>{const v=Jp(y.id,e.modules);return c.jsx(GP,{title:y.title,icon:y.icon,href:y.href,badge:h5[v.status],status:v.status},y.id)})})]})]}),c.jsx(qP,{stats:e})]})}function ZP(){const{permissions:e}=Ft();return Ln(e,"overview")?c.jsx(XP,{}):c.jsx(Mr,{to:Sh(e),replace:!0})}function as({permission:e,children:n}){const{loading:a,isAuthenticated:o,permissions:l}=Ft();return a?c.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Ln(l,e)?c.jsx(c.Fragment,{children:n}):c.jsx(Mr,{to:Sh(l),replace:!0}):c.jsx(Mr,{to:"/login",replace:!0})}const Sg="supportbot-dashboard-accent",$l="#45b46c",QP=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function JP(e){const n=lr(e,$l),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,l=parseInt(n.slice(5,7),16)/255,i=Math.max(a,o,l),d=Math.min(a,o,l),m=(i+d)/2;let h=0,p=0;if(i!==d){const y=i-d;switch(p=m>.5?y/(2-i-d):y/(i+d),i){case a:h=((o-l)/y+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(e)})}function aB({canEdit:e}){const{branding:n,setBrandingLocal:a}=Mu(),o=f.useRef(null),[l,i]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[h,p]=f.useState(!1),[y,v]=f.useState(!1),[x,S]=f.useState("");f.useEffect(()=>{i(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const j=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function C(){if(e){p(!0),S("");try{const R=await ke.updateBranding({title:l,pageTitle:d});R.data&&a(R.data),S(R.message||"Branding saved.")}catch(R){S(R instanceof Error?R.message:"Save failed")}finally{p(!1)}}}async function N(R){if(!(!e||!R)){v(!0),S("");try{const L=await rB(R),z=await ke.uploadBrandingFavicon(L);z.data&&a(z.data),S(z.message||"Favicon uploaded.")}catch(L){S(L instanceof Error?L.message:"Upload failed")}finally{v(!1),o.current&&(o.current.value="")}}}async function E(){if(e){v(!0),S("");try{const R=await ke.removeBrandingFavicon();R.data&&a(R.data),S(R.message||"Favicon removed.")}catch(R){S(R instanceof Error?R.message:"Remove failed")}finally{v(!1)}}}async function k(){if(e){p(!0),S("");try{const R=await ke.resetBranding();R.data&&a(R.data),S(R.message||"Reset to defaults.")}catch(R){S(R instanceof Error?R.message:"Reset failed")}finally{p(!1)}}}const A=l.trim()!==n.title||d.trim()!==n.pageTitle;return c.jsxs("div",{className:"space-y-4 border-t border-border pt-4",children:[c.jsxs("div",{children:[c.jsx("p",{className:"text-sm font-medium",children:"Branding"}),c.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title, browser tab title, and favicon — saved on the server for everyone using this dashboard."})]}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"brand-title",children:"Sidebar title"}),c.jsx(rt,{id:"brand-title",value:l,disabled:!e,maxLength:64,onChange:R=>i(R.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"brand-page-title",children:"Browser tab title"}),c.jsx(rt,{id:"brand-page-title",value:d,disabled:!e,maxLength:80,onChange:R=>m(R.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Favicon"}),c.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."}),c.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[c.jsx("div",{className:"flex size-14 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:j?c.jsx("img",{src:j,alt:"Favicon preview",className:"size-full object-contain p-1"}):c.jsx(xe,{icon:j4,size:22,className:"text-muted-foreground"})}),c.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!e||y,onChange:R=>{var L;return void N(((L=R.target.files)==null?void 0:L[0])??null)}}),e?c.jsxs(c.Fragment,{children:[c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:y,onClick:()=>{var R;return(R=o.current)==null?void 0:R.click()},children:y?"Uploading…":"Upload favicon"}),n.hasFavicon?c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:y,onClick:()=>void E(),children:"Remove"}):null]}):c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"})]})]}),e?c.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.jsx(be,{type:"button",size:"sm",disabled:h||!A,onClick:()=>void C(),children:h?"Saving…":"Save titles"}),c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:h||y,onClick:()=>void k(),children:"Reset branding"})]}):null,x?c.jsx("p",{className:"text-xs text-muted-foreground",children:x}):null]})}function oB(){const{hasPermission:e}=Ft(),n=e("settings.update"),[a,o]=f.useState(null),[l,i]=f.useState(!0),[d,m]=f.useState(!1),[h,p]=f.useState(""),[y,v]=f.useState(""),[x,S]=f.useState(()=>v5()??$l),[j,C]=f.useState(""),N=f.useCallback(async()=>{i(!0),p("");try{const k=await ke.checkForUpdates();k.data&&o(k.data)}catch(k){p(k instanceof Error?k.message:"Could not check for updates")}finally{i(!1)}},[]);f.useEffect(()=>{N()},[N]);async function E(){if(a!=null&&a.updateAvailable){m(!0),p(""),v("");try{const k=await ke.runUpdate(a.latest);v(k.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await N()}catch(k){p(k instanceof Error?k.message:"Update failed")}finally{m(!1)}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),c.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Dashboard appearance"}),c.jsx(Nt,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),c.jsxs(qe,{className:"space-y-4",children:[c.jsx(aB,{canEdit:n}),c.jsxs("div",{className:"border-t border-border pt-4",children:[c.jsx("p",{className:"mb-3 text-sm font-medium",children:"Accent colour"}),c.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),c.jsxs("div",{className:"flex flex-wrap items-end gap-4",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"accent-colour",children:"Accent colour"}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx(cg,{value:x,onChange:k=>{S(k),Yx(k),C("Accent updated.")}}),c.jsx(rt,{id:"accent-colour",value:x,onChange:k=>S(k.target.value),onBlur:()=>{const k=lr(x,$l);S(k),Yx(k),C("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]})]}),c.jsx(be,{type:"button",variant:"outline",onClick:()=>{tB(),S($l),C("Reset to default purple.")},children:"Reset to default"})]}),c.jsxs("div",{className:"flex flex-wrap gap-2 text-sm",children:[c.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),c.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),c.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),j?c.jsx("p",{className:"text-xs text-muted-foreground",children:j}):null]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Software updates"}),c.jsxs(Nt,{children:["Checks"," ",c.jsx("a",{href:"https://github.com/C-h-a-r/SupportBot-Dashboard",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"SupportBot-Dashboard"})," ","on the release branch."]})]}),c.jsxs(qe,{className:"space-y-4",children:[l?c.jsx(Fe,{className:"h-24 w-full"}):a?c.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[c.jsxs("div",{className:"flex flex-wrap gap-x-6 gap-y-2 text-sm",children:[c.jsxs("p",{children:[c.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),c.jsxs("span",{className:"font-mono font-medium",children:["v",a.current]})]}),c.jsxs("p",{children:[c.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),c.jsxs("span",{className:"font-mono font-medium",children:["v",a.latest]})]})]}),a.updateAvailable?c.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads bot files while keeping your Configs and Data."}):c.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."})]}):null,h?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:h})}):null,y?c.jsx(Ue,{children:c.jsx(He,{children:y})}):null,c.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.jsxs(be,{type:"button",variant:"outline",onClick:N,disabled:l||d,children:[c.jsx(xe,{icon:Jl,size:16,className:"mr-2"}),"Check again"]}),a!=null&&a.updateAvailable&&n?c.jsxs(be,{type:"button",onClick:E,disabled:d,children:[d?c.jsx(xe,{icon:w0,size:16,className:"mr-2 animate-spin"}):c.jsx(xe,{icon:Tu,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,a!=null&&a.updateAvailable&&!n?c.jsx("p",{className:"text-xs text-muted-foreground",children:"You can check for updates but cannot install them with your role."}):null]})]})]})]})}function pt({label:e,value:n,mono:a=!1}){return c.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("dt",{className:"text-sm text-muted-foreground",children:e}),c.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const sB={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function lB(e){return e==="ok"?"text-emerald-500":e==="offline"?"text-destructive":"text-amber-500"}function iB(){var S;const{stats:e,loading:n,error:a,refresh:o}=Ou(),[l,i]=f.useState(null),[d,m]=f.useState(null),[h,p]=f.useState(!1),y=f.useCallback(async()=>{const[j,C]=await Promise.all([ke.getGuildStatus().catch(()=>null),ke.health().catch(()=>null)]);j!=null&&j.data&&i(j.data),C!=null&&C.success&&m({dashboard:C.dashboard,botReady:C.botReady,oauthEnabled:C.oauthEnabled,setupComplete:C.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function v(){p(!0);try{await Promise.all([o(),y()])}finally{p(!1)}}if(n&&!e)return c.jsxs("div",{className:"space-y-6",children:[c.jsx(Fe,{className:"h-10 w-64"}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-56 rounded-2xl"}),c.jsx(Fe,{className:"h-56 rounded-2xl"})]})]});if(a||!e)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:a||"Could not load system details."})});const x=e.bot.ping<200;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(be,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:c.jsxs(kt,{to:"/",children:[c.jsx(xe,{icon:b0,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),c.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),c.jsxs(be,{type:"button",variant:"outline",disabled:h,onClick:()=>void v(),children:[c.jsx(xe,{icon:Jl,size:16,className:"mr-2"}),h?"Refreshing…":"Refresh now"]})]}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Discord bot"}),c.jsx(Nt,{children:"Connection and identity"})]}),c.jsxs(qe,{children:[c.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[c.jsxs(gs,{className:"size-12",children:[c.jsx(vs,{src:e.bot.avatar,alt:e.bot.username}),c.jsx(bs,{children:"SB"})]}),c.jsxs("div",{children:[c.jsx("p",{className:"font-semibold",children:e.bot.username}),c.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:e.bot.id})]})]}),c.jsxs("dl",{children:[c.jsx(pt,{label:"Version",value:`v${e.bot.version}`,mono:!0}),c.jsx(pt,{label:"Gateway latency",value:c.jsxs("span",{className:x?"text-emerald-500":"text-amber-500",children:[e.bot.ping," ms"]})}),c.jsx(pt,{label:"Process uptime",value:j0(e.bot.uptime)}),c.jsx(pt,{label:"Connected servers",value:e.servers.toLocaleString()}),c.jsx(pt,{label:"Members tracked",value:e.users.toLocaleString()}),e.bot.inviteUrl?c.jsx(pt,{label:"Invite link",value:c.jsx("a",{href:e.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Host machine"}),c.jsx(Nt,{children:"Server resources running this instance"})]}),c.jsx(qe,{children:c.jsxs("dl",{children:[c.jsx(pt,{label:"Memory used",value:`${e.hosting.ram_used} / ${e.hosting.ram_total}`}),c.jsx(pt,{label:"Memory usage",value:c.jsxs("span",{className:e.hosting.ram_percent>85?"text-amber-500":"text-foreground",children:[e.hosting.ram_percent,"%"]})}),c.jsx(pt,{label:"CPU load (1 min avg)",value:e.hosting.cpu_load,mono:!0}),c.jsx(pt,{label:"Host uptime",value:e.hosting.uptime})]})})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Tickets"}),c.jsx(Nt,{children:"Database snapshot"})]}),c.jsx(qe,{children:c.jsxs("dl",{children:[c.jsx(pt,{label:"Total tickets",value:e.tickets.total}),c.jsx(pt,{label:"Open",value:c.jsx("span",{className:"text-primary",children:e.tickets.open})}),c.jsx(pt,{label:"Closed",value:e.tickets.closed}),c.jsx(pt,{label:"Transcripts",value:c.jsx(kt,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Guild health"}),c.jsx(Nt,{children:"Configured server and membership"})]}),c.jsx(qe,{children:l?c.jsxs("dl",{children:[c.jsx(pt,{label:"Status",value:c.jsx("span",{className:lB(l.status),children:sB[l.status]})}),c.jsx(pt,{label:"Configured guild ID",value:l.configuredGuildId||"Not set",mono:!0}),l.configuredGuild?c.jsx(pt,{label:"Configured server",value:`${l.configuredGuild.name} (${((S=l.configuredGuild.memberCount)==null?void 0:S.toLocaleString())??"?"} members)`}):null,l.message?c.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:l.message}):null,l.extraGuilds.length>0?c.jsxs("div",{className:"mt-3 space-y-2",children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),c.jsx("ul",{className:"space-y-1 text-sm",children:l.extraGuilds.map(j=>c.jsxs("li",{className:"font-mono text-xs",children:[j.name," · ",j.id]},j.id))})]}):null]}):c.jsx(Fe,{className:"h-24 w-full"})})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Dashboard services"}),c.jsx(Nt,{children:"API and authentication"})]}),c.jsx(qe,{children:d?c.jsxs("dl",{className:"max-w-xl",children:[c.jsx(pt,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),c.jsx(pt,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),c.jsx(pt,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),c.jsx(pt,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),c.jsx(pt,{label:"Software updates",value:c.jsx(kt,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),c.jsx(pt,{label:"Logs",value:c.jsx(kt,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):c.jsx(Fe,{className:"h-32 w-full max-w-xl"})})]}),e.modules?c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Module setup status"}),c.jsx(Nt,{children:"Which features are configured and active"})]}),c.jsx(qe,{children:c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ls.map(j=>{const C=Jp(j.id,e.modules);return c.jsxs(kt,{to:j.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[c.jsxs("div",{className:"min-w-0",children:[c.jsx("p",{className:"text-sm font-medium",children:j.title}),c.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:C.subtitle})]}),c.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:h5[C.status]})]},j.id)})})})]}):null]})}function cB(e){if(!e)return"—";const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const uB=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],dB=["Output","Warn","Error"],fB={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},mB={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},Wx=2e3,pB=2e3;function eh(e,n){return`${e.type}-${e.timestamp??"na"}-${n}-${e.message.slice(0,32)}`}function hB(e,n,a){const o=a?[]:e,l=new Set(o.map((m,h)=>eh(m,h))),i=[];for(let m=0;mWx?d.slice(d.length-Wx):d}function gB(){const[e,n]=f.useState([]),[a,o]=f.useState(!0),[l,i]=f.useState(""),[d,m]=f.useState(!1),[h,p]=f.useState(!0),[y,v]=f.useState("all"),[x,S]=f.useState(""),[j,C]=f.useState(!0),[N,E]=f.useState(""),k=f.useRef(null),A=f.useRef(null),R=f.useRef(d);R.current=d;const L=f.useMemo(()=>y==="all"?dB:[y],[y]),z=f.useCallback(async q=>{var fe,de;const Z=await ke.getLogs({types:L,cursor:q?void 0:k.current??void 0,tail:q?500:0}),Q=((fe=Z.data)==null?void 0:fe.entries)??[];return k.current=((de=Z.data)==null?void 0:de.cursor)??{},n(ce=>hB(ce,Q,q)),Q.length},[L]),B=f.useCallback(async()=>{var q;o(!0),i(""),k.current=null;try{const fe=(((q=(await ke.getLogsMeta()).data)==null?void 0:q.files)??[]).filter(de=>de.file).map(de=>`${de.type}: ${de.file}`).join(" · ");E(fe||"No log files yet — output appears when the bot runs."),await z(!0),C(!0)}catch(Z){i(Z instanceof Error?Z.message:"Failed to load logs"),C(!1)}finally{o(!1)}},[z]);f.useEffect(()=>{B()},[B]),f.useEffect(()=>{if(d||a)return;const q=window.setInterval(async()=>{if(!R.current)try{await z(!1),C(!0),i("")}catch(Z){C(!1),i(Z instanceof Error?Z.message:"Live update failed")}},pB);return()=>window.clearInterval(q)},[d,a,z]),f.useEffect(()=>{if(!h||d)return;const q=A.current;q&&(q.scrollTop=q.scrollHeight)},[e,h,d]);const U=f.useMemo(()=>e.filter(q=>{var Q;if(y!=="all"&&q.type!==y)return!1;if(!x.trim())return!0;const Z=x.toLowerCase();return q.message.toLowerCase().includes(Z)||(((Q=q.timestamp)==null?void 0:Q.toLowerCase().includes(Z))??!1)}),[e,y,x]);return c.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),c.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),N?c.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:N}):null]}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("span",{className:ie("size-2 rounded-full",j&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),c.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":j?"Live":"Disconnected"})]})]}),l?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:l})}):null,c.jsxs(We,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[c.jsxs(at,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[c.jsxs(ot,{className:"text-base font-medium",children:["Console",a?null:c.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[U.length," line",U.length===1?"":"s"]})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[c.jsx(Dn,{id:"auto-scroll",checked:h,onCheckedChange:p}),c.jsx(Ze,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",onClick:()=>m(q=>!q),children:[c.jsx(xe,{icon:d?A4:R4,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),B()},disabled:a,children:[c.jsx(xe,{icon:Jl,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[c.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:uB.map(q=>c.jsx(be,{type:"button",variant:y===q.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>v(q.id),children:q.label},q.id))}),c.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[c.jsx(xe,{icon:Au,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Filter lines…",value:x,onChange:q=>S(q.target.value),className:"h-9 pl-9"})]})]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-0",children:a?c.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((q,Z)=>c.jsx(Fe,{className:"h-4 w-full"},Z))}):c.jsx("div",{ref:A,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:U.length===0?c.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):c.jsx("ul",{className:"space-y-1",children:U.map((q,Z)=>c.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[c.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:cB(q.timestamp)}),c.jsx("span",{className:ie("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",mB[q.type]),children:q.type}),c.jsx("span",{className:ie("min-w-0 flex-1 whitespace-pre-wrap break-words",fB[q.type]),children:q.message||" "})]},eh(q,Z)))})})})]})]})}const vB=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],bB=450;function yB(e,n){return n&&e!=="viewer"}function xB(){const{user:e,hasPermission:n}=Ft(),a=!yB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(!1),A=f.useRef(null),R=f.useCallback(async()=>{var q;h(!0),x(""),j("");try{const Q=(await ke.getTranscriptTemplate()).data??null;if(Q){const fe={...Q,Typography:{...Q.Typography,FontFamily:Mj((q=Q.Typography)==null?void 0:q.FontFamily)}};l(fe),d(structuredClone(fe))}}catch(Z){x(Z instanceof Error?Z.message:"Failed to load template")}finally{h(!1)}},[]);f.useEffect(()=>{R()},[R]);const L=f.useCallback(async q=>{k(!0);try{const Z=await ke.previewTranscriptTemplate(q);N(Z)}catch{N("Preview failed to load.
")}finally{k(!1)}},[]);f.useEffect(()=>{if(o)return A.current&&clearTimeout(A.current),A.current=setTimeout(()=>{L(o)},bB),()=>{A.current&&clearTimeout(A.current)}},[o,L]);function z(q,Z){l(Q=>Q&&Xl(Q,q,Z))}async function B(){if(!(a||!o)){y(!0),x(""),j("");try{const q=await ke.saveTranscriptTemplate(o);j(q.message||"Saved."),d(structuredClone(o))}catch(q){x(q instanceof Error?q.message:"Save failed")}finally{y(!1)}}}const U=o&&i&&JSON.stringify(o)!==JSON.stringify(i);return m?c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-96 rounded-xl"}),c.jsx(Fe,{className:"h-96 rounded-xl"})]}):o?c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[c.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),c.jsxs("div",{className:"flex items-center gap-2",children:[U?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:B,disabled:p||!U,children:[c.jsx(xe,{icon:Ru,size:16,className:"mr-1.5"}),p?"Saving…":"Save appearance"]})]})]}),v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,c.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[c.jsx(SB,{data:o,readOnly:a,onPatch:z}),c.jsxs(We,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[c.jsxs(at,{className:"pb-2",children:[c.jsx(ot,{className:"text-base",children:"Live preview"}),c.jsxs(Nt,{children:["Sample ticket with your current settings",E?" · updating…":""]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-4 pt-0",children:c.jsx("iframe",{title:"Transcript template preview",srcDoc:C,className:ie("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",E&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load template"})})}function SB({data:e,readOnly:n,onPatch:a}){return c.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:vB.map(o=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:o.title}),o.description?c.jsx(Nt,{children:o.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(l=>c.jsx("div",{className:l.type==="textarea"?"sm:col-span-2":"",children:c.jsx(yg,{field:l,value:ao(e,l.path),readOnly:n,onChange:i=>a(l.path,i)})},l.path))})]},o.title))})}function wB(e,n){return n&&e!=="viewer"}function CB(){const{user:e,hasPermission:n}=Ft(),a=!wB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[i,d]=f.useState(!0),[m,h]=f.useState(!1),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{var k,A,R;d(!0),x(""),j("");try{const z=(await ke.getTranscriptSettings()).data;z&&l({autoDelete:{enabled:!!((k=z.autoDelete)!=null&&k.enabled),afterDays:((A=z.autoDelete)==null?void 0:A.afterDays)??30},publicAccess:{enabled:!!((R=z.publicAccess)!=null&&R.enabled)}})}catch(L){x(L instanceof Error?L.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(){if(!(!o||a)){h(!0),x(""),j("");try{const k=await ke.updateTranscriptSettings(o);k.data&&l({autoDelete:{enabled:k.data.autoDelete.enabled,afterDays:k.data.autoDelete.afterDays},publicAccess:{enabled:k.data.publicAccess.enabled}}),j(k.message??"Settings saved.")}catch(k){x(k instanceof Error?k.message:"Failed to save settings")}finally{h(!1)}}}async function E(){var k,A;if(!a){y(!0),x(""),j("");try{const R=await ke.purgeTranscripts();j(R.message??((k=R.data)!=null&&k.skipped?"Auto-delete is disabled.":`Removed ${((A=R.data)==null?void 0:A.deleted)??0} transcript(s).`))}catch(R){x(R instanceof Error?R.message:"Purge failed")}finally{y(!1)}}}return i?c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-40 w-full rounded-xl"}),c.jsx(Fe,{className:"h-40 w-full rounded-xl"})]}):o?c.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?c.jsx(Ue,{children:c.jsx(He,{children:"You have view-only access. An admin or editor can change these settings."})}):null,v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,S?c.jsx(Ue,{children:c.jsx(He,{children:S})}):null,c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Auto-delete"}),c.jsx(Nt,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),c.jsxs(qe,{className:"space-y-4",children:[c.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[c.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:k=>l(A=>A&&{...A,autoDelete:{...A.autoDelete,enabled:k.target.checked}})}),c.jsxs("span",{className:"text-sm",children:[c.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),c.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),c.jsx(rt,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:k=>l(A=>A&&{...A,autoDelete:{...A.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(k.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",disabled:a||p,onClick:()=>void E(),children:[c.jsx(xe,{icon:Jl,size:16,className:ie(p&&"animate-spin")}),"Run cleanup now"]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Public transcripts"}),c.jsxs(Nt,{children:["When enabled, anyone with the link can view a transcript at"," ",c.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),c.jsx(qe,{children:c.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[c.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:k=>l(A=>A&&{...A,publicAccess:{enabled:k.target.checked}})}),c.jsxs("span",{className:"text-sm",children:[c.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),c.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:c.jsxs(be,{type:"button",disabled:m,onClick:()=>void N(),children:[c.jsx(xe,{icon:Ru,size:16}),m?"Saving…":"Save settings"]})]}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:"Could not load transcript settings."})})}function jB(e,n){return n&&e!=="viewer"}function qx(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Kx(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function EB(){var H;const{user:e,hasPermission:n}=Ft(),a=jB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState("browse"),[i,d]=f.useState([]),[m,h]=f.useState(null),[p,y]=f.useState(!0),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(0),[A,R]=f.useState(!1),[L,z]=f.useState(!1),[B,U]=f.useState(!1),[q,Z]=f.useState(!1),Q=f.useCallback(async()=>{y(!0),j("");try{const V=(await ke.listTranscripts()).data??[];d(V),h(ne=>{var J;return ne&&V.some(me=>me.id===ne)?ne:((J=V[0])==null?void 0:J.id)??null})}catch(I){j(I instanceof Error?I.message:"Failed to load transcripts")}finally{y(!1)}},[]);f.useEffect(()=>{Q()},[Q]),f.useEffect(()=>{o==="browse"&&ke.getTranscriptSettings().then(I=>{var V,ne;U(!!((ne=(V=I.data)==null?void 0:V.publicAccess)!=null&&ne.enabled))}).catch(()=>U(!1))},[o]);const fe=f.useMemo(()=>{if(!C.trim())return i;const I=C.toLowerCase();return i.filter(V=>V.id.includes(I)||V.filename.toLowerCase().includes(I)||V.ticketName&&V.ticketName.toLowerCase().includes(I))},[i,C]),de=f.useMemo(()=>i.find(I=>I.id===m)??null,[i,m]),ce=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,he=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,M=m&&B?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function K(I){x(""),h(I),k(V=>V+1)}function re(){ce&&window.open(ce,"_blank","noopener,noreferrer")}function oe(){M&&window.open(M,"_blank","noopener,noreferrer")}async function ee(){if(M)try{await navigator.clipboard.writeText(M),Z(!0),window.setTimeout(()=>Z(!1),2e3)}catch{x("Could not copy link to clipboard.")}}async function _(){var V;if(!m||!a)return;const I=((V=de==null?void 0:de.ticketName)==null?void 0:V.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${I}? This cannot be undone.`)){z(!0),x("");try{await ke.deleteTranscript(m),await Q()}catch(ne){x(ne instanceof Error?ne.message:"Failed to delete transcript")}finally{z(!1)}}}async function O(){if(!(!he||!de)){R(!0),x("");try{const I=await fetch(he,{credentials:"include"});if(!I.ok){const me=await I.json().catch(()=>({}));throw new Error(me.error||`Download failed (${I.status})`)}const V=await I.blob(),ne=URL.createObjectURL(V),J=document.createElement("a");J.href=ne,J.download=de.filename,J.click(),URL.revokeObjectURL(ne)}catch(I){x(I instanceof Error?I.message:"Failed to download transcript")}finally{R(!1)}}}return c.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),c.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[c.jsx(be,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("browse"),children:"Library"}),c.jsx(be,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("appearance"),children:"Appearance"}),c.jsx(be,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("settings"),children:"Settings"})]}),o==="browse"?c.jsxs(be,{variant:"outline",size:"sm",onClick:()=>Q(),disabled:p,children:[c.jsx(xe,{icon:Jl,size:16,className:ie(p&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?c.jsx(xB,{}):o==="settings"?c.jsx(CB,{}):c.jsxs(c.Fragment,{children:[S?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:S})}):null,c.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[c.jsxs(We,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[c.jsxs(at,{className:"space-y-3 pb-3",children:[c.jsxs(ot,{className:"text-base font-medium",children:["Saved transcripts",!p&&i.length>0?c.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",i.length,")"]}):null]}),c.jsxs("div",{className:"relative",children:[c.jsx(xe,{icon:Au,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Search by ticket name or channel ID…",value:C,onChange:I=>N(I.target.value),className:"pl-9"})]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-0 pb-4",children:c.jsx(hi,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:p?c.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((I,V)=>c.jsx(Fe,{className:"h-16 w-full rounded-lg"},V))}):fe.length===0?c.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[c.jsx(xe,{icon:Ul,size:32,className:"opacity-40"}),c.jsx("p",{children:i.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):c.jsx("ul",{className:"space-y-1.5",children:fe.map(I=>{var J;const V=I.id===m,ne=((J=I.ticketName)==null?void 0:J.trim())||`Channel ${I.id}`;return c.jsx("li",{children:c.jsxs("button",{type:"button",onClick:()=>K(I.id),className:ie("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",V?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[c.jsx("p",{className:"truncate text-sm font-medium",children:ne}),c.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[Kx(I.createdAt),I.size!=null?` · ${qx(I.size)}`:""]})]})},I.id)})})})})]}),c.jsxs(We,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[c.jsxs("div",{className:"min-w-0",children:[c.jsx(ot,{className:"truncate text-base font-medium",children:de?((H=de.ticketName)==null?void 0:H.trim())||`Channel ${de.id}`:"Preview"}),de?c.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[Kx(de.createdAt),de.size!=null?` · ${qx(de.size)}`:""]}):null]}),c.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[M?c.jsxs(c.Fragment,{children:[c.jsxs(be,{variant:"outline",size:"sm",onClick:()=>void ee(),children:[c.jsx(xe,{icon:x0,size:16}),q?"Copied":"Copy link"]}),c.jsxs(be,{variant:"outline",size:"sm",onClick:oe,children:[c.jsx(xe,{icon:gh,size:16}),"Public page"]})]}):null,c.jsxs(be,{variant:"outline",size:"sm",disabled:!ce,onClick:re,children:[c.jsx(xe,{icon:S4,size:16}),"Open tab"]}),c.jsxs(be,{variant:"outline",size:"sm",disabled:!he||A,onClick:()=>void O(),children:[c.jsx(xe,{icon:Tu,size:16}),A?"Saving…":"Download"]}),a?c.jsxs(be,{variant:"outline",size:"sm",disabled:!m||L,className:"text-destructive hover:text-destructive",onClick:()=>void _(),children:[c.jsx(xe,{icon:hh,size:16}),L?"Deleting…":"Delete"]}):null]})]}),c.jsxs(qe,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,de&&ce?c.jsx("iframe",{title:`Transcript ${de.id}`,src:ce,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},E):c.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[c.jsx(xe,{icon:Ul,size:40,className:"opacity-30"}),c.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}const NB=["admin","moderator","editor","viewer","custom"];function kB(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:Hl("viewer"),yamlOwner:!1}}function TB({permissions:e,onChange:n,disabled:a}){const o=l=>n({...e,...l});return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[[["Dashboard overview","overview"],["Logs","logs"],["Transcripts","transcripts"]].map(([l,i])=>c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:l}),c.jsx(Dn,{checked:e[i],disabled:a,onCheckedChange:d=>o({[i]:d})})]},i)),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Settings — view"}),c.jsx(Dn,{checked:e.settings.view,disabled:a,onCheckedChange:l=>o({settings:{...e.settings,view:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Settings — install updates"}),c.jsx(Dn,{checked:e.settings.update,disabled:a,onCheckedChange:l=>o({settings:{...e.settings,update:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Users — view"}),c.jsx(Dn,{checked:e.users.view,disabled:a,onCheckedChange:l=>o({users:{...e.users,view:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Users — manage"}),c.jsx(Dn,{checked:e.users.manage,disabled:a,onCheckedChange:l=>o({users:{...e.users,manage:l}})})]})]}),c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"text-sm font-medium",children:"Configuration files"}),c.jsx("div",{className:"space-y-2",children:xh.map(l=>c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:z4[l]}),c.jsxs("div",{className:"flex items-center gap-4",children:[c.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["View",c.jsx(Dn,{checked:e.configs[l].view,disabled:a,onCheckedChange:i=>n({...e,configs:{...e.configs,[l]:{...e.configs[l],view:i}}})})]}),c.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["Edit",c.jsx(Dn,{checked:e.configs[l].edit,disabled:a,onCheckedChange:i=>n({...e,configs:{...e.configs,[l]:{...e.configs[l],edit:i,view:i?!0:e.configs[l].view}}})})]})]})]},l))})]})]})}function RB(e){return e.permissions.users.manage?"Full + user management":e.permissions.settings.update?"Configs + settings updates":Object.values(e.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function AB(){const{user:e,hasPermission:n}=Ft(),a=n("users.manage"),[o,l]=f.useState([]),[i,d]=f.useState(!0),[m,h]=f.useState(""),[p,y]=f.useState(null),[v,x]=f.useState(!1),S=f.useCallback(async()=>{d(!0),h("");try{const R=await ke.listDashboardUsers();R.data&&l(R.data.users)}catch(R){h(R instanceof Error?R.message:"Failed to load users")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);const j=f.useMemo(()=>[...o].sort((R,L)=>R.yamlOwner!==L.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(L.username||L.id)),[o]);function C(){y(kB())}function N(R){y({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:Hl(R.role),yamlOwner:R.yamlOwner})}function E(R){p&&y({...p,role:R,permissions:Hl(R,p.permissions)})}async function k(){if(!(!p||!a)){x(!0),h("");try{p.mode==="add"?await ke.addDashboardUser({id:p.id.trim(),role:p.role,username:p.username||void 0,globalName:p.globalName||void 0,enabled:p.enabled,permissions:p.role==="custom"?p.permissions:void 0}):await ke.updateDashboardUser(p.id,{role:p.yamlOwner?void 0:p.role,enabled:p.enabled,username:p.username||void 0,globalName:p.globalName||void 0,permissions:p.role==="custom"?p.permissions:void 0}),y(null),await S()}catch(R){h(R instanceof Error?R.message:"Could not save user")}finally{x(!1)}}}async function A(R){if(a&&window.confirm("Remove this user from the dashboard?")){h("");try{await ke.removeDashboardUser(R),await S()}catch(L){h(L instanceof Error?L.message:"Could not remove user")}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),c.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",c.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?c.jsxs(be,{onClick:C,children:[c.jsx(xe,{icon:x4,size:16,className:"mr-2"}),"Add user"]}):null]}),m?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:m})}):null,c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Dashboard access"}),c.jsxs(Nt,{children:[j.length," user",j.length===1?"":"s",a?" — use edit to change permissions":""]})]}),c.jsx(qe,{children:i?c.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading users…"}):c.jsx("div",{className:"divide-y divide-border/60",children:j.map(R=>c.jsxs("div",{className:"flex flex-wrap items-center gap-4 py-4 first:pt-0 last:pb-0",children:[c.jsxs("div",{className:"flex min-w-[200px] flex-1 items-center gap-3",children:[c.jsxs(gs,{className:"size-9",children:[c.jsx(vs,{src:R.avatar,alt:R.username}),c.jsx(bs,{children:(R.username||R.id).slice(0,2).toUpperCase()})]}),c.jsxs("div",{className:"min-w-0",children:[c.jsxs("p",{className:"truncate font-medium",children:[E0(R),R.id===(e==null?void 0:e.id)?" (you)":""]}),c.jsx("p",{className:"truncate text-xs text-muted-foreground",children:R.id})]})]}),c.jsx(Ll,{variant:"secondary",children:M1[R.yamlOwner?"owner":R.role]}),c.jsx("p",{className:"max-w-[200px] text-xs text-muted-foreground",children:RB(R)}),R.enabled?c.jsx(Ll,{className:"bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15",children:"Active"}):c.jsx(Ll,{variant:"outline",children:"Disabled"}),a?c.jsxs("div",{className:"ml-auto flex gap-1",children:[c.jsx(be,{variant:"ghost",size:"icon",onClick:()=>N(R),"aria-label":"Edit user",children:c.jsx(xe,{icon:C4,size:16})}),R.yamlOwner?null:c.jsx(be,{variant:"ghost",size:"icon",className:"text-destructive",onClick:()=>A(R.id),"aria-label":"Remove user",children:c.jsx(xe,{icon:hh,size:16})})]}):null]},R.id))})})]}),c.jsx($w,{open:!!p,onOpenChange:R=>!R&&y(null),children:c.jsxs(Zh,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[c.jsxs(Qh,{children:[c.jsx(Jh,{children:(p==null?void 0:p.mode)==="add"?"Add dashboard user":"Edit user"}),c.jsx(eg,{children:p!=null&&p.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":L4[(p==null?void 0:p.role)??"viewer"]})]}),p?c.jsxs("div",{className:"space-y-4",children:[p.mode==="add"?c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"discord-id",children:"Discord user ID"}),c.jsx(rt,{id:"discord-id",value:p.id,onChange:R=>y({...p,id:R.target.value}),placeholder:"829112572816130058"})]}):null,c.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Display name (optional)"}),c.jsx(rt,{value:p.globalName,onChange:R=>y({...p,globalName:R.target.value})})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Username (optional)"}),c.jsx(rt,{value:p.username,onChange:R=>y({...p,username:R.target.value})})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Role"}),c.jsxs(cd,{value:p.role,disabled:p.yamlOwner,onValueChange:R=>E(R),children:[c.jsx(gi,{children:c.jsx(ud,{})}),c.jsx(vi,{children:p.yamlOwner?c.jsx(no,{value:"owner",children:"Owner"}):NB.map(R=>c.jsx(no,{value:R,children:M1[R]},R))})]})]}),c.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Account enabled"}),c.jsx(Dn,{checked:p.enabled,disabled:p.yamlOwner,onCheckedChange:R=>y({...p,enabled:R})})]}),p.role==="custom"&&!p.yamlOwner?c.jsx(TB,{permissions:p.permissions,onChange:R=>y({...p,permissions:R})}):null]}):null,c.jsxs(Uw,{children:[c.jsx(be,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),c.jsx(be,{disabled:v||!a||(p==null?void 0:p.mode)==="add"&&!/^\d{17,20}$/.test(p.id.trim()),onClick:()=>void k(),children:v?"Saving…":"Save"})]})]})})]})}function _B(){const{hasPermission:e}=Ft(),n=e("settings.update"),a=oo(),[o,l]=f.useState([]),[i,d]=f.useState(""),[m,h]=f.useState(!0),[p,y]=f.useState(""),[v,x]=f.useState(""),[S,j]=f.useState(null),C=f.useCallback(async()=>{h(!0),y("");try{const E=await ke.getAddonsCatalog();E.data&&(l(E.data.addons),d(E.data.repository))}catch(E){y(E instanceof Error?E.message:"Failed to load addons")}finally{h(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(E){if(n){j(E.id),x(""),y("");try{const k=await ke.installAddon(E.id);x(k.message||`${E.name} installed.`),await C();const A=E.configFiles[0];A&&a(`/configs?file=${is(A)}`)}catch(k){y(k instanceof Error?k.message:"Install failed")}finally{j(null)}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),c.jsxs("p",{className:"text-muted-foreground",children:["Install community addons from"," ",c.jsx("a",{href:i||"https://github.com/Emerald-Services/Addons",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Emerald-Services/Addons"}),". Enable addons under"," ",c.jsx(kt,{to:"/configs?file=supportbot",className:"text-primary underline-offset-4 hover:underline",children:"Bot config → General → Addons"}),". Installed addon configs appear in the left sidebar under"," ",c.jsx("strong",{className:"font-medium text-foreground",children:"Addons"}),"."]})]}),c.jsxs(be,{variant:"outline",size:"sm",onClick:C,disabled:m,children:[c.jsx(xe,{icon:w0,size:16,className:ie("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),p?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:p})}):null,v?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:v})}):null,c.jsxs("section",{className:"space-y-4",children:[c.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[c.jsx(Fe,{className:"h-40 rounded-xl"}),c.jsx(Fe,{className:"h-40 rounded-xl"}),c.jsx(Fe,{className:"h-40 rounded-xl"})]}):c.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(E=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-2",children:[c.jsxs("div",{className:"flex items-start justify-between gap-2",children:[c.jsxs(ot,{className:"flex items-center gap-2 text-lg",children:[c.jsx(xe,{icon:bh,size:20,className:"text-primary"}),E.name]}),E.installed?c.jsxs(Ll,{variant:"secondary",className:"shrink-0 gap-1",children:[c.jsx(xe,{icon:O4,size:14}),"Installed"]}):null]}),c.jsx(Nt,{children:E.description})]}),c.jsxs(qe,{className:"space-y-2 text-xs text-muted-foreground",children:[c.jsxs("p",{children:[E.jsFiles.length," command file",E.jsFiles.length===1?"":"s",":"," ",c.jsx("span",{className:"font-mono",children:E.jsFiles.join(", ")})]}),E.configFiles.length>0?c.jsxs("p",{children:["Config:"," ",E.configFiles.map((k,A)=>c.jsxs("span",{children:[A>0?", ":null,c.jsx(kt,{to:`/configs?file=${is(k)}`,className:"font-mono text-primary hover:underline",children:k})]},k))]}):null]}),c.jsxs(p5,{className:"flex flex-wrap gap-2",children:[c.jsx(be,{variant:"outline",size:"sm",asChild:!0,children:c.jsx("a",{href:E.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View on GitHub"})}),E.installed&&E.configFiles[0]?c.jsx(be,{size:"sm",variant:"secondary",asChild:!0,children:c.jsx(kt,{to:`/configs?file=${is(E.configFiles[0])}`,children:"Edit config"})}):null,E.installed?c.jsx(be,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):c.jsxs(be,{size:"sm",disabled:!n||S===E.id,onClick:()=>N(E),children:[c.jsx(xe,{icon:Tu,size:14,className:"mr-1"}),S===E.id?"Installing…":"Install"]})]})]},E.id))})]})]})}function MB({children:e}){const{isAuthenticated:n,loading:a}=Ft();return a?c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?c.jsx(c.Fragment,{children:e}):c.jsx(Mr,{to:"/login",replace:!0})}function OB(){const{complete:e,loading:n}=yC(),a=Sn();return n?c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):e?a.pathname==="/setup"?c.jsx(Mr,{to:"/login",replace:!0}):c.jsxs(A1,{children:[c.jsx(ln,{path:"/login",element:c.jsx(TP,{})}),c.jsxs(ln,{element:c.jsx(MB,{children:c.jsx(XM,{})}),children:[c.jsx(ln,{index:!0,element:c.jsx(ZP,{})}),c.jsx(ln,{path:"system",element:c.jsx(as,{permission:"overview",children:c.jsx(iB,{})})}),c.jsx(ln,{path:"settings",element:c.jsx(as,{permission:"settings.view",children:c.jsx(oB,{})})}),c.jsx(ln,{path:"configs",element:c.jsx(EP,{})}),c.jsx(ln,{path:"logs",element:c.jsx(as,{permission:"logs",children:c.jsx(gB,{})})}),c.jsx(ln,{path:"transcripts",element:c.jsx(as,{permission:"transcripts",children:c.jsx(EB,{})})}),c.jsx(ln,{path:"users",element:c.jsx(as,{permission:"users.view",children:c.jsx(AB,{})})}),c.jsx(ln,{path:"addons",element:c.jsx(as,{permission:"settings.view",children:c.jsx(_B,{})})})]}),c.jsx(ln,{path:"*",element:c.jsx(Mr,{to:"/",replace:!0})})]}):c.jsxs(A1,{children:[c.jsx(ln,{path:"/setup",element:c.jsx(HP,{})}),c.jsx(ln,{path:"*",element:c.jsx(Mr,{to:"/setup",replace:!0})})]})}function DB({...e}){return c.jsx(mP,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...e})}nB();I3.createRoot(document.getElementById("root")).render(c.jsx(f.StrictMode,{children:c.jsx(d4,{children:c.jsx(xw,{children:c.jsx(U4,{children:c.jsx(ZM,{children:c.jsxs(I4,{children:[c.jsx(OB,{}),c.jsx(DB,{})]})})})})})}));
diff --git a/public/dashboard/assets/index-CbwuK0wQ.css b/public/dashboard/assets/index-CbwuK0wQ.css
new file mode 100644
index 0000000..ff075b7
--- /dev/null
+++ b/public/dashboard/assets/index-CbwuK0wQ.css
@@ -0,0 +1 @@
+*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 141 45% 49%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 141 29% 18%;--accent-foreground: 141 52% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 141 45% 49%;--radius: .75rem;--chart-1: 141 45% 49%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 141 45% 49%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 141 26% 14%;--sidebar-accent-foreground: 141 48% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 141 45% 49%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.bottom-1\/4{bottom:25%}.left-0{left:0}.left-1\/2{left:50%}.left-1\/4{left:25%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-1\/4{right:25%}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-14{width:3.5rem;height:3.5rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[300px\]{height:300px}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(400px\,50vh\)\]{height:min(400px,50vh)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,60vh\)\]{min-height:min(520px,60vh)}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[300px\]{width:300px}.w-\[400px\]{width:400px}.w-\[500px\]{width:500px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[8rem\]{max-width:8rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/2{--tw-translate-x: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-100\%\]{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/2{--tw-translate-y: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border{border-color:hsl(var(--border))}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-card{border-color:hsl(var(--card))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/30{border-color:#10b9814d}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-red-500\/50{border-color:#ef444480}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0c0c10\]{--tw-bg-opacity: 1;background-color:rgb(12 12 16 / var(--tw-bg-opacity, 1))}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/20{background-color:hsl(var(--accent) / .2)}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/30{background-color:hsl(var(--card) / .3)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-indigo-500\/10{background-color:#6366f11a}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-red-500\/10{background-color:#ef44441a}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/5{background-color:#ffffff0d}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/5{--tw-gradient-from: rgb(255 255 255 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-white\/20{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-white\/50{--tw-gradient-to: rgb(255 255 255 / .5) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white\/40{color:#fff6}.text-white\/50{color:#ffffff80}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_20px_rgba\(var\(--primary\)\,0\.3\)\]{--tw-shadow: 0 0 20px rgba(var(--primary),.3);--tw-shadow-colored: 0 0 20px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-white\/10{--tw-ring-color: rgb(255 255 255 / .1)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.blur-\[100px\]{--tw-blur: blur(100px);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)}.blur-\[120px\]{--tw-blur: blur(120px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[80px\]{--tw-blur: blur(80px);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)}.drop-shadow-xl{--tw-drop-shadow: drop-shadow(0 20px 13px rgb(0 0 0 / .03)) drop-shadow(0 8px 5px rgb(0 0 0 / .08));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)}.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-2xl{--tw-backdrop-blur: blur(40px);-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)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-\[1\.02\]:hover{--tw-scale-x: 1.02;--tw-scale-y: 1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-\[0_0_30px_rgba\(var\(--primary\)\,0\.5\)\]:hover{--tw-shadow: 0 0 30px rgba(var(--primary),.5);--tw-shadow-colored: 0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-\[100\%\]{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\:shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[220px_1fr\]{grid-template-columns:220px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}
diff --git a/public/dashboard/index.html b/public/dashboard/index.html
new file mode 100644
index 0000000..aca966e
--- /dev/null
+++ b/public/dashboard/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+ SupportBot Dashboard
+
+
+
+
+
+
+
+
+
+
diff --git a/public/dashboard/logo.png b/public/dashboard/logo.png
new file mode 100644
index 0000000..6dc0620
Binary files /dev/null and b/public/dashboard/logo.png differ