diff --git a/rrc_web/backend.py b/rrc_web/backend.py index 1116b9e..5d16330 100644 --- a/rrc_web/backend.py +++ b/rrc_web/backend.py @@ -896,25 +896,17 @@ class BackendService: self.ping_task = self.loop.create_task(self._ping_loop()) async def _on_joined(self, room: str, env: dict) -> None: - """Handle JOINED confirmation from RRC.""" - if room not in self.rooms: - if len(self.rooms) >= self.max_rooms: - logger.error(f"Room limit reached ({self.max_rooms}), cannot join room: {room}") - if self.broadcast: - await self.broadcast( - { - "type": "error", - "error": f"Cannot join room: server room limit reached ({self.max_rooms})", - } - ) - return - self.rooms[room] = {"messages": [], "users": set()} + """Handle JOINED confirmation from RRC. + This handles two scenarios: + 1. Self-join: Multiple hashes (full member list) - we just joined the room + 2. Member-join: Single hash - another user joined the room we're in + """ body = env.get(K_BODY) - users = [] logger.debug(f"JOINED room={room}, body type={type(body)}, body={body}") + # Extract user list from body (could be dict or list) user_list = None if isinstance(body, dict): user_list = body.get(B_JOINED_USERS) @@ -923,7 +915,28 @@ class BackendService: user_list = body logger.debug(f"Body is list directly, user_list={user_list}") - if isinstance(user_list, list): + if not isinstance(user_list, list): + user_list = [] + + # Determine if this is a self-join (multiple users) or member-join (single user) + is_self_join = len(user_list) != 1 + + if is_self_join: + # We're joining the room - create/reset room with full member list + if room not in self.rooms: + if len(self.rooms) >= self.max_rooms: + logger.error(f"Room limit reached ({self.max_rooms}), cannot join room: {room}") + if self.broadcast: + await self.broadcast( + { + "type": "error", + "error": f"Cannot join room: server room limit reached ({self.max_rooms})", + } + ) + return + self.rooms[room] = {"messages": [], "users": set()} + + users = [] for user_hash in user_list: if isinstance(user_hash, (bytes, bytearray)): user_hex = user_hash.hex() @@ -931,44 +944,138 @@ class BackendService: users.append(self._format_user(user_hash)) logger.debug(f"Added user: {self._format_user(user_hash)}") - message = { - "type": "system", - "room": room, - "text": f"Joined room: {room}", - "timestamp": self._get_timestamp(), - } - self.rooms[room]["messages"].append(message) - - if self.broadcast: - await self.broadcast(message) - await self.broadcast( - { - "type": "room_joined", - "room": room, - "users": users, - } - ) - - async def _on_parted(self, room: str, _env: dict) -> None: - """Handle PARTED confirmation from RRC.""" - message = { - "type": "system", - "room": room, - "text": f"Left room: {room}", - "timestamp": self._get_timestamp(), - } - - if room in self.rooms: + message = { + "type": "system", + "room": room, + "text": f"Joined room: {room}", + "timestamp": self._get_timestamp(), + } self.rooms[room]["messages"].append(message) - if self.broadcast: - await self.broadcast(message) - await self.broadcast( - { - "type": "room_parted", + if self.broadcast: + await self.broadcast(message) + await self.broadcast( + { + "type": "room_joined", + "room": room, + "users": users, + } + ) + else: + # Another user joined the room we're already in + if room not in self.rooms: + logger.warning(f"Received JOINED for unknown room: {room}") + return + + user_hash = user_list[0] + if isinstance(user_hash, (bytes, bytearray)): + user_hex = user_hash.hex() + + # Add user to room member list + self.rooms[room]["users"].add(user_hex) + user_formatted = self._format_user(user_hash) + + # Create join notification message + message = { + "type": "join", "room": room, + "user": user_formatted, + "timestamp": self._get_timestamp(), } - ) + self.rooms[room]["messages"].append(message) + + if self.broadcast: + await self.broadcast(message) + # Also send user list update + users = [self._format_user(bytes.fromhex(u)) for u in self.rooms[room]["users"]] + await self.broadcast( + { + "type": "user_list_update", + "room": room, + "users": users, + } + ) + + async def _on_parted(self, room: str, env: dict) -> None: + """Handle PARTED confirmation from RRC. + + This handles two scenarios: + 1. Self-part: Multiple hashes (remaining members) - we left the room + 2. Member-part: Single hash - another user left the room we're in + """ + body = env.get(K_BODY) + + logger.debug(f"PARTED room={room}, body type={type(body)}, body={body}") + + # Extract user list from body (could be dict or list) + user_list = None + if isinstance(body, dict): + user_list = body.get(B_JOINED_USERS) # Reuse same key for remaining members + logger.debug(f"Body is dict, user_list={user_list}") + elif isinstance(body, list): + user_list = body + logger.debug(f"Body is list directly, user_list={user_list}") + + if not isinstance(user_list, list): + user_list = [] + + # Determine if this is a self-part (we left) or member-part (single user left) + is_self_part = len(user_list) != 1 + + if is_self_part: + # We left the room + message = { + "type": "system", + "room": room, + "text": f"Left room: {room}", + "timestamp": self._get_timestamp(), + } + + if room in self.rooms: + self.rooms[room]["messages"].append(message) + + if self.broadcast: + await self.broadcast(message) + await self.broadcast( + { + "type": "room_parted", + "room": room, + } + ) + else: + # Another user left the room we're in + if room not in self.rooms: + logger.warning(f"Received PARTED for unknown room: {room}") + return + + user_hash = user_list[0] + if isinstance(user_hash, (bytes, bytearray)): + user_hex = user_hash.hex() + user_formatted = self._format_user(user_hash) + + # Remove user from room member list + self.rooms[room]["users"].discard(user_hex) + + # Create part notification message + message = { + "type": "part", + "room": room, + "user": user_formatted, + "timestamp": self._get_timestamp(), + } + self.rooms[room]["messages"].append(message) + + if self.broadcast: + await self.broadcast(message) + # Also send user list update + users = [self._format_user(bytes.fromhex(u)) for u in self.rooms[room]["users"]] + await self.broadcast( + { + "type": "user_list_update", + "room": room, + "users": users, + } + ) async def _on_close(self) -> None: """Handle connection close from RRC.""" diff --git a/rrc_web/static-svelte/app.js b/rrc_web/static-svelte/app.js index 54691d9..11992f2 100644 --- a/rrc_web/static-svelte/app.js +++ b/rrc_web/static-svelte/app.js @@ -1,5 +1,5 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();const oe=2,ir=4,ar=8,Ks=1<<24,it=16,at=32,Mt=64,En=128,Oe=512,le=1024,we=2048,Je=4096,$e=8192,st=16384,$n=32768,Ft=65536,xr=1<<17,Or=1<<18,Wt=1<<19,Ys=1<<20,tt=1<<25,Rt=32768,zn=1<<21,lr=1<<22,vt=1<<23,bn=Symbol("$state"),Gs=Symbol("legacy props"),Xs=Symbol(""),It=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},Sn=3,Vt=8,Kn=!1;var Lr=Array.isArray,Zs=Array.prototype.indexOf,Rn=Array.from,cr=Object.defineProperty,en=Object.getOwnPropertyDescriptor,Qs=Object.getOwnPropertyDescriptors,eo=Object.prototype,to=Array.prototype,Hr=Object.getPrototypeOf,kr=Object.isExtensible;const ht=()=>{};function Ir(e){for(var t=0;t{e=r,t=o});return{promise:n,resolve:e,reject:t}}function Fr(e){return e===this.v}function Ur(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function qr(e){return!Ur(e,this.v)}function no(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function ro(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function so(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function oo(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function io(e){throw new Error("https://svelte.dev/e/effect_orphan")}function ao(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function lo(){throw new Error("https://svelte.dev/e/hydration_failed")}function co(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function uo(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function fo(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function vo(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let ho=!1;const mo=1,po=2,Br=4,_o=8,bo=16,go=1,yo=2,Jr="[",Tn="[!",ur="]",Ut={},ae=Symbol(),wo="http://www.w3.org/1999/xhtml";let Se=null;function qt(e){Se=e}function Le(e,t=!1,n){Se={p:Se,i:!1,c:null,e:null,s:e,x:null,l:null}}function He(e){var t=Se,n=t.e;if(n!==null){t.e=null;for(var r of n)ms(r)}return e!==void 0&&(t.x=e),t.i=!0,Se=t.p,e??{}}function Wr(){return!0}let xt=[];function Vr(){var e=xt;xt=[],Ir(e)}function Nt(e){if(xt.length===0&&!tn){var t=xt;queueMicrotask(()=>{t===xt&&Vr()})}xt.push(e)}function xo(){for(;xt.length>0;)Vr()}function Cn(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function ko(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let H=!1;function nt(e){H=e}let U;function he(e){if(e===null)throw Cn(),Ut;return U=e}function An(){return he(Ve(U))}function d(e){if(H){if(Ve(U)!==null)throw Cn(),Ut;U=e}}function mt(e=1){if(H){for(var t=e,n=U;t--;)n=Ve(n);U=n}}function yn(e=!0){for(var t=0,n=U;;){if(n.nodeType===Vt){var r=n.data;if(r===ur){if(t===0)return n;t-=1}else(r===Jr||r===Tn)&&(t+=1)}var o=Ve(n);e&&n.remove(),n=o}}function zr(e){if(!e||e.nodeType!==Vt)throw Cn(),Ut;return e.data}function rt(e){if(typeof e!="object"||e===null||bn in e)return e;const t=Hr(e);if(t!==eo&&t!==to)return e;var n=new Map,r=Lr(e),o=X(0),s=$t,i=l=>{if($t===s)return l();var a=L,c=$t;be(null),Tr(s);var u=l();return be(a),Tr(c),u};return r&&n.set("length",X(e.length)),new Proxy(e,{defineProperty(l,a,c){(!("value"in c)||c.configurable===!1||c.enumerable===!1||c.writable===!1)&&co();var u=n.get(a);return u===void 0?u=i(()=>{var v=X(c.value);return n.set(a,v),v}):R(u,c.value,!0),!0},deleteProperty(l,a){var c=n.get(a);if(c===void 0){if(a in l){const u=i(()=>X(ae));n.set(a,u),nn(o)}}else R(c,ae),nn(o);return!0},get(l,a,c){if(a===bn)return e;var u=n.get(a),v=a in l;if(u===void 0&&(!v||en(l,a)?.writable)&&(u=i(()=>{var m=rt(v?l[a]:ae),y=X(m);return y}),n.set(a,u)),u!==void 0){var f=_(u);return f===ae?void 0:f}return Reflect.get(l,a,c)},getOwnPropertyDescriptor(l,a){var c=Reflect.getOwnPropertyDescriptor(l,a);if(c&&"value"in c){var u=n.get(a);u&&(c.value=_(u))}else if(c===void 0){var v=n.get(a),f=v?.v;if(v!==void 0&&f!==ae)return{enumerable:!0,configurable:!0,value:f,writable:!0}}return c},has(l,a){if(a===bn)return!0;var c=n.get(a),u=c!==void 0&&c.v!==ae||Reflect.has(l,a);if(c!==void 0||q!==null&&(!u||en(l,a)?.writable)){c===void 0&&(c=i(()=>{var f=u?rt(l[a]):ae,m=X(f);return m}),n.set(a,c));var v=_(c);if(v===ae)return!1}return u},set(l,a,c,u){var v=n.get(a),f=a in l;if(r&&a==="length")for(var m=c;mX(ae)),n.set(m+"",y))}if(v===void 0)(!f||en(l,a)?.writable)&&(v=i(()=>X(void 0)),R(v,rt(c)),n.set(a,v));else{f=v.v!==ae;var E=i(()=>rt(c));R(v,E)}var p=Reflect.getOwnPropertyDescriptor(l,a);if(p?.set&&p.set.call(u,c),!f){if(r&&typeof a=="string"){var w=n.get("length"),D=Number(a);Number.isInteger(D)&&D>=w.v&&R(w,D+1)}nn(o)}return!0},ownKeys(l){_(o);var a=Reflect.ownKeys(l).filter(v=>{var f=n.get(v);return f===void 0||f.v!==ae});for(var[c,u]of n)u.v!==ae&&!(c in l)&&a.push(c);return a},setPrototypeOf(){uo()}})}var Er,Kr,Yr,Gr;function Yn(){if(Er===void 0){Er=window,Kr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Yr=en(t,"firstChild").get,Gr=en(t,"nextSibling").get,kr(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),kr(n)&&(n.__t=void 0)}}function ge(e=""){return document.createTextNode(e)}function Tt(e){return Yr.call(e)}function Ve(e){return Gr.call(e)}function h(e,t){if(!H)return Tt(e);var n=Tt(U);if(n===null)n=U.appendChild(ge());else if(t&&n.nodeType!==Sn){var r=ge();return n?.before(r),he(r),r}return he(n),n}function fr(e,t=!1){if(!H){var n=Tt(e);return n instanceof Comment&&n.data===""?Ve(n):n}if(t&&U?.nodeType!==Sn){var r=ge();return U?.before(r),he(r),r}return U}function b(e,t=1,n=!1){let r=H?U:e;for(var o;t--;)o=r,r=Ve(r);if(!H)return r;if(n&&r?.nodeType!==Sn){var s=ge();return r===null?o?.after(s):r.before(s),he(s),s}return he(r),r}function Xr(e){e.textContent=""}function Zr(){return!1}function Qr(e){var t=q;if(t===null)return L.f|=vt,e;if((t.f&$n)===0){if((t.f&En)===0)throw e;t.b.error(e)}else Bt(e,t)}function Bt(e,t){for(;t!==null;){if((t.f&En)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e}const _n=new Set;let W=null,gn=null,De=null,Me=[],Mn=null,Gn=!1,tn=!1;class qe{committed=!1;current=new Map;previous=new Map;#t=new Set;#e=new Set;#n=0;#r=0;#l=null;#o=new Set;#s=new Set;skipped_effects=new Set;is_fork=!1;is_deferred(){return this.is_fork||this.#r>0}process(t){Me=[],gn=null,this.apply();var n={parent:null,effect:null,effects:[],render_effects:[]};for(const r of t)this.#i(r,n);this.is_fork||this.#u(),this.is_deferred()?(this.#a(n.effects),this.#a(n.render_effects)):(gn=this,W=null,$r(n.render_effects),$r(n.effects),gn=null,this.#l?.resolve()),De=null}#i(t,n){t.f^=le;for(var r=t.first;r!==null;){var o=r.f,s=(o&(at|Mt))!==0,i=s&&(o&le)!==0,l=i||(o&$e)!==0||this.skipped_effects.has(r);if((r.f&En)!==0&&r.b?.is_pending()&&(n={parent:n,effect:r,effects:[],render_effects:[]}),!l&&r.fn!==null){s?r.f^=le:(o&ir)!==0?n.effects.push(r):un(r)&&((r.f&it)!==0&&this.#o.add(r),sn(r));var a=r.first;if(a!==null){r=a;continue}}var c=r.parent;for(r=r.next;r===null&&c!==null;)c===n.effect&&(this.#a(n.effects),this.#a(n.render_effects),n=n.parent),r=c.next,c=c.parent}}#a(t){for(const n of t)(n.f&we)!==0?this.#o.add(n):(n.f&Je)!==0&&this.#s.add(n),this.#c(n.deps),ce(n,le)}#c(t){if(t!==null)for(const n of t)(n.f&oe)===0||(n.f&Rt)===0||(n.f^=Rt,this.#c(n.deps))}capture(t,n){this.previous.has(t)||this.previous.set(t,n),(t.f&vt)===0&&(this.current.set(t,t.v),De?.set(t,t.v))}activate(){W=this,this.apply()}deactivate(){W===this&&(W=null,De=null)}flush(){if(this.activate(),Me.length>0){if(es(),W!==null&&W!==this)return}else this.#n===0&&this.process([]);this.deactivate()}discard(){for(const t of this.#e)t(this);this.#e.clear()}#u(){if(this.#r===0){for(const t of this.#t)t();this.#t.clear()}this.#n===0&&this.#f()}#f(){if(_n.size>1){this.previous.clear();var t=De,n=!0,r={parent:null,effect:null,effects:[],render_effects:[]};for(const s of _n){if(s===this){n=!1;continue}const i=[];for(const[a,c]of this.current){if(s.current.has(a))if(n&&c!==s.current.get(a))s.current.set(a,c);else continue;i.push(a)}if(i.length===0)continue;const l=[...s.current.keys()].filter(a=>!this.current.has(a));if(l.length>0){var o=Me;Me=[];const a=new Set,c=new Map;for(const u of i)ts(u,l,a,c);if(Me.length>0){W=s,s.apply();for(const u of Me)s.#i(u,r);s.deactivate()}Me=o}}W=null,De=t}this.committed=!0,_n.delete(this)}increment(t){this.#n+=1,t&&(this.#r+=1)}decrement(t){this.#n-=1,t&&(this.#r-=1),this.revive()}revive(){for(const t of this.#o)this.#s.delete(t),ce(t,we),Ct(t);for(const t of this.#s)ce(t,Je),Ct(t);this.flush()}oncommit(t){this.#t.add(t)}ondiscard(t){this.#e.add(t)}settled(){return(this.#l??=jr()).promise}static ensure(){if(W===null){const t=W=new qe;_n.add(W),tn||qe.enqueue(()=>{W===t&&t.flush()})}return W}static enqueue(t){Nt(t)}apply(){}}function _e(e){var t=tn;tn=!0;try{for(var n;;){if(xo(),Me.length===0&&(W?.flush(),Me.length===0))return Mn=null,n;es()}}finally{tn=t}}function es(){var e=Et;Gn=!0;var t=null;try{var n=0;for(xn(!0);Me.length>0;){var r=qe.ensure();if(n++>1e3){var o,s;Eo()}r.process(Me),pt.clear()}}finally{Gn=!1,xn(e),Mn=null}}function Eo(){try{ao()}catch(e){Bt(e,Mn)}}let Qe=null;function $r(e){var t=e.length;if(t!==0){for(var n=0;n0)){pt.clear();for(const o of Qe){if((o.f&(st|$e))!==0)continue;const s=[o];let i=o.parent;for(;i!==null;)Qe.has(i)&&(Qe.delete(i),s.push(i)),i=i.parent;for(let l=s.length-1;l>=0;l--){const a=s[l];(a.f&(st|$e))===0&&sn(a)}}Qe.clear()}}Qe=null}}function ts(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const o of e.reactions){const s=o.f;(s&oe)!==0?ts(o,t,n,r):(s&(lr|it))!==0&&(s&we)===0&&ns(o,t,r)&&(ce(o,we),Ct(o))}}function ns(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const o of e.deps){if(t.includes(o))return!0;if((o.f&oe)!==0&&ns(o,t,n))return n.set(o,!0),!0}return n.set(e,!1),!1}function Ct(e){for(var t=Mn=e;t.parent!==null;){t=t.parent;var n=t.f;if(Gn&&t===q&&(n&it)!==0&&(n&Or)===0)return;if((n&(Mt|at))!==0){if((n&le)===0)return;t.f^=le}}Me.push(t)}function $o(e){let t=0,n=At(0),r;return()=>{on()&&(_(n),Dn(()=>(t===0&&(r=zt(()=>e(()=>nn(n)))),t+=1,()=>{Nt(()=>{t-=1,t===0&&(r?.(),r=void 0,nn(n))})})))}}var So=Ft|Wt|En;function Ro(e,t,n){new To(e,t,n)}class To{parent;#t=!1;#e;#n=H?U:null;#r;#l;#o;#s=null;#i=null;#a=null;#c=null;#u=null;#f=0;#d=0;#h=!1;#v=null;#g=$o(()=>(this.#v=At(this.#f),()=>{this.#v=null}));constructor(t,n,r){this.#e=t,this.#r=n,this.#l=r,this.parent=q.b,this.#t=!!this.#r.pending,this.#o=pr(()=>{if(q.b=this,H){const s=this.#n;An(),s.nodeType===Vt&&s.data===Tn?this.#w():this.#y()}else{var o=this.#_();try{this.#s=Ne(()=>r(o))}catch(s){this.error(s)}this.#d>0?this.#p():this.#t=!1}return()=>{this.#u?.remove()}},So),H&&(this.#e=U)}#y(){try{this.#s=Ne(()=>this.#l(this.#e))}catch(t){this.error(t)}this.#t=!1}#w(){const t=this.#r.pending;t&&(this.#i=Ne(()=>t(this.#e)),qe.enqueue(()=>{var n=this.#_();this.#s=this.#m(()=>(qe.ensure(),Ne(()=>this.#l(n)))),this.#d>0?this.#p():(St(this.#i,()=>{this.#i=null}),this.#t=!1)}))}#_(){var t=this.#e;return this.#t&&(this.#u=ge(),this.#e.before(this.#u),t=this.#u),t}is_pending(){return this.#t||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#r.pending}#m(t){var n=q,r=L,o=Se;We(this.#o),be(this.#o),qt(this.#o.ctx);try{return t()}catch(s){return Qr(s),null}finally{We(n),be(r),qt(o)}}#p(){const t=this.#r.pending;this.#s!==null&&(this.#c=document.createDocumentFragment(),this.#c.append(this.#u),ws(this.#s,this.#c)),this.#i===null&&(this.#i=Ne(()=>t(this.#e)))}#b(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#b(t);return}this.#d+=t,this.#d===0&&(this.#t=!1,this.#i&&St(this.#i,()=>{this.#i=null}),this.#c&&(this.#e.before(this.#c),this.#c=null))}update_pending_count(t){this.#b(t),this.#f+=t,this.#v&&Jt(this.#v,this.#f)}get_effect_pending(){return this.#g(),_(this.#v)}error(t){var n=this.#r.onerror;let r=this.#r.failed;if(this.#h||!n&&!r)throw t;this.#s&&(ye(this.#s),this.#s=null),this.#i&&(ye(this.#i),this.#i=null),this.#a&&(ye(this.#a),this.#a=null),H&&(he(this.#n),mt(),he(yn()));var o=!1,s=!1;const i=()=>{if(o){ko();return}o=!0,s&&vo(),qe.ensure(),this.#f=0,this.#a!==null&&St(this.#a,()=>{this.#a=null}),this.#t=this.has_pending_snippet(),this.#s=this.#m(()=>(this.#h=!1,Ne(()=>this.#l(this.#e)))),this.#d>0?this.#p():this.#t=!1};var l=L;try{be(null),s=!0,n?.(t,i),s=!1}catch(a){Bt(a,this.#o&&this.#o.parent)}finally{be(l)}r&&Nt(()=>{this.#a=this.#m(()=>{qe.ensure(),this.#h=!0;try{return Ne(()=>{r(this.#e,()=>t,()=>i)})}catch(a){return Bt(a,this.#o.parent),null}finally{this.#h=!1}})})}}function Co(e,t,n,r){const o=dr;if(n.length===0&&e.length===0){r(t.map(o));return}var s=W,i=q,l=Ao();function a(){Promise.all(n.map(c=>Mo(c))).then(c=>{l();try{r([...t.map(o),...c])}catch(u){(i.f&st)===0&&Bt(u,i)}s?.deactivate(),wn()}).catch(c=>{Bt(c,i)})}e.length>0?Promise.all(e).then(()=>{l();try{return a()}finally{s?.deactivate(),wn()}}):a()}function Ao(){var e=q,t=L,n=Se,r=W;return function(s=!0){We(e),be(t),qt(n),s&&r?.activate()}}function wn(){We(null),be(null),qt(null)}function dr(e){var t=oe|we,n=L!==null&&(L.f&oe)!==0?L:null;return q!==null&&(q.f|=Wt),{ctx:Se,deps:null,effects:null,equals:Fr,f:t,fn:e,reactions:null,rv:0,v:ae,wv:0,parent:n??q,ac:null}}function Mo(e,t){let n=q;n===null&&ro();var r=n.b,o=void 0,s=At(ae),i=!L,l=new Map;return Jo(()=>{var a=jr();o=a.promise;try{Promise.resolve(e()).then(a.resolve,a.reject).then(()=>{c===W&&c.committed&&c.deactivate(),wn()})}catch(f){a.reject(f),wn()}var c=W;if(i){var u=!r.is_pending();r.update_pending_count(1),c.increment(u),l.get(c)?.reject(It),l.delete(c),l.set(c,a)}const v=(f,m=void 0)=>{if(c.activate(),m)m!==It&&(s.f|=vt,Jt(s,m));else{(s.f&vt)!==0&&(s.f^=vt),Jt(s,f);for(const[y,E]of l){if(l.delete(y),y===c)break;E.reject(It)}}i&&(r.update_pending_count(-1),c.decrement(u))};a.promise.then(v,f=>v(null,f||"unknown"))}),mr(()=>{for(const a of l.values())a.reject(It)}),new Promise(a=>{function c(u){function v(){u===o?a(s):c(o)}u.then(v,v)}c(o)})}function No(e){const t=dr(e);return t.equals=qr,t}function rs(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n0&&!os&&Po()}return t}function Po(){os=!1;var e=Et;xn(!0);const t=Array.from(Xn);try{for(const n of t)(n.f&le)!==0&&ce(n,Je),un(n)&&sn(n)}finally{xn(e)}Xn.clear()}function nn(e){R(e,e.v+1)}function is(e,t){var n=e.reactions;if(n!==null)for(var r=n.length,o=0;o{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Nn(e){var t=L,n=q;be(null),We(null);try{return e()}finally{be(t),We(n)}}function ls(e,t,n,r=n){e.addEventListener(t,()=>Nn(n));const o=e.__on_r;o?e.__on_r=()=>{o(),r(!0)}:e.__on_r=()=>r(!0),as()}let Et=!1;function xn(e){Et=e}let Dt=!1;function Rr(e){Dt=e}let L=null,Be=!1;function be(e){L=e}let q=null;function We(e){q=e}let ot=null;function Oo(e){L!==null&&(ot===null?ot=[e]:ot.push(e))}let ve=null,Ee=0,Ae=null;function Lo(e){Ae=e}let cs=1,rn=0,$t=rn;function Tr(e){$t=e}function us(){return++cs}function un(e){var t=e.f;if((t&we)!==0)return!0;if(t&oe&&(e.f&=~Rt),(t&Je)!==0){var n=e.deps;if(n!==null)for(var r=n.length,o=0;oe.wv)return!0}(t&Oe)!==0&&De===null&&ce(e,le)}return!1}function fs(e,t,n=!0){var r=e.reactions;if(r!==null&&!ot?.includes(e))for(var o=0;o{e.ac.abort(It)}),e.ac=null);try{e.f|=zn;var u=e.fn,v=u(),f=e.deps;if(ve!==null){var m;if(kn(e,Ee),f!==null&&Ee>0)for(f.length=Ee+ve.length,m=0;mnew Promise(r=>{n.outro?St(t,()=>{ye(t),r(void 0)}):(ye(t),r(void 0))})}function Bo(e){return lt(ir,e,!1)}function Jo(e){return lt(lr|Wt,e,!0)}function Dn(e,t=0){return lt(ar|t,e,!0)}function re(e,t=[],n=[],r=[]){Co(r,t,n,o=>{lt(ar,()=>e(...o.map(_)),!0)})}function pr(e,t=0){var n=lt(it|t,e,!0);return n}function Ne(e){return lt(at|Wt,e,!0)}function ps(e){var t=e.teardown;if(t!==null){const n=Dt,r=L;Rr(!0),be(null);try{t.call(null)}finally{Rr(n),be(r)}}}function _s(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const o=n.ac;o!==null&&Nn(()=>{o.abort(It)});var r=n.next;(n.f&Mt)!==0?n.parent=null:ye(n,t),n=r}}function Wo(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&at)===0&&ye(t),t=n}}function ye(e,t=!0){var n=!1;(t||(e.f&Or)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Vo(e.nodes.start,e.nodes.end),n=!0),_s(e,t&&!n),kn(e,0),ce(e,st);var r=e.nodes&&e.nodes.t;if(r!==null)for(const s of r)s.stop();ps(e);var o=e.parent;o!==null&&o.first!==null&&bs(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function Vo(e,t){for(;e!==null;){var n=e===t?null:Ve(e);e.remove(),e=n}}function bs(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function St(e,t,n=!0){var r=[];gs(e,r,!0);var o=()=>{n&&ye(e),t&&t()},s=r.length;if(s>0){var i=()=>--s||o();for(var l of r)l.out(i)}else o()}function gs(e,t,n){if((e.f&$e)===0){e.f^=$e;var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)(l.is_global||n)&&t.push(l);for(var o=e.first;o!==null;){var s=o.next,i=(o.f&Ft)!==0||(o.f&at)!==0&&(e.f&it)!==0;gs(o,t,i?n:!1),o=s}}}function _r(e){ys(e,!0)}function ys(e,t){if((e.f&$e)!==0){e.f^=$e,(e.f&le)===0&&(ce(e,we),Ct(e));for(var n=e.first;n!==null;){var r=n.next,o=(n.f&Ft)!==0||(n.f&at)!==0;ys(n,o?t:!1),n=r}var s=e.nodes&&e.nodes.t;if(s!==null)for(const i of s)(i.is_global||t)&&i.in()}}function ws(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var o=n===r?null:Ve(n);t.append(n),n=o}}const xs=new Set,Zn=new Set;function zo(e,t,n,r={}){function o(s){if(r.capture||Zt.call(t,s),!s.cancelBubble)return Nn(()=>n?.call(this,s))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Nt(()=>{t.addEventListener(e,o,r)}):t.addEventListener(e,o,r),o}function Pn(e,t,n,r,o){var s={capture:r,passive:o},i=zo(e,t,n,s);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&mr(()=>{t.removeEventListener(e,i,s)})}function ct(e){for(var t=0;t{throw p});throw f}}finally{e.__root=t,delete e.currentTarget,be(u),We(v)}}}function Ko(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("",""),t.content}function _t(e,t){var n=q;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function A(e,t){var n=(t&go)!==0,r=(t&yo)!==0,o,s=!e.startsWith("");return()=>{if(H)return _t(U,null),U;o===void 0&&(o=Ko(s?e:""+e),n||(o=Tt(o)));var i=r||Kr?document.importNode(o,!0):o.cloneNode(!0);if(n){var l=Tt(i),a=i.lastChild;_t(l,a)}else _t(i,i);return i}}function ln(e=""){if(!H){var t=ge(e+"");return _t(t,t),t}var n=U;return n.nodeType!==Sn&&(n.before(n=ge()),he(n)),_t(n,n),n}function ks(){if(H)return _t(U,null),U;var e=document.createDocumentFragment(),t=document.createComment(""),n=ge();return e.append(t,n),_t(t,n),e}function S(e,t){if(H){var n=q;((n.f&$n)===0||n.nodes.end===null)&&(n.nodes.end=U),An();return}e!==null&&e.before(t)}const Yo=["touchstart","touchmove"];function Go(e){return Yo.includes(e)}function ee(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+"")}function Es(e,t){return $s(e,t)}function Xo(e,t){Yn(),t.intro=t.intro??!1;const n=t.target,r=H,o=U;try{for(var s=Tt(n);s&&(s.nodeType!==Vt||s.data!==Jr);)s=Ve(s);if(!s)throw Ut;nt(!0),he(s);const i=$s(e,{...t,anchor:s});return nt(!1),i}catch(i){if(i instanceof Error&&i.message.split(` -`).some(l=>l.startsWith("https://svelte.dev/e/")))throw i;return i!==Ut&&console.warn("Failed to hydrate: ",i),t.recover===!1&&lo(),Yn(),Xr(n),nt(!1),Es(e,t)}finally{nt(r),he(o)}}const Lt=new Map;function $s(e,{target:t,anchor:n,props:r={},events:o,context:s,intro:i=!0}){Yn();var l=new Set,a=v=>{for(var f=0;f{var v=n??t.appendChild(ge());return Ro(v,{pending:()=>{}},f=>{if(s){Le({});var m=Se;m.c=s}if(o&&(r.$$events=o),H&&_t(f,null),c=e(f,r)||{},H&&(q.nodes.end=U,U===null||U.nodeType!==Vt||U.data!==ur))throw Cn(),Ut;s&&He()}),()=>{for(var f of l){t.removeEventListener(f,Zt);var m=Lt.get(f);--m===0?(document.removeEventListener(f,Zt),Lt.delete(f)):Lt.set(f,m)}Zn.delete(a),v!==n&&v.parentNode?.removeChild(v)}});return Qn.set(c,u),c}let Qn=new WeakMap;function Zo(e,t){const n=Qn.get(e);return n?(Qn.delete(e),n(t)):Promise.resolve()}function ze(e){return new Qo(e)}class Qo{#t;#e;constructor(t){var n=new Map,r=(s,i)=>{var l=hr(i,!1,!1);return n.set(s,l),l};const o=new Proxy({...t.props||{},$$events:{}},{get(s,i){return _(n.get(i)??r(i,Reflect.get(s,i)))},has(s,i){return i===Gs?!0:(_(n.get(i)??r(i,Reflect.get(s,i))),Reflect.has(s,i))},set(s,i,l){return R(n.get(i)??r(i,l),l),Reflect.set(s,i,l)}});this.#e=(t.hydrate?Xo:Es)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&_e(),this.#t=o.$$events;for(const s of Object.keys(this.#e))s==="$set"||s==="$destroy"||s==="$on"||cr(this,s,{get(){return this.#e[s]},set(i){this.#e[s]=i},enumerable:!0});this.#e.$set=s=>{Object.assign(o,s)},this.#e.$destroy=()=>{Zo(this.#e)}}$set(t){this.#e.$set(t)}$on(t,n){this.#t[t]=this.#t[t]||[];const r=(...o)=>n.call(this,...o);return this.#t[t].push(r),()=>{this.#t[t]=this.#t[t].filter(o=>o!==r)}}$destroy(){this.#e.$destroy()}}const ei="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(ei);class ti{anchor;#t=new Map;#e=new Map;#n=new Map;#r=new Set;#l=!0;constructor(t,n=!0){this.anchor=t,this.#l=n}#o=()=>{var t=W;if(this.#t.has(t)){var n=this.#t.get(t),r=this.#e.get(n);if(r)_r(r),this.#r.delete(n);else{var o=this.#n.get(n);o&&(this.#e.set(n,o.effect),this.#n.delete(n),o.fragment.lastChild.remove(),this.anchor.before(o.fragment),r=o.effect)}for(const[s,i]of this.#t){if(this.#t.delete(s),s===t)break;const l=this.#n.get(i);l&&(ye(l.effect),this.#n.delete(i))}for(const[s,i]of this.#e){if(s===n||this.#r.has(s))continue;const l=()=>{if(Array.from(this.#t.values()).includes(s)){var c=document.createDocumentFragment();ws(i,c),c.append(ge()),this.#n.set(s,{effect:i,fragment:c})}else ye(i);this.#r.delete(s),this.#e.delete(s)};this.#l||!r?(this.#r.add(s),St(i,l,!1)):l()}}};#s=t=>{this.#t.delete(t);const n=Array.from(this.#t.values());for(const[r,o]of this.#n)n.includes(r)||(ye(o.effect),this.#n.delete(r))};ensure(t,n){var r=W,o=Zr();if(n&&!this.#e.has(t)&&!this.#n.has(t))if(o){var s=document.createDocumentFragment(),i=ge();s.append(i),this.#n.set(t,{effect:Ne(()=>n(i)),fragment:s})}else this.#e.set(t,Ne(()=>n(this.anchor)));if(this.#t.set(r,t),o){for(const[l,a]of this.#e)l===t?r.skipped_effects.delete(a):r.skipped_effects.add(a);for(const[l,a]of this.#n)l===t?r.skipped_effects.delete(a.effect):r.skipped_effects.add(a.effect);r.oncommit(this.#o),r.ondiscard(this.#s)}else H&&(this.anchor=U),this.#o()}}function ni(e){Se===null&&no(),an(()=>{const t=zt(e);if(typeof t=="function")return t})}function V(e,t,n=!1){H&&An();var r=new ti(e),o=n?Ft:0;function s(i,l){if(H){const c=zr(e)===Tn;if(i===c){var a=yn();he(a),r.anchor=a,nt(!1),r.ensure(i,l),nt(!0);return}}r.ensure(i,l)}pr(()=>{var i=!1;t((l,a=!0)=>{i=!0,s(a,l)}),i||s(!1,null)},o)}function On(e,t){return t}function ri(e,t,n){for(var r=[],o=t.length,s,i=t.length,l=0;l{if(s){if(s.pending.delete(v),s.done.add(v),s.pending.size===0){var f=e.outrogroups;er(Rn(s.done)),f.delete(s),f.size===0&&(e.outrogroups=null)}}else i-=1},!1)}if(i===0){var a=r.length===0&&n!==null;if(a){var c=n,u=c.parentNode;Xr(u),u.append(c),e.items.clear()}er(t,!a)}else s={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(s)}function er(e,t=!0){for(var n=0;n{var w=n();return Lr(w)?w:w==null?[]:Rn(w)}),f,m=!0;function y(){p.fallback=u,si(p,f,i,t,r),u!==null&&(f.length===0?(u.f&tt)===0?_r(u):(u.f^=tt,Qt(u,null,i)):St(u,()=>{u=null}))}var E=pr(()=>{f=_(v);var w=f.length;let D=!1;if(H){var z=zr(i)===Tn;z!==(w===0)&&(i=yn(),he(i),nt(!1),D=!0)}for(var I=new Set,Z=W,$=Zr(),C=0;Cs(i)):(u=Ne(()=>s(Ar??=ge())),u.f|=tt)),H&&w>0&&he(yn()),!m)if($){for(const[te,ue]of l)I.has(te)||Z.skipped_effects.add(ue.e);Z.oncommit(y),Z.ondiscard(()=>{})}else y();D&&nt(!0),_(v)}),p={effect:E,items:l,outrogroups:null,fallback:u};m=!1,H&&(i=U)}function si(e,t,n,r,o){var s=(r&_o)!==0,i=t.length,l=e.items,a=e.effect.first,c,u=null,v,f=[],m=[],y,E,p,w;if(s)for(w=0;w0){var T=(r&Br)!==0&&i===0?n:null;if(s){for(w=0;w{if(v!==void 0)for(p of v)p.nodes?.a?.apply()})}function oi(e,t,n,r,o,s,i,l){var a=(i&mo)!==0?(i&bo)===0?hr(n,!1,!1):At(n):null,c=(i&po)!==0?At(o):null;return{v:a,i:c,e:Ne(()=>(s(t,a??n,c??o,l),()=>{e.delete(r)}))}}function Qt(e,t,n){if(e.nodes)for(var r=e.nodes.start,o=e.nodes.end,s=t&&(t.f&tt)===0?t.nodes.start:n;r!==null;){var i=Ve(r);if(s.before(r),r===o)return;r=i}}function ft(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function Ss(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t{if(!t){if(t=!0,e.hasAttribute("value")){var r=e.value;tr(e,"value",null),e.value=r}if(e.hasAttribute("checked")){var o=e.checked;tr(e,"checked",null),e.checked=o}}};e.__on_r=n,Nt(n),as()}}function tr(e,t,n,r){var o=ui(e);H&&(o[t]=e.getAttribute(t),t==="src"||t==="srcset"||t==="href"&&e.nodeName==="LINK")||o[t]!==(o[t]=n)&&(t==="loading"&&(e[Xs]=n),n==null?e.removeAttribute(t):typeof n!="string"&&fi(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function ui(e){return e.__attributes??={[li]:e.nodeName.includes("-"),[ci]:e.namespaceURI===wo}}var Nr=new Map;function fi(e){var t=e.getAttribute("is")||e.nodeName,n=Nr.get(t);if(n)return n;Nr.set(t,n=[]);for(var r,o=e,s=Element.prototype;s!==o;){r=Qs(o);for(var i in r)r[i].set&&n.push(i);o=Hr(o)}return n}function kt(e,t,n=t){var r=new WeakSet;ls(e,"input",async o=>{var s=o?e.defaultValue:e.value;if(s=Wn(e)?Vn(s):s,n(s),W!==null&&r.add(W),await Io(),s!==(s=t())){var i=e.selectionStart,l=e.selectionEnd,a=e.value.length;if(e.value=s??"",l!==null){var c=e.value.length;i===l&&l===a&&c>a?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=i,e.selectionEnd=Math.min(l,c))}}}),(H&&e.defaultValue!==e.value||zt(t)==null&&e.value)&&(n(Wn(e)?Vn(e.value):e.value),W!==null&&r.add(W)),Dn(()=>{var o=t();if(e===document.activeElement){var s=gn??W;if(r.has(s))return}Wn(e)&&o===Vn(e.value)||e.type==="date"&&!o&&!e.value||o!==e.value&&(e.value=o??"")})}function di(e,t,n=t){ls(e,"change",r=>{var o=r?e.defaultChecked:e.checked;n(o)}),(H&&e.defaultChecked!==e.checked||zt(t)==null)&&n(e.checked),Dn(()=>{var r=t();e.checked=!!r})}function Wn(e){var t=e.type;return t==="number"||t==="range"}function Vn(e){return e===""?null:+e}function Dr(e,t){return e===t||e?.[bn]===t}function vi(e={},t,n,r){return Bo(()=>{var o,s;return Dn(()=>{o=s,s=[],zt(()=>{e!==n(...s)&&(t(e,...s),o&&Dr(n(...o),e)&&t(null,...o))})}),()=>{Nt(()=>{s&&Dr(n(...s),e)&&t(null,...s)})}}),e}function Ke(e,t,n){e.$$events||={},e.$$events[t]||=[],e.$$events[t].push(n)}function Ye(e){for(var t in e)t in this&&(this[t]=e[t])}function br(e,t,n){if(e==null)return t(void 0),n&&n(void 0),ht;const r=zt(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Ht=[];function hi(e,t){return{subscribe:Re(e,t).subscribe}}function Re(e,t=ht){let n=null;const r=new Set;function o(l){if(Ur(e,l)&&(e=l,n)){const a=!Ht.length;for(const c of r)c[1](),Ht.push(c,e);if(a){for(let c=0;c{r.delete(c),r.size===0&&n&&(n(),n=null)}}return{set:o,update:s,subscribe:i}}function Rs(e,t,n){const r=!Array.isArray(e),o=r?[e]:e;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const s=t.length<2;return hi(n,(i,l)=>{let a=!1;const c=[];let u=0,v=ht;const f=()=>{if(u)return;v();const y=t(r?c[0]:c,i,l);s?i(y):v=typeof y=="function"?y:ht},m=o.map((y,E)=>br(y,p=>{c[E]=p,u&=~(1<{u|=1<t=n)(),t}let nr=Symbol();function G(e,t,n){const r=n[t]??={store:null,source:hr(void 0),unsubscribe:ht};if(r.store!==e&&!(nr in n))if(r.unsubscribe(),r.store=e??null,e==null)r.source.v=void 0,r.unsubscribe=ht;else{var o=!0;r.unsubscribe=br(e,s=>{o?r.source.v=s:R(r.source,s)}),o=!1}return e&&nr in n?F(e):_(r.source)}function bt(){const e={};function t(){mr(()=>{for(var n in e)e[n].unsubscribe();cr(e,nr,{enumerable:!1,value:!0})})}return[e,t]}function Pe(e,t,n,r){var o=r,s=!0,i=()=>(s&&(s=!1,o=r),o),l;l=e[t],l===void 0&&r!==void 0&&(l=i());var a;a=()=>{var f=e[t];return f===void 0?i():(s=!0,f)};var c=!1,u=dr(()=>(c=!1,a())),v=q;return(function(f,m){if(arguments.length>0){const y=m?_(u):f;return R(u,y),c=!0,o!==void 0&&(o=y),f}return Dt&&c||(v.f&st)!==0?u.v:_(u)})}const Ts=Re(null),cn=Re(!1),gt=Re(!1),yt=Re(null),Kt=Re(""),Ln=Re(null),dn=Re(null),N=Re("[Hub]"),me=Re(new Map([["[Hub]",{messages:[],users:new Set,unread:0}]])),Hn=Re([]),vn=Re({hubHash:"",destName:"rrc.hub",nickname:"",identityPath:"~/.rrc-web/identity"}),gr=Re(new Set),yr=Rs([me,N],([e,t])=>e.get(t)||{messages:[],users:new Set,unread:0}),wr=Rs(me,e=>Array.from(e.keys())),Cs=Object.freeze(Object.defineProperty({__proto__:null,connectionSettings:vn,currentRoom:N,currentRoomData:yr,discoveredHubs:Hn,hubName:yt,identityHash:Ln,latency:dn,nickname:Kt,roomList:wr,rooms:me,rrcConnected:gt,sentMessageIds:gr,ws:Ts,wsConnected:cn},Symbol.toStringTag,{value:"Module"}));let et=null;function As(){const t=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;et=new WebSocket(t),Ts.set(et),et.onopen=()=>{cn.set(!0),rr(),Li(),B({type:"get_state"})},et.onmessage=n=>{const r=JSON.parse(n.data);mi(r)},et.onerror=n=>{console.error("WebSocket error:",n),n.currentTarget?.readyState===WebSocket.CLOSED&&fetch("/ws",{method:"HEAD"}).then(r=>{r.status===401&&window.location.reload()}).catch(()=>{})},et.onclose=n=>{cn.set(!1),gt.set(!1),dn.set(null),n.code===1008||n.code===1002?(console.log("WebSocket closed due to authentication failure"),window.location.reload()):setTimeout(As,3e3)}}function B(e){et&&et.readyState===WebSocket.OPEN&&et.send(JSON.stringify(e))}function mi(e){switch(e.type){case"connected":pi(e);break;case"disconnected":_i();break;case"message":bi(e);break;case"notice":gi(e);break;case"error":yi(e);break;case"system":wi(e);break;case"message_sent":xi(e);break;case"room_joined":ki(e.room,e.users);break;case"room_parted":Ei(e.room);break;case"state":$i(e);break;case"latency":Si(e);break;case"user_list_update":Ri(e);break;case"hub_info":Ti(e);break;case"hub_discovered":Ci(e);break;case"discovered_hubs":Ai(e);break;case"nickname_set":Mi(e);break}}function pi(e){gt.set(!0),e.hub_name&&yt.set(e.hub_name),Kt.set(e.nickname||""),e.identity_hash&&Ln.set(e.identity_hash)}function _i(){gt.set(!1),yt.set(null),me.update(e=>{const t=e.get("[Hub]")||{messages:[],users:new Set,unread:0};return t.messages.push({type:"system",text:"Disconnected from hub",timestamp:new Date().toLocaleTimeString()}),e.set("[Hub]",t),new Map(e)})}function bi(e){const t=e.room||"[Hub]";me.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.messages.push({type:"message",user:e.user,text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString(),message_id:e.message_id,sender_identity:e.sender_identity}),t!==F(N)&&r.unread++,new Map(n)})}function gi(e){const t=e.room||"[Hub]";me.update(n=>(n.has(t)||n.set(t,{messages:[],users:new Set,unread:0}),n.get(t).messages.push({type:"notice",text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString()}),new Map(n)))}function yi(e){const t=F(N);me.update(n=>{const r=n.get(t);return r&&r.messages.push({type:"error",text:e.text||e.error,timestamp:new Date().toLocaleTimeString()}),new Map(n)})}function wi(e){const t=e.room||F(N);me.update(n=>(n.has(t)||n.set(t,{messages:[],users:new Set,unread:0}),n.get(t).messages.push({type:"system",text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString()}),new Map(n)))}function xi(e){e.message_id&&gr.update(t=>{if(t.add(e.message_id),t.size>100){const n=t.values().next().value;t.delete(n)}return t})}function ki(e,t){me.update(n=>{n.has(e)||n.set(e,{messages:[],users:new Set,unread:0});const r=n.get(e);return r.users=new Set(t||[]),new Map(n)}),N.set(e)}function Ei(e){me.update(t=>(t.delete(e),new Map(t))),F(N)===e&&N.set("[Hub]")}function $i(e){e.connected!==void 0&>.set(e.connected),e.hub_name&&yt.set(e.hub_name),e.nickname&&Kt.set(e.nickname),e.identity_hash&&Ln.set(e.identity_hash),e.config&&vn.update(t=>({...t,hubHash:e.config.hub_hash||t.hubHash,destName:e.config.dest_name||t.destName,nickname:e.config.nickname||t.nickname,identityPath:e.config.identity_path||t.identityPath})),e.rooms&&Object.keys(e.rooms).length>0&&me.update(t=>{const n=new Map;return Object.keys(e.rooms).forEach(r=>{const o=e.rooms[r],s=t.get(r);n.set(r,{messages:o.messages||s?.messages||[],users:new Set(o.users||[]),unread:s?.unread||0})}),n})}function Si(e){e.latency_ms!==void 0&&dn.set(e.latency_ms)}function Ri(e){const t=e.room||"[Hub]";me.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.users=new Set(e.users||[]),new Map(n)})}function Ti(e){yt.set(e.hub_name)}function Ci(e){e.hub&&Hn.update(t=>t.find(r=>r.hash===e.hub.hash)?t:[...t,e.hub])}function Ai(e){Hn.set(e.hubs||[])}function Mi(e){e.nickname!==void 0&&Kt.set(e.nickname)}function rr(){B({type:"get_discovered_hubs"})}function Ni(e,t,n,r){B({type:"connect",hub_hash:e,dest_name:t,nickname:n,identity_path:r}),Hi(e,t,n,r)}function Ms(){B({type:"disconnect"})}function Di(e){B({type:"join_room",room:e})}function Pi(e){B({type:"part_room",room:e})}function Oi(e,t){e.trim()&&B({type:"send_message",text:e,room:t||F(N)})}function Li(){const e=localStorage.getItem("rrc_connection_settings");if(e)try{const t=JSON.parse(e);vn.set(t)}catch(t){console.error("Failed to load connection settings:",t)}}function Hi(e,t,n,r){const o={hubHash:e,destName:t,nickname:n,identityPath:r};localStorage.setItem("rrc_connection_settings",JSON.stringify(o)),vn.set(o)}function Ns(e){me.update(t=>{const n=t.get(e);return n&&(n.unread=0),new Map(t)})}var Ii=A(' '),ji=A(''),Fi=A('
WS
'),Ui=A('
WS
'),qi=A('
RRC
'),Bi=A('
RRC
'),Ji=A('
Nick:
'),Wi=A('
Latency:
'),Vi=A('');function Ds(e,t){if(new.target)return ze({component:Ds,...e});Le(t,!0);const n=()=>G(yt,"$hubName",a),r=()=>G(gt,"$rrcConnected",a),o=()=>G(cn,"$wsConnected",a),s=()=>G(Kt,"$nickname",a),i=()=>G(dn,"$latency",a),l=()=>G(N,"$currentRoom",a),[a,c]=bt();let u=Pe(t,"onToggleTheme"),v=X("dark");function f(){R(v,_(v)==="dark"?"light":"dark",!0),document.documentElement.setAttribute("data-theme",_(v)),u()(_(v))}function m(){Ms()}async function y(){try{await fetch("/api/logout",{method:"POST"}),window.location.reload()}catch(k){console.error("Logout error:",k),window.location.reload()}}function E(k){return k==="[Hub]"?n()||"Hub":k}var p={get onToggleTheme(){return u()},set onToggleTheme(k){u(k),_e()},$set:Ye,$on:(k,P)=>Ke(t,k,P)},w=Vi(),D=h(w),z=b(h(D),4);{var I=k=>{var P=Ii(),x=h(P);d(P),re(()=>ee(x,`- ${n()??""}`)),S(k,P)};V(z,k=>{n()&&k(I)})}var Z=b(z,2);{var $=k=>{var P=ji();P.__click=m,S(k,P)};V(Z,k=>{r()&&k($)})}d(D);var C=b(D,2),g=h(C),T=h(g),M=h(T);{var te=k=>{var P=Fi();S(k,P)},ue=k=>{var P=Ui();S(k,P)};V(M,k=>{o()?k(te):k(ue,!1)})}var j=b(M,2);{var fe=k=>{var P=qi();S(k,P)},Q=k=>{var P=Bi();S(k,P)};V(j,k=>{r()?k(fe):k(Q,!1)})}var K=b(j,2);{var ne=k=>{var P=Ji(),x=b(h(P),2),J=h(x,!0);d(x),d(P),re(()=>ee(J,s())),S(k,P)};V(K,k=>{s()&&k(ne)})}var se=b(K,2);{var xe=k=>{var P=Wi(),x=b(h(P),2),J=h(x);d(x),d(P),re(()=>ee(J,`${i()??""}ms`)),S(k,P)};V(se,k=>{i()!==null&&k(xe)})}d(T);var pe=b(T,2),Ge=h(pe,!0);d(pe);var ke=b(pe,2);ke.__click=f;var Te=h(ke);{var Ie=k=>{var P=ln("☀️");S(k,P)},je=k=>{var P=ln("🌙");S(k,P)};V(Te,k=>{_(v)==="dark"?k(Ie):k(je,!1)})}d(ke);var Xe=b(ke,2);Xe.__click=y,d(g),d(C),d(w),re(k=>ee(Ge,k),[()=>E(l())]),S(e,w);var Fe=He(p);return c(),Fe}ct(["click"]);var zi=A(' '),Ki=A('

No hubs discovered yet

Listening for announcements...

'),Yi=A(' '),Gi=A('
  • '),Xi=A(''),Zi=A('');function Ps(e,t){if(new.target)return ze({component:Ps,...e});Le(t,!0);const n=()=>G(vn,"$connectionSettings",o),r=()=>G(Hn,"$discoveredHubs",o),[o,s]=bt();let i=Pe(t,"onConnect"),l=X(rt(n().hubHash)),a=X(rt(n().destName)),c=X(rt(n().nickname)),u=X(rt(n().identityPath)),v=X(!1);an(()=>{R(l,n().hubHash||_(l),!0),R(a,n().destName||_(a),!0),R(c,n().nickname||_(c),!0),R(u,n().identityPath||_(u),!0)}),ni(()=>{rr()});function f(){Ni(_(l),_(a),_(c),_(u)),i()()}function m(x){R(l,x.hash,!0),R(a,x.aspect||"rrc.hub",!0)}function y(){rr()}function E(x){const J=Date.now()/1e3,de=Math.floor(J-x);return de<60?`${de}s ago`:de<3600?`${Math.floor(de/60)}m ago`:`${Math.floor(de/3600)}h ago`}var p={get onConnect(){return i()},set onConnect(x){i(x),_e()},$set:Ye,$on:(x,J)=>Ke(t,x,J)},w=Zi(),D=h(w),z=b(h(D),2),I=h(z),Z=h(I),$=h(Z),C=h($),g=b(h(C));{var T=x=>{var J=zi(),de=h(J,!0);d(J),re(()=>ee(de,r().length)),S(x,J)};V(g,x=>{r().length>0&&x(T)})}d(C);var M=b(C,2);M.__click=y,d($);var te=b($,2),ue=h(te);{var j=x=>{var J=Ki();S(x,J)},fe=x=>{var J=Xi();fn(J,5,r,On,(de,ut)=>{var Yt=Gi(),Gt=h(Yt);Gt.__click=()=>m(_(ut));var hn=h(Gt),wt=h(hn),Pt=h(wt,!0);d(wt);var mn=b(wt,2),Xt=h(mn),In=h(Xt);d(Xt);var jn=b(Xt,2);{var Fn=Ze=>{var Ot=Yi(),pn=h(Ot,!0);d(Ot),re(Un=>ee(pn,Un),[()=>E(_(ut).last_seen)]),S(Ze,Ot)};V(jn,Ze=>{_(ut).last_seen&&Ze(Fn)})}d(mn),d(hn),d(Gt),d(Yt),re(Ze=>{ee(Pt,_(ut).name||"Unknown Hub"),ee(In,`${Ze??""}...`)},[()=>_(ut).hash?.substring(0,16)]),S(de,Yt)}),d(J),S(x,J)};V(ue,x=>{r().length===0?x(j):x(fe,!1)})}d(te),d(Z),d(I);var Q=b(I,2),K=h(Q),ne=b(h(K),2),se=h(ne),xe=b(h(se),2);dt(xe),mt(2),d(se);var pe=b(se,2),Ge=b(h(pe),2);dt(Ge),d(pe);var ke=b(pe,2),Te=h(ke);dt(Te);var Ie=b(Te,4),je=h(Ie),Xe=b(h(je),2);dt(Xe),mt(2),d(je);var Fe=b(je,2),k=b(h(Fe),2);dt(k),d(Fe),d(Ie),d(ke),mt(2),d(ne),d(K),d(Q),d(z),d(D),d(w),Pn("submit",ne,x=>{x.preventDefault(),f()}),kt(xe,()=>_(l),x=>R(l,x)),kt(Ge,()=>_(c),x=>R(c,x)),di(Te,()=>_(v),x=>R(v,x)),kt(Xe,()=>_(a),x=>R(a,x)),kt(k,()=>_(u),x=>R(u,x)),S(e,w);var P=He(p);return s(),P}ct(["click"]);var Qi=A(' '),ea=A("
  • "),ta=A(''),na=A('

    Rooms

    ');function Os(e,t){if(new.target)return ze({component:Os,...e});Le(t,!0);const n=()=>G(me,"$rooms",i),r=()=>G(yt,"$hubName",i),o=()=>G(wr,"$roomListStore",i),s=()=>G(N,"$currentRoom",i),[i,l]=bt();let a=Pe(t,"onJoinRoom"),c=Pe(t,"onPartRoom"),u=Pe(t,"onToggleSidebar");function v(g){N.set(g),Ns(g)}function f(g){return n().get(g)?.unread||0}function m(g){return g==="[Hub]"?r()||"Hub":g}var y={get onJoinRoom(){return a()},set onJoinRoom(g){a(g),_e()},get onPartRoom(){return c()},set onPartRoom(g){c(g),_e()},get onToggleSidebar(){return u()},set onToggleSidebar(g){u(g),_e()},$set:Ye,$on:(g,T)=>Ke(t,g,T)},E=na(),p=h(E),w=b(h(p),2);w.__click=function(...g){u()?.apply(this,g)},d(p);var D=b(p,2);fn(D,5,o,On,(g,T)=>{var M=ea(),te=h(M);te.__click=()=>v(_(T));var ue=h(te),j=h(ue,!0);d(ue);var fe=b(ue,2);{var Q=K=>{var ne=Qi(),se=h(ne,!0);d(ne),re(xe=>ee(se,xe),[()=>f(_(T))]),S(K,ne)};V(fe,K=>{f(_(T))>0&&K(Q)})}d(te),d(M),re(K=>{jt(te,1,`flex justify-between items-center w-full text-left px-2 py-2 rounded ${_(T)===s()?"bg-primary text-primary-content hover:bg-primary-focus":"hover:bg-base-300"}`),ee(j,K)},[()=>m(_(T))]),S(g,M)}),d(D);var z=b(D,4),I=h(z);I.__click=function(...g){a()?.apply(this,g)};var Z=b(I,2);{var $=g=>{var T=ta();T.__click=function(...M){c()?.apply(this,M)},S(g,T)};V(Z,g=>{s()!=="[Hub]"&&g($)})}d(z),d(E),S(e,E);var C=He(y);return l(),C}ct(["click"]);var ra=A('
    '),sa=A(''),oa=A('
    '),ia=A(''),aa=A('
    ');function sr(e,t){if(new.target)return ze({component:sr,...e});Le(t,!0);const n=()=>G(yr,"$currentRoomData",s),r=()=>G(Ln,"$identityHash",s),o=()=>G(gr,"$sentMessageIds",s),[s,i]=bt();let l,a=X(!0),c=X(!1);function u(){return l?l.scrollHeight-l.scrollTop-l.clientHeight<=100:!0}function v(){const $=u();R(a,$,!0),R(c,!$)}function f(){l&&(l.scrollTop=l.scrollHeight,R(a,!0),R(c,!1))}an(()=>{const $=n()?.messages;l&&_(a)&&$&&requestAnimationFrame(()=>{l&&_(a)&&(l.scrollTop=l.scrollHeight)})}),an(()=>{n()?.room_id,R(a,!0),R(c,!1)});function m($){return!!($.type==="message"&&$.message_id&&$.sender_identity&&r()&&o()&&o().has($.message_id)&&$.sender_identity===r())}function y($){if(m($))return"chat chat-end";switch($.type){case"message":return"chat chat-start";case"system":return"chat chat-end";case"notice":return"chat chat-end";case"error":return"chat chat-end";default:return"chat"}}function E($){if(m($))return"chat-bubble chat-bubble-accent";switch($.type){case"message":return"chat-bubble chat-bubble-primary";case"system":return"chat-bubble chat-bubble-info";case"notice":return"chat-bubble chat-bubble-warning";case"error":return"chat-bubble chat-bubble-error";default:return"chat-bubble"}}var p={$set:Ye,$on:($,C)=>Ke(t,$,C)},w=aa(),D=h(w);fn(D,7,()=>n()?.messages||[],($,C)=>$.timestamp+$.text+C,($,C)=>{var g=oa(),T=h(g);{var M=Q=>{var K=ra(),ne=h(K),se=b(ne),xe=h(se,!0);d(se),d(K),re(()=>{ee(ne,`${_(C).user??""} `),ee(xe,_(C).timestamp)}),S(Q,K)};V(T,Q=>{_(C).user&&Q(M)})}var te=b(T,2),ue=h(te,!0);d(te);var j=b(te,2);{var fe=Q=>{var K=sa(),ne=h(K),se=h(ne,!0);d(ne),d(K),re(()=>ee(se,_(C).timestamp)),S(Q,K)};V(j,Q=>{!_(C).user&&_(C).timestamp&&Q(fe)})}d(g),re((Q,K)=>{jt(g,1,Q,"svelte-1o304hm"),jt(te,1,K,"svelte-1o304hm"),ee(ue,_(C).text)},[()=>Mr(y(_(C))),()=>Mr(E(_(C)))]),S($,g)}),d(D),vi(D,$=>l=$,()=>l);var z=b(D,2);{var I=$=>{var C=ia();C.__click=f,S($,C)};V(z,$=>{_(c)&&$(I)})}d(w),Pn("scroll",D,v),S(e,w);var Z=He(p);return i(),Z}ct(["click"]);const la="modulepreload",ca=function(e){return"/static/"+e},Pr={},Ls=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(v=>Promise.resolve(v).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};var i=c;document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),a=l?.nonce||l?.getAttribute("nonce");o=c(n.map(u=>{if(u=ca(u),u in Pr)return;Pr[u]=!0;const v=u.endsWith(".css"),f=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${f}`))return;const m=document.createElement("link");if(m.rel=v?"stylesheet":la,v||(m.as="script"),m.crossOrigin="",m.href=u,a&&m.setAttribute("nonce",a),document.head.appendChild(m),v)return new Promise((y,E)=>{m.addEventListener("load",y),m.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${u}`)))})}))}function s(l){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=l,window.dispatchEvent(a),!a.defaultPrevented)throw l}return o.then(l=>{for(const a of l||[])a.status==="rejected"&&s(a.reason);return t().catch(s)})};function ua(e){if(!e.startsWith("/"))return!1;const t=e.slice(1).trim().split(/\s+/),n=t[0].toLowerCase(),r=t.slice(1);switch(n){case"stats":return fa();case"reload":return da();case"who":return va(r);case"kline":return ha(r);case"kick":return ma(r);case"register":return pa(r);case"unregister":return _a(r);case"topic":return ba(r);case"mode":return ga(r);case"op":return ya(r);case"deop":return wa(r);case"voice":return xa(r);case"devoice":return ka(r);case"ban":return Ea(r);case"invite":return $a(r);case"join":return Sa(r);case"part":case"leave":return Ra(r);case"nick":return Ta(r);case"msg":case"query":return Ca(r);case"help":return Aa();default:return Ma(e)}}function fa(){return B({type:"send_command",command:"/stats",room:F(N)}),!0}function da(){return B({type:"send_command",command:"/reload",room:F(N)}),!0}function va(e){const t=e.length>0?e[0]:F(N);return B({type:"send_command",command:`/who ${t}`,room:F(N)}),!0}function ha(e){if(e.length<1)return ie("Usage: /kline [target]"),!0;const t=e[0],n=e.slice(1).join(" ");return t==="list"?B({type:"send_command",command:"/kline list",room:F(N)}):t==="add"&&n?B({type:"send_command",command:`/kline add ${n}`,room:F(N)}):t==="del"&&n?B({type:"send_command",command:`/kline del ${n}`,room:F(N)}):ie("Usage: /kline [target]"),!0}function ma(e){if(e.length<2)return ie("Usage: /kick "),!0;const t=e[0],n=e.slice(1).join(" ");return B({type:"send_command",command:`/kick ${t} ${n}`,room:F(N)}),!0}function pa(e){const t=e.length>0?e[0]:F(N);return B({type:"send_command",command:`/register ${t}`,room:F(N)}),!0}function _a(e){const t=e.length>0?e[0]:F(N);return B({type:"send_command",command:`/unregister ${t}`,room:F(N)}),!0}function ba(e){if(e.length===0)return ie("Usage: /topic [topic]"),!0;const t=e[0],n=e.slice(1).join(" ");return B({type:"send_command",command:`/topic ${t}${n?" "+n:""}`,room:F(N)}),!0}function ga(e){if(e.length<2)return ie("Usage: /mode [args]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return B({type:"send_command",command:`/mode ${t} ${n}${r?" "+r:""}`,room:F(N)}),!0}function ya(e){if(e.length<2)return ie("Usage: /op "),!0;const t=e[0],n=e.slice(1).join(" ");return B({type:"send_command",command:`/op ${t} ${n}`,room:F(N)}),!0}function wa(e){if(e.length<2)return ie("Usage: /deop "),!0;const t=e[0],n=e.slice(1).join(" ");return B({type:"send_command",command:`/deop ${t} ${n}`,room:F(N)}),!0}function xa(e){if(e.length<2)return ie("Usage: /voice "),!0;const t=e[0],n=e.slice(1).join(" ");return B({type:"send_command",command:`/voice ${t} ${n}`,room:F(N)}),!0}function ka(e){if(e.length<2)return ie("Usage: /devoice "),!0;const t=e[0],n=e.slice(1).join(" ");return B({type:"send_command",command:`/devoice ${t} ${n}`,room:F(N)}),!0}function Ea(e){if(e.length<2)return ie("Usage: /ban [target]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return n==="list"?B({type:"send_command",command:`/ban ${t} list`,room:F(N)}):(n==="add"||n==="del")&&r?B({type:"send_command",command:`/ban ${t} ${n} ${r}`,room:F(N)}):ie("Usage: /ban [target]"),!0}function $a(e){if(e.length<2)return ie("Usage: /invite [target]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return n==="list"?B({type:"send_command",command:`/invite ${t} list`,room:F(N)}):(n==="add"||n==="del")&&r?B({type:"send_command",command:`/invite ${t} ${n} ${r}`,room:F(N)}):ie("Usage: /invite [target]"),!0}function Sa(e){if(e.length===0)return ie("Usage: /join "),!0;const t=e[0];return B({type:"join_room",room:t}),!0}function Ra(e){const t=e.length>0?e[0]:F(N);return t==="[Hub]"?(ie("Cannot part from [Hub]"),!0):(B({type:"part_room",room:t}),!0)}function Ta(e){if(e.length===0)return ie("Usage: /nick "),!0;const t=e.join(" ");return B({type:"set_nickname",nickname:t}),!0}function Ca(e){if(e.length<2)return ie("Usage: /msg "),!0;const t=e[0],n=e.slice(1).join(" ");return B({type:"send_message",text:n,room:t}),!0}function Aa(e){const t=` +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();const ue=2,lr=4,cr=8,zs=1<<24,at=16,lt=32,At=64,Sn=128,Fe=512,me=1024,Se=2048,Ve=4096,Te=8192,ot=16384,Rn=32768,Ft=65536,kr=1<<17,Or=1<<18,Wt=1<<19,Ks=1<<20,nt=1<<25,Rt=32768,Yn=1<<21,ur=1<<22,vt=1<<23,gn=Symbol("$state"),Ys=Symbol("legacy props"),Gs=Symbol(""),jt=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},Tn=3,Vt=8,Gn=!1;var Lr=Array.isArray,Xs=Array.prototype.indexOf,Cn=Array.from,fr=Object.defineProperty,en=Object.getOwnPropertyDescriptor,Zs=Object.getOwnPropertyDescriptors,Qs=Object.prototype,eo=Array.prototype,Hr=Object.getPrototypeOf,$r=Object.isExtensible;const ht=()=>{};function jr(e){for(var t=0;t{e=r,t=o});return{promise:n,resolve:e,reject:t}}function Fr(e){return e===this.v}function Ur(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function qr(e){return!Ur(e,this.v)}function to(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function no(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function ro(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function so(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function oo(e){throw new Error("https://svelte.dev/e/effect_orphan")}function io(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function ao(){throw new Error("https://svelte.dev/e/hydration_failed")}function lo(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function co(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function uo(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function fo(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let vo=!1;const ho=1,mo=2,Jr=4,po=8,_o=16,bo=1,go=2,Br="[",Mn="[!",dr="]",Ut={},he=Symbol(),yo="http://www.w3.org/1999/xhtml";let Ce=null;function qt(e){Ce=e}function Ue(e,t=!1,n){Ce={p:Ce,i:!1,c:null,e:null,s:e,x:null,l:null}}function qe(e){var t=Ce,n=t.e;if(n!==null){t.e=null;for(var r of n)ms(r)}return e!==void 0&&(t.x=e),t.i=!0,Ce=t.p,e??{}}function Wr(){return!0}let xt=[];function Vr(){var e=xt;xt=[],jr(e)}function Nt(e){if(xt.length===0&&!tn){var t=xt;queueMicrotask(()=>{t===xt&&Vr()})}xt.push(e)}function wo(){for(;xt.length>0;)Vr()}function An(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function xo(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let j=!1;function rt(e){j=e}let U;function we(e){if(e===null)throw An(),Ut;return U=e}function Nn(){return we(Ke(U))}function d(e){if(j){if(Ke(U)!==null)throw An(),Ut;U=e}}function mt(e=1){if(j){for(var t=e,n=U;t--;)n=Ke(n);U=n}}function wn(e=!0){for(var t=0,n=U;;){if(n.nodeType===Vt){var r=n.data;if(r===dr){if(t===0)return n;t-=1}else(r===Br||r===Mn)&&(t+=1)}var o=Ke(n);e&&n.remove(),n=o}}function zr(e){if(!e||e.nodeType!==Vt)throw An(),Ut;return e.data}function st(e){if(typeof e!="object"||e===null||gn in e)return e;const t=Hr(e);if(t!==Qs&&t!==eo)return e;var n=new Map,r=Lr(e),o=X(0),s=Et,a=l=>{if(Et===s)return l();var i=H,c=Et;ke(null),Cr(s);var u=l();return ke(i),Cr(c),u};return r&&n.set("length",X(e.length)),new Proxy(e,{defineProperty(l,i,c){(!("value"in c)||c.configurable===!1||c.enumerable===!1||c.writable===!1)&&lo();var u=n.get(i);return u===void 0?u=a(()=>{var v=X(c.value);return n.set(i,v),v}):R(u,c.value,!0),!0},deleteProperty(l,i){var c=n.get(i);if(c===void 0){if(i in l){const u=a(()=>X(he));n.set(i,u),nn(o)}}else R(c,he),nn(o);return!0},get(l,i,c){if(i===gn)return e;var u=n.get(i),v=i in l;if(u===void 0&&(!v||en(l,i)?.writable)&&(u=a(()=>{var m=st(v?l[i]:he),y=X(m);return y}),n.set(i,u)),u!==void 0){var f=p(u);return f===he?void 0:f}return Reflect.get(l,i,c)},getOwnPropertyDescriptor(l,i){var c=Reflect.getOwnPropertyDescriptor(l,i);if(c&&"value"in c){var u=n.get(i);u&&(c.value=p(u))}else if(c===void 0){var v=n.get(i),f=v?.v;if(v!==void 0&&f!==he)return{enumerable:!0,configurable:!0,value:f,writable:!0}}return c},has(l,i){if(i===gn)return!0;var c=n.get(i),u=c!==void 0&&c.v!==he||Reflect.has(l,i);if(c!==void 0||q!==null&&(!u||en(l,i)?.writable)){c===void 0&&(c=a(()=>{var f=u?st(l[i]):he,m=X(f);return m}),n.set(i,c));var v=p(c);if(v===he)return!1}return u},set(l,i,c,u){var v=n.get(i),f=i in l;if(r&&i==="length")for(var m=c;mX(he)),n.set(m+"",y))}if(v===void 0)(!f||en(l,i)?.writable)&&(v=a(()=>X(void 0)),R(v,st(c)),n.set(i,v));else{f=v.v!==he;var S=a(()=>st(c));R(v,S)}var _=Reflect.getOwnPropertyDescriptor(l,i);if(_?.set&&_.set.call(u,c),!f){if(r&&typeof i=="string"){var $=n.get("length"),I=Number(i);Number.isInteger(I)&&I>=$.v&&R($,I+1)}nn(o)}return!0},ownKeys(l){p(o);var i=Reflect.ownKeys(l).filter(v=>{var f=n.get(v);return f===void 0||f.v!==he});for(var[c,u]of n)u.v!==he&&!(c in l)&&i.push(c);return i},setPrototypeOf(){co()}})}var Er,Kr,Yr,Gr;function Xn(){if(Er===void 0){Er=window,Kr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Yr=en(t,"firstChild").get,Gr=en(t,"nextSibling").get,$r(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),$r(n)&&(n.__t=void 0)}}function $e(e=""){return document.createTextNode(e)}function Tt(e){return Yr.call(e)}function Ke(e){return Gr.call(e)}function h(e,t){if(!j)return Tt(e);var n=Tt(U);if(n===null)n=U.appendChild($e());else if(t&&n.nodeType!==Tn){var r=$e();return n?.before(r),we(r),r}return we(n),n}function rn(e,t=!1){if(!j){var n=Tt(e);return n instanceof Comment&&n.data===""?Ke(n):n}if(t&&U?.nodeType!==Tn){var r=$e();return U?.before(r),we(r),r}return U}function g(e,t=1,n=!1){let r=j?U:e;for(var o;t--;)o=r,r=Ke(r);if(!j)return r;if(n&&r?.nodeType!==Tn){var s=$e();return r===null?o?.after(s):r.before(s),we(s),s}return we(r),r}function Xr(e){e.textContent=""}function Zr(){return!1}function Qr(e){var t=q;if(t===null)return H.f|=vt,e;if((t.f&Rn)===0){if((t.f&Sn)===0)throw e;t.b.error(e)}else Jt(e,t)}function Jt(e,t){for(;t!==null;){if((t.f&Sn)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e}const bn=new Set;let z=null,yn=null,je=null,Le=[],Dn=null,Zn=!1,tn=!1;class Be{committed=!1;current=new Map;previous=new Map;#t=new Set;#e=new Set;#n=0;#r=0;#l=null;#o=new Set;#s=new Set;skipped_effects=new Set;is_fork=!1;is_deferred(){return this.is_fork||this.#r>0}process(t){Le=[],yn=null,this.apply();var n={parent:null,effect:null,effects:[],render_effects:[]};for(const r of t)this.#i(r,n);this.is_fork||this.#u(),this.is_deferred()?(this.#a(n.effects),this.#a(n.render_effects)):(yn=this,z=null,Sr(n.render_effects),Sr(n.effects),yn=null,this.#l?.resolve()),je=null}#i(t,n){t.f^=me;for(var r=t.first;r!==null;){var o=r.f,s=(o&(lt|At))!==0,a=s&&(o&me)!==0,l=a||(o&Te)!==0||this.skipped_effects.has(r);if((r.f&Sn)!==0&&r.b?.is_pending()&&(n={parent:n,effect:r,effects:[],render_effects:[]}),!l&&r.fn!==null){s?r.f^=me:(o&lr)!==0?n.effects.push(r):fn(r)&&((r.f&at)!==0&&this.#o.add(r),on(r));var i=r.first;if(i!==null){r=i;continue}}var c=r.parent;for(r=r.next;r===null&&c!==null;)c===n.effect&&(this.#a(n.effects),this.#a(n.render_effects),n=n.parent),r=c.next,c=c.parent}}#a(t){for(const n of t)(n.f&Se)!==0?this.#o.add(n):(n.f&Ve)!==0&&this.#s.add(n),this.#c(n.deps),pe(n,me)}#c(t){if(t!==null)for(const n of t)(n.f&ue)===0||(n.f&Rt)===0||(n.f^=Rt,this.#c(n.deps))}capture(t,n){this.previous.has(t)||this.previous.set(t,n),(t.f&vt)===0&&(this.current.set(t,t.v),je?.set(t,t.v))}activate(){z=this,this.apply()}deactivate(){z===this&&(z=null,je=null)}flush(){if(this.activate(),Le.length>0){if(es(),z!==null&&z!==this)return}else this.#n===0&&this.process([]);this.deactivate()}discard(){for(const t of this.#e)t(this);this.#e.clear()}#u(){if(this.#r===0){for(const t of this.#t)t();this.#t.clear()}this.#n===0&&this.#f()}#f(){if(bn.size>1){this.previous.clear();var t=je,n=!0,r={parent:null,effect:null,effects:[],render_effects:[]};for(const s of bn){if(s===this){n=!1;continue}const a=[];for(const[i,c]of this.current){if(s.current.has(i))if(n&&c!==s.current.get(i))s.current.set(i,c);else continue;a.push(i)}if(a.length===0)continue;const l=[...s.current.keys()].filter(i=>!this.current.has(i));if(l.length>0){var o=Le;Le=[];const i=new Set,c=new Map;for(const u of a)ts(u,l,i,c);if(Le.length>0){z=s,s.apply();for(const u of Le)s.#i(u,r);s.deactivate()}Le=o}}z=null,je=t}this.committed=!0,bn.delete(this)}increment(t){this.#n+=1,t&&(this.#r+=1)}decrement(t){this.#n-=1,t&&(this.#r-=1),this.revive()}revive(){for(const t of this.#o)this.#s.delete(t),pe(t,Se),Ct(t);for(const t of this.#s)pe(t,Ve),Ct(t);this.flush()}oncommit(t){this.#t.add(t)}ondiscard(t){this.#e.add(t)}settled(){return(this.#l??=Ir()).promise}static ensure(){if(z===null){const t=z=new Be;bn.add(z),tn||Be.enqueue(()=>{z===t&&t.flush()})}return z}static enqueue(t){Nt(t)}apply(){}}function xe(e){var t=tn;tn=!0;try{for(var n;;){if(wo(),Le.length===0&&(z?.flush(),Le.length===0))return Dn=null,n;es()}}finally{tn=t}}function es(){var e=$t;Zn=!0;var t=null;try{var n=0;for(kn(!0);Le.length>0;){var r=Be.ensure();if(n++>1e3){var o,s;ko()}r.process(Le),pt.clear()}}finally{Zn=!1,kn(e),Dn=null}}function ko(){try{io()}catch(e){Jt(e,Dn)}}let Qe=null;function Sr(e){var t=e.length;if(t!==0){for(var n=0;n0)){pt.clear();for(const o of Qe){if((o.f&(ot|Te))!==0)continue;const s=[o];let a=o.parent;for(;a!==null;)Qe.has(a)&&(Qe.delete(a),s.push(a)),a=a.parent;for(let l=s.length-1;l>=0;l--){const i=s[l];(i.f&(ot|Te))===0&&on(i)}}Qe.clear()}}Qe=null}}function ts(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const o of e.reactions){const s=o.f;(s&ue)!==0?ts(o,t,n,r):(s&(ur|at))!==0&&(s&Se)===0&&ns(o,t,r)&&(pe(o,Se),Ct(o))}}function ns(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const o of e.deps){if(t.includes(o))return!0;if((o.f&ue)!==0&&ns(o,t,n))return n.set(o,!0),!0}return n.set(e,!1),!1}function Ct(e){for(var t=Dn=e;t.parent!==null;){t=t.parent;var n=t.f;if(Zn&&t===q&&(n&at)!==0&&(n&Or)===0)return;if((n&(At|lt))!==0){if((n&me)===0)return;t.f^=me}}Le.push(t)}function $o(e){let t=0,n=Mt(0),r;return()=>{an()&&(p(n),On(()=>(t===0&&(r=zt(()=>e(()=>nn(n)))),t+=1,()=>{Nt(()=>{t-=1,t===0&&(r?.(),r=void 0,nn(n))})})))}}var Eo=Ft|Wt|Sn;function So(e,t,n){new Ro(e,t,n)}class Ro{parent;#t=!1;#e;#n=j?U:null;#r;#l;#o;#s=null;#i=null;#a=null;#c=null;#u=null;#f=0;#d=0;#h=!1;#v=null;#g=$o(()=>(this.#v=Mt(this.#f),()=>{this.#v=null}));constructor(t,n,r){this.#e=t,this.#r=n,this.#l=r,this.parent=q.b,this.#t=!!this.#r.pending,this.#o=_r(()=>{if(q.b=this,j){const s=this.#n;Nn(),s.nodeType===Vt&&s.data===Mn?this.#w():this.#y()}else{var o=this.#_();try{this.#s=He(()=>r(o))}catch(s){this.error(s)}this.#d>0?this.#p():this.#t=!1}return()=>{this.#u?.remove()}},Eo),j&&(this.#e=U)}#y(){try{this.#s=He(()=>this.#l(this.#e))}catch(t){this.error(t)}this.#t=!1}#w(){const t=this.#r.pending;t&&(this.#i=He(()=>t(this.#e)),Be.enqueue(()=>{var n=this.#_();this.#s=this.#m(()=>(Be.ensure(),He(()=>this.#l(n)))),this.#d>0?this.#p():(St(this.#i,()=>{this.#i=null}),this.#t=!1)}))}#_(){var t=this.#e;return this.#t&&(this.#u=$e(),this.#e.before(this.#u),t=this.#u),t}is_pending(){return this.#t||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#r.pending}#m(t){var n=q,r=H,o=Ce;ze(this.#o),ke(this.#o),qt(this.#o.ctx);try{return t()}catch(s){return Qr(s),null}finally{ze(n),ke(r),qt(o)}}#p(){const t=this.#r.pending;this.#s!==null&&(this.#c=document.createDocumentFragment(),this.#c.append(this.#u),ws(this.#s,this.#c)),this.#i===null&&(this.#i=He(()=>t(this.#e)))}#b(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#b(t);return}this.#d+=t,this.#d===0&&(this.#t=!1,this.#i&&St(this.#i,()=>{this.#i=null}),this.#c&&(this.#e.before(this.#c),this.#c=null))}update_pending_count(t){this.#b(t),this.#f+=t,this.#v&&Bt(this.#v,this.#f)}get_effect_pending(){return this.#g(),p(this.#v)}error(t){var n=this.#r.onerror;let r=this.#r.failed;if(this.#h||!n&&!r)throw t;this.#s&&(Ee(this.#s),this.#s=null),this.#i&&(Ee(this.#i),this.#i=null),this.#a&&(Ee(this.#a),this.#a=null),j&&(we(this.#n),mt(),we(wn()));var o=!1,s=!1;const a=()=>{if(o){xo();return}o=!0,s&&fo(),Be.ensure(),this.#f=0,this.#a!==null&&St(this.#a,()=>{this.#a=null}),this.#t=this.has_pending_snippet(),this.#s=this.#m(()=>(this.#h=!1,He(()=>this.#l(this.#e)))),this.#d>0?this.#p():this.#t=!1};var l=H;try{ke(null),s=!0,n?.(t,a),s=!1}catch(i){Jt(i,this.#o&&this.#o.parent)}finally{ke(l)}r&&Nt(()=>{this.#a=this.#m(()=>{Be.ensure(),this.#h=!0;try{return He(()=>{r(this.#e,()=>t,()=>a)})}catch(i){return Jt(i,this.#o.parent),null}finally{this.#h=!1}})})}}function To(e,t,n,r){const o=vr;if(n.length===0&&e.length===0){r(t.map(o));return}var s=z,a=q,l=Co();function i(){Promise.all(n.map(c=>Mo(c))).then(c=>{l();try{r([...t.map(o),...c])}catch(u){(a.f&ot)===0&&Jt(u,a)}s?.deactivate(),xn()}).catch(c=>{Jt(c,a)})}e.length>0?Promise.all(e).then(()=>{l();try{return i()}finally{s?.deactivate(),xn()}}):i()}function Co(){var e=q,t=H,n=Ce,r=z;return function(s=!0){ze(e),ke(t),qt(n),s&&r?.activate()}}function xn(){ze(null),ke(null),qt(null)}function vr(e){var t=ue|Se,n=H!==null&&(H.f&ue)!==0?H:null;return q!==null&&(q.f|=Wt),{ctx:Ce,deps:null,effects:null,equals:Fr,f:t,fn:e,reactions:null,rv:0,v:he,wv:0,parent:n??q,ac:null}}function Mo(e,t){let n=q;n===null&&no();var r=n.b,o=void 0,s=Mt(he),a=!H,l=new Map;return Jo(()=>{var i=Ir();o=i.promise;try{Promise.resolve(e()).then(i.resolve,i.reject).then(()=>{c===z&&c.committed&&c.deactivate(),xn()})}catch(f){i.reject(f),xn()}var c=z;if(a){var u=!r.is_pending();r.update_pending_count(1),c.increment(u),l.get(c)?.reject(jt),l.delete(c),l.set(c,i)}const v=(f,m=void 0)=>{if(c.activate(),m)m!==jt&&(s.f|=vt,Bt(s,m));else{(s.f&vt)!==0&&(s.f^=vt),Bt(s,f);for(const[y,S]of l){if(l.delete(y),y===c)break;S.reject(jt)}}a&&(r.update_pending_count(-1),c.decrement(u))};i.promise.then(v,f=>v(null,f||"unknown"))}),pr(()=>{for(const i of l.values())i.reject(jt)}),new Promise(i=>{function c(u){function v(){u===o?i(s):c(o)}u.then(v,v)}c(o)})}function Ao(e){const t=vr(e);return t.equals=qr,t}function rs(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n0&&!os&&Do()}return t}function Do(){os=!1;var e=$t;kn(!0);const t=Array.from(Qn);try{for(const n of t)(n.f&me)!==0&&pe(n,Ve),fn(n)&&on(n)}finally{kn(e)}Qn.clear()}function nn(e){R(e,e.v+1)}function is(e,t){var n=e.reactions;if(n!==null)for(var r=n.length,o=0;o{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Pn(e){var t=H,n=q;ke(null),ze(null);try{return e()}finally{ke(t),ze(n)}}function ls(e,t,n,r=n){e.addEventListener(t,()=>Pn(n));const o=e.__on_r;o?e.__on_r=()=>{o(),r(!0)}:e.__on_r=()=>r(!0),as()}let $t=!1;function kn(e){$t=e}let Dt=!1;function Tr(e){Dt=e}let H=null,We=!1;function ke(e){H=e}let q=null;function ze(e){q=e}let it=null;function Po(e){H!==null&&(it===null?it=[e]:it.push(e))}let ye=null,Re=0,Oe=null;function Oo(e){Oe=e}let cs=1,sn=0,Et=sn;function Cr(e){Et=e}function us(){return++cs}function fn(e){var t=e.f;if((t&Se)!==0)return!0;if(t&ue&&(e.f&=~Rt),(t&Ve)!==0){var n=e.deps;if(n!==null)for(var r=n.length,o=0;oe.wv)return!0}(t&Fe)!==0&&je===null&&pe(e,me)}return!1}function fs(e,t,n=!0){var r=e.reactions;if(r!==null&&!it?.includes(e))for(var o=0;o{e.ac.abort(jt)}),e.ac=null);try{e.f|=Yn;var u=e.fn,v=u(),f=e.deps;if(ye!==null){var m;if($n(e,Re),f!==null&&Re>0)for(f.length=Re+ye.length,m=0;mnew Promise(r=>{n.outro?St(t,()=>{Ee(t),r(void 0)}):(Ee(t),r(void 0))})}function qo(e){return ct(lr,e,!1)}function Jo(e){return ct(ur|Wt,e,!0)}function On(e,t=0){return ct(cr|t,e,!0)}function ne(e,t=[],n=[],r=[]){To(r,t,n,o=>{ct(cr,()=>e(...o.map(p)),!0)})}function _r(e,t=0){var n=ct(at|t,e,!0);return n}function He(e){return ct(lt|Wt,e,!0)}function ps(e){var t=e.teardown;if(t!==null){const n=Dt,r=H;Tr(!0),ke(null);try{t.call(null)}finally{Tr(n),ke(r)}}}function _s(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const o=n.ac;o!==null&&Pn(()=>{o.abort(jt)});var r=n.next;(n.f&At)!==0?n.parent=null:Ee(n,t),n=r}}function Bo(e){for(var t=e.first;t!==null;){var n=t.next;(t.f<)===0&&Ee(t),t=n}}function Ee(e,t=!0){var n=!1;(t||(e.f&Or)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Wo(e.nodes.start,e.nodes.end),n=!0),_s(e,t&&!n),$n(e,0),pe(e,ot);var r=e.nodes&&e.nodes.t;if(r!==null)for(const s of r)s.stop();ps(e);var o=e.parent;o!==null&&o.first!==null&&bs(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function Wo(e,t){for(;e!==null;){var n=e===t?null:Ke(e);e.remove(),e=n}}function bs(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function St(e,t,n=!0){var r=[];gs(e,r,!0);var o=()=>{n&&Ee(e),t&&t()},s=r.length;if(s>0){var a=()=>--s||o();for(var l of r)l.out(a)}else o()}function gs(e,t,n){if((e.f&Te)===0){e.f^=Te;var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)(l.is_global||n)&&t.push(l);for(var o=e.first;o!==null;){var s=o.next,a=(o.f&Ft)!==0||(o.f<)!==0&&(e.f&at)!==0;gs(o,t,a?n:!1),o=s}}}function br(e){ys(e,!0)}function ys(e,t){if((e.f&Te)!==0){e.f^=Te,(e.f&me)===0&&(pe(e,Se),Ct(e));for(var n=e.first;n!==null;){var r=n.next,o=(n.f&Ft)!==0||(n.f<)!==0;ys(n,o?t:!1),n=r}var s=e.nodes&&e.nodes.t;if(s!==null)for(const a of s)(a.is_global||t)&&a.in()}}function ws(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var o=n===r?null:Ke(n);t.append(n),n=o}}const xs=new Set,er=new Set;function Vo(e,t,n,r={}){function o(s){if(r.capture||Zt.call(t,s),!s.cancelBubble)return Pn(()=>n?.call(this,s))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Nt(()=>{t.addEventListener(e,o,r)}):t.addEventListener(e,o,r),o}function Ln(e,t,n,r,o){var s={capture:r,passive:o},a=Vo(e,t,n,s);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&pr(()=>{t.removeEventListener(e,a,s)})}function ut(e){for(var t=0;t{throw _});throw f}}finally{e.__root=t,delete e.currentTarget,ke(u),ze(v)}}}function zo(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("",""),t.content}function _t(e,t){var n=q;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function M(e,t){var n=(t&bo)!==0,r=(t&go)!==0,o,s=!e.startsWith("");return()=>{if(j)return _t(U,null),U;o===void 0&&(o=zo(s?e:""+e),n||(o=Tt(o)));var a=r||Kr?document.importNode(o,!0):o.cloneNode(!0);if(n){var l=Tt(a),i=a.lastChild;_t(l,i)}else _t(a,a);return a}}function cn(e=""){if(!j){var t=$e(e+"");return _t(t,t),t}var n=U;return n.nodeType!==Tn&&(n.before(n=$e()),we(n)),_t(n,n),n}function En(){if(j)return _t(U,null),U;var e=document.createDocumentFragment(),t=document.createComment(""),n=$e();return e.append(t,n),_t(t,n),e}function E(e,t){if(j){var n=q;((n.f&Rn)===0||n.nodes.end===null)&&(n.nodes.end=U),Nn();return}e!==null&&e.before(t)}const Ko=["touchstart","touchmove"];function Yo(e){return Ko.includes(e)}function Q(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+"")}function ks(e,t){return $s(e,t)}function Go(e,t){Xn(),t.intro=t.intro??!1;const n=t.target,r=j,o=U;try{for(var s=Tt(n);s&&(s.nodeType!==Vt||s.data!==Br);)s=Ke(s);if(!s)throw Ut;rt(!0),we(s);const a=$s(e,{...t,anchor:s});return rt(!1),a}catch(a){if(a instanceof Error&&a.message.split(` +`).some(l=>l.startsWith("https://svelte.dev/e/")))throw a;return a!==Ut&&console.warn("Failed to hydrate: ",a),t.recover===!1&&ao(),Xn(),Xr(n),rt(!1),ks(e,t)}finally{rt(r),we(o)}}const Lt=new Map;function $s(e,{target:t,anchor:n,props:r={},events:o,context:s,intro:a=!0}){Xn();var l=new Set,i=v=>{for(var f=0;f{var v=n??t.appendChild($e());return So(v,{pending:()=>{}},f=>{if(s){Ue({});var m=Ce;m.c=s}if(o&&(r.$$events=o),j&&_t(f,null),c=e(f,r)||{},j&&(q.nodes.end=U,U===null||U.nodeType!==Vt||U.data!==dr))throw An(),Ut;s&&qe()}),()=>{for(var f of l){t.removeEventListener(f,Zt);var m=Lt.get(f);--m===0?(document.removeEventListener(f,Zt),Lt.delete(f)):Lt.set(f,m)}er.delete(i),v!==n&&v.parentNode?.removeChild(v)}});return tr.set(c,u),c}let tr=new WeakMap;function Xo(e,t){const n=tr.get(e);return n?(tr.delete(e),n(t)):Promise.resolve()}function Ye(e){return new Zo(e)}class Zo{#t;#e;constructor(t){var n=new Map,r=(s,a)=>{var l=mr(a,!1,!1);return n.set(s,l),l};const o=new Proxy({...t.props||{},$$events:{}},{get(s,a){return p(n.get(a)??r(a,Reflect.get(s,a)))},has(s,a){return a===Ys?!0:(p(n.get(a)??r(a,Reflect.get(s,a))),Reflect.has(s,a))},set(s,a,l){return R(n.get(a)??r(a,l),l),Reflect.set(s,a,l)}});this.#e=(t.hydrate?Go:ks)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&xe(),this.#t=o.$$events;for(const s of Object.keys(this.#e))s==="$set"||s==="$destroy"||s==="$on"||fr(this,s,{get(){return this.#e[s]},set(a){this.#e[s]=a},enumerable:!0});this.#e.$set=s=>{Object.assign(o,s)},this.#e.$destroy=()=>{Xo(this.#e)}}$set(t){this.#e.$set(t)}$on(t,n){this.#t[t]=this.#t[t]||[];const r=(...o)=>n.call(this,...o);return this.#t[t].push(r),()=>{this.#t[t]=this.#t[t].filter(o=>o!==r)}}$destroy(){this.#e.$destroy()}}const Qo="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(Qo);class ei{anchor;#t=new Map;#e=new Map;#n=new Map;#r=new Set;#l=!0;constructor(t,n=!0){this.anchor=t,this.#l=n}#o=()=>{var t=z;if(this.#t.has(t)){var n=this.#t.get(t),r=this.#e.get(n);if(r)br(r),this.#r.delete(n);else{var o=this.#n.get(n);o&&(this.#e.set(n,o.effect),this.#n.delete(n),o.fragment.lastChild.remove(),this.anchor.before(o.fragment),r=o.effect)}for(const[s,a]of this.#t){if(this.#t.delete(s),s===t)break;const l=this.#n.get(a);l&&(Ee(l.effect),this.#n.delete(a))}for(const[s,a]of this.#e){if(s===n||this.#r.has(s))continue;const l=()=>{if(Array.from(this.#t.values()).includes(s)){var c=document.createDocumentFragment();ws(a,c),c.append($e()),this.#n.set(s,{effect:a,fragment:c})}else Ee(a);this.#r.delete(s),this.#e.delete(s)};this.#l||!r?(this.#r.add(s),St(a,l,!1)):l()}}};#s=t=>{this.#t.delete(t);const n=Array.from(this.#t.values());for(const[r,o]of this.#n)n.includes(r)||(Ee(o.effect),this.#n.delete(r))};ensure(t,n){var r=z,o=Zr();if(n&&!this.#e.has(t)&&!this.#n.has(t))if(o){var s=document.createDocumentFragment(),a=$e();s.append(a),this.#n.set(t,{effect:He(()=>n(a)),fragment:s})}else this.#e.set(t,He(()=>n(this.anchor)));if(this.#t.set(r,t),o){for(const[l,i]of this.#e)l===t?r.skipped_effects.delete(i):r.skipped_effects.add(i);for(const[l,i]of this.#n)l===t?r.skipped_effects.delete(i.effect):r.skipped_effects.add(i.effect);r.oncommit(this.#o),r.ondiscard(this.#s)}else j&&(this.anchor=U),this.#o()}}function ti(e){Ce===null&&to(),ln(()=>{const t=zt(e);if(typeof t=="function")return t})}function F(e,t,n=!1){j&&Nn();var r=new ei(e),o=n?Ft:0;function s(a,l){if(j){const c=zr(e)===Mn;if(a===c){var i=wn();we(i),r.anchor=i,rt(!1),r.ensure(a,l),rt(!0);return}}r.ensure(a,l)}_r(()=>{var a=!1;t((l,i=!0)=>{a=!0,s(i,l)}),a||s(!1,null)},o)}function Hn(e,t){return t}function ni(e,t,n){for(var r=[],o=t.length,s,a=t.length,l=0;l{if(s){if(s.pending.delete(v),s.done.add(v),s.pending.size===0){var f=e.outrogroups;nr(Cn(s.done)),f.delete(s),f.size===0&&(e.outrogroups=null)}}else a-=1},!1)}if(a===0){var i=r.length===0&&n!==null;if(i){var c=n,u=c.parentNode;Xr(u),u.append(c),e.items.clear()}nr(t,!i)}else s={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(s)}function nr(e,t=!0){for(var n=0;n{var $=n();return Lr($)?$:$==null?[]:Cn($)}),f,m=!0;function y(){_.fallback=u,ri(_,f,a,t,r),u!==null&&(f.length===0?(u.f&nt)===0?br(u):(u.f^=nt,Qt(u,null,a)):St(u,()=>{u=null}))}var S=_r(()=>{f=p(v);var $=f.length;let I=!1;if(j){var B=zr(a)===Mn;B!==($===0)&&(a=wn(),we(a),rt(!1),I=!0)}for(var L=new Set,ee=z,Y=Zr(),W=0;W<$;W+=1){j&&U.nodeType===Vt&&U.data===dr&&(a=U,I=!0,rt(!1));var w=f[W],C=r(w,W),b=m?null:l.get(C);b?(b.v&&Bt(b.v,w),b.i&&Bt(b.i,W),Y&&ee.skipped_effects.delete(b.e)):(b=si(l,m?a:Ar??=$e(),w,C,W,o,t,n),m||(b.e.f|=nt),l.set(C,b)),L.add(C)}if($===0&&s&&!u&&(m?u=He(()=>s(a)):(u=He(()=>s(Ar??=$e())),u.f|=nt)),j&&$>0&&we(wn()),!m)if(Y){for(const[T,oe]of l)L.has(T)||ee.skipped_effects.add(oe.e);ee.oncommit(y),ee.ondiscard(()=>{})}else y();I&&rt(!0),p(v)}),_={effect:S,items:l,outrogroups:null,fallback:u};m=!1,j&&(a=U)}function ri(e,t,n,r,o){var s=(r&po)!==0,a=t.length,l=e.items,i=e.effect.first,c,u=null,v,f=[],m=[],y,S,_,$;if(s)for($=0;$0){var C=(r&Jr)!==0&&a===0?n:null;if(s){for($=0;${if(v!==void 0)for(_ of v)_.nodes?.a?.apply()})}function si(e,t,n,r,o,s,a,l){var i=(a&ho)!==0?(a&_o)===0?mr(n,!1,!1):Mt(n):null,c=(a&mo)!==0?Mt(o):null;return{v:i,i:c,e:He(()=>(s(t,i??n,c??o,l),()=>{e.delete(r)}))}}function Qt(e,t,n){if(e.nodes)for(var r=e.nodes.start,o=e.nodes.end,s=t&&(t.f&nt)===0?t.nodes.start:n;r!==null;){var a=Ke(r);if(s.before(r),r===o)return;r=a}}function dt(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function oi(e,t,n){var r=e==null?"":""+e;return r===""?null:r}function It(e,t,n,r,o,s){var a=e.__className;if(j||a!==n||a===void 0){var l=oi(n);(!j||l!==e.getAttribute("class"))&&(l==null?e.removeAttribute("class"):e.className=l),e.__className=n}return s}const ii=Symbol("is custom element"),ai=Symbol("is html");function tt(e){if(j){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute("value")){var r=e.value;rr(e,"value",null),e.value=r}if(e.hasAttribute("checked")){var o=e.checked;rr(e,"checked",null),e.checked=o}}};e.__on_r=n,Nt(n),as()}}function rr(e,t,n,r){var o=li(e);j&&(o[t]=e.getAttribute(t),t==="src"||t==="srcset"||t==="href"&&e.nodeName==="LINK")||o[t]!==(o[t]=n)&&(t==="loading"&&(e[Gs]=n),n==null?e.removeAttribute(t):typeof n!="string"&&ci(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function li(e){return e.__attributes??={[ii]:e.nodeName.includes("-"),[ai]:e.namespaceURI===yo}}var Nr=new Map;function ci(e){var t=e.getAttribute("is")||e.nodeName,n=Nr.get(t);if(n)return n;Nr.set(t,n=[]);for(var r,o=e,s=Element.prototype;s!==o;){r=Zs(o);for(var a in r)r[a].set&&n.push(a);o=Hr(o)}return n}function kt(e,t,n=t){var r=new WeakSet;ls(e,"input",async o=>{var s=o?e.defaultValue:e.value;if(s=zn(e)?Kn(s):s,n(s),z!==null&&r.add(z),await Ho(),s!==(s=t())){var a=e.selectionStart,l=e.selectionEnd,i=e.value.length;if(e.value=s??"",l!==null){var c=e.value.length;a===l&&l===i&&c>i?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=a,e.selectionEnd=Math.min(l,c))}}}),(j&&e.defaultValue!==e.value||zt(t)==null&&e.value)&&(n(zn(e)?Kn(e.value):e.value),z!==null&&r.add(z)),On(()=>{var o=t();if(e===document.activeElement){var s=yn??z;if(r.has(s))return}zn(e)&&o===Kn(e.value)||e.type==="date"&&!o&&!e.value||o!==e.value&&(e.value=o??"")})}function Es(e,t,n=t){ls(e,"change",r=>{var o=r?e.defaultChecked:e.checked;n(o)}),(j&&e.defaultChecked!==e.checked||zt(t)==null)&&n(e.checked),On(()=>{var r=t();e.checked=!!r})}function zn(e){var t=e.type;return t==="number"||t==="range"}function Kn(e){return e===""?null:+e}function Dr(e,t){return e===t||e?.[gn]===t}function ui(e={},t,n,r){return qo(()=>{var o,s;return On(()=>{o=s,s=[],zt(()=>{e!==n(...s)&&(t(e,...s),o&&Dr(n(...o),e)&&t(null,...o))})}),()=>{Nt(()=>{s&&Dr(n(...s),e)&&t(null,...s)})}}),e}function Ge(e,t,n){e.$$events||={},e.$$events[t]||=[],e.$$events[t].push(n)}function Xe(e){for(var t in e)t in this&&(this[t]=e[t])}function gr(e,t,n){if(e==null)return t(void 0),n&&n(void 0),ht;const r=zt(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Ht=[];function fi(e,t){return{subscribe:Me(e,t).subscribe}}function Me(e,t=ht){let n=null;const r=new Set;function o(l){if(Ur(e,l)&&(e=l,n)){const i=!Ht.length;for(const c of r)c[1](),Ht.push(c,e);if(i){for(let c=0;c{r.delete(c),r.size===0&&n&&(n(),n=null)}}return{set:o,update:s,subscribe:a}}function Ss(e,t,n){const r=!Array.isArray(e),o=r?[e]:e;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const s=t.length<2;return fi(n,(a,l)=>{let i=!1;const c=[];let u=0,v=ht;const f=()=>{if(u)return;v();const y=t(r?c[0]:c,a,l);s?a(y):v=typeof y=="function"?y:ht},m=o.map((y,S)=>gr(y,_=>{c[S]=_,u&=~(1<{u|=1<t=n)(),t}let sr=Symbol();function K(e,t,n){const r=n[t]??={store:null,source:mr(void 0),unsubscribe:ht};if(r.store!==e&&!(sr in n))if(r.unsubscribe(),r.store=e??null,e==null)r.source.v=void 0,r.unsubscribe=ht;else{var o=!0;r.unsubscribe=gr(e,s=>{o?r.source.v=s:R(r.source,s)}),o=!1}return e&&sr in n?P(e):p(r.source)}function bt(){const e={};function t(){pr(()=>{for(var n in e)e[n].unsubscribe();fr(e,sr,{enumerable:!1,value:!0})})}return[e,t]}function Ie(e,t,n,r){var o=r,s=!0,a=()=>(s&&(s=!1,o=r),o),l;l=e[t],l===void 0&&r!==void 0&&(l=a());var i;i=()=>{var f=e[t];return f===void 0?a():(s=!0,f)};var c=!1,u=vr(()=>(c=!1,i())),v=q;return(function(f,m){if(arguments.length>0){const y=m?p(u):f;return R(u,y),c=!0,o!==void 0&&(o=y),f}return Dt&&c||(v.f&ot)!==0?u.v:p(u)})}const Rs=Me(null),un=Me(!1),gt=Me(!1),yt=Me(null),Kt=Me(""),jn=Me(null),vn=Me(null),A=Me("[Hub]"),de=Me(new Map([["[Hub]",{messages:[],users:new Set,unread:0}]])),In=Me([]),hn=Me({hubHash:"",destName:"rrc.hub",nickname:"",identityPath:"~/.rrc-web/identity"}),yr=Me(new Set),wr=Ss([de,A],([e,t])=>e.get(t)||{messages:[],users:new Set,unread:0}),xr=Ss(de,e=>Array.from(e.keys())),Ts=Object.freeze(Object.defineProperty({__proto__:null,connectionSettings:hn,currentRoom:A,currentRoomData:wr,discoveredHubs:In,hubName:yt,identityHash:jn,latency:vn,nickname:Kt,roomList:xr,rooms:de,rrcConnected:gt,sentMessageIds:yr,ws:Rs,wsConnected:un},Symbol.toStringTag,{value:"Module"}));let et=null;function Cs(){const t=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;et=new WebSocket(t),Rs.set(et),et.onopen=()=>{un.set(!0),or(),Oi(),J({type:"get_state"})},et.onmessage=n=>{const r=JSON.parse(n.data);di(r)},et.onerror=n=>{console.error("WebSocket error:",n),n.currentTarget?.readyState===WebSocket.CLOSED&&fetch("/ws",{method:"HEAD"}).then(r=>{r.status===401&&window.location.reload()}).catch(()=>{})},et.onclose=n=>{un.set(!1),gt.set(!1),vn.set(null),n.code===1008||n.code===1002?(console.log("WebSocket closed due to authentication failure"),window.location.reload()):setTimeout(Cs,3e3)}}function J(e){et&&et.readyState===WebSocket.OPEN&&et.send(JSON.stringify(e))}function di(e){switch(e.type){case"connected":vi(e);break;case"disconnected":hi();break;case"message":mi(e);break;case"notice":pi(e);break;case"error":_i(e);break;case"system":bi(e);break;case"join":gi(e);break;case"part":yi(e);break;case"message_sent":wi(e);break;case"room_joined":xi(e.room,e.users);break;case"room_parted":ki(e.room);break;case"state":$i(e);break;case"latency":Ei(e);break;case"user_list_update":Si(e);break;case"hub_info":Ri(e);break;case"hub_discovered":Ti(e);break;case"discovered_hubs":Ci(e);break;case"nickname_set":Mi(e);break}}function vi(e){gt.set(!0),e.hub_name&&yt.set(e.hub_name),Kt.set(e.nickname||""),e.identity_hash&&jn.set(e.identity_hash)}function hi(){gt.set(!1),yt.set(null),de.update(e=>{const t=e.get("[Hub]")||{messages:[],users:new Set,unread:0};return t.messages.push({type:"system",text:"Disconnected from hub",timestamp:new Date().toLocaleTimeString()}),e.set("[Hub]",t),new Map(e)})}function mi(e){const t=e.room||"[Hub]";de.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.messages.push({type:"message",user:e.user,text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString(),message_id:e.message_id,sender_identity:e.sender_identity}),t!==P(A)&&r.unread++,new Map(n)})}function pi(e){const t=e.room||"[Hub]";de.update(n=>(n.has(t)||n.set(t,{messages:[],users:new Set,unread:0}),n.get(t).messages.push({type:"notice",text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString()}),new Map(n)))}function _i(e){const t=P(A);de.update(n=>{const r=n.get(t);return r&&r.messages.push({type:"error",text:e.text||e.error,timestamp:new Date().toLocaleTimeString()}),new Map(n)})}function bi(e){const t=e.room||P(A);de.update(n=>(n.has(t)||n.set(t,{messages:[],users:new Set,unread:0}),n.get(t).messages.push({type:"system",text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString()}),new Map(n)))}function gi(e){const t=e.room||P(A);de.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.messages.push({type:"join",user:e.user,timestamp:e.timestamp||new Date().toLocaleTimeString()}),t!==P(A)&&r.unread++,new Map(n)})}function yi(e){const t=e.room||P(A);de.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.messages.push({type:"part",user:e.user,timestamp:e.timestamp||new Date().toLocaleTimeString()}),t!==P(A)&&r.unread++,new Map(n)})}function wi(e){e.message_id&&yr.update(t=>{if(t.add(e.message_id),t.size>100){const n=t.values().next().value;t.delete(n)}return t})}function xi(e,t){de.update(n=>{n.has(e)||n.set(e,{messages:[],users:new Set,unread:0});const r=n.get(e);return r.users=new Set(t||[]),new Map(n)}),A.set(e)}function ki(e){de.update(t=>(t.delete(e),new Map(t))),P(A)===e&&A.set("[Hub]")}function $i(e){e.connected!==void 0&>.set(e.connected),e.hub_name&&yt.set(e.hub_name),e.nickname&&Kt.set(e.nickname),e.identity_hash&&jn.set(e.identity_hash),e.config&&hn.update(t=>({...t,hubHash:e.config.hub_hash||t.hubHash,destName:e.config.dest_name||t.destName,nickname:e.config.nickname||t.nickname,identityPath:e.config.identity_path||t.identityPath})),e.rooms&&Object.keys(e.rooms).length>0&&de.update(t=>{const n=new Map;return Object.keys(e.rooms).forEach(r=>{const o=e.rooms[r],s=t.get(r);n.set(r,{messages:o.messages||s?.messages||[],users:new Set(o.users||[]),unread:s?.unread||0})}),n})}function Ei(e){e.latency_ms!==void 0&&vn.set(e.latency_ms)}function Si(e){const t=e.room||"[Hub]";de.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.users=new Set(e.users||[]),new Map(n)})}function Ri(e){yt.set(e.hub_name)}function Ti(e){e.hub&&In.update(t=>t.find(r=>r.hash===e.hub.hash)?t:[...t,e.hub])}function Ci(e){In.set(e.hubs||[])}function Mi(e){e.nickname!==void 0&&Kt.set(e.nickname)}function or(){J({type:"get_discovered_hubs"})}function Ai(e,t,n,r){J({type:"connect",hub_hash:e,dest_name:t,nickname:n,identity_path:r}),Li(e,t,n,r)}function Ms(){J({type:"disconnect"})}function Ni(e){J({type:"join_room",room:e})}function Di(e){J({type:"part_room",room:e})}function Pi(e,t){e.trim()&&J({type:"send_message",text:e,room:t||P(A)})}function Oi(){const e=localStorage.getItem("rrc_connection_settings");if(e)try{const t=JSON.parse(e);hn.set(t)}catch(t){console.error("Failed to load connection settings:",t)}}function Li(e,t,n,r){const o={hubHash:e,destName:t,nickname:n,identityPath:r};localStorage.setItem("rrc_connection_settings",JSON.stringify(o)),hn.set(o)}function As(e){de.update(t=>{const n=t.get(e);return n&&(n.unread=0),new Map(t)})}var Hi=M(' '),ji=M(''),Ii=M('
    WS
    '),Fi=M('
    WS
    '),Ui=M('
    RRC
    '),qi=M('
    RRC
    '),Ji=M('
    Nick:
    '),Bi=M('
    Latency:
    '),Wi=M('');function Ns(e,t){if(new.target)return Ye({component:Ns,...e});Ue(t,!0);const n=()=>K(yt,"$hubName",i),r=()=>K(gt,"$rrcConnected",i),o=()=>K(un,"$wsConnected",i),s=()=>K(Kt,"$nickname",i),a=()=>K(vn,"$latency",i),l=()=>K(A,"$currentRoom",i),[i,c]=bt();let u=Ie(t,"onToggleTheme"),v=X("dark");function f(){R(v,p(v)==="dark"?"light":"dark",!0),document.documentElement.setAttribute("data-theme",p(v)),u()(p(v))}function m(){Ms()}async function y(){try{await fetch("/api/logout",{method:"POST"}),window.location.reload()}catch(x){console.error("Logout error:",x),window.location.reload()}}function S(x){return x==="[Hub]"?n()||"Hub":x}var _={get onToggleTheme(){return u()},set onToggleTheme(x){u(x),xe()},$set:Xe,$on:(x,N)=>Ge(t,x,N)},$=Wi(),I=h($),B=g(h(I),4);{var L=x=>{var N=Hi(),k=h(N);d(N),ne(()=>Q(k,`- ${n()??""}`)),E(x,N)};F(B,x=>{n()&&x(L)})}var ee=g(B,2);{var Y=x=>{var N=ji();N.__click=m,E(x,N)};F(ee,x=>{r()&&x(Y)})}d(I);var W=g(I,2),w=h(W),C=h(w),b=h(C);{var T=x=>{var N=Ii();E(x,N)},oe=x=>{var N=Fi();E(x,N)};F(b,x=>{o()?x(T):x(oe,!1)})}var D=g(b,2);{var ie=x=>{var N=Ui();E(x,N)},ve=x=>{var N=qi();E(x,N)};F(D,x=>{r()?x(ie):x(ve,!1)})}var Z=g(D,2);{var te=x=>{var N=Ji(),k=g(h(N),2),V=h(k,!0);d(k),d(N),ne(()=>Q(V,s())),E(x,N)};F(Z,x=>{s()&&x(te)})}var ae=g(Z,2);{var _e=x=>{var N=Bi(),k=g(h(N),2),V=h(k);d(k),d(N),ne(()=>Q(V,`${a()??""}ms`)),E(x,N)};F(ae,x=>{a()!==null&&x(_e)})}d(C);var re=g(C,2),be=h(re,!0);d(re);var se=g(re,2);se.__click=f;var le=h(se);{var ce=x=>{var N=cn("☀️");E(x,N)},Ae=x=>{var N=cn("🌙");E(x,N)};F(le,x=>{p(v)==="dark"?x(ce):x(Ae,!1)})}d(se);var Ne=g(se,2);Ne.__click=y,d(w),d(W),d($),ne(x=>Q(be,x),[()=>S(l())]),E(e,$);var De=qe(_);return c(),De}ut(["click"]);var Vi=M(' '),zi=M('

    No hubs discovered yet

    Listening for announcements...

    '),Ki=M(' '),Yi=M('
  • '),Gi=M(''),Xi=M('');function Ds(e,t){if(new.target)return Ye({component:Ds,...e});Ue(t,!0);const n=()=>K(hn,"$connectionSettings",o),r=()=>K(In,"$discoveredHubs",o),[o,s]=bt();let a=Ie(t,"onConnect"),l=X(st(n().hubHash)),i=X(st(n().destName)),c=X(st(n().nickname)),u=X(st(n().identityPath)),v=X(!1);ln(()=>{R(l,n().hubHash||p(l),!0),R(i,n().destName||p(i),!0),R(c,n().nickname||p(c),!0),R(u,n().identityPath||p(u),!0)}),ti(()=>{or()});function f(){Ai(p(l),p(i),p(c),p(u)),a()()}function m(k){R(l,k.hash,!0),R(i,k.aspect||"rrc.hub",!0)}function y(){or()}function S(k){const V=Date.now()/1e3,ge=Math.floor(V-k);return ge<60?`${ge}s ago`:ge<3600?`${Math.floor(ge/60)}m ago`:`${Math.floor(ge/3600)}h ago`}var _={get onConnect(){return a()},set onConnect(k){a(k),xe()},$set:Xe,$on:(k,V)=>Ge(t,k,V)},$=Xi(),I=h($),B=g(h(I),2),L=h(B),ee=h(L),Y=h(ee),W=h(Y),w=g(h(W));{var C=k=>{var V=Vi(),ge=h(V,!0);d(V),ne(()=>Q(ge,r().length)),E(k,V)};F(w,k=>{r().length>0&&k(C)})}d(W);var b=g(W,2);b.__click=y,d(Y);var T=g(Y,2),oe=h(T);{var D=k=>{var V=zi();E(k,V)},ie=k=>{var V=Gi();dn(V,5,r,Hn,(ge,ft)=>{var Yt=Yi(),Gt=h(Yt);Gt.__click=()=>m(p(ft));var mn=h(Gt),wt=h(mn),Pt=h(wt,!0);d(wt);var pn=g(wt,2),Xt=h(pn),Fn=h(Xt);d(Xt);var Un=g(Xt,2);{var qn=Ze=>{var Ot=Ki(),_n=h(Ot,!0);d(Ot),ne(Jn=>Q(_n,Jn),[()=>S(p(ft).last_seen)]),E(Ze,Ot)};F(Un,Ze=>{p(ft).last_seen&&Ze(qn)})}d(pn),d(mn),d(Gt),d(Yt),ne(Ze=>{Q(Pt,p(ft).name||"Unknown Hub"),Q(Fn,`${Ze??""}...`)},[()=>p(ft).hash?.substring(0,16)]),E(ge,Yt)}),d(V),E(k,V)};F(oe,k=>{r().length===0?k(D):k(ie,!1)})}d(T),d(ee),d(L);var ve=g(L,2),Z=h(ve),te=g(h(Z),2),ae=h(te),_e=g(h(ae),2);tt(_e),mt(2),d(ae);var re=g(ae,2),be=g(h(re),2);tt(be),d(re);var se=g(re,2),le=h(se);tt(le);var ce=g(le,4),Ae=h(ce),Ne=g(h(Ae),2);tt(Ne),mt(2),d(Ae);var De=g(Ae,2),x=g(h(De),2);tt(x),d(De),d(ce),d(se),mt(2),d(te),d(Z),d(ve),d(B),d(I),d($),Ln("submit",te,k=>{k.preventDefault(),f()}),kt(_e,()=>p(l),k=>R(l,k)),kt(be,()=>p(c),k=>R(c,k)),Es(le,()=>p(v),k=>R(v,k)),kt(Ne,()=>p(i),k=>R(i,k)),kt(x,()=>p(u),k=>R(u,k)),E(e,$);var N=qe(_);return s(),N}ut(["click"]);var Zi=M(' '),Qi=M("
  • "),ea=M(''),ta=M('

    Rooms

    ');function Ps(e,t){if(new.target)return Ye({component:Ps,...e});Ue(t,!0);const n=()=>K(de,"$rooms",a),r=()=>K(yt,"$hubName",a),o=()=>K(xr,"$roomListStore",a),s=()=>K(A,"$currentRoom",a),[a,l]=bt();let i=Ie(t,"onJoinRoom"),c=Ie(t,"onPartRoom"),u=Ie(t,"onToggleSidebar");function v(w){A.set(w),As(w)}function f(w){return n().get(w)?.unread||0}function m(w){return w==="[Hub]"?r()||"Hub":w}var y={get onJoinRoom(){return i()},set onJoinRoom(w){i(w),xe()},get onPartRoom(){return c()},set onPartRoom(w){c(w),xe()},get onToggleSidebar(){return u()},set onToggleSidebar(w){u(w),xe()},$set:Xe,$on:(w,C)=>Ge(t,w,C)},S=ta(),_=h(S),$=g(h(_),2);$.__click=function(...w){u()?.apply(this,w)},d(_);var I=g(_,2);dn(I,5,o,Hn,(w,C)=>{var b=Qi(),T=h(b);T.__click=()=>v(p(C));var oe=h(T),D=h(oe,!0);d(oe);var ie=g(oe,2);{var ve=Z=>{var te=Zi(),ae=h(te,!0);d(te),ne(_e=>Q(ae,_e),[()=>f(p(C))]),E(Z,te)};F(ie,Z=>{f(p(C))>0&&Z(ve)})}d(T),d(b),ne(Z=>{It(T,1,`flex justify-between items-center w-full text-left px-2 py-2 rounded ${p(C)===s()?"bg-primary text-primary-content hover:bg-primary-focus":"hover:bg-base-300"}`),Q(D,Z)},[()=>m(p(C))]),E(w,b)}),d(I);var B=g(I,4),L=h(B);L.__click=function(...w){i()?.apply(this,w)};var ee=g(L,2);{var Y=w=>{var C=ea();C.__click=function(...b){c()?.apply(this,b)},E(w,C)};F(ee,w=>{s()!=="[Hub]"&&w(Y)})}d(B),d(S),E(e,S);var W=qe(y);return l(),W}ut(["click"]);var na=M('
    '),ra=M(' '),sa=M('
    '),oa=M(' '),ia=M('
    '),aa=M(''),la=M('
    ');function ir(e,t){if(new.target)return Ye({component:ir,...e});Ue(t,!0);const n=()=>K(wr,"$currentRoomData",a),r=()=>K(jn,"$identityHash",a),o=()=>K(yr,"$sentMessageIds",a),s=()=>K(A,"$currentRoom",a),[a,l]=bt();let i,c=X(!0),u=X(!1),v=X(!0);function f(){return i?i.scrollHeight-i.scrollTop-i.clientHeight<=100:!0}function m(){const b=f();R(c,b,!0),R(u,!b)}function y(){i&&(i.scrollTop=i.scrollHeight,R(c,!0),R(u,!1))}ln(()=>{const b=n()?.messages;i&&p(c)&&b&&requestAnimationFrame(()=>{i&&p(c)&&(i.scrollTop=i.scrollHeight)})}),ln(()=>{n()?.room_id,R(c,!0),R(u,!1)});function S(b){return!!(b.type==="message"&&b.message_id&&b.sender_identity&&r()&&o()&&o().has(b.message_id)&&b.sender_identity===r())}function _(b){switch(b.type){case"join":return`→ ${b.user} joined`;case"part":return`← ${b.user} left`;case"notice":return $(b.text);default:return b.text}}function $(b){if(!b)return b;const T=b.match(/^room\s+(\S+):\s*registered;\s*mode=([^;]+);\s*topic=(.+)$/);if(T){const[,oe,D,ie]=T;return ie?`Topic: ${ie}`:`Room ${oe} registered`}return b}var I={$set:Xe,$on:(b,T)=>Ge(t,b,T)},B=la(),L=h(B);{var ee=b=>{var T=na(),oe=h(T),D=g(h(oe),2);tt(D),d(oe),d(T),Es(D,()=>p(v),ie=>R(v,ie)),E(b,T)};F(L,b=>{s()!=="[Hub]"&&b(ee)})}var Y=g(L,2);dn(Y,7,()=>n()?.messages||[],(b,T)=>b.timestamp+(b.text||b.type||"")+(b.user||"")+T,(b,T)=>{var oe=En(),D=rn(oe);{var ie=Z=>{var te=sa(),ae=h(te);{var _e=se=>{var le=ra(),ce=h(le,!0);d(le),ne(()=>Q(ce,p(T).timestamp)),E(se,le)};F(ae,se=>{(p(v)||s()==="[Hub]")&&se(_e)})}var re=g(ae,2),be=h(re,!0);d(re),d(te),ne(se=>{It(re,1,`text-sm opacity-60 ${p(T).type==="join"?"text-success":p(T).type==="part"?"text-warning":p(T).type==="error"?"text-error":"text-info"}`),Q(be,se)},[()=>_(p(T))]),E(Z,te)},ve=Z=>{var te=En(),ae=rn(te);{var _e=re=>{var be=ia(),se=h(be);{var le=x=>{var N=oa(),k=h(N,!0);d(N),ne(()=>Q(k,p(T).timestamp)),E(x,N)};F(se,x=>{(p(v)||s()==="[Hub]")&&x(le)})}var ce=g(se,2),Ae=h(ce,!0);d(ce);var Ne=g(ce,2),De=h(Ne,!0);d(Ne),d(be),ne(x=>{It(ce,1,`font-semibold ${x??""}`),Q(Ae,p(T).user),Q(De,p(T).text)},[()=>S(p(T))?"text-accent":"text-primary"]),E(re,be)};F(ae,re=>{p(T).type==="message"&&re(_e)},!0)}E(Z,te)};F(D,Z=>{p(T).type==="join"||p(T).type==="part"||p(T).type==="notice"||p(T).type==="system"||p(T).type==="error"?Z(ie):Z(ve,!1)})}E(b,oe)}),d(Y),ui(Y,b=>i=b,()=>i);var W=g(Y,2);{var w=b=>{var T=aa();T.__click=y,E(b,T)};F(W,b=>{p(u)&&b(w)})}d(B),Ln("scroll",Y,m),E(e,B);var C=qe(I);return l(),C}ut(["click"]);const ca="modulepreload",ua=function(e){return"/static/"+e},Pr={},Os=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(v=>Promise.resolve(v).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};var a=c;document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),i=l?.nonce||l?.getAttribute("nonce");o=c(n.map(u=>{if(u=ua(u),u in Pr)return;Pr[u]=!0;const v=u.endsWith(".css"),f=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${f}`))return;const m=document.createElement("link");if(m.rel=v?"stylesheet":ca,v||(m.as="script"),m.crossOrigin="",m.href=u,i&&m.setAttribute("nonce",i),document.head.appendChild(m),v)return new Promise((y,S)=>{m.addEventListener("load",y),m.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${u}`)))})}))}function s(l){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=l,window.dispatchEvent(i),!i.defaultPrevented)throw l}return o.then(l=>{for(const i of l||[])i.status==="rejected"&&s(i.reason);return t().catch(s)})};function fa(e){if(!e.startsWith("/"))return!1;const t=e.slice(1).trim().split(/\s+/),n=t[0].toLowerCase(),r=t.slice(1);switch(n){case"stats":return da();case"reload":return va();case"who":return ha(r);case"kline":return ma(r);case"kick":return pa(r);case"register":return _a(r);case"unregister":return ba(r);case"topic":return ga(r);case"mode":return ya(r);case"op":return wa(r);case"deop":return xa(r);case"voice":return ka(r);case"devoice":return $a(r);case"ban":return Ea(r);case"invite":return Sa(r);case"join":return Ra(r);case"part":case"leave":return Ta(r);case"nick":return Ca(r);case"msg":case"query":return Ma(r);case"help":return Aa();default:return Na(e)}}function da(){return J({type:"send_command",command:"/stats",room:P(A)}),!0}function va(){return J({type:"send_command",command:"/reload",room:P(A)}),!0}function ha(e){const t=e.length>0?e[0]:P(A);return J({type:"send_command",command:`/who ${t}`,room:P(A)}),!0}function ma(e){if(e.length<1)return fe("Usage: /kline [target]"),!0;const t=e[0],n=e.slice(1).join(" ");return t==="list"?J({type:"send_command",command:"/kline list",room:P(A)}):t==="add"&&n?J({type:"send_command",command:`/kline add ${n}`,room:P(A)}):t==="del"&&n?J({type:"send_command",command:`/kline del ${n}`,room:P(A)}):fe("Usage: /kline [target]"),!0}function pa(e){if(e.length<2)return fe("Usage: /kick "),!0;const t=e[0],n=e.slice(1).join(" ");return J({type:"send_command",command:`/kick ${t} ${n}`,room:P(A)}),!0}function _a(e){const t=e.length>0?e[0]:P(A);return J({type:"send_command",command:`/register ${t}`,room:P(A)}),!0}function ba(e){const t=e.length>0?e[0]:P(A);return J({type:"send_command",command:`/unregister ${t}`,room:P(A)}),!0}function ga(e){if(e.length===0)return fe("Usage: /topic [topic]"),!0;const t=e[0],n=e.slice(1).join(" ");return J({type:"send_command",command:`/topic ${t}${n?" "+n:""}`,room:P(A)}),!0}function ya(e){if(e.length<2)return fe("Usage: /mode [args]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return J({type:"send_command",command:`/mode ${t} ${n}${r?" "+r:""}`,room:P(A)}),!0}function wa(e){if(e.length<2)return fe("Usage: /op "),!0;const t=e[0],n=e.slice(1).join(" ");return J({type:"send_command",command:`/op ${t} ${n}`,room:P(A)}),!0}function xa(e){if(e.length<2)return fe("Usage: /deop "),!0;const t=e[0],n=e.slice(1).join(" ");return J({type:"send_command",command:`/deop ${t} ${n}`,room:P(A)}),!0}function ka(e){if(e.length<2)return fe("Usage: /voice "),!0;const t=e[0],n=e.slice(1).join(" ");return J({type:"send_command",command:`/voice ${t} ${n}`,room:P(A)}),!0}function $a(e){if(e.length<2)return fe("Usage: /devoice "),!0;const t=e[0],n=e.slice(1).join(" ");return J({type:"send_command",command:`/devoice ${t} ${n}`,room:P(A)}),!0}function Ea(e){if(e.length<2)return fe("Usage: /ban [target]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return n==="list"?J({type:"send_command",command:`/ban ${t} list`,room:P(A)}):(n==="add"||n==="del")&&r?J({type:"send_command",command:`/ban ${t} ${n} ${r}`,room:P(A)}):fe("Usage: /ban [target]"),!0}function Sa(e){if(e.length<2)return fe("Usage: /invite [target]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return n==="list"?J({type:"send_command",command:`/invite ${t} list`,room:P(A)}):(n==="add"||n==="del")&&r?J({type:"send_command",command:`/invite ${t} ${n} ${r}`,room:P(A)}):fe("Usage: /invite [target]"),!0}function Ra(e){if(e.length===0)return fe("Usage: /join "),!0;const t=e[0];return J({type:"join_room",room:t}),!0}function Ta(e){const t=e.length>0?e[0]:P(A);return t==="[Hub]"?(fe("Cannot part from [Hub]"),!0):(J({type:"part_room",room:t}),!0)}function Ca(e){if(e.length===0)return fe("Usage: /nick "),!0;const t=e.join(" ");return J({type:"set_nickname",nickname:t}),!0}function Ma(e){if(e.length<2)return fe("Usage: /msg "),!0;const t=e[0],n=e.slice(1).join(" ");return J({type:"send_message",text:n,room:t}),!0}function Aa(e){const t=` Available commands (rrcd v0.1+): Room Moderation Commands: @@ -33,4 +33,4 @@ Room Modes: +t Topic ops-only +n No outside messages +r Registered - `.trim();return Na(t),!0}function Ma(e){return B({type:"send_command",command:e,room:F(N)}),!0}function ie(e){Ls(async()=>{const{rooms:t,currentRoom:n}=await Promise.resolve().then(()=>Cs);return{rooms:t,currentRoom:n}},void 0).then(({rooms:t,currentRoom:n})=>{const r=F(n);t.update(o=>{const s=o.get(r);return s&&s.messages.push({type:"error",text:e,timestamp:new Date().toLocaleTimeString()}),new Map(o)})})}function Na(e){Ls(async()=>{const{rooms:t,currentRoom:n}=await Promise.resolve().then(()=>Cs);return{rooms:t,currentRoom:n}},void 0).then(({rooms:t,currentRoom:n})=>{const r=F(n);t.update(o=>{const s=o.get(r);return s&&s.messages.push({type:"notice",text:e,timestamp:new Date().toLocaleTimeString()}),new Map(o)})})}var Da=A('
    ');function or(e,t){if(new.target)return ze({component:or,...e});Le(t,!0);const n=()=>G(N,"$currentRoom",r),[r,o]=bt();let s=X("");function i(){if(_(s).trim()){if(_(s).startsWith("/")&&ua(_(s))){R(s,"");return}Oi(_(s),n()),R(s,"")}}function l(y){y.key==="Enter"&&!y.shiftKey&&(y.preventDefault(),i())}var a={$set:Ye,$on:(y,E)=>Ke(t,y,E)},c=Da(),u=h(c),v=h(u);dt(v);var f=b(v,2);f.__click=i,d(u),d(c),Pn("keypress",v,l),kt(v,()=>_(s),y=>R(s,y)),S(e,c);var m=He(a);return o(),m}ct(["click"]);var Pa=A('

    No users

    '),Oa=A('
  • '),La=A(''),Ha=A('

    Users

    ');function Hs(e,t){if(new.target)return ze({component:Hs,...e});Le(t,!0);const n=()=>G(yr,"$currentRoomData",r),[r,o]=bt();var s={$set:Ye,$on:(v,f)=>Ke(t,v,f)},i=Ha(),l=b(h(i),2);{var a=v=>{var f=Pa();S(v,f)},c=v=>{var f=La();fn(f,5,()=>Array.from(n().users),On,(m,y)=>{var E=Oa(),p=h(E),w=h(p,!0);d(p),d(E),re(()=>ee(w,_(y))),S(m,E)}),d(f),S(v,f)};V(l,v=>{n().users.size===0?v(a):v(c,!1)})}d(i),S(e,i);var u=He(s);return o(),u}var Ia=A('');function Is(e,t){if(new.target)return ze({component:Is,...e});Le(t,!0);let n=Pe(t,"show",7,!1),r=Pe(t,"onClose"),o=X("");function s(v){v.preventDefault(),_(o).trim()&&(Di(_(o).trim()),R(o,""),r()())}function i(){R(o,""),r()()}var l={get show(){return n()},set show(v=!1){n(v),_e()},get onClose(){return r()},set onClose(v){r(v),_e()},$set:Ye,$on:(v,f)=>Ke(t,v,f)},a=ks(),c=fr(a);{var u=v=>{var f=Ia(),m=h(f),y=b(h(m),2),E=h(y),p=b(h(E),2);dt(p),d(E);var w=b(E,2),D=h(w);D.__click=i,mt(2),d(w),d(y),d(m),d(f),Pn("submit",y,s),kt(p,()=>_(o),z=>R(o,z)),S(v,f)};V(c,v=>{n()&&v(u)})}return S(e,a),He(l)}ct(["click"]);var ja=A('
    Hub:
    '),Fa=A('
    Nickname:
    '),Ua=A('
    Latency:
    '),qa=A(''),Ba=A(' '),Ja=A("
  • "),Wa=A(''),Va=A('

    Menu

    Status

    Rooms

    ');function js(e,t){if(new.target)return ze({component:js,...e});Le(t,!0);const n=()=>G(me,"$rooms",u),r=()=>G(cn,"$wsConnected",u),o=()=>G(gt,"$rrcConnected",u),s=()=>G(yt,"$hubName",u),i=()=>G(Kt,"$nickname",u),l=()=>G(dn,"$latency",u),a=()=>G(wr,"$roomListStore",u),c=()=>G(N,"$currentRoom",u),[u,v]=bt();let f=Pe(t,"isOpen",7,!1),m=Pe(t,"onClose"),y=Pe(t,"onToggleTheme"),E=Pe(t,"onJoinRoom"),p=Pe(t,"onPartRoom"),w=X("dark");function D(){R(w,_(w)==="dark"?"light":"dark",!0),document.documentElement.setAttribute("data-theme",_(w)),y()(_(w))}function z(){Ms(),m()()}function I(j){N.set(j),Ns(j),m()()}function Z(j){return n().get(j)?.unread||0}function $(){E()(),m()()}function C(){p()(),m()()}var g={get isOpen(){return f()},set isOpen(j=!1){f(j),_e()},get onClose(){return m()},set onClose(j){m(j),_e()},get onToggleTheme(){return y()},set onToggleTheme(j){y(j),_e()},get onJoinRoom(){return E()},set onJoinRoom(j){E(j),_e()},get onPartRoom(){return p()},set onPartRoom(j){p(j),_e()},$set:Ye,$on:(j,fe)=>Ke(t,j,fe)},T=ks(),M=fr(T);{var te=j=>{var fe=Va(),Q=h(fe);Q.__click=function(...O){m()?.apply(this,O)},Q.__keydown=O=>O.key==="Enter"&&m()();var K=b(Q,2),ne=h(K),se=h(ne),xe=b(h(se),2);xe.__click=function(...O){m()?.apply(this,O)},d(se);var pe=b(se,2),Ge=h(pe),ke=b(h(Ge),2),Te=h(ke),Ie=h(Te),je=b(Ie,2),Xe=h(je);d(je),d(Te);var Fe=b(Te,2),k=h(Fe),P=b(k,2),x=h(P);d(P),d(Fe);var J=b(Fe,2);{var de=O=>{var Y=ja(),Ce=b(h(Y),2),Ue=h(Ce,!0);d(Ce),d(Y),re(()=>ee(Ue,s())),S(O,Y)};V(J,O=>{s()&&O(de)})}var ut=b(J,2);{var Yt=O=>{var Y=Fa(),Ce=b(h(Y),2),Ue=h(Ce,!0);d(Ce),d(Y),re(()=>ee(Ue,i())),S(O,Y)};V(ut,O=>{i()&&O(Yt)})}var Gt=b(ut,2);{var hn=O=>{var Y=Ua(),Ce=b(h(Y),2),Ue=h(Ce);d(Ce),d(Y),re(()=>ee(Ue,`${l()??""}ms`)),S(O,Y)};V(Gt,O=>{l()!==null&&O(hn)})}d(ke),d(Ge),d(pe);var wt=b(pe,2),Pt=h(wt);Pt.__click=D;var mn=h(Pt);{var Xt=O=>{var Y=ln("☀️ Light Mode");S(O,Y)},In=O=>{var Y=ln("🌙 Dark Mode");S(O,Y)};V(mn,O=>{_(w)==="dark"?O(Xt):O(In,!1)})}d(Pt);var jn=b(Pt,2);{var Fn=O=>{var Y=qa();Y.__click=z,S(O,Y)};V(jn,O=>{o()&&O(Fn)})}d(wt);var Ze=b(wt,6);fn(Ze,5,a,On,(O,Y)=>{var Ce=Ja(),Ue=h(Ce);Ue.__click=()=>I(_(Y));var qn=h(Ue),Bs=h(qn,!0);d(qn);var Js=b(qn,2);{var Ws=Bn=>{var Jn=Ba(),Vs=h(Jn,!0);d(Jn),re(zs=>ee(Vs,zs),[()=>Z(_(Y))]),S(Bn,Jn)};V(Js,Bn=>{Z(_(Y))>0&&Bn(Ws)})}d(Ue),d(Ce),re(()=>{jt(Ue,1,`flex justify-between items-center ${_(Y)===c()?"active":""}`),ee(Bs,_(Y))}),S(O,Ce)}),d(Ze);var Ot=b(Ze,2),pn=h(Ot);pn.__click=$;var Un=b(pn,2);{var qs=O=>{var Y=Wa();Y.__click=C,S(O,Y)};V(Un,O=>{c()!=="[Hub]"&&O(qs)})}d(Ot),d(ne),d(K),d(fe),re(()=>{jt(Ie,1,`badge ${r()?"badge-success":"badge-error"} badge-xs`),ee(Xe,`WebSocket: ${r()?"Connected":"Disconnected"}`),jt(k,1,`badge ${o()?"badge-success":"badge-error"} badge-xs`),ee(x,`RRC: ${o()?"Connected":"Disconnected"}`)}),S(j,fe)};V(M,j=>{f()&&j(te)})}S(e,T);var ue=He(g);return v(),ue}ct(["click","keydown"]);var za=A('
    '),Ka=A('
    '),Ya=A('
    ',1);function Fs(e,t){if(new.target)return ze({component:Fs,...e});Le(t,!0);const n=()=>G(N,"$currentRoom",o),r=()=>G(gt,"$rrcConnected",o),[o,s]=bt();let i=X(!1),l=X(!1),a=X(!1);function c(){}function u(){R(i,!0)}function v(){const x=n();x!=="[Hub]"&&Pi(x)}function f(){R(i,!1)}function m(x){}function y(){R(l,!_(l))}function E(){R(a,!_(a))}function p(){R(a,!1)}var w={$set:Ye,$on:(x,J)=>Ke(t,x,J)},D=Ya(),z=fr(D),I=h(z);Ds(I,{onToggleTheme:m});var Z=b(I,2),$=h(Z);{var C=x=>{var J=za(),de=h(J);Os(de,{onJoinRoom:u,onPartRoom:v,onToggleSidebar:y}),d(J),S(x,J)},g=x=>{var J=Ka(),de=h(J);de.__click=y,d(J),S(x,J)};V($,x=>{_(l)?x(g,!1):x(C)})}var T=b($,2),M=h(T),te=h(M);sr(te,{});var ue=b(te,2);or(ue,{}),d(M);var j=b(M,2),fe=h(j);Hs(fe,{}),d(j),d(T),d(Z),d(z);var Q=b(z,2),K=h(Q),ne=h(K),se=h(ne);se.__click=E,d(ne);var xe=b(ne,2),pe=b(h(xe),2),Ge=h(pe);d(pe),d(xe),d(K);var ke=b(K,2);js(ke,{get isOpen(){return _(a)},onClose:p,onToggleTheme:m,onJoinRoom:u,onPartRoom:v});var Te=b(ke,2),Ie=h(Te);sr(Ie,{});var je=b(Ie,2);or(je,{}),d(Te),d(Q);var Xe=b(Q,2);{var Fe=x=>{Ps(x,{onConnect:c})};V(Xe,x=>{r()||x(Fe)})}var k=b(Xe,2);Is(k,{get show(){return _(i)},onClose:f}),re(()=>ee(Ge,`- ${n()??""}`)),S(e,D);var P=He(w);return s(),P}ct(["click"]);var Ga=A('
    '),Xa=A(' Authenticating...',1),Za=A('
    RRC Logo

    Authentication has been enabled on this application.

    Please enter your authentication token to continue.

    To generate a token, run:

    python -c "import secrets; print(secrets.token_urlsafe(32))"

    Add the token to your config.json file.

    ');function Us(e,t){if(new.target)return ze({component:Us,...e});Le(t,!0);let n=X(""),r=X(""),o=X(!1),s=X(!0);an(()=>{const g=document.documentElement.getAttribute("data-theme");g?R(s,g==="dark"):R(s,window.matchMedia("(prefers-color-scheme: dark)").matches,!0);const T=new MutationObserver(()=>{const M=document.documentElement.getAttribute("data-theme");M&&R(s,M==="dark")});return T.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>T.disconnect()});async function i(){R(r,""),R(o,!0);try{const g=await fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:_(n)})}),T=await g.json();g.ok?window.location.reload():R(r,T.error||"Login failed",!0)}catch(g){R(r,"Failed to connect to server"),console.error("Login error:",g)}finally{R(o,!1)}}function l(g){g.key==="Enter"&&!_(o)&&i()}var a={$set:Ye,$on:(g,T)=>Ke(t,g,T)},c=Za(),u=h(c),v=h(u),f=h(v);mt(4),d(v);var m=b(v,2),y=h(m),E=h(y),p=b(h(E),2);dt(p),p.__keydown=l;var w=b(p,2);{var D=g=>{var T=Ga(),M=h(T),te=h(M,!0);d(M),d(T),re(()=>ee(te,_(r))),S(g,T)};V(w,g=>{_(r)&&g(D)})}d(E);var z=b(E,2),I=h(z);I.__click=i;var Z=h(I);{var $=g=>{var T=Xa();mt(),S(g,T)},C=g=>{var T=ln("Login");S(g,T)};V(Z,g=>{_(o)?g($):g(C,!1)})}return d(I),d(z),mt(4),d(y),d(m),d(u),d(c),re(g=>{tr(f,"src",_(s)?"/transparent-logo-dark.png":"/transparent-logo-light.png"),p.disabled=_(o),I.disabled=g},[()=>_(o)||!_(n).trim()]),kt(p,()=>_(n),g=>R(n,g)),S(e,c),He(a)}ct(["keydown","click"]);async function Qa(){try{const e=await fetch("/api/auth-status");if(!e.ok)return!0;const t=await e.json();return!t.auth_required||t.is_authenticated}catch(e){return console.error("Failed to check auth status:",e),!0}}async function el(){await Qa()?(new Fs({target:document.getElementById("app")}),As()):new Us({target:document.getElementById("app")})}el(); + `.trim();return Da(t),!0}function Na(e){return J({type:"send_command",command:e,room:P(A)}),!0}function fe(e){Os(async()=>{const{rooms:t,currentRoom:n}=await Promise.resolve().then(()=>Ts);return{rooms:t,currentRoom:n}},void 0).then(({rooms:t,currentRoom:n})=>{const r=P(n);t.update(o=>{const s=o.get(r);return s&&s.messages.push({type:"error",text:e,timestamp:new Date().toLocaleTimeString()}),new Map(o)})})}function Da(e){Os(async()=>{const{rooms:t,currentRoom:n}=await Promise.resolve().then(()=>Ts);return{rooms:t,currentRoom:n}},void 0).then(({rooms:t,currentRoom:n})=>{const r=P(n);t.update(o=>{const s=o.get(r);return s&&s.messages.push({type:"notice",text:e,timestamp:new Date().toLocaleTimeString()}),new Map(o)})})}var Pa=M('
    ');function ar(e,t){if(new.target)return Ye({component:ar,...e});Ue(t,!0);const n=()=>K(A,"$currentRoom",r),[r,o]=bt();let s=X("");function a(){if(p(s).trim()){if(p(s).startsWith("/")&&fa(p(s))){R(s,"");return}Pi(p(s),n()),R(s,"")}}function l(y){y.key==="Enter"&&!y.shiftKey&&(y.preventDefault(),a())}var i={$set:Xe,$on:(y,S)=>Ge(t,y,S)},c=Pa(),u=h(c),v=h(u);tt(v);var f=g(v,2);f.__click=a,d(u),d(c),Ln("keypress",v,l),kt(v,()=>p(s),y=>R(s,y)),E(e,c);var m=qe(i);return o(),m}ut(["click"]);var Oa=M('

    No users

    '),La=M('
  • '),Ha=M(''),ja=M('

    Users

    ');function Ls(e,t){if(new.target)return Ye({component:Ls,...e});Ue(t,!0);const n=()=>K(wr,"$currentRoomData",r),[r,o]=bt();var s={$set:Xe,$on:(v,f)=>Ge(t,v,f)},a=ja(),l=g(h(a),2);{var i=v=>{var f=Oa();E(v,f)},c=v=>{var f=Ha();dn(f,5,()=>Array.from(n().users),Hn,(m,y)=>{var S=La(),_=h(S),$=h(_,!0);d(_),d(S),ne(()=>Q($,p(y))),E(m,S)}),d(f),E(v,f)};F(l,v=>{n().users.size===0?v(i):v(c,!1)})}d(a),E(e,a);var u=qe(s);return o(),u}var Ia=M('');function Hs(e,t){if(new.target)return Ye({component:Hs,...e});Ue(t,!0);let n=Ie(t,"show",7,!1),r=Ie(t,"onClose"),o=X("");function s(v){v.preventDefault(),p(o).trim()&&(Ni(p(o).trim()),R(o,""),r()())}function a(){R(o,""),r()()}var l={get show(){return n()},set show(v=!1){n(v),xe()},get onClose(){return r()},set onClose(v){r(v),xe()},$set:Xe,$on:(v,f)=>Ge(t,v,f)},i=En(),c=rn(i);{var u=v=>{var f=Ia(),m=h(f),y=g(h(m),2),S=h(y),_=g(h(S),2);tt(_),d(S);var $=g(S,2),I=h($);I.__click=a,mt(2),d($),d(y),d(m),d(f),Ln("submit",y,s),kt(_,()=>p(o),B=>R(o,B)),E(v,f)};F(c,v=>{n()&&v(u)})}return E(e,i),qe(l)}ut(["click"]);var Fa=M('
    Hub:
    '),Ua=M('
    Nickname:
    '),qa=M('
    Latency:
    '),Ja=M(''),Ba=M(' '),Wa=M("
  • "),Va=M(''),za=M('

    Menu

    Status

    Rooms

    ');function js(e,t){if(new.target)return Ye({component:js,...e});Ue(t,!0);const n=()=>K(de,"$rooms",u),r=()=>K(un,"$wsConnected",u),o=()=>K(gt,"$rrcConnected",u),s=()=>K(yt,"$hubName",u),a=()=>K(Kt,"$nickname",u),l=()=>K(vn,"$latency",u),i=()=>K(xr,"$roomListStore",u),c=()=>K(A,"$currentRoom",u),[u,v]=bt();let f=Ie(t,"isOpen",7,!1),m=Ie(t,"onClose"),y=Ie(t,"onToggleTheme"),S=Ie(t,"onJoinRoom"),_=Ie(t,"onPartRoom"),$=X("dark");function I(){R($,p($)==="dark"?"light":"dark",!0),document.documentElement.setAttribute("data-theme",p($)),y()(p($))}function B(){Ms(),m()()}function L(D){A.set(D),As(D),m()()}function ee(D){return n().get(D)?.unread||0}function Y(){S()(),m()()}function W(){_()(),m()()}var w={get isOpen(){return f()},set isOpen(D=!1){f(D),xe()},get onClose(){return m()},set onClose(D){m(D),xe()},get onToggleTheme(){return y()},set onToggleTheme(D){y(D),xe()},get onJoinRoom(){return S()},set onJoinRoom(D){S(D),xe()},get onPartRoom(){return _()},set onPartRoom(D){_(D),xe()},$set:Xe,$on:(D,ie)=>Ge(t,D,ie)},C=En(),b=rn(C);{var T=D=>{var ie=za(),ve=h(ie);ve.__click=function(...O){m()?.apply(this,O)},ve.__keydown=O=>O.key==="Enter"&&m()();var Z=g(ve,2),te=h(Z),ae=h(te),_e=g(h(ae),2);_e.__click=function(...O){m()?.apply(this,O)},d(ae);var re=g(ae,2),be=h(re),se=g(h(be),2),le=h(se),ce=h(le),Ae=g(ce,2),Ne=h(Ae);d(Ae),d(le);var De=g(le,2),x=h(De),N=g(x,2),k=h(N);d(N),d(De);var V=g(De,2);{var ge=O=>{var G=Fa(),Pe=g(h(G),2),Je=h(Pe,!0);d(Pe),d(G),ne(()=>Q(Je,s())),E(O,G)};F(V,O=>{s()&&O(ge)})}var ft=g(V,2);{var Yt=O=>{var G=Ua(),Pe=g(h(G),2),Je=h(Pe,!0);d(Pe),d(G),ne(()=>Q(Je,a())),E(O,G)};F(ft,O=>{a()&&O(Yt)})}var Gt=g(ft,2);{var mn=O=>{var G=qa(),Pe=g(h(G),2),Je=h(Pe);d(Pe),d(G),ne(()=>Q(Je,`${l()??""}ms`)),E(O,G)};F(Gt,O=>{l()!==null&&O(mn)})}d(se),d(be),d(re);var wt=g(re,2),Pt=h(wt);Pt.__click=I;var pn=h(Pt);{var Xt=O=>{var G=cn("☀️ Light Mode");E(O,G)},Fn=O=>{var G=cn("🌙 Dark Mode");E(O,G)};F(pn,O=>{p($)==="dark"?O(Xt):O(Fn,!1)})}d(Pt);var Un=g(Pt,2);{var qn=O=>{var G=Ja();G.__click=B,E(O,G)};F(Un,O=>{o()&&O(qn)})}d(wt);var Ze=g(wt,6);dn(Ze,5,i,Hn,(O,G)=>{var Pe=Wa(),Je=h(Pe);Je.__click=()=>L(p(G));var Bn=h(Je),qs=h(Bn,!0);d(Bn);var Js=g(Bn,2);{var Bs=Wn=>{var Vn=Ba(),Ws=h(Vn,!0);d(Vn),ne(Vs=>Q(Ws,Vs),[()=>ee(p(G))]),E(Wn,Vn)};F(Js,Wn=>{ee(p(G))>0&&Wn(Bs)})}d(Je),d(Pe),ne(()=>{It(Je,1,`flex justify-between items-center ${p(G)===c()?"active":""}`),Q(qs,p(G))}),E(O,Pe)}),d(Ze);var Ot=g(Ze,2),_n=h(Ot);_n.__click=Y;var Jn=g(_n,2);{var Us=O=>{var G=Va();G.__click=W,E(O,G)};F(Jn,O=>{c()!=="[Hub]"&&O(Us)})}d(Ot),d(te),d(Z),d(ie),ne(()=>{It(ce,1,`badge ${r()?"badge-success":"badge-error"} badge-xs`),Q(Ne,`WebSocket: ${r()?"Connected":"Disconnected"}`),It(x,1,`badge ${o()?"badge-success":"badge-error"} badge-xs`),Q(k,`RRC: ${o()?"Connected":"Disconnected"}`)}),E(D,ie)};F(b,D=>{f()&&D(T)})}E(e,C);var oe=qe(w);return v(),oe}ut(["click","keydown"]);var Ka=M('
    '),Ya=M('
    '),Ga=M('
    ',1);function Is(e,t){if(new.target)return Ye({component:Is,...e});Ue(t,!0);const n=()=>K(A,"$currentRoom",o),r=()=>K(gt,"$rrcConnected",o),[o,s]=bt();let a=X(!1),l=X(!1),i=X(!1);function c(){}function u(){R(a,!0)}function v(){const k=n();k!=="[Hub]"&&Di(k)}function f(){R(a,!1)}function m(k){}function y(){R(l,!p(l))}function S(){R(i,!p(i))}function _(){R(i,!1)}var $={$set:Xe,$on:(k,V)=>Ge(t,k,V)},I=Ga(),B=rn(I),L=h(B);Ns(L,{onToggleTheme:m});var ee=g(L,2),Y=h(ee);{var W=k=>{var V=Ka(),ge=h(V);Ps(ge,{onJoinRoom:u,onPartRoom:v,onToggleSidebar:y}),d(V),E(k,V)},w=k=>{var V=Ya(),ge=h(V);ge.__click=y,d(V),E(k,V)};F(Y,k=>{p(l)?k(w,!1):k(W)})}var C=g(Y,2),b=h(C),T=h(b);ir(T,{});var oe=g(T,2);ar(oe,{}),d(b);var D=g(b,2),ie=h(D);Ls(ie,{}),d(D),d(C),d(ee),d(B);var ve=g(B,2),Z=h(ve),te=h(Z),ae=h(te);ae.__click=S,d(te);var _e=g(te,2),re=g(h(_e),2),be=h(re);d(re),d(_e),d(Z);var se=g(Z,2);js(se,{get isOpen(){return p(i)},onClose:_,onToggleTheme:m,onJoinRoom:u,onPartRoom:v});var le=g(se,2),ce=h(le);ir(ce,{});var Ae=g(ce,2);ar(Ae,{}),d(le),d(ve);var Ne=g(ve,2);{var De=k=>{Ds(k,{onConnect:c})};F(Ne,k=>{r()||k(De)})}var x=g(Ne,2);Hs(x,{get show(){return p(a)},onClose:f}),ne(()=>Q(be,`- ${n()??""}`)),E(e,I);var N=qe($);return s(),N}ut(["click"]);var Xa=M('
    '),Za=M(' Authenticating...',1),Qa=M('
    RRC Logo

    Authentication has been enabled on this application.

    Please enter your authentication token to continue.

    To generate a token, run:

    python -c "import secrets; print(secrets.token_urlsafe(32))"

    Add the token to your config.json file.

    ');function Fs(e,t){if(new.target)return Ye({component:Fs,...e});Ue(t,!0);let n=X(""),r=X(""),o=X(!1),s=X(!0);ln(()=>{const w=document.documentElement.getAttribute("data-theme");w?R(s,w==="dark"):R(s,window.matchMedia("(prefers-color-scheme: dark)").matches,!0);const C=new MutationObserver(()=>{const b=document.documentElement.getAttribute("data-theme");b&&R(s,b==="dark")});return C.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>C.disconnect()});async function a(){R(r,""),R(o,!0);try{const w=await fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:p(n)})}),C=await w.json();w.ok?window.location.reload():R(r,C.error||"Login failed",!0)}catch(w){R(r,"Failed to connect to server"),console.error("Login error:",w)}finally{R(o,!1)}}function l(w){w.key==="Enter"&&!p(o)&&a()}var i={$set:Xe,$on:(w,C)=>Ge(t,w,C)},c=Qa(),u=h(c),v=h(u),f=h(v);mt(4),d(v);var m=g(v,2),y=h(m),S=h(y),_=g(h(S),2);tt(_),_.__keydown=l;var $=g(_,2);{var I=w=>{var C=Xa(),b=h(C),T=h(b,!0);d(b),d(C),ne(()=>Q(T,p(r))),E(w,C)};F($,w=>{p(r)&&w(I)})}d(S);var B=g(S,2),L=h(B);L.__click=a;var ee=h(L);{var Y=w=>{var C=Za();mt(),E(w,C)},W=w=>{var C=cn("Login");E(w,C)};F(ee,w=>{p(o)?w(Y):w(W,!1)})}return d(L),d(B),mt(4),d(y),d(m),d(u),d(c),ne(w=>{rr(f,"src",p(s)?"/transparent-logo-dark.png":"/transparent-logo-light.png"),_.disabled=p(o),L.disabled=w},[()=>p(o)||!p(n).trim()]),kt(_,()=>p(n),w=>R(n,w)),E(e,c),qe(i)}ut(["keydown","click"]);async function el(){try{const e=await fetch("/api/auth-status");if(!e.ok)return!0;const t=await e.json();return!t.auth_required||t.is_authenticated}catch(e){return console.error("Failed to check auth status:",e),!0}}async function tl(){await el()?(new Is({target:document.getElementById("app")}),Cs()):new Fs({target:document.getElementById("app")})}tl(); diff --git a/rrc_web/static-svelte/assets/index.css b/rrc_web/static-svelte/assets/index.css index 65aa10a..21113b9 100644 --- a/rrc_web/static-svelte/assets/index.css +++ b/rrc_web/static-svelte/assets/index.css @@ -1 +1 @@ -@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--spacing:.25rem;--container-sm:24rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab,red,red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}@property --radialprogress{syntax: ""; inherits: true; initial-value: 0%;}:root:not(span){overflow:var(--page-overflow)}:root{background:var(--page-scroll-bg,var(--root-bg));--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000),var(--root-bg,#0000))var(--root-bg,#0000)}@supports (color:color-mix(in lab,red,red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000),var(--root-bg,#0000))color-mix(in srgb,var(--root-bg,#0000),oklch(0% 0 0) calc(var(--page-has-backdrop,0)*40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset); else: unset)}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background:var(--page-scroll-bg,var(--root-bg));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:-moz-fit-content;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;-moz-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media(prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px #00000003,inset 0 -1px #ffffff03}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%)) inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab,red,red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab,red,red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.btn{--btn-noise:var(--fx-noise)}@media(hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.collapse{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:hidden}@media(prefers-reduced-motion:no-preference){.collapse{transition:grid-template-rows .2s}}.collapse>input:is([type=checkbox],[type=radio]){-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0;z-index:1;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),.collapse:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){content-visibility:visible;min-height:-moz-fit-content;min-height:fit-content}@supports not (content-visibility:visible){.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){visibility:visible}}.collapse:focus-visible,.collapse:has(>input:is([type=checkbox],[type=radio]):focus-visible),.collapse:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}.collapse:not(.collapse-close)>input[type=checkbox],.collapse:not(.collapse-close)>input[type=radio]:not(:checked),.collapse:not(.collapse-close)>.collapse-title{cursor:pointer}:is(.collapse[tabindex]:focus:not(.collapse-close,.collapse[open]),.collapse[tabindex]:focus-within:not(.collapse-close,.collapse[open]))>.collapse-title{cursor:unset}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}.collapse:is(details){width:100%}@media(prefers-reduced-motion:no-preference){.collapse:is(details)::details-content{transition:content-visibility .2s allow-discrete,visibility .2s allow-discrete,min-height .2s ease-out allow-discrete,padding .1s ease-out 20ms,background-color .2s ease-out,height .2s;interpolate-size:allow-keywords;height:0}.collapse:is(details):where([open])::details-content{height:auto}}.collapse:is(details) summary{display:block;position:relative}.collapse:is(details) summary::-webkit-details-marker{display:none}.collapse:is(details)>.collapse-content{content-visibility:visible}.collapse:is(details) summary{outline:none}.collapse-content{content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media(prefers-reduced-motion:no-preference){.collapse-content{transition:content-visibility .2s allow-discrete,visibility .2s allow-discrete,min-height .2s ease-out allow-discrete,padding .1s ease-out 20ms,background-color .2s ease-out}}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0,auto)1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border)solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab,red,red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab,var(--color-base-content)5%,transparent)}}.toggle{border:var(--border)solid currentColor;color:var(--input-color);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p),var(--radius-selector-max)) + min(var(--border),var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab,red,red)){.toggle{box-shadow:0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab,red,red)){.toggle{--input-color:color-mix(in oklab,var(--color-base-content)50%,#0000)}}.toggle{--toggle-p:calc(var(--size)*.125);--size:calc(var(--size-selector,.25rem)*6);width:calc((var(--size)*2) - (var(--border) + var(--toggle-p))*2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:none}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:none}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);height:100%;box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab,red,red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000)}}.toggle:before{background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}@media(forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:-1px;outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border)solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border)solid #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem),.875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.input{--size:calc(var(--size-field,.25rem)*10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media(pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::-moz-placeholder{color:var(--color-base-content)}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::-moz-placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.chat-bubble{border-radius:var(--radius-field);background-color:var(--color-base-300);width:-moz-fit-content;width:fit-content;color:var(--color-base-content);grid-row-end:3;min-width:2.5rem;max-width:90%;min-height:2rem;padding-block:.5rem;padding-inline:1rem;display:block;position:relative}.chat-bubble:before{background-color:inherit;content:"";width:.75rem;height:.75rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-chat);mask-image:var(--mask-chat);position:absolute;bottom:0;-webkit-mask-position:0 -1px;mask-position:0 -1px;-webkit-mask-size:.8125rem;mask-size:.8125rem}.collapse-title{grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.checkbox{border:var(--border)solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0 3px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media(forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.stats{border-radius:var(--radius-box);grid-auto-flow:column;display:inline-grid;position:relative;overflow-x:auto}.hero-content{isolation:isolate;justify-content:center;align-items:center;gap:1rem;max-width:80rem;padding:1rem;display:flex}.hero{background-position:50%;background-size:cover;place-items:center;width:100%;display:grid}.hero>*{grid-row-start:1;grid-column-start:1}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px #00000040}.chat-footer{grid-row-start:3;gap:.25rem;font-size:.6875rem;display:flex}.chat-header{grid-row-start:1;gap:.25rem;font-size:.6875rem;display:flex}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.divider{--divider-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.label{color:color-mix(in oklab,currentcolor 60%,transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.status{background-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab,red,red)){.status{color:color-mix(in oklab,var(--color-black)30%,transparent)}}.status{background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab,red,red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border)solid var(--badge-color,var(--color-base-200));background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem)*6);width:-moz-fit-content;width:fit-content;height:var(--size);padding-inline:calc(var(--size)/2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e");grid-auto-rows:min-content;-moz-column-gap:.75rem;column-gap:.75rem;padding-block:.25rem;display:grid}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;background-color:#0006}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}.collapse-arrow>.collapse-title:after{width:.5rem;height:.5rem;display:block;position:absolute;transform:translateY(-100%)rotate(45deg)}@media(prefers-reduced-motion:no-preference){.collapse-arrow>.collapse-title:after{transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}}.collapse-arrow>.collapse-title:after{content:"";transform-origin:75% 75%;pointer-events:none;top:50%;inset-inline-end:1.4rem;box-shadow:2px 2px}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media(prefers-reduced-motion:no-preference){.collapse[open].collapse-arrow>.collapse-title:after,.collapse.collapse-open.collapse-arrow>.collapse-title:after{transform:translateY(-50%)rotate(225deg)}}.collapse.collapse-open.collapse-plus>.collapse-title:after{--tw-content:"−";content:var(--tw-content)}:is(.collapse[tabindex].collapse-arrow:focus:not(.collapse-close),.collapse.collapse-arrow[tabindex]:focus-within:not(.collapse-close))>.collapse-title:after,.collapse.collapse-arrow:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{transform:translateY(-50%)rotate(225deg)}.collapse[open].collapse-plus>.collapse-title:after,.collapse[tabindex].collapse-plus:focus:not(.collapse-close)>.collapse-title:after,.collapse.collapse-plus:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{--tw-content:"−";content:var(--tw-content)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row>*{grid-row-start:1}.checkbox:disabled{cursor:not-allowed;opacity:.2}:where(.navbar){position:relative}.chat-end{grid-template-columns:1fr auto;place-items:end}.chat-end .chat-header,.chat-end .chat-footer{grid-column-start:1}.chat-end .chat-image{grid-column-start:2}.chat-end .chat-bubble{border-end-end-radius:0;grid-column-start:1}.chat-end .chat-bubble:before{inset-inline-start:100%;transform:rotateY(180deg)}[dir=rtl] :is(.chat-end .chat-bubble):before{transform:rotateY(0)}.chat-start{grid-template-columns:auto 1fr;place-items:start}.chat-start .chat-header,.chat-start .chat-footer{grid-column-start:2}.chat-start .chat-image{grid-column-start:1}.chat-start .chat-bubble{border-end-start-radius:0;grid-column-start:2}.chat-start .chat-bubble:before{inset-inline-start:-.75rem;transform:rotateY(0)}[dir=rtl] :is(.chat-start .chat-bubble):before{transform:rotateY(180deg)}.input-sm{--size:calc(var(--size-field,.25rem)*8);font-size:max(var(--font-size,.75rem),.75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.menu-sm :where(li:not(.menu-title)>:not(ul,details,.menu-title)),.menu-sm :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);padding-block:.25rem;padding-inline:.625rem;font-size:.75rem}.menu-sm .menu-title{padding-block:.5rem;padding-inline:.75rem}.chat-bubble-accent{background-color:var(--color-accent);color:var(--color-accent-content)}.chat-bubble-error{background-color:var(--color-error);color:var(--color-error-content)}.chat-bubble-info{background-color:var(--color-info);color:var(--color-info-content)}.chat-bubble-primary{background-color:var(--color-primary);color:var(--color-primary-content)}.chat-bubble-warning{background-color:var(--color-warning);color:var(--color-warning-content)}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.badge-lg{--size:calc(var(--size-selector,.25rem)*7);font-size:1rem}.badge-sm{--size:calc(var(--size-selector,.25rem)*5);font-size:.75rem}.badge-xs{--size:calc(var(--size-selector,.25rem)*4);font-size:.625rem}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.badge-error{--badge-color:var(--color-error);--badge-fg:var(--color-error-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}}.collapse:not(td,tr,colgroup){visibility:revert-layer}.collapse{visibility:collapse}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>:where(:focus,:has(:focus)){z-index:1}@media(hover:hover){.join>:where(.btn:hover,:has(.btn:hover)){isolation:isolate}}.z-50{z-index:50}.m-2{margin:calc(var(--spacing)*2)}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-screen{min-height:100vh}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-full{width:100%}.max-w-6xl{max-width:var(--container-6xl)}.max-w-sm{max-width:var(--container-sm)}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-base-300{border-color:var(--color-base-300)}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200{background-color:var(--color-base-200)}.bg-base-300{background-color:var(--color-base-300)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-primary{background-color:var(--color-primary)}.stroke-current{stroke:currentColor}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-2{padding-block:calc(var(--spacing)*2)}.py-8{padding-block:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-base-content\/40{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\/40{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.text-base-content\/60{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\/60{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.text-error{color:var(--color-error)}.text-primary-content{color:var(--color-primary-content)}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@layer daisyui.l1{.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media(hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media(hover:none){.btn-outline:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}}.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,)}@media(hover:hover){.hover\:bg-base-300:hover{background-color:var(--color-base-300)}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-col{flex-direction:column}}@media(min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:text-left{text-align:left}}@media(min-width:80rem){.xl\:block{display:block}}}html,body{height:100vh;margin:0;overflow:hidden}#app{flex-direction:column;height:100vh;display:flex}.form-control{margin-bottom:0}.form-control .label{padding-top:0;padding-bottom:.25rem}.form-control+.form-control{margin-top:1rem}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background-color:hsl(var(--b3))}::-webkit-scrollbar-thumb{background-color:hsl(var(--bc)/.2);border-radius:.5rem}::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--bc)/.3)}.message-area-wrapper{flex:1;min-height:0}.message-area{flex:1;min-height:0;overflow-y:auto}.room-list{border-radius:var(--rounded-box,1rem);width:100%}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items)*100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes menu{0%{opacity:0}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}.message-area-wrapper.svelte-1o304hm{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.scroll-to-bottom-btn.svelte-1o304hm{position:absolute;bottom:1rem;right:1rem;z-index:10;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.scroll-to-bottom-btn.svelte-1o304hm:hover{transform:translateY(-2px);box-shadow:0 6px 8px -1px #00000026,0 4px 6px -1px #0000001a}.chat-bubble{word-wrap:break-word;overflow-wrap:break-word;word-break:break-word;max-width:100%;white-space:pre-wrap} +@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--spacing:.25rem;--container-sm:24rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab,red,red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}@property --radialprogress{syntax: ""; inherits: true; initial-value: 0%;}:root:not(span){overflow:var(--page-overflow)}:root{background:var(--page-scroll-bg,var(--root-bg));--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000),var(--root-bg,#0000))var(--root-bg,#0000)}@supports (color:color-mix(in lab,red,red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000),var(--root-bg,#0000))color-mix(in srgb,var(--root-bg,#0000),oklch(0% 0 0) calc(var(--page-has-backdrop,0)*40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset); else: unset)}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background:var(--page-scroll-bg,var(--root-bg));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:-moz-fit-content;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;-moz-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media(prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px #00000003,inset 0 -1px #ffffff03}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%)) inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab,red,red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab,red,red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.btn{--btn-noise:var(--fx-noise)}@media(hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.collapse{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:hidden}@media(prefers-reduced-motion:no-preference){.collapse{transition:grid-template-rows .2s}}.collapse>input:is([type=checkbox],[type=radio]){-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0;z-index:1;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),.collapse:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){content-visibility:visible;min-height:-moz-fit-content;min-height:fit-content}@supports not (content-visibility:visible){.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){visibility:visible}}.collapse:focus-visible,.collapse:has(>input:is([type=checkbox],[type=radio]):focus-visible),.collapse:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}.collapse:not(.collapse-close)>input[type=checkbox],.collapse:not(.collapse-close)>input[type=radio]:not(:checked),.collapse:not(.collapse-close)>.collapse-title{cursor:pointer}:is(.collapse[tabindex]:focus:not(.collapse-close,.collapse[open]),.collapse[tabindex]:focus-within:not(.collapse-close,.collapse[open]))>.collapse-title{cursor:unset}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}.collapse:is(details){width:100%}@media(prefers-reduced-motion:no-preference){.collapse:is(details)::details-content{transition:content-visibility .2s allow-discrete,visibility .2s allow-discrete,min-height .2s ease-out allow-discrete,padding .1s ease-out 20ms,background-color .2s ease-out,height .2s;interpolate-size:allow-keywords;height:0}.collapse:is(details):where([open])::details-content{height:auto}}.collapse:is(details) summary{display:block;position:relative}.collapse:is(details) summary::-webkit-details-marker{display:none}.collapse:is(details)>.collapse-content{content-visibility:visible}.collapse:is(details) summary{outline:none}.collapse-content{content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media(prefers-reduced-motion:no-preference){.collapse-content{transition:content-visibility .2s allow-discrete,visibility .2s allow-discrete,min-height .2s ease-out allow-discrete,padding .1s ease-out 20ms,background-color .2s ease-out}}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0,auto)1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border)solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab,red,red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab,var(--color-base-content)5%,transparent)}}.toggle{border:var(--border)solid currentColor;color:var(--input-color);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p),var(--radius-selector-max)) + min(var(--border),var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab,red,red)){.toggle{box-shadow:0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab,red,red)){.toggle{--input-color:color-mix(in oklab,var(--color-base-content)50%,#0000)}}.toggle{--toggle-p:calc(var(--size)*.125);--size:calc(var(--size-selector,.25rem)*6);width:calc((var(--size)*2) - (var(--border) + var(--toggle-p))*2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:none}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:none}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);height:100%;box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab,red,red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000)}}.toggle:before{background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}@media(forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:-1px;outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border)solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border)solid #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem),.875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.input{--size:calc(var(--size-field,.25rem)*10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media(pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::-moz-placeholder{color:var(--color-base-content)}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::-moz-placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.collapse-title{grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.checkbox{border:var(--border)solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0 3px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media(forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.stats{border-radius:var(--radius-box);grid-auto-flow:column;display:inline-grid;position:relative;overflow-x:auto}.hero-content{isolation:isolate;justify-content:center;align-items:center;gap:1rem;max-width:80rem;padding:1rem;display:flex}.hero{background-position:50%;background-size:cover;place-items:center;width:100%;display:grid}.hero>*{grid-row-start:1;grid-column-start:1}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px #00000040}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.divider{--divider-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.label{color:color-mix(in oklab,currentcolor 60%,transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.status{background-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab,red,red)){.status{color:color-mix(in oklab,var(--color-black)30%,transparent)}}.status{background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab,red,red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border)solid var(--badge-color,var(--color-base-200));background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem)*6);width:-moz-fit-content;width:fit-content;height:var(--size);padding-inline:calc(var(--size)/2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e");grid-auto-rows:min-content;-moz-column-gap:.75rem;column-gap:.75rem;padding-block:.25rem;display:grid}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;background-color:#0006}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}.collapse-arrow>.collapse-title:after{width:.5rem;height:.5rem;display:block;position:absolute;transform:translateY(-100%)rotate(45deg)}@media(prefers-reduced-motion:no-preference){.collapse-arrow>.collapse-title:after{transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}}.collapse-arrow>.collapse-title:after{content:"";transform-origin:75% 75%;pointer-events:none;top:50%;inset-inline-end:1.4rem;box-shadow:2px 2px}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media(prefers-reduced-motion:no-preference){.collapse[open].collapse-arrow>.collapse-title:after,.collapse.collapse-open.collapse-arrow>.collapse-title:after{transform:translateY(-50%)rotate(225deg)}}.collapse.collapse-open.collapse-plus>.collapse-title:after{--tw-content:"−";content:var(--tw-content)}:is(.collapse[tabindex].collapse-arrow:focus:not(.collapse-close),.collapse.collapse-arrow[tabindex]:focus-within:not(.collapse-close))>.collapse-title:after,.collapse.collapse-arrow:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{transform:translateY(-50%)rotate(225deg)}.collapse[open].collapse-plus>.collapse-title:after,.collapse[tabindex].collapse-plus:focus:not(.collapse-close)>.collapse-title:after,.collapse.collapse-plus:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{--tw-content:"−";content:var(--tw-content)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row>*{grid-row-start:1}.checkbox:disabled{cursor:not-allowed;opacity:.2}:where(.navbar){position:relative}.input-sm{--size:calc(var(--size-field,.25rem)*8);font-size:max(var(--font-size,.75rem),.75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.menu-sm :where(li:not(.menu-title)>:not(ul,details,.menu-title)),.menu-sm :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);padding-block:.25rem;padding-inline:.625rem;font-size:.75rem}.menu-sm .menu-title{padding-block:.5rem;padding-inline:.75rem}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.badge-lg{--size:calc(var(--size-selector,.25rem)*7);font-size:1rem}.badge-sm{--size:calc(var(--size-selector,.25rem)*5);font-size:.75rem}.badge-xs{--size:calc(var(--size-selector,.25rem)*4);font-size:.625rem}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.badge-error{--badge-color:var(--color-error);--badge-fg:var(--color-error-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}.toggle-sm[type=checkbox],.toggle-sm:has([type=checkbox]){--size:calc(var(--size-selector,.25rem)*5)}}.collapse:not(td,tr,colgroup){visibility:revert-layer}.collapse{visibility:collapse}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>:where(:focus,:has(:focus)){z-index:1}@media(hover:hover){.join>:where(.btn:hover,:has(.btn:hover)){isolation:isolate}}.z-50{z-index:50}.m-2{margin:calc(var(--spacing)*2)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-screen{min-height:100vh}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-full{width:100%}.max-w-6xl{max-width:var(--container-6xl)}.max-w-sm{max-width:var(--container-sm)}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-base-300{border-color:var(--color-base-300)}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200{background-color:var(--color-base-200)}.bg-base-300{background-color:var(--color-base-300)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-primary{background-color:var(--color-primary)}.stroke-current{stroke:currentColor}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-2{padding-block:calc(var(--spacing)*2)}.py-8{padding-block:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-accent{color:var(--color-accent)}.text-base-content\/40{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\/40{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.text-base-content\/60{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\/60{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.text-error{color:var(--color-error)}.text-info{color:var(--color-info)}.text-primary{color:var(--color-primary)}.text-primary-content{color:var(--color-primary-content)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@layer daisyui.l1{.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media(hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media(hover:none){.btn-outline:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}}.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,)}@media(hover:hover){.hover\:bg-base-300:hover{background-color:var(--color-base-300)}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-col{flex-direction:column}}@media(min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:text-left{text-align:left}}@media(min-width:80rem){.xl\:block{display:block}}}html,body{height:100vh;margin:0;overflow:hidden}#app{flex-direction:column;height:100vh;display:flex}.form-control{margin-bottom:0}.form-control .label{padding-top:0;padding-bottom:.25rem}.form-control+.form-control{margin-top:1rem}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background-color:hsl(var(--b3))}::-webkit-scrollbar-thumb{background-color:hsl(var(--bc)/.2);border-radius:.5rem}::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--bc)/.3)}.message-area-wrapper{flex:1;min-height:0}.message-area{flex:1;min-height:0;overflow-y:auto}.room-list{border-radius:var(--rounded-box,1rem);width:100%}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items)*100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes menu{0%{opacity:0}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}.message-area-wrapper.svelte-1o304hm{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.scroll-to-bottom-btn.svelte-1o304hm{position:absolute;bottom:1rem;right:1rem;z-index:10;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.scroll-to-bottom-btn.svelte-1o304hm:hover{transform:translateY(-2px);box-shadow:0 6px 8px -1px #00000026,0 4px 6px -1px #0000001a} diff --git a/svelte-frontend/src/components/MessageArea.svelte b/svelte-frontend/src/components/MessageArea.svelte index 80b7317..fbf69a6 100644 --- a/svelte-frontend/src/components/MessageArea.svelte +++ b/svelte-frontend/src/components/MessageArea.svelte @@ -1,9 +1,10 @@
    + {#if $currentRoom !== '[Hub]'} +
    + +
    + {/if}
    - {#each ($currentRoomData?.messages || []) as msg, index (msg.timestamp + msg.text + index)} -
    - {#if msg.user} -
    - {msg.user} - -
    - {/if} -
    - {msg.text} + {#each ($currentRoomData?.messages || []) as msg, index (msg.timestamp + (msg.text || msg.type || '') + (msg.user || '') + index)} + {#if msg.type === 'join' || msg.type === 'part' || msg.type === 'notice' || msg.type === 'system' || msg.type === 'error'} + +
    + {#if showTimestamps || $currentRoom === '[Hub]'} + {msg.timestamp} + {/if} + + {getMessageText(msg)} +
    - {#if !msg.user && msg.timestamp} - - {/if} -
    + {:else if msg.type === 'message'} + +
    + {#if showTimestamps || $currentRoom === '[Hub]'} + {msg.timestamp} + {/if} + {msg.user} + {msg.text} +
    + {/if} {/each}
    @@ -164,13 +166,4 @@ transform: translateY(-2px); box-shadow: 0 6px 8px -1px rgba(0, 0, 0, 0.15), 0 4px 6px -1px rgba(0, 0, 0, 0.1); } - - /* --TEST-- Fix text wrapping for long messages */ - :global(.chat-bubble) { - word-wrap: break-word; - overflow-wrap: break-word; - word-break: break-word; - max-width: 100%; - white-space: pre-wrap; - } \ No newline at end of file diff --git a/svelte-frontend/src/websocket.js b/svelte-frontend/src/websocket.js index b800358..af3da4a 100644 --- a/svelte-frontend/src/websocket.js +++ b/svelte-frontend/src/websocket.js @@ -96,6 +96,12 @@ function handleMessage(data) { case 'system': addSystemMessage(data); break; + case 'join': + addJoinMessage(data); + break; + case 'part': + addPartMessage(data); + break; case 'message_sent': handleMessageSent(data); break; @@ -236,6 +242,52 @@ function addSystemMessage(data) { }); } +function addJoinMessage(data) { + const room = data.room || get(currentRoom); + + rooms.update(r => { + if (!r.has(room)) { + r.set(room, { messages: [], users: new Set(), unread: 0 }); + } + + const roomData = r.get(room); + roomData.messages.push({ + type: 'join', + user: data.user, + timestamp: data.timestamp || new Date().toLocaleTimeString() + }); + + if (room !== get(currentRoom)) { + roomData.unread++; + } + + return new Map(r); + }); +} + +function addPartMessage(data) { + const room = data.room || get(currentRoom); + + rooms.update(r => { + if (!r.has(room)) { + r.set(room, { messages: [], users: new Set(), unread: 0 }); + } + + const roomData = r.get(room); + roomData.messages.push({ + type: 'part', + user: data.user, + timestamp: data.timestamp || new Date().toLocaleTimeString() + }); + + if (room !== get(currentRoom)) { + roomData.unread++; + } + + return new Map(r); + }); +} + function handleMessageSent(data) { // Track the message ID of messages we sent if (data.message_id) {