diff --git a/apps/api/internal/webassets/dist/assets/index-BcyKZwkK.js b/apps/api/internal/webassets/dist/assets/index-BcyKZwkK.js deleted file mode 100644 index a0cda20..0000000 --- a/apps/api/internal/webassets/dist/assets/index-BcyKZwkK.js +++ /dev/null @@ -1,72 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const l of s.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&i(l)}).observe(document,{childList:!0,subtree:!0});function n(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(a){if(a.ep)return;a.ep=!0;const s=n(a);fetch(a.href,s)}})();const Wc=!1;var Ll=Array.isArray,jc=Array.prototype.indexOf,Fr=Array.prototype.includes,ni=Array.from,Zc=Object.defineProperty,_a=Object.getOwnPropertyDescriptor,Dl=Object.getOwnPropertyDescriptors,Yc=Object.prototype,Xc=Array.prototype,Xi=Object.getPrototypeOf,el=Object.isExtensible;const Vc=()=>{};function Kc(e){return e()}function Li(e){for(var t=0;t{e=i,t=a});return{promise:n,resolve:e,reject:t}}const st=2,Ur=4,xa=8,Ol=1<<24,xn=16,un=32,Xn=64,Di=128,Bt=512,Ge=1024,at=2048,fn=4096,pt=8192,Ht=16384,_r=32768,Mi=1<<25,Br=65536,Oi=1<<17,Nl=1<<18,mr=1<<19,Pl=1<<20,yn=1<<25,pr=65536,Va=1<<21,ka=1<<22,Zn=1<<23,zr=Symbol("$state"),Jc=Symbol(""),Pn=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"};function zl(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Qc(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function eu(e,t,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function tu(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function nu(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function ru(e){throw new Error("https://svelte.dev/e/effect_orphan")}function au(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function iu(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function su(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function lu(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function ou(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const cu=1,uu=2,Fl=4,fu=8,du=16,pu=1,hu=2,Je=Symbol(),Ul="http://www.w3.org/1999/xhtml",vu="http://www.w3.org/2000/svg",gu="http://www.w3.org/1998/Math/MathML";function _u(){console.warn("https://svelte.dev/e/derived_inert")}function mu(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Bl(e){return e===this.v}function Hl(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function $l(e){return!Hl(e,this.v)}let Ta=!1,bu=!1;function ku(){Ta=!0}let Re=null;function Hr(e){Re=e}function ri(e,t=!1,n){Re={p:Re,i:!1,c:null,e:null,s:e,x:null,r:re,l:Ta&&!t?{s:null,u:null,$:[]}:null}}function ai(e){var t=Re,n=t.e;if(n!==null){t.e=null;for(var i of n)co(i)}return t.i=!0,Re=t.p,{}}function Ea(){return!Ta||Re!==null&&Re.l===null}let or=[];function ql(){var e=or;or=[],Li(e)}function Yn(e){if(or.length===0&&!ma){var t=or;queueMicrotask(()=>{t===or&&ql()})}or.push(e)}function wu(){for(;or.length>0;)ql()}function Gl(e){var t=re;if(t===null)return ue.f|=Zn,e;if((t.f&_r)===0&&(t.f&Ur)===0)throw e;Wn(e,t)}function Wn(e,t){for(;t!==null;){if((t.f&Di)!==0){if((t.f&_r)===0)throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}const yu=-7169;function Pe(e,t){e.f=e.f&yu|t}function Vi(e){(e.f&Bt)!==0||e.deps===null?Pe(e,Ge):Pe(e,fn)}function Wl(e){if(e!==null)for(const t of e)(t.f&st)===0||(t.f&pr)===0||(t.f^=pr,Wl(t.deps))}function jl(e,t,n){(e.f&at)!==0?t.add(e):(e.f&fn)!==0&&n.add(e),Wl(e.deps),Pe(e,Ge)}const sr=new Set;let ne=null,on=null,Ni=null,ma=!1,wi=!1,Nr=null,Za=null;var tl=0;let xu=1;class Vn{id=xu++;current=new Map;previous=new Map;#n=new Set;#o=new Set;#e=new Set;#a=new Map;#r=new Map;#i=null;#t=[];#s=[];#c=new Set;#u=new Set;#l=new Map;#d=new Set;is_fork=!1;#h=!1;#p=new Set;#f(){return this.is_fork||this.#r.size>0}#_(){for(const i of this.#p)for(const a of i.#r.keys()){for(var t=!1,n=a;n.parent!==null;){if(this.#l.has(n)){t=!0;break}n=n.parent}if(!t)return!0}return!1}skip_effect(t){this.#l.has(t)||this.#l.set(t,{d:[],m:[]}),this.#d.delete(t)}unskip_effect(t,n=i=>this.schedule(i)){var i=this.#l.get(t);if(i){this.#l.delete(t);for(var a of i.d)Pe(a,at),n(a);for(a of i.m)Pe(a,fn),n(a)}this.#d.add(t)}#v(){if(tl++>1e3&&(sr.delete(this),Eu()),!this.#f()){for(const c of this.#c)this.#u.delete(c),Pe(c,at),this.schedule(c);for(const c of this.#u)Pe(c,fn),this.schedule(c)}const t=this.#t;this.#t=[],this.apply();var n=Nr=[],i=[],a=Za=[];for(const c of t)try{this.#m(c,n,i)}catch(o){throw Xl(c),o}if(ne=null,a.length>0){var s=Vn.ensure();for(const c of a)s.schedule(c)}if(Nr=null,Za=null,this.#f()||this.#_()){this.#g(i),this.#g(n);for(const[c,o]of this.#l)Yl(c,o)}else{this.#a.size===0&&sr.delete(this),this.#c.clear(),this.#u.clear();for(const c of this.#n)c(this);this.#n.clear(),nl(i),nl(n),this.#i?.resolve()}var l=ne;if(this.#t.length>0){const c=l??=this;c.#t.push(...this.#t.filter(o=>!c.#t.includes(o)))}l!==null&&(sr.add(l),l.#v())}#m(t,n,i){t.f^=Ge;for(var a=t.first;a!==null;){var s=a.f,l=(s&(un|Xn))!==0,c=l&&(s&Ge)!==0,o=c||(s&pt)!==0||this.#l.has(a);if(!o&&a.fn!==null){l?a.f^=Ge:(s&Ur)!==0?n.push(a):Wr(a)&&((s&xn)!==0&&this.#u.add(a),vr(a));var u=a.first;if(u!==null){a=u;continue}}for(;a!==null;){var h=a.next;if(h!==null){a=h;break}a=a.parent}}}#g(t){for(var n=0;n!this.current.has(w));if(a.length===0)t&&h.discard();else if(n.length>0){if(t)for(const w of this.#d)h.unskip_effect(w,m=>{(m.f&(xn|ka))!==0?h.schedule(m):h.#g([m])});h.activate();var s=new Set,l=new Map;for(var c of n)Zl(c,a,s,l);l=new Map;var o=[...h.current.keys()].filter(w=>this.current.has(w)?this.current.get(w)[0]!==w:!0);for(const w of this.#s)(w.f&(Ht|pt|Oi))===0&&Ki(w,o,l)&&((w.f&(ka|xn))!==0?(Pe(w,at),h.schedule(w)):h.#c.add(w));if(h.#t.length>0){h.apply();for(var u of h.#t)h.#m(u,[],[]);h.#t=[]}h.deactivate()}}for(const h of sr)h.#p.has(this)&&(h.#p.delete(this),h.#p.size===0&&!h.#f()&&(h.activate(),h.#v()))}increment(t,n){let i=this.#a.get(n)??0;if(this.#a.set(n,i+1),t){let a=this.#r.get(n)??0;this.#r.set(n,a+1)}}decrement(t,n,i){let a=this.#a.get(n)??0;if(a===1?this.#a.delete(n):this.#a.set(n,a-1),t){let s=this.#r.get(n)??0;s===1?this.#r.delete(n):this.#r.set(n,s-1)}this.#h||i||(this.#h=!0,Yn(()=>{this.#h=!1,this.flush()}))}transfer_effects(t,n){for(const i of t)this.#c.add(i);for(const i of n)this.#u.add(i);t.clear(),n.clear()}oncommit(t){this.#n.add(t)}ondiscard(t){this.#o.add(t)}on_fork_commit(t){this.#e.add(t)}run_fork_commit_callbacks(){for(const t of this.#e)t(this);this.#e.clear()}settled(){return(this.#i??=Ml()).promise}static ensure(){if(ne===null){const t=ne=new Vn;wi||(sr.add(ne),ma||Yn(()=>{ne===t&&t.flush()}))}return ne}apply(){{on=null;return}}schedule(t){if(Ni=t,t.b?.is_pending&&(t.f&(Ur|xa|Ol))!==0&&(t.f&_r)===0){t.b.defer_effect(t);return}for(var n=t;n.parent!==null;){n=n.parent;var i=n.f;if(Nr!==null&&n===re&&(ue===null||(ue.f&st)===0))return;if((i&(Xn|un))!==0){if((i&Ge)===0)return;n.f^=Ge}}this.#t.push(n)}}function Tu(e){var t=ma;ma=!0;try{for(var n;;){if(wu(),ne===null)return n;ne.flush()}}finally{ma=t}}function Eu(){try{au()}catch(e){Wn(e,Ni)}}let Nn=null;function nl(e){var t=e.length;if(t!==0){for(var n=0;n0)){ur.clear();for(const a of Nn){if((a.f&(Ht|pt))!==0)continue;const s=[a];let l=a.parent;for(;l!==null;)Nn.has(l)&&(Nn.delete(l),s.push(l)),l=l.parent;for(let c=s.length-1;c>=0;c--){const o=s[c];(o.f&(Ht|pt))===0&&vr(o)}}Nn.clear()}}Nn=null}}function Zl(e,t,n,i){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const a of e.reactions){const s=a.f;(s&st)!==0?Zl(a,t,n,i):(s&(ka|xn))!==0&&(s&at)===0&&Ki(a,t,i)&&(Pe(a,at),Ji(a))}}function Ki(e,t,n){const i=n.get(e);if(i!==void 0)return i;if(e.deps!==null)for(const a of e.deps){if(Fr.call(t,a))return!0;if((a.f&st)!==0&&Ki(a,t,n))return n.set(a,!0),!0}return n.set(e,!1),!1}function Ji(e){ne.schedule(e)}function Yl(e,t){if(!((e.f&un)!==0&&(e.f&Ge)!==0)){(e.f&at)!==0?t.d.push(e):(e.f&fn)!==0&&t.m.push(e),Pe(e,Ge);for(var n=e.first;n!==null;)Yl(n,t),n=n.next}}function Xl(e){Pe(e,Ge);for(var t=e.first;t!==null;)Xl(t),t=t.next}function Su(e){let t=0,n=hr(0),i;return()=>{es()&&(r(n),Gr(()=>(t===0&&(i=_(()=>e(()=>ba(n)))),t+=1,()=>{Yn(()=>{t-=1,t===0&&(i?.(),i=void 0,ba(n))})})))}}var Au=Br|mr;function Ru(e,t,n,i){new Cu(e,t,n,i)}class Cu{parent;is_pending=!1;transform_error;#n;#o=null;#e;#a;#r;#i=null;#t=null;#s=null;#c=null;#u=0;#l=0;#d=!1;#h=new Set;#p=new Set;#f=null;#_=Su(()=>(this.#f=hr(this.#u),()=>{this.#f=null}));constructor(t,n,i,a){this.#n=t,this.#e=n,this.#a=s=>{var l=re;l.b=this,l.f|=Di,i(s)},this.parent=re.b,this.transform_error=a??this.parent?.transform_error??(s=>s),this.#r=li(()=>{this.#b()},Au)}#v(){try{this.#i=Ut(()=>this.#a(this.#n))}catch(t){this.error(t)}}#m(t){const n=this.#e.failed;n&&(this.#s=Ut(()=>{n(this.#n,()=>t,()=>()=>{})}))}#g(){const t=this.#e.pending;t&&(this.is_pending=!0,this.#t=Ut(()=>t(this.#n)),Yn(()=>{var n=this.#c=document.createDocumentFragment(),i=Tn();n.append(i),this.#i=this.#w(()=>Ut(()=>this.#a(i))),this.#l===0&&(this.#n.before(n),this.#c=null,fr(this.#t,()=>{this.#t=null}),this.#k(ne))}))}#b(){try{if(this.is_pending=this.has_pending_snippet(),this.#l=0,this.#u=0,this.#i=Ut(()=>{this.#a(this.#n)}),this.#l>0){var t=this.#c=document.createDocumentFragment();rs(this.#i,t);const n=this.#e.pending;this.#t=Ut(()=>n(this.#n))}else this.#k(ne)}catch(n){this.error(n)}}#k(t){this.is_pending=!1,t.transfer_effects(this.#h,this.#p)}defer_effect(t){jl(t,this.#h,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#e.pending}#w(t){var n=re,i=ue,a=Re;Gt(this.#r),qt(this.#r),Hr(this.#r.ctx);try{return Vn.ensure(),t()}catch(s){return Gl(s),null}finally{Gt(n),qt(i),Hr(a)}}#y(t,n){if(!this.has_pending_snippet()){this.parent&&this.parent.#y(t,n);return}this.#l+=t,this.#l===0&&(this.#k(n),this.#t&&fr(this.#t,()=>{this.#t=null}),this.#c&&(this.#n.before(this.#c),this.#c=null))}update_pending_count(t,n){this.#y(t,n),this.#u+=t,!(!this.#f||this.#d)&&(this.#d=!0,Yn(()=>{this.#d=!1,this.#f&&$r(this.#f,this.#u)}))}get_effect_pending(){return this.#_(),r(this.#f)}error(t){if(!this.#e.onerror&&!this.#e.failed)throw t;ne?.is_fork?(this.#i&&ne.skip_effect(this.#i),this.#t&&ne.skip_effect(this.#t),this.#s&&ne.skip_effect(this.#s),ne.on_fork_commit(()=>{this.#x(t)})):this.#x(t)}#x(t){this.#i&&(kt(this.#i),this.#i=null),this.#t&&(kt(this.#t),this.#t=null),this.#s&&(kt(this.#s),this.#s=null);var n=this.#e.onerror;let i=this.#e.failed;var a=!1,s=!1;const l=()=>{if(a){mu();return}a=!0,s&&ou(),this.#s!==null&&fr(this.#s,()=>{this.#s=null}),this.#w(()=>{this.#b()})},c=o=>{try{s=!0,n?.(o,l),s=!1}catch(u){Wn(u,this.#r&&this.#r.parent)}i&&(this.#s=this.#w(()=>{try{return Ut(()=>{var u=re;u.b=this,u.f|=Di,i(this.#n,()=>o,()=>l)})}catch(u){return Wn(u,this.#r.parent),null}}))};Yn(()=>{var o;try{o=this.transform_error(t)}catch(u){Wn(u,this.#r&&this.#r.parent);return}o!==null&&typeof o=="object"&&typeof o.then=="function"?o.then(c,u=>Wn(u,this.#r&&this.#r.parent)):c(o)})}}function Iu(e,t,n,i){const a=Ea()?ii:Pr;var s=e.filter(m=>!m.settled);if(n.length===0&&s.length===0){i(t.map(a));return}var l=re,c=Lu(),o=s.length===1?s[0].promise:s.length>1?Promise.all(s.map(m=>m.promise)):null;function u(m){c();try{i(m)}catch(E){(l.f&Ht)===0&&Wn(E,l)}Ka()}if(n.length===0){o.then(()=>u(t.map(a)));return}var h=Vl();function w(){Promise.all(n.map(m=>Du(m))).then(m=>u([...t.map(a),...m])).catch(m=>Wn(m,l)).finally(()=>h())}o?o.then(()=>{c(),w(),Ka()}):w()}function Lu(){var e=re,t=ue,n=Re,i=ne;return function(s=!0){Gt(e),qt(t),Hr(n),s&&(e.f&Ht)===0&&(i?.activate(),i?.apply())}}function Ka(e=!0){Gt(null),qt(null),Hr(null),e&&ne?.deactivate()}function Vl(){var e=re,t=e.b,n=ne,i=t.is_rendered();return t.update_pending_count(1,n),n.increment(i,e),(a=!1)=>{t.update_pending_count(-1,n),n.decrement(i,e,a)}}function ii(e){var t=st|at;return re!==null&&(re.f|=mr),{ctx:Re,deps:null,effects:null,equals:Bl,f:t,fn:e,reactions:null,rv:0,v:Je,wv:0,parent:re,ac:null}}function Du(e,t,n){let i=re;i===null&&Qc();var a=void 0,s=hr(Je),l=!ue,c=new Map;return Wu(()=>{var o=re,u=Ml();a=u.promise;try{Promise.resolve(e()).then(u.resolve,u.reject).finally(Ka)}catch(E){u.reject(E),Ka()}var h=ne;if(l){if((o.f&_r)!==0)var w=Vl();if(i.b.is_rendered())c.get(h)?.reject(Pn),c.delete(h);else{for(const E of c.values())E.reject(Pn);c.clear()}c.set(h,u)}const m=(E,T=void 0)=>{if(w){var L=T===Pn;w(L)}if(!(T===Pn||(o.f&Ht)!==0)){if(h.activate(),T)s.f|=Zn,$r(s,T);else{(s.f&Zn)!==0&&(s.f^=Zn),$r(s,E);for(const[S,I]of c){if(c.delete(S),S===h)break;I.reject(Pn)}}h.deactivate()}};u.promise.then(m,E=>m(null,E||"unknown"))}),oo(()=>{for(const o of c.values())o.reject(Pn)}),new Promise(o=>{function u(h){function w(){h===a?o(s):u(a)}h.then(w,w)}u(a)})}function Ja(e){const t=ii(e);return go(t),t}function Pr(e){const t=ii(e);return t.equals=$l,t}function Mu(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;nr(e))),t}function v(e,t,n=!1){ue!==null&&(!cn||(ue.f&Oi)!==0)&&Ea()&&(ue.f&(st|xn|ka|Oi))!==0&&($t===null||!Fr.call($t,e))&&lu();let i=n?da(t):t;return $r(e,i,Za)}function $r(e,t,n=null){if(!e.equals(t)){ur.set(e,Kn?t:e.v);var i=Vn.ensure();if(i.capture(e,t),(e.f&st)!==0){const a=e;(e.f&at)!==0&&Qi(a),on===null&&Vi(a)}e.wv=mo(),eo(e,at,n),Ea()&&re!==null&&(re.f&Ge)!==0&&(re.f&(un|Xn))===0&&(Ft===null?Zu([e]):Ft.push(e)),!i.is_fork&&Pi.size>0&&!Ql&&Pu()}return t}function Pu(){Ql=!1;for(const e of Pi)(e.f&Ge)!==0&&Pe(e,fn),Wr(e)&&vr(e);Pi.clear()}function ba(e){v(e,e.v+1)}function eo(e,t,n){var i=e.reactions;if(i!==null)for(var a=Ea(),s=i.length,l=0;l{if(dr===s)return c();var o=ue,u=dr;qt(null),il(s);var h=c();return qt(o),il(u),h};return i&&n.set("length",an(e.length)),new Proxy(e,{defineProperty(c,o,u){(!("value"in u)||u.configurable===!1||u.enumerable===!1||u.writable===!1)&&iu();var h=n.get(o);return h===void 0?l(()=>{var w=an(u.value);return n.set(o,w),w}):v(h,u.value,!0),!0},deleteProperty(c,o){var u=n.get(o);if(u===void 0){if(o in c){const h=l(()=>an(Je));n.set(o,h),ba(a)}}else v(u,Je),ba(a);return!0},get(c,o,u){if(o===zr)return e;var h=n.get(o),w=o in c;if(h===void 0&&(!w||_a(c,o)?.writable)&&(h=l(()=>{var E=da(w?c[o]:Je),T=an(E);return T}),n.set(o,h)),h!==void 0){var m=r(h);return m===Je?void 0:m}return Reflect.get(c,o,u)},getOwnPropertyDescriptor(c,o){var u=Reflect.getOwnPropertyDescriptor(c,o);if(u&&"value"in u){var h=n.get(o);h&&(u.value=r(h))}else if(u===void 0){var w=n.get(o),m=w?.v;if(w!==void 0&&m!==Je)return{enumerable:!0,configurable:!0,value:m,writable:!0}}return u},has(c,o){if(o===zr)return!0;var u=n.get(o),h=u!==void 0&&u.v!==Je||Reflect.has(c,o);if(u!==void 0||re!==null&&(!h||_a(c,o)?.writable)){u===void 0&&(u=l(()=>{var m=h?da(c[o]):Je,E=an(m);return E}),n.set(o,u));var w=r(u);if(w===Je)return!1}return h},set(c,o,u,h){var w=n.get(o),m=o in c;if(i&&o==="length")for(var E=u;Ean(Je)),n.set(E+"",T))}if(w===void 0)(!m||_a(c,o)?.writable)&&(w=l(()=>an(void 0)),v(w,da(u)),n.set(o,w));else{m=w.v!==Je;var L=l(()=>da(u));v(w,L)}var S=Reflect.getOwnPropertyDescriptor(c,o);if(S?.set&&S.set.call(h,u),!m){if(i&&typeof o=="string"){var I=n.get("length"),A=Number(o);Number.isInteger(A)&&A>=I.v&&v(I,A+1)}ba(a)}return!0},ownKeys(c){r(a);var o=Reflect.ownKeys(c).filter(w=>{var m=n.get(w);return m===void 0||m.v!==Je});for(var[u,h]of n)h.v!==Je&&!(u in c)&&o.push(u);return o},setPrototypeOf(){su()}})}var zi,to,no,ro,ao;function zu(){if(zi===void 0){zi=window,to=document,no=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;ro=_a(t,"firstChild").get,ao=_a(t,"nextSibling").get,el(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),el(n)&&(n.__t=void 0)}}function Tn(e=""){return document.createTextNode(e)}function jn(e){return ro.call(e)}function Sa(e){return ao.call(e)}function p(e,t){return jn(e)}function Gn(e,t=!1){{var n=jn(e);return n instanceof Comment&&n.data===""?Sa(n):n}}function g(e,t=1,n=!1){let i=e;for(;t--;)i=Sa(i);return i}function Fu(e){e.textContent=""}function io(){return!1}function so(e,t,n){return document.createElementNS(t??Ul,e,void 0)}let rl=!1;function Uu(){rl||(rl=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function si(e){var t=ue,n=re;qt(null),Gt(null);try{return e()}finally{qt(t),Gt(n)}}function Bu(e,t,n,i=n){e.addEventListener(t,()=>si(n));const a=e.__on_r;a?e.__on_r=()=>{a(),i(!0)}:e.__on_r=()=>i(!0),Uu()}function lo(e){re===null&&(ue===null&&ru(),nu()),Kn&&tu()}function Hu(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function En(e,t){var n=re;n!==null&&(n.f&pt)!==0&&(e|=pt);var i={ctx:Re,deps:null,nodes:null,f:e|at|Bt,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};ne?.register_created_effect(i);var a=i;if((e&Ur)!==0)Nr!==null?Nr.push(i):Vn.ensure().schedule(i);else if(t!==null){try{vr(i)}catch(l){throw kt(i),l}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&mr)===0&&(a=a.first,(e&xn)!==0&&(e&Br)!==0&&a!==null&&(a.f|=Br))}if(a!==null&&(a.parent=n,n!==null&&Hu(a,n),ue!==null&&(ue.f&st)!==0&&(e&Xn)===0)){var s=ue;(s.effects??=[]).push(a)}return i}function es(){return ue!==null&&!cn}function oo(e){const t=En(xa,null);return Pe(t,Ge),t.teardown=e,t}function Fi(e){lo();var t=re.f,n=!ue&&(t&un)!==0&&(t&_r)===0;if(n){var i=Re;(i.e??=[]).push(e)}else return co(e)}function co(e){return En(Ur|Pl,e)}function $u(e){return lo(),En(xa|Pl,e)}function qu(e){Vn.ensure();const t=En(Xn|mr,e);return(n={})=>new Promise(i=>{n.outro?fr(t,()=>{kt(t),i(void 0)}):(kt(t),i(void 0))})}function wa(e){return En(Ur,e)}function mn(e,t){var n=Re,i={effect:null,ran:!1,deps:e};n.l.$.push(i),i.effect=Gr(()=>{if(e(),!i.ran){i.ran=!0;var a=re;try{Gt(a.parent),_(t)}finally{Gt(a)}}})}function Gu(){var e=Re;Gr(()=>{for(var t of e.l.$){t.deps();var n=t.effect;(n.f&Ge)!==0&&n.deps!==null&&Pe(n,fn),Wr(n)&&vr(n),t.ran=!1}})}function Wu(e){return En(ka|mr,e)}function Gr(e,t=0){return En(xa|t,e)}function z(e,t=[],n=[],i=[]){Iu(i,t,n,a=>{En(xa,()=>e(...a.map(r)))})}function li(e,t=0){var n=En(xn|t,e);return n}function Ut(e){return En(un|mr,e)}function uo(e){var t=e.teardown;if(t!==null){const n=Kn,i=ue;al(!0),qt(null);try{t.call(null)}finally{al(n),qt(i)}}}function ts(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const a=n.ac;a!==null&&si(()=>{a.abort(Pn)});var i=n.next;(n.f&Xn)!==0?n.parent=null:kt(n,t),n=i}}function ju(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&un)===0&&kt(t),t=n}}function kt(e,t=!0){var n=!1;(t||(e.f&Nl)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(fo(e.nodes.start,e.nodes.end),n=!0),Pe(e,Mi),ts(e,t&&!n),ya(e,0);var i=e.nodes&&e.nodes.t;if(i!==null)for(const s of i)s.stop();uo(e),e.f^=Mi,e.f|=Ht;var a=e.parent;a!==null&&a.first!==null&&po(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function fo(e,t){for(;e!==null;){var n=e===t?null:Sa(e);e.remove(),e=n}}function po(e){var t=e.parent,n=e.prev,i=e.next;n!==null&&(n.next=i),i!==null&&(i.prev=n),t!==null&&(t.first===e&&(t.first=i),t.last===e&&(t.last=n))}function fr(e,t,n=!0){var i=[];ho(e,i,!0);var a=()=>{n&&kt(e),t&&t()},s=i.length;if(s>0){var l=()=>--s||a();for(var c of i)c.out(l)}else a()}function ho(e,t,n){if((e.f&pt)===0){e.f^=pt;var i=e.nodes&&e.nodes.t;if(i!==null)for(const c of i)(c.is_global||n)&&t.push(c);for(var a=e.first;a!==null;){var s=a.next;if((a.f&Xn)===0){var l=(a.f&Br)!==0||(a.f&un)!==0&&(e.f&xn)!==0;ho(a,t,l?n:!1)}a=s}}}function ns(e){vo(e,!0)}function vo(e,t){if((e.f&pt)!==0){e.f^=pt,(e.f&Ge)===0&&(Pe(e,at),Vn.ensure().schedule(e));for(var n=e.first;n!==null;){var i=n.next,a=(n.f&Br)!==0||(n.f&un)!==0;vo(n,a?t:!1),n=i}var s=e.nodes&&e.nodes.t;if(s!==null)for(const l of s)(l.is_global||t)&&l.in()}}function rs(e,t){if(e.nodes)for(var n=e.nodes.start,i=e.nodes.end;n!==null;){var a=n===i?null:Sa(n);t.append(n),n=a}}let Ya=!1,Kn=!1;function al(e){Kn=e}let ue=null,cn=!1;function qt(e){ue=e}let re=null;function Gt(e){re=e}let $t=null;function go(e){ue!==null&&($t===null?$t=[e]:$t.push(e))}let bt=null,St=0,Ft=null;function Zu(e){Ft=e}let _o=1,cr=0,dr=cr;function il(e){dr=e}function mo(){return++_o}function Wr(e){var t=e.f;if((t&at)!==0)return!0;if(t&st&&(e.f&=~pr),(t&fn)!==0){for(var n=e.deps,i=n.length,a=0;ae.wv)return!0}(t&Bt)!==0&&on===null&&Pe(e,Ge)}return!1}function bo(e,t,n=!0){var i=e.reactions;if(i!==null&&!($t!==null&&Fr.call($t,e)))for(var a=0;a{e.ac.abort(Pn)}),e.ac=null);try{e.f|=Va;var h=e.fn,w=h();e.f|=_r;var m=e.deps,E=ne?.is_fork;if(bt!==null){var T;if(E||ya(e,St),m!==null&&St>0)for(m.length=St+bt.length,T=0;Tn?.call(this,s))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Yn(()=>{t.addEventListener(e,a,i)}):t.addEventListener(e,a,i),a}function zt(e,t,n,i,a){var s={capture:i,passive:a},l=Ku(e,t,n,s);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&oo(()=>{t.removeEventListener(e,l,s)})}function G(e,t,n){(t[pa]??={})[e]=n}function To(e){for(var t=0;t{throw S});throw m}}finally{e[pa]=t,delete e.currentTarget,qt(h),Gt(w)}}}const Ju=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Qu(e){return Ju?.createHTML(e)??e}function ef(e){var t=so("template");return t.innerHTML=Qu(e.replaceAll("","")),t.content}function qr(e,t){var n=re;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function O(e,t){var n=(t&pu)!==0,i=(t&hu)!==0,a,s=!e.startsWith("");return()=>{a===void 0&&(a=ef(s?e:""+e),n||(a=jn(a)));var l=i||no?document.importNode(a,!0):a.cloneNode(!0);if(n){var c=jn(l),o=l.lastChild;qr(c,o)}else qr(l,l);return l}}function ut(e=""){{var t=Tn(e+"");return qr(t,t),t}}function as(){var e=document.createDocumentFragment(),t=document.createComment(""),n=Tn();return e.append(t,n),qr(t,n),e}function C(e,t){e!==null&&e.before(t)}function M(e,t){var n=t==null?"":typeof t=="object"?`${t}`:t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=`${n}`)}function tf(e,t){return nf(e,t)}const qa=new Map;function nf(e,{target:t,anchor:n,props:i={},events:a,context:s,intro:l=!0,transformError:c}){zu();var o=void 0,u=qu(()=>{var h=n??t.appendChild(Tn());Ru(h,{pending:()=>{}},E=>{ri({});var T=Re;s&&(T.c=s),a&&(i.$$events=a),o=e(E,i)||{},ai()},c);var w=new Set,m=E=>{for(var T=0;T{for(var E of w)for(const S of[t,document]){var T=qa.get(S),L=T.get(E);--L==0?(S.removeEventListener(E,$i),T.delete(E),T.size===0&&qa.delete(S)):T.set(E,L)}Hi.delete(m),h!==n&&h.parentNode?.removeChild(h)}});return rf.set(o,u),o}let rf=new WeakMap;class af{anchor;#n=new Map;#o=new Map;#e=new Map;#a=new Set;#r=!0;constructor(t,n=!0){this.anchor=t,this.#r=n}#i=t=>{if(this.#n.has(t)){var n=this.#n.get(t),i=this.#o.get(n);if(i)ns(i),this.#a.delete(n);else{var a=this.#e.get(n);a&&(this.#o.set(n,a.effect),this.#e.delete(n),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),i=a.effect)}for(const[s,l]of this.#n){if(this.#n.delete(s),s===t)break;const c=this.#e.get(l);c&&(kt(c.effect),this.#e.delete(l))}for(const[s,l]of this.#o){if(s===n||this.#a.has(s))continue;const c=()=>{if(Array.from(this.#n.values()).includes(s)){var u=document.createDocumentFragment();rs(l,u),u.append(Tn()),this.#e.set(s,{effect:l,fragment:u})}else kt(l);this.#a.delete(s),this.#o.delete(s)};this.#r||!i?(this.#a.add(s),fr(l,c,!1)):c()}}};#t=t=>{this.#n.delete(t);const n=Array.from(this.#n.values());for(const[i,a]of this.#e)n.includes(i)||(kt(a.effect),this.#e.delete(i))};ensure(t,n){var i=ne,a=io();if(n&&!this.#o.has(t)&&!this.#e.has(t))if(a){var s=document.createDocumentFragment(),l=Tn();s.append(l),this.#e.set(t,{effect:Ut(()=>n(l)),fragment:s})}else this.#o.set(t,Ut(()=>n(this.anchor)));if(this.#n.set(i,t),a){for(const[c,o]of this.#o)c===t?i.unskip_effect(o):i.skip_effect(o);for(const[c,o]of this.#e)c===t?i.unskip_effect(o.effect):i.skip_effect(o.effect);i.oncommit(this.#i),i.ondiscard(this.#t)}else this.#i(i)}}function j(e,t,n=!1){var i=new af(e),a=n?Br:0;function s(l,c){i.ensure(l,c)}li(()=>{var l=!1;t((c,o=0)=>{l=!0,s(o,c)}),l||s(-1,null)},a)}function sf(e,t){return t}function lf(e,t,n){for(var i=[],a=t.length,s,l=t.length,c=0;c{if(s){if(s.pending.delete(w),s.done.add(w),s.pending.size===0){var m=e.outrogroups;qi(e,ni(s.done)),m.delete(s),m.size===0&&(e.outrogroups=null)}}else l-=1},!1)}if(l===0){var o=i.length===0&&n!==null;if(o){var u=n,h=u.parentNode;Fu(h),h.append(u),e.items.clear()}qi(e,t,!o)}else s={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(s)}function qi(e,t,n=!0){var i;if(e.pending.size>0){i=new Set;for(const l of e.pending.values())for(const c of l)i.add(e.items.get(c).e)}for(var a=0;a{var W=n();return Ll(W)?W:W==null?[]:ni(W)}),m,E=new Map,T=!0;function L(W){(A.effect.f&Ht)===0&&(A.pending.delete(W),A.fallback=h,of(A,m,l,t,i),h!==null&&(m.length===0?(h.f&yn)===0?ns(h):(h.f^=yn,ha(h,null,l)):fr(h,()=>{h=null})))}function S(W){A.pending.delete(W)}var I=li(()=>{m=r(w);for(var W=m.length,R=new Set,K=ne,te=io(),de=0;des(l)):(h=Ut(()=>s(ll??=Tn())),h.f|=yn)),W>R.size&&eu(),!T)if(E.set(K,R),te){for(const[pe,ce]of c)R.has(pe)||K.skip_effect(ce.e);K.oncommit(L),K.ondiscard(S)}else L(K);r(w)}),A={effect:I,items:c,pending:E,outrogroups:null,fallback:h};T=!1}function ia(e){for(;e!==null&&(e.f&un)===0;)e=e.next;return e}function of(e,t,n,i,a){var s=(i&fu)!==0,l=t.length,c=e.items,o=ia(e.effect.first),u,h=null,w,m=[],E=[],T,L,S,I;if(s)for(I=0;I0){var De=(i&Fl)!==0&&l===0?n:null;if(s){for(I=0;I{if(w!==void 0)for(S of w)S.nodes?.a?.apply()})}function cf(e,t,n,i,a,s,l,c){var o=(l&cu)!==0?(l&du)===0?Z(n,!1,!1):hr(n):null,u=(l&uu)!==0?hr(a):null;return{v:o,i:u,e:Ut(()=>(s(t,o??n,u??a,c),()=>{e.delete(i)}))}}function ha(e,t,n){if(e.nodes)for(var i=e.nodes.start,a=e.nodes.end,s=t&&(t.f&yn)===0?t.nodes.start:n;i!==null;){var l=Sa(i);if(s.before(i),i===a)return;i=l}}function qn(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function yi(e,t,n=!1,i=!1,a=!1,s=!1){var l=e,c="";if(n)var o=e;z(()=>{var u=re;if(c!==(c=t()??"")){if(n){u.nodes=null,o.innerHTML=c,c!==""&&qr(jn(o),o.lastChild);return}if(u.nodes!==null&&(fo(u.nodes.start,u.nodes.end),u.nodes=null),c!==""){var h=i?vu:a?gu:void 0,w=so(i?"svg":a?"math":"template",h);w.innerHTML=c;var m=i||a?w:w.content;if(qr(jn(m),m.lastChild),i||a)for(;jn(m);)l.before(jn(m));else l.before(m)}}})}function Eo(e,t){var n;n=document.head.appendChild(Tn()),li(()=>t(n),Nl|mr)}function ol(e,t,n){wa(()=>{var i=_(()=>t(e,n?.())||{});if(n&&i?.update){var a=!1,s={};Gr(()=>{var l=n();rn(l),a&&Hl(s,l)&&(s=l,i.update(l))}),a=!0}if(i?.destroy)return()=>i.destroy()})}const cl=[...` -\r\f \v\uFEFF`];function uf(e,t,n){var i=e==null?"":""+e;if(n){for(var a of Object.keys(n))if(n[a])i=i?i+" "+a:a;else if(i.length)for(var s=a.length,l=0;(l=i.indexOf(a,l))>=0;){var c=l+s;(l===0||cl.includes(i[l-1]))&&(c===i.length||cl.includes(i[c]))?i=(l===0?"":i.substring(0,l))+i.substring(c+1):l=c}}return i===""?null:i}function ff(e,t){return e==null?null:String(e)}function _t(e,t,n,i,a,s){var l=e.__className;if(l!==n||l===void 0){var c=uf(n,i,s);c==null?e.removeAttribute("class"):e.className=c,e.__className=n}else if(s&&a!==s)for(var o in s){var u=!!s[o];(a==null||u!==!!a[o])&&e.classList.toggle(o,u)}return s}function On(e,t,n,i){var a=e.__style;if(a!==t){var s=ff(t);s==null?e.removeAttribute("style"):e.style.cssText=s,e.__style=t}return i}const df=Symbol("is custom element"),pf=Symbol("is html");function q(e,t,n,i){var a=hf(e);a[t]!==(a[t]=n)&&(t==="loading"&&(e[Jc]=n),n==null?e.removeAttribute(t):typeof n!="string"&&vf(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function hf(e){return e.__attributes??={[df]:e.nodeName.includes("-"),[pf]:e.namespaceURI===Ul}}var ul=new Map;function vf(e){var t=e.getAttribute("is")||e.nodeName,n=ul.get(t);if(n)return n;ul.set(t,n=[]);for(var i,a=e,s=Element.prototype;s!==a;){i=Dl(a);for(var l in i)i[l].set&&n.push(l);a=Xi(a)}return n}function bn(e,t,n=t){var i=new WeakSet;Bu(e,"input",async a=>{var s=a?e.defaultValue:e.value;if(s=xi(e)?Ti(s):s,n(s),ne!==null&&i.add(ne),await Ui(),s!==(s=t())){var l=e.selectionStart,c=e.selectionEnd,o=e.value.length;if(e.value=s??"",c!==null){var u=e.value.length;l===c&&c===o&&u>o?(e.selectionStart=u,e.selectionEnd=u):(e.selectionStart=l,e.selectionEnd=Math.min(c,u))}}}),_(t)==null&&e.value&&(n(xi(e)?Ti(e.value):e.value),ne!==null&&i.add(ne)),Gr(()=>{var a=t();if(e===document.activeElement){var s=ne;if(i.has(s))return}xi(e)&&a===Ti(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function xi(e){var t=e.type;return t==="number"||t==="range"}function Ti(e){return e===""?null:+e}function fl(e,t){return e===t||e?.[zr]===t}function Xa(e={},t,n,i){var a=Re.r,s=re;return wa(()=>{var l,c;return Gr(()=>{l=c,c=[],_(()=>{e!==n(...c)&&(t(e,...c),l&&fl(n(...l),e)&&t(null,...l))})}),()=>{let o=s;for(;o!==a&&o.parent!==null&&o.parent.f&Mi;)o=o.parent;const u=()=>{c&&fl(n(...c),e)&&t(null,...c)},h=o.teardown;o.teardown=()=>{u(),h?.()}}}),e}function So(e=!1){const t=Re,n=t.l.u;if(!n)return;let i=()=>rn(t.s);if(e){let a=0,s={};const l=ii(()=>{let c=!1;const o=t.s;for(const u in o)o[u]!==s[u]&&(s[u]=o[u],c=!0);return c&&a++,a});i=()=>r(l)}n.b.length&&$u(()=>{dl(t,i),Li(n.b)}),Fi(()=>{const a=_(()=>n.m.map(Kc));return()=>{for(const s of a)typeof s=="function"&&s()}}),n.a.length&&Fi(()=>{dl(t,i),Li(n.a)})}function dl(e,t){if(e.l.s)for(const n of e.l.s)r(n);t()}function gf(e,t,n,i){var a=i,s=!0,l=()=>(s&&(s=!1,a=i),a),c;c=e[t],c===void 0&&i!==void 0&&(c=l());var o;return o=()=>{var u=e[t];return u===void 0?l():(s=!0,u)},o}function Ao(e){Re===null&&zl(),Ta&&Re.l!==null?mf(Re).m.push(e):Fi(()=>{const t=_(e);if(typeof t=="function")return t})}function _f(e){Re===null&&zl(),Ao(()=>()=>_(e))}function mf(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}const bf="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(bf);ku();class Ro extends Error{constructor(t,n){super(n),this.status=t}status}async function nt(e,t={}){const n=new Headers(t.headers);n.set("Accept","application/json"),t.body&&!(t.body instanceof FormData)&&n.set("Content-Type","application/json");const i=await fetch(e,{...t,headers:n});if(!i.ok)throw new Ro(i.status,await i.text());return i.json()}const{entries:Co,setPrototypeOf:pl,isFrozen:kf,getPrototypeOf:wf,getOwnPropertyDescriptor:yf}=Object;let{freeze:ht,seal:Wt,create:Mr}=Object,{apply:Gi,construct:Wi}=typeof Reflect<"u"&&Reflect;ht||(ht=function(t){return t});Wt||(Wt=function(t){return t});Gi||(Gi=function(t,n){for(var i=arguments.length,a=new Array(i>2?i-2:0),s=2;s1?n-1:0),a=1;a"u"?null:We(BigInt.prototype.toString),ml=typeof Symbol>"u"?null:We(Symbol.prototype.toString),Ne=We(Object.prototype.hasOwnProperty),oa=We(Object.prototype.toString),rt=We(RegExp.prototype.test),Ga=Rf(TypeError);function We(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,i=new Array(n>1?n-1:0),a=1;a2&&arguments[2]!==void 0?arguments[2]:va;if(pl&&pl(e,null),!ft(t))return e;let i=t.length;for(;i--;){let a=t[i];if(typeof a=="string"){const s=n(a);s!==a&&(kf(t)||(t[i]=s),a=s)}e[a]=!0}return e}function Cf(e){for(let t=0;t/gm),Pf=Wt(/\$\{[\w\W]*/gm),zf=Wt(/^data-[\-\w.\u00B7-\uFFFF]+$/),Ff=Wt(/^aria-[\-\w]+$/),Io=Wt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Uf=Wt(/^(?:\w+script|data):/i),Bf=Wt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Lo=Wt(/^html$/i),Hf=Wt(/^[a-z][.\w]*(-[.\w]+)+$/i);var xl=Object.freeze({__proto__:null,ARIA_ATTR:Ff,ATTR_WHITESPACE:Bf,CUSTOM_ELEMENT:Hf,DATA_ATTR:zf,DOCTYPE_NAME:Lo,ERB_EXPR:Nf,IS_ALLOWED_URI:Io,IS_SCRIPT_OR_DATA:Uf,MUSTACHE_EXPR:Of,TMPLIT_EXPR:Pf});const ca={element:1,text:3,progressingInstruction:7,comment:8,document:9},$f=function(){return typeof window>"u"?null:window},qf=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let i=null;const a="data-tt-policy-suffix";n&&n.hasAttribute(a)&&(i=n.getAttribute(a));const s="dompurify"+(i?"#"+i:"");try{return t.createPolicy(s,{createHTML(l){return l},createScriptURL(l){return l}})}catch{return console.warn("TrustedTypes policy "+s+" could not be created."),null}},Tl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Do(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:$f();const t=H=>Do(H);if(t.version="3.4.2",t.removed=[],!e||!e.document||e.document.nodeType!==ca.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e;const i=n,a=i.currentScript,{DocumentFragment:s,HTMLTemplateElement:l,Node:c,Element:o,NodeFilter:u,NamedNodeMap:h=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:w,DOMParser:m,trustedTypes:E}=e,T=o.prototype,L=Or(T,"cloneNode"),S=Or(T,"remove"),I=Or(T,"nextSibling"),A=Or(T,"childNodes"),W=Or(T,"parentNode");if(typeof l=="function"){const H=n.createElement("template");H.content&&H.content.ownerDocument&&(n=H.content.ownerDocument)}let R,K="";const{implementation:te,createNodeIterator:de,createDocumentFragment:Te,getElementsByTagName:De}=n,{importNode:be}=i;let pe=Tl();t.isSupported=typeof Co=="function"&&typeof W=="function"&&te&&te.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:ce,ERB_EXPR:ke,TMPLIT_EXPR:Qe,DATA_ATTR:At,ARIA_ATTR:jt,IS_SCRIPT_OR_DATA:it,ATTR_WHITESPACE:vt,CUSTOM_ELEMENT:dn}=xl;let{IS_ALLOWED_URI:Sn}=xl,Ie=null;const Rt=J({},[...bl,...Si,...Ai,...Ri,...kl]);let ze=null;const pn=J({},[...wl,...Ci,...yl,...Wa]);let ge=Object.seal(Mr(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Zt=null,Yt=null;const wt=Object.seal(Mr(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let An=!0,Xt=!0,fe=!1,Ye=!0,Ct=!1,Vt=!0,Le=!1,Zr=!1,Yr=!1,Kt=!1,kr=!1,wr=!1,Ra=!0,Jn=!1;const Ca="user-content-";let lt=!0,Rn=!1,Cn={},yt=null;const yr=J({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let xr=null;const Ia=J({},["audio","video","img","source","image","track"]);let Xr=null;const Vr=J({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Tr="http://www.w3.org/1998/Math/MathML",Er="http://www.w3.org/2000/svg",It="http://www.w3.org/1999/xhtml";let zn=It,Kr=!1,Jr=null;const ui=J({},[Tr,Er,It],Ei);let ot=J({},["mi","mo","mn","ms","mtext"]),Sr=J({},["annotation-xml"]);const Fn=J({},["title","style","font","a","script"]);let hn=null;const La=["application/xhtml+xml","text/html"],fi="text/html";let Fe=null,vn=null;const di=n.createElement("form"),Da=function(f){return f instanceof RegExp||f instanceof Function},Un=function(){let f=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(vn&&vn===f)return;(!f||typeof f!="object")&&(f={}),f=mt(f),hn=La.indexOf(f.PARSER_MEDIA_TYPE)===-1?fi:f.PARSER_MEDIA_TYPE,Fe=hn==="application/xhtml+xml"?Ei:va,Ie=Ne(f,"ALLOWED_TAGS")&&ft(f.ALLOWED_TAGS)?J({},f.ALLOWED_TAGS,Fe):Rt,ze=Ne(f,"ALLOWED_ATTR")&&ft(f.ALLOWED_ATTR)?J({},f.ALLOWED_ATTR,Fe):pn,Jr=Ne(f,"ALLOWED_NAMESPACES")&&ft(f.ALLOWED_NAMESPACES)?J({},f.ALLOWED_NAMESPACES,Ei):ui,Xr=Ne(f,"ADD_URI_SAFE_ATTR")&&ft(f.ADD_URI_SAFE_ATTR)?J(mt(Vr),f.ADD_URI_SAFE_ATTR,Fe):Vr,xr=Ne(f,"ADD_DATA_URI_TAGS")&&ft(f.ADD_DATA_URI_TAGS)?J(mt(Ia),f.ADD_DATA_URI_TAGS,Fe):Ia,yt=Ne(f,"FORBID_CONTENTS")&&ft(f.FORBID_CONTENTS)?J({},f.FORBID_CONTENTS,Fe):yr,Zt=Ne(f,"FORBID_TAGS")&&ft(f.FORBID_TAGS)?J({},f.FORBID_TAGS,Fe):mt({}),Yt=Ne(f,"FORBID_ATTR")&&ft(f.FORBID_ATTR)?J({},f.FORBID_ATTR,Fe):mt({}),Cn=Ne(f,"USE_PROFILES")?f.USE_PROFILES&&typeof f.USE_PROFILES=="object"?mt(f.USE_PROFILES):f.USE_PROFILES:!1,An=f.ALLOW_ARIA_ATTR!==!1,Xt=f.ALLOW_DATA_ATTR!==!1,fe=f.ALLOW_UNKNOWN_PROTOCOLS||!1,Ye=f.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ct=f.SAFE_FOR_TEMPLATES||!1,Vt=f.SAFE_FOR_XML!==!1,Le=f.WHOLE_DOCUMENT||!1,Kt=f.RETURN_DOM||!1,kr=f.RETURN_DOM_FRAGMENT||!1,wr=f.RETURN_TRUSTED_TYPE||!1,Yr=f.FORCE_BODY||!1,Ra=f.SANITIZE_DOM!==!1,Jn=f.SANITIZE_NAMED_PROPS||!1,lt=f.KEEP_CONTENT!==!1,Rn=f.IN_PLACE||!1,Sn=Lf(f.ALLOWED_URI_REGEXP)?f.ALLOWED_URI_REGEXP:Io,zn=typeof f.NAMESPACE=="string"?f.NAMESPACE:It,ot=Ne(f,"MATHML_TEXT_INTEGRATION_POINTS")&&f.MATHML_TEXT_INTEGRATION_POINTS&&typeof f.MATHML_TEXT_INTEGRATION_POINTS=="object"?mt(f.MATHML_TEXT_INTEGRATION_POINTS):J({},["mi","mo","mn","ms","mtext"]),Sr=Ne(f,"HTML_INTEGRATION_POINTS")&&f.HTML_INTEGRATION_POINTS&&typeof f.HTML_INTEGRATION_POINTS=="object"?mt(f.HTML_INTEGRATION_POINTS):J({},["annotation-xml"]);const x=Ne(f,"CUSTOM_ELEMENT_HANDLING")&&f.CUSTOM_ELEMENT_HANDLING&&typeof f.CUSTOM_ELEMENT_HANDLING=="object"?mt(f.CUSTOM_ELEMENT_HANDLING):Mr(null);if(ge=Mr(null),Ne(x,"tagNameCheck")&&Da(x.tagNameCheck)&&(ge.tagNameCheck=x.tagNameCheck),Ne(x,"attributeNameCheck")&&Da(x.attributeNameCheck)&&(ge.attributeNameCheck=x.attributeNameCheck),Ne(x,"allowCustomizedBuiltInElements")&&typeof x.allowCustomizedBuiltInElements=="boolean"&&(ge.allowCustomizedBuiltInElements=x.allowCustomizedBuiltInElements),Ct&&(Xt=!1),kr&&(Kt=!0),Cn&&(Ie=J({},kl),ze=Mr(null),Cn.html===!0&&(J(Ie,bl),J(ze,wl)),Cn.svg===!0&&(J(Ie,Si),J(ze,Ci),J(ze,Wa)),Cn.svgFilters===!0&&(J(Ie,Ai),J(ze,Ci),J(ze,Wa)),Cn.mathMl===!0&&(J(Ie,Ri),J(ze,yl),J(ze,Wa))),wt.tagCheck=null,wt.attributeCheck=null,Ne(f,"ADD_TAGS")&&(typeof f.ADD_TAGS=="function"?wt.tagCheck=f.ADD_TAGS:ft(f.ADD_TAGS)&&(Ie===Rt&&(Ie=mt(Ie)),J(Ie,f.ADD_TAGS,Fe))),Ne(f,"ADD_ATTR")&&(typeof f.ADD_ATTR=="function"?wt.attributeCheck=f.ADD_ATTR:ft(f.ADD_ATTR)&&(ze===pn&&(ze=mt(ze)),J(ze,f.ADD_ATTR,Fe))),Ne(f,"ADD_URI_SAFE_ATTR")&&ft(f.ADD_URI_SAFE_ATTR)&&J(Xr,f.ADD_URI_SAFE_ATTR,Fe),Ne(f,"FORBID_CONTENTS")&&ft(f.FORBID_CONTENTS)&&(yt===yr&&(yt=mt(yt)),J(yt,f.FORBID_CONTENTS,Fe)),Ne(f,"ADD_FORBID_CONTENTS")&&ft(f.ADD_FORBID_CONTENTS)&&(yt===yr&&(yt=mt(yt)),J(yt,f.ADD_FORBID_CONTENTS,Fe)),lt&&(Ie["#text"]=!0),Le&&J(Ie,["html","head","body"]),Ie.table&&(J(Ie,["tbody"]),delete Zt.tbody),f.TRUSTED_TYPES_POLICY){if(typeof f.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ga('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof f.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ga('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');R=f.TRUSTED_TYPES_POLICY,K=R.createHTML("")}else R===void 0&&(R=qf(E,a)),R!==null&&typeof K=="string"&&(K=R.createHTML(""));ht&&ht(f),vn=f},Ma=J({},[...Si,...Ai,...Df]),Oa=J({},[...Ri,...Mf]),Jt=function(f){let x=W(f);(!x||!x.tagName)&&(x={namespaceURI:zn,tagName:"template"});const P=va(f.tagName),he=va(x.tagName);return Jr[f.namespaceURI]?f.namespaceURI===Er?x.namespaceURI===It?P==="svg":x.namespaceURI===Tr?P==="svg"&&(he==="annotation-xml"||ot[he]):!!Ma[P]:f.namespaceURI===Tr?x.namespaceURI===It?P==="math":x.namespaceURI===Er?P==="math"&&Sr[he]:!!Oa[P]:f.namespaceURI===It?x.namespaceURI===Er&&!Sr[he]||x.namespaceURI===Tr&&!ot[he]?!1:!Oa[P]&&(Fn[P]||!Ma[P]):!!(hn==="application/xhtml+xml"&&Jr[f.namespaceURI]):!1},Ue=function(f){la(t.removed,{element:f});try{W(f).removeChild(f)}catch{S(f)}},Lt=function(f,x){try{la(t.removed,{attribute:x.getAttributeNode(f),from:x})}catch{la(t.removed,{attribute:null,from:x})}if(x.removeAttribute(f),f==="is")if(Kt||kr)try{Ue(x)}catch{}else try{x.setAttribute(f,"")}catch{}},Na=function(f){let x=null,P=null;if(Yr)f=""+f;else{const Me=vl(f,/^[\r\n\t ]+/);P=Me&&Me[0]}hn==="application/xhtml+xml"&&zn===It&&(f=''+f+"");const he=R?R.createHTML(f):f;if(zn===It)try{x=new m().parseFromString(he,hn)}catch{}if(!x||!x.documentElement){x=te.createDocument(zn,"template",null);try{x.documentElement.innerHTML=Kr?K:he}catch{}}const Xe=x.body||x.documentElement;return f&&P&&Xe.insertBefore(n.createTextNode(P),Xe.childNodes[0]||null),zn===It?De.call(x,Le?"html":"body")[0]:Le?x.documentElement:Xe},Pa=function(f){return de.call(f.ownerDocument||f,f,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},Qn=function(f){return f instanceof w&&(typeof f.nodeName!="string"||typeof f.textContent!="string"||typeof f.removeChild!="function"||!(f.attributes instanceof h)||typeof f.removeAttribute!="function"||typeof f.setAttribute!="function"||typeof f.namespaceURI!="string"||typeof f.insertBefore!="function"||typeof f.hasChildNodes!="function")},xt=function(f){return typeof c=="function"&&f instanceof c};function Qt(H,f,x){sa(H,P=>{P.call(t,f,x,vn)})}const za=function(f){let x=null;if(Qt(pe.beforeSanitizeElements,f,null),Qn(f))return Ue(f),!0;const P=Fe(f.nodeName);if(Qt(pe.uponSanitizeElement,f,{tagName:P,allowedTags:Ie}),Vt&&f.hasChildNodes()&&!xt(f.firstElementChild)&&rt(/<[/\w!]/g,f.innerHTML)&&rt(/<[/\w!]/g,f.textContent)||Vt&&f.namespaceURI===It&&P==="style"&&xt(f.firstElementChild)||f.nodeType===ca.progressingInstruction||Vt&&f.nodeType===ca.comment&&rt(/<[/\w]/g,f.data))return Ue(f),!0;if(Zt[P]||!(wt.tagCheck instanceof Function&&wt.tagCheck(P))&&!Ie[P]){if(!Zt[P]&&Fa(P)&&(ge.tagNameCheck instanceof RegExp&&rt(ge.tagNameCheck,P)||ge.tagNameCheck instanceof Function&&ge.tagNameCheck(P)))return!1;if(lt&&!yt[P]){const he=W(f)||f.parentNode,Xe=A(f)||f.childNodes;if(Xe&&he){const Me=Xe.length;for(let Ve=Me-1;Ve>=0;--Ve){const je=L(Xe[Ve],!0);he.insertBefore(je,I(f))}}}return Ue(f),!0}return f instanceof o&&!Jt(f)||(P==="noscript"||P==="noembed"||P==="noframes")&&rt(/<\/no(script|embed|frames)/i,f.innerHTML)?(Ue(f),!0):(Ct&&f.nodeType===ca.text&&(x=f.textContent,sa([ce,ke,Qe],he=>{x=Lr(x,he," ")}),f.textContent!==x&&(la(t.removed,{element:f.cloneNode()}),f.textContent=x)),Qt(pe.afterSanitizeElements,f,null),!1)},er=function(f,x,P){if(Yt[x]||Ra&&(x==="id"||x==="name")&&(P in n||P in di))return!1;const he=ze[x]||wt.attributeCheck instanceof Function&&wt.attributeCheck(x,f);if(!(Xt&&!Yt[x]&&rt(At,x))){if(!(An&&rt(jt,x))){if(!he||Yt[x]){if(!(Fa(f)&&(ge.tagNameCheck instanceof RegExp&&rt(ge.tagNameCheck,f)||ge.tagNameCheck instanceof Function&&ge.tagNameCheck(f))&&(ge.attributeNameCheck instanceof RegExp&&rt(ge.attributeNameCheck,x)||ge.attributeNameCheck instanceof Function&&ge.attributeNameCheck(x,f))||x==="is"&&ge.allowCustomizedBuiltInElements&&(ge.tagNameCheck instanceof RegExp&&rt(ge.tagNameCheck,P)||ge.tagNameCheck instanceof Function&&ge.tagNameCheck(P))))return!1}else if(!Xr[x]){if(!rt(Sn,Lr(P,vt,""))){if(!((x==="src"||x==="xlink:href"||x==="href")&&f!=="script"&&gl(P,"data:")===0&&xr[f])){if(!(fe&&!rt(it,Lr(P,vt,"")))){if(P)return!1}}}}}}return!0},pi=J({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Fa=function(f){return!pi[va(f)]&&rt(dn,f)},tr=function(f){Qt(pe.beforeSanitizeAttributes,f,null);const{attributes:x}=f;if(!x||Qn(f))return;const P={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ze,forceKeepAttr:void 0};let he=x.length;for(;he--;){const Xe=x[he],{name:Me,namespaceURI:Ve,value:je}=Xe,gt=Fe(Me),Qr=je;let Be=Me==="value"?Qr:Ef(Qr);if(P.attrName=gt,P.attrValue=Be,P.keepAttr=!0,P.forceKeepAttr=void 0,Qt(pe.uponSanitizeAttribute,f,P),Be=P.attrValue,Jn&&(gt==="id"||gt==="name")&&gl(Be,Ca)!==0&&(Lt(Me,f),Be=Ca+Be),Vt&&rt(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Be)){Lt(Me,f);continue}if(gt==="attributename"&&vl(Be,"href")){Lt(Me,f);continue}if(P.forceKeepAttr)continue;if(!P.keepAttr){Lt(Me,f);continue}if(!Ye&&rt(/\/>/i,Be)){Lt(Me,f);continue}Ct&&sa([ce,ke,Qe],d=>{Be=Lr(Be,d," ")});const Ua=Fe(f.nodeName);if(!er(Ua,gt,Be)){Lt(Me,f);continue}if(R&&typeof E=="object"&&typeof E.getAttributeType=="function"&&!Ve)switch(E.getAttributeType(Ua,gt)){case"TrustedHTML":{Be=R.createHTML(Be);break}case"TrustedScriptURL":{Be=R.createScriptURL(Be);break}}if(Be!==Qr)try{Ve?f.setAttributeNS(Ve,Me,Be):f.setAttribute(Me,Be),Qn(f)?Ue(f):hl(t.removed)}catch{Lt(Me,f)}}Qt(pe.afterSanitizeAttributes,f,null)},nr=function(f){let x=null;const P=Pa(f);for(Qt(pe.beforeSanitizeShadowDOM,f,null);x=P.nextNode();)Qt(pe.uponSanitizeShadowNode,x,null),za(x),tr(x),x.content instanceof s&&nr(x.content);Qt(pe.afterSanitizeShadowDOM,f,null)};return t.sanitize=function(H){let f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},x=null,P=null,he=null,Xe=null;if(Kr=!H,Kr&&(H=""),typeof H!="string"&&!xt(H)&&(H=If(H),typeof H!="string"))throw Ga("dirty is not a string, aborting");if(!t.isSupported)return H;if(Zr||Un(f),t.removed=[],typeof H=="string"&&(Rn=!1),Rn){const je=H.nodeName;if(typeof je=="string"){const gt=Fe(je);if(!Ie[gt]||Zt[gt])throw Ga("root node is forbidden and cannot be sanitized in-place")}}else if(H instanceof c)x=Na(""),P=x.ownerDocument.importNode(H,!0),P.nodeType===ca.element&&P.nodeName==="BODY"||P.nodeName==="HTML"?x=P:x.appendChild(P);else{if(!Kt&&!Ct&&!Le&&H.indexOf("<")===-1)return R&&wr?R.createHTML(H):H;if(x=Na(H),!x)return Kt?null:wr?K:""}x&&Yr&&Ue(x.firstChild);const Me=Pa(Rn?H:x);for(;he=Me.nextNode();)za(he),tr(he),he.content instanceof s&&nr(he.content);if(Rn)return H;if(Kt){if(Ct){x.normalize();let je=x.innerHTML;sa([ce,ke,Qe],gt=>{je=Lr(je,gt," ")}),x.innerHTML=je}if(kr)for(Xe=Te.call(x.ownerDocument);x.firstChild;)Xe.appendChild(x.firstChild);else Xe=x;return(ze.shadowroot||ze.shadowrootmode)&&(Xe=be.call(i,Xe,!0)),Xe}let Ve=Le?x.outerHTML:x.innerHTML;return Le&&Ie["!doctype"]&&x.ownerDocument&&x.ownerDocument.doctype&&x.ownerDocument.doctype.name&&rt(Lo,x.ownerDocument.doctype.name)&&(Ve=" -`+Ve),Ct&&sa([ce,ke,Qe],je=>{Ve=Lr(Ve,je," ")}),R&&wr?R.createHTML(Ve):Ve},t.setConfig=function(){let H=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Un(H),Zr=!0},t.clearConfig=function(){vn=null,Zr=!1},t.isValidAttribute=function(H,f,x){vn||Un({});const P=Fe(H),he=Fe(f);return er(P,he,x)},t.addHook=function(H,f){typeof f=="function"&&la(pe[H],f)},t.removeHook=function(H,f){if(f!==void 0){const x=xf(pe[H],f);return x===-1?void 0:Tf(pe[H],x,1)[0]}return hl(pe[H])},t.removeHooks=function(H){pe[H]=[]},t.removeAllHooks=function(){pe=Tl()},t}var Gf=Do();function is(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var br=is();function Mo(e){br=e}var lr={exec:()=>null};function oe(e,t=""){let n=typeof e=="string"?e:e.source,i={replace:(a,s)=>{let l=typeof s=="string"?s:s.source;return l=l.replace(dt.caret,"$1"),n=n.replace(a,l),i},getRegex:()=>new RegExp(n,t)};return i}var Wf=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},jf=/^(?:[ \t]*(?:\n|$))+/,Zf=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Yf=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Aa=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Xf=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ss=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Oo=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,No=oe(Oo).replace(/bull/g,ss).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Vf=oe(Oo).replace(/bull/g,ss).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ls=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Kf=/^[^\n]+/,os=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Jf=oe(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",os).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Qf=oe(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ss).getRegex(),oi="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",cs=/|$))/,ed=oe("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",cs).replace("tag",oi).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Po=oe(ls).replace("hr",Aa).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",oi).getRegex(),td=oe(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Po).getRegex(),us={blockquote:td,code:Zf,def:Jf,fences:Yf,heading:Xf,hr:Aa,html:ed,lheading:No,list:Qf,newline:jf,paragraph:Po,table:lr,text:Kf},El=oe("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Aa).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",oi).getRegex(),nd={...us,lheading:Vf,table:El,paragraph:oe(ls).replace("hr",Aa).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",El).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",oi).getRegex()},rd={...us,html:oe(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",cs).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:lr,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:oe(ls).replace("hr",Aa).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",No).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},ad=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,id=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,zo=/^( {2,}|\\)\n(?!\s*$)/,sd=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Wf?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Uo=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,fd=oe(Uo,"u").replace(/punct/g,jr).getRegex(),dd=oe(Uo,"u").replace(/punct/g,Fo).getRegex(),Bo="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",pd=oe(Bo,"gu").replace(/notPunctSpace/g,fs).replace(/punctSpace/g,ci).replace(/punct/g,jr).getRegex(),hd=oe(Bo,"gu").replace(/notPunctSpace/g,cd).replace(/punctSpace/g,od).replace(/punct/g,Fo).getRegex(),vd=oe("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,fs).replace(/punctSpace/g,ci).replace(/punct/g,jr).getRegex(),gd=oe(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,jr).getRegex(),_d="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",md=oe(_d,"gu").replace(/notPunctSpace/g,fs).replace(/punctSpace/g,ci).replace(/punct/g,jr).getRegex(),bd=oe(/\\(punct)/,"gu").replace(/punct/g,jr).getRegex(),kd=oe(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),wd=oe(cs).replace("(?:-->|$)","-->").getRegex(),yd=oe("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",wd).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Qa=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,xd=oe(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",Qa).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ho=oe(/^!?\[(label)\]\[(ref)\]/).replace("label",Qa).replace("ref",os).getRegex(),$o=oe(/^!?\[(ref)\](?:\[\])?/).replace("ref",os).getRegex(),Td=oe("reflink|nolink(?!\\()","g").replace("reflink",Ho).replace("nolink",$o).getRegex(),Sl=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,ds={_backpedal:lr,anyPunctuation:bd,autolink:kd,blockSkip:ud,br:zo,code:id,del:lr,delLDelim:lr,delRDelim:lr,emStrongLDelim:fd,emStrongRDelimAst:pd,emStrongRDelimUnd:vd,escape:ad,link:xd,nolink:$o,punctuation:ld,reflink:Ho,reflinkSearch:Td,tag:yd,text:sd,url:lr},Ed={...ds,link:oe(/^!?\[(label)\]\((.*?)\)/).replace("label",Qa).getRegex(),reflink:oe(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Qa).getRegex()},ji={...ds,emStrongRDelimAst:hd,emStrongLDelim:dd,delLDelim:gd,delRDelim:md,url:oe(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Sl).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:oe(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Al=e=>Ad[e];function wn(e,t){if(t){if(dt.escapeTest.test(e))return e.replace(dt.escapeReplace,Al)}else if(dt.escapeTestNoEncode.test(e))return e.replace(dt.escapeReplaceNoEncode,Al);return e}function Rl(e){try{e=encodeURI(e).replace(dt.percentDecode,"%")}catch{return null}return e}function Cl(e,t){let n=e.replace(dt.findPipe,(s,l,c)=>{let o=!1,u=l;for(;--u>=0&&c[u]==="\\";)o=!o;return o?"|":" |"}),i=n.split(dt.splitPipe),a=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),t)if(i.length>t)i.splice(t);else for(;i.length0?-2:-1}function Cd(e,t=0){let n=t,i="";for(let a of e)if(a===" "){let s=4-n%4;i+=" ".repeat(s),n+=s}else i+=a,n++;return i}function Il(e,t,n,i,a){let s=t.href,l=t.title||null,c=e[1].replace(a.other.outputLinkReplace,"$1");i.state.inLink=!0;let o={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:s,title:l,text:c,tokens:i.inlineTokens(c)};return i.state.inLink=!1,o}function Id(e,t,n){let i=e.match(n.other.indentCodeCompensation);if(i===null)return t;let a=i[1];return t.split(` -`).map(s=>{let l=s.match(n.other.beginningSpace);if(l===null)return s;let[c]=l;return c.length>=a.length?s.slice(a.length):s}).join(` -`)}var ei=class{options;rules;lexer;constructor(e){this.options=e||br}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:fa(n,` -`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],i=Id(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:i}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let i=fa(n,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(n=i.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:fa(t[0],` -`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=fa(t[0],` -`).split(` -`),i="",a="",s=[];for(;n.length>0;){let l=!1,c=[],o;for(o=0;o1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=this.rules.other.listItemRegex(n),l=!1;for(;e;){let o=!1,u="",h="";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let w=Cd(t[2].split(` -`,1)[0],t[1].length),m=e.split(` -`,1)[0],E=!w.trim(),T=0;if(this.options.pedantic?(T=2,h=w.trimStart()):E?T=t[1].length+1:(T=w.search(this.rules.other.nonSpaceChar),T=T>4?1:T,h=w.slice(T),T+=t[1].length),E&&this.rules.other.blankLine.test(m)&&(u+=m+` -`,e=e.substring(m.length+1),o=!0),!o){let L=this.rules.other.nextBulletRegex(T),S=this.rules.other.hrRegex(T),I=this.rules.other.fencesBeginRegex(T),A=this.rules.other.headingBeginRegex(T),W=this.rules.other.htmlBeginRegex(T),R=this.rules.other.blockquoteBeginRegex(T);for(;e;){let K=e.split(` -`,1)[0],te;if(m=K,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),te=m):te=m.replace(this.rules.other.tabCharGlobal," "),I.test(m)||A.test(m)||W.test(m)||R.test(m)||L.test(m)||S.test(m))break;if(te.search(this.rules.other.nonSpaceChar)>=T||!m.trim())h+=` -`+te.slice(T);else{if(E||w.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||I.test(w)||A.test(w)||S.test(w))break;h+=` -`+m}E=!m.trim(),u+=K+` -`,e=e.substring(K.length+1),w=te.slice(T)}}a.loose||(l?a.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(l=!0)),a.items.push({type:"list_item",raw:u,task:!!this.options.gfm&&this.rules.other.listIsTask.test(h),loose:!1,text:h,tokens:[]}),a.raw+=u}let c=a.items.at(-1);if(c)c.raw=c.raw.trimEnd(),c.text=c.text.trimEnd();else return;a.raw=a.raw.trimEnd();for(let o of a.items){if(this.lexer.state.top=!1,o.tokens=this.lexer.blockTokens(o.text,[]),o.task){if(o.text=o.text.replace(this.rules.other.listReplaceTask,""),o.tokens[0]?.type==="text"||o.tokens[0]?.type==="paragraph"){o.tokens[0].raw=o.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),o.tokens[0].text=o.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let h=this.lexer.inlineQueue.length-1;h>=0;h--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[h].src)){this.lexer.inlineQueue[h].src=this.lexer.inlineQueue[h].src.replace(this.rules.other.listReplaceTask,"");break}}let u=this.rules.other.listTaskCheckbox.exec(o.raw);if(u){let h={type:"checkbox",raw:u[0]+" ",checked:u[0]!=="[ ]"};o.checked=h.checked,a.loose?o.tokens[0]&&["paragraph","text"].includes(o.tokens[0].type)&&"tokens"in o.tokens[0]&&o.tokens[0].tokens?(o.tokens[0].raw=h.raw+o.tokens[0].raw,o.tokens[0].text=h.raw+o.tokens[0].text,o.tokens[0].tokens.unshift(h)):o.tokens.unshift({type:"paragraph",raw:h.raw,text:h.raw,tokens:[h]}):o.tokens.unshift(h)}}if(!a.loose){let u=o.tokens.filter(w=>w.type==="space"),h=u.length>0&&u.some(w=>this.rules.other.anyLine.test(w.raw));a.loose=h}}if(a.loose)for(let o of a.items){o.loose=!0;for(let u of o.tokens)u.type==="text"&&(u.type="paragraph")}return a}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:"html",block:!0,raw:t[0],pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:t[0],href:i,title:a}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=Cl(t[1]),i=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),a=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(` -`):[],s={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)this.rules.other.tableAlignRight.test(l)?s.align.push("right"):this.rules.other.tableAlignCenter.test(l)?s.align.push("center"):this.rules.other.tableAlignLeft.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l({text:c,tokens:this.lexer.inline(c),header:!1,align:s.align[o]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===` -`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=fa(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=Rd(t[2],"()");if(s===-2)return;if(s>-1){let l=(t[0].indexOf("!")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,l).trim(),t[3]=""}}let i=t[2],a="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(i);s&&(i=s[1],a=s[3])}else a=t[3]?t[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?i=i.slice(1):i=i.slice(1,-1)),Il(t,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),a=t[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return Il(n,a,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!(!i||!i[1]&&!i[2]&&!i[3]&&!i[4]||i[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[3])||!n||this.rules.inline.punctuation.exec(n))){let a=[...i[0]].length-1,s,l,c=a,o=0,u=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,t=t.slice(-1*e.length+a);(i=u.exec(t))!==null;){if(s=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!s)continue;if(l=[...s].length,i[3]||i[4]){c+=l;continue}else if((i[5]||i[6])&&a%3&&!((a+l)%3)){o+=l;continue}if(c-=l,c>0)continue;l=Math.min(l,l+c+o);let h=[...i[0]][0].length,w=e.slice(0,a+i.index+h+l);if(Math.min(a,l)%2){let E=w.slice(1,-1);return{type:"em",raw:w,text:E,tokens:this.lexer.inlineTokens(E)}}let m=w.slice(2,-2);return{type:"strong",raw:w,text:m,tokens:this.lexer.inlineTokens(m)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(n),a=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&a&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let i=this.rules.inline.delLDelim.exec(e);if(i&&(!i[1]||!n||this.rules.inline.punctuation.exec(n))){let a=[...i[0]].length-1,s,l,c=a,o=this.rules.inline.delRDelim;for(o.lastIndex=0,t=t.slice(-1*e.length+a);(i=o.exec(t))!==null;){if(s=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!s||(l=[...s].length,l!==a))continue;if(i[3]||i[4]){c+=l;continue}if(c-=l,c>0)continue;l=Math.min(l,l+c);let u=[...i[0]][0].length,h=e.slice(0,a+i.index+u+l),w=h.slice(a,-a);return{type:"del",raw:h,text:w,tokens:this.lexer.inlineTokens(w)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,i;return t[2]==="@"?(n=t[1],i="mailto:"+n):(n=t[1],i=n),{type:"link",raw:t[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,i;if(t[2]==="@")n=t[0],i="mailto:"+n;else{let a;do a=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(a!==t[0]);n=t[0],t[1]==="www."?i="http://"+t[0]:i=t[0]}return{type:"link",raw:t[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},sn=class Zi{tokens;options;state;inlineQueue;tokenizer;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||br,this.options.tokenizer=this.options.tokenizer||new ei,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:dt,block:ja.normal,inline:ua.normal};this.options.pedantic?(n.block=ja.pedantic,n.inline=ua.pedantic):this.options.gfm&&(n.block=ja.gfm,this.options.breaks?n.inline=ua.breaks:n.inline=ua.gfm),this.tokenizer.rules=n}static get rules(){return{block:ja,inline:ua}}static lex(t,n){return new Zi(n).lex(t)}static lexInline(t,n){return new Zi(n).inlineTokens(t)}lex(t){t=t.replace(dt.carriageReturn,` -`),this.blockTokens(t,this.tokens);for(let n=0;n(a=l.call({lexer:this},t,n))?(t=t.substring(a.raw.length),n.push(a),!0):!1))continue;if(a=this.tokenizer.space(t)){t=t.substring(a.raw.length);let l=n.at(-1);a.raw.length===1&&l!==void 0?l.raw+=` -`:n.push(a);continue}if(a=this.tokenizer.code(t)){t=t.substring(a.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(` -`)?"":` -`)+a.raw,l.text+=` -`+a.text,this.inlineQueue.at(-1).src=l.text):n.push(a);continue}if(a=this.tokenizer.fences(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.heading(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.hr(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.blockquote(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.list(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.html(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.def(t)){t=t.substring(a.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(` -`)?"":` -`)+a.raw,l.text+=` -`+a.raw,this.inlineQueue.at(-1).src=l.text):this.tokens.links[a.tag]||(this.tokens.links[a.tag]={href:a.href,title:a.title},n.push(a));continue}if(a=this.tokenizer.table(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.lheading(t)){t=t.substring(a.raw.length),n.push(a);continue}let s=t;if(this.options.extensions?.startBlock){let l=1/0,c=t.slice(1),o;this.options.extensions.startBlock.forEach(u=>{o=u.call({lexer:this},c),typeof o=="number"&&o>=0&&(l=Math.min(l,o))}),l<1/0&&l>=0&&(s=t.substring(0,l+1))}if(this.state.top&&(a=this.tokenizer.paragraph(s))){let l=n.at(-1);i&&l?.type==="paragraph"?(l.raw+=(l.raw.endsWith(` -`)?"":` -`)+a.raw,l.text+=` -`+a.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(a),i=s.length!==t.length,t=t.substring(a.raw.length);continue}if(a=this.tokenizer.text(t)){t=t.substring(a.raw.length);let l=n.at(-1);l?.type==="text"?(l.raw+=(l.raw.endsWith(` -`)?"":` -`)+a.raw,l.text+=` -`+a.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(a);continue}if(t){let l="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){this.tokenizer.lexer=this;let i=t,a=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(a=this.tokenizer.rules.inline.reflinkSearch.exec(i))!==null;)o.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(a=this.tokenizer.rules.inline.anyPunctuation.exec(i))!==null;)i=i.slice(0,a.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let s;for(;(a=this.tokenizer.rules.inline.blockSkip.exec(i))!==null;)s=a[2]?a[2].length:0,i=i.slice(0,a.index+s)+"["+"a".repeat(a[0].length-s-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let l=!1,c="";for(;t;){l||(c=""),l=!1;let o;if(this.options.extensions?.inline?.some(h=>(o=h.call({lexer:this},t,n))?(t=t.substring(o.raw.length),n.push(o),!0):!1))continue;if(o=this.tokenizer.escape(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.tag(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.link(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(o.raw.length);let h=n.at(-1);o.type==="text"&&h?.type==="text"?(h.raw+=o.raw,h.text+=o.text):n.push(o);continue}if(o=this.tokenizer.emStrong(t,i,c)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.codespan(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.br(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.del(t,i,c)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.autolink(t)){t=t.substring(o.raw.length),n.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(t))){t=t.substring(o.raw.length),n.push(o);continue}let u=t;if(this.options.extensions?.startInline){let h=1/0,w=t.slice(1),m;this.options.extensions.startInline.forEach(E=>{m=E.call({lexer:this},w),typeof m=="number"&&m>=0&&(h=Math.min(h,m))}),h<1/0&&h>=0&&(u=t.substring(0,h+1))}if(o=this.tokenizer.inlineText(u)){t=t.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(c=o.raw.slice(-1)),l=!0;let h=n.at(-1);h?.type==="text"?(h.raw+=o.raw,h.text+=o.text):n.push(o);continue}if(t){let h="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return n}},ti=class{options;parser;constructor(e){this.options=e||br}space(e){return""}code({text:e,lang:t,escaped:n}){let i=(t||"").match(dt.notSpaceStart)?.[0],a=e.replace(dt.endingNewline,"")+` -`;return i?'
'+(n?a:wn(a,!0))+`
-`:"
"+(n?a:wn(a,!0))+`
-`}blockquote({tokens:e}){return`
-${this.parser.parse(e)}
-`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} -`}hr(e){return`
-`}list(e){let t=e.ordered,n=e.start,i="";for(let l=0;l -`+i+" -`}listitem(e){return`
  • ${this.parser.parse(e.tokens)}
  • -`}checkbox({checked:e}){return" '}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    -`}table(e){let t="",n="";for(let a=0;a${i}`),` - -`+t+` -`+i+`
    -`}tablerow({text:e}){return` -${e} -`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+` -`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${wn(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let i=this.parser.parseInline(n),a=Rl(e);if(a===null)return i;e=a;let s='
    ",s}image({href:e,title:t,text:n,tokens:i}){i&&(n=this.parser.parseInline(i,this.parser.textRenderer));let a=Rl(e);if(a===null)return wn(n);e=a;let s=`${wn(n)}{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,t))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=t.renderers[a.name];s?t.renderers[a.name]=function(...l){let c=a.renderer.apply(this,l);return c===!1&&(c=s.apply(this,l)),c}:t.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=t[a.level];s?s.unshift(a.tokenizer):t[a.level]=[a.tokenizer],a.start&&(a.level==="block"?t.startBlock?t.startBlock.push(a.start):t.startBlock=[a.start]:a.level==="inline"&&(t.startInline?t.startInline.push(a.start):t.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(t.childTokens[a.name]=a.childTokens)}),i.extensions=t),n.renderer){let a=this.defaults.renderer||new ti(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,c=n.renderer[l],o=a[l];a[l]=(...u)=>{let h=c.apply(a,u);return h===!1&&(h=o.apply(a,u)),h||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new ei(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,c=n.tokenizer[l],o=a[l];a[l]=(...u)=>{let h=c.apply(a,u);return h===!1&&(h=o.apply(a,u)),h}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new ga;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let l=s,c=n.hooks[l],o=a[l];ga.passThroughHooks.has(s)?a[l]=u=>{if(this.defaults.async&&ga.passThroughHooksRespectAsync.has(s))return(async()=>{let w=await c.call(a,u);return o.call(a,w)})();let h=c.call(a,u);return o.call(a,h)}:a[l]=(...u)=>{if(this.defaults.async)return(async()=>{let w=await c.apply(a,u);return w===!1&&(w=await o.apply(a,u)),w})();let h=c.apply(a,u);return h===!1&&(h=o.apply(a,u)),h}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let c=[];return c.push(s.call(this,l)),a&&(c=c.concat(a.call(this,l))),c}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return sn.lex(e,t??this.defaults)}parser(e,t){return ln.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let i={...n},a={...this.defaults,...i},s=this.onError(!!a.silent,!!a.async);if(this.defaults.async===!0&&i.async===!1)return s(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return s(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return s(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(a.hooks&&(a.hooks.options=a,a.hooks.block=e),a.async)return(async()=>{let l=a.hooks?await a.hooks.preprocess(t):t,c=await(a.hooks?await a.hooks.provideLexer(e):e?sn.lex:sn.lexInline)(l,a),o=a.hooks?await a.hooks.processAllTokens(c):c;a.walkTokens&&await Promise.all(this.walkTokens(o,a.walkTokens));let u=await(a.hooks?await a.hooks.provideParser(e):e?ln.parse:ln.parseInline)(o,a);return a.hooks?await a.hooks.postprocess(u):u})().catch(s);try{a.hooks&&(t=a.hooks.preprocess(t));let l=(a.hooks?a.hooks.provideLexer(e):e?sn.lex:sn.lexInline)(t,a);a.hooks&&(l=a.hooks.processAllTokens(l)),a.walkTokens&&this.walkTokens(l,a.walkTokens);let c=(a.hooks?a.hooks.provideParser(e):e?ln.parse:ln.parseInline)(l,a);return a.hooks&&(c=a.hooks.postprocess(c)),c}catch(l){return s(l)}}}onError(e,t){return n=>{if(n.message+=` -Please report this to https://github.com/markedjs/marked.`,e){let i="

    An error occurred:

    "+wn(n.message+"",!0)+"
    ";return t?Promise.resolve(i):i}if(t)return Promise.reject(n);throw n}}},gr=new Ld;function ye(e,t){return gr.parse(e,t)}ye.options=ye.setOptions=function(e){return gr.setOptions(e),ye.defaults=gr.defaults,Mo(ye.defaults),ye};ye.getDefaults=is;ye.defaults=br;ye.use=function(...e){return gr.use(...e),ye.defaults=gr.defaults,Mo(ye.defaults),ye};ye.walkTokens=function(e,t){return gr.walkTokens(e,t)};ye.parseInline=gr.parseInline;ye.Parser=ln;ye.parser=ln.parse;ye.Renderer=ti;ye.TextRenderer=ps;ye.Lexer=sn;ye.lexer=sn.lex;ye.Tokenizer=ei;ye.Hooks=ga;ye.parse=ye;ye.options;ye.setOptions;ye.use;ye.walkTokens;ye.parseInline;ln.parse;sn.lex;function Dr(e){return Gf.sanitize(ye.parse(e,{async:!1,breaks:!0,gfm:!0}))}function kn(e){return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit"}).format(new Date(e))}var Dd=O('
    '),Md=O(''),Od=O(' ',1),Nd=O('
    ',2),Pd=O(' ');function Ii(e,t){ri(t,!0);let n=gf(t,"onOpenImage",3,()=>{}),i=an(null),a=an(!1),s=an(""),l=Ja(()=>t.upload.content_type?.startsWith("image/")??!1),c=Ja(()=>t.upload.content_type?.startsWith("video/")??!1);function o(){v(a,!0)}function u(){if(!r(i)||!isFinite(r(i).duration))return;const I=Math.floor(r(i).duration),A=Math.floor(I/60),W=I%60;v(s,`${A}:${W.toString().padStart(2,"0")}`)}function h(){r(i)&&(v(a,!0),r(i).play())}function w(I){return I<1024?`${I} B`:I<1024*1024?`${Math.round(I/1024)} KB`:`${(I/(1024*1024)).toFixed(1)} MB`}var m=as(),E=Gn(m);{var T=I=>{var A=Dd(),W=p(A),R=p(W),K=g(W,2),te=p(K),de=p(te),Te=g(te,2);z(()=>{q(W,"aria-label",`Open image ${t.upload.filename}`),q(R,"src",t.url),q(R,"alt",t.upload.filename),M(de,t.upload.filename),q(Te,"href",t.url),q(Te,"download",t.upload.filename),q(Te,"aria-label",`Download ${t.upload.filename}`)}),G("click",W,()=>n()(t.url,t.upload.filename)),G("click",Te,De=>De.stopPropagation()),C(I,A)},L=I=>{var A=Nd();let W;var R=p(A),K=p(R);Xa(R,ce=>v(i,ce),()=>r(i));var te=g(R,2);{var de=ce=>{var ke=Od(),Qe=Gn(ke),At=g(Qe,2);{var jt=it=>{var vt=Md(),dn=p(vt);z(()=>M(dn,r(s))),C(it,vt)};j(At,it=>{r(s)&&it(jt)})}z(()=>q(Qe,"aria-label",`Play ${t.upload.filename}`)),G("click",Qe,h),C(ce,ke)};j(te,ce=>{r(a)||ce(de)})}var Te=g(te,2),De=p(Te),be=p(De),pe=g(De,2);z(()=>{W=_t(A,1,"media-tile media-tile--video",null,W,{"is-started":r(a)}),R.controls=r(a),q(R,"aria-label",t.upload.filename),q(K,"src",t.url),q(K,"type",t.upload.content_type),M(be,t.upload.filename),q(pe,"href",t.url),q(pe,"download",t.upload.filename),q(pe,"aria-label",`Download ${t.upload.filename}`)}),zt("play",R,o),zt("loadedmetadata",R,u),G("click",pe,ce=>ce.stopPropagation()),C(I,A)},S=I=>{var A=Pd(),W=g(p(A),2),R=p(W),K=p(R),te=g(R,2),de=p(te);z(Te=>{q(A,"href",t.url),M(K,t.upload.filename),M(de,Te)},[()=>w(t.upload.byte_size)]),C(I,A)};j(E,I=>{r(l)?I(T):r(c)?I(L,1):I(S,-1)})}C(e,m),ai()}To(["click"]);var zd=O(''),Fd=O(`
    cc
    ClickClack OpenClaw workspace chat

    Welcome back.

    Workspace chat for the OpenClaw crew. Sign in with the GitHub account that's a member of the org.

    Limited to active members of the OpenClaw org.

    `),Ud=O(''),Bd=O('
    '),Hd=O('
    '),$d=O(''),qd=O(''),Gd=O(''),Wd=O(''),jd=O(''),Zd=O(''),Yd=O(''),Xd=O(''),Vd=O(''),Kd=O(''),Jd=O('

    '),Qd=O('

    '),ep=O('

    ClickClack

    '),tp=O(''),np=O(''),rp=O(''),ap=O('
    '),ip=O('
    Send a message in Markdown — code fences, lists, links all work. Threads open from any message.
    '),sp=O('
    '),lp=O(''),op=O(" "),cp=O(' '),up=O(' '),fp=O(''),dp=O('
    '),pp=O('
    '),hp=O('
    ',1),vp=O(''),gp=O('
    GIFs
    '),_p=O(''),mp=O('
    '),bp=O('
    Replying to
    '),kp=O(''),wp=O(" "),yp=O('
    '),xp=O(''),Tp=O(" "),Ep=O(' '),Sp=O(' '),Ap=O(''),Rp=O('
    '),Cp=O('
    '),Ip=O('
    Replying to
    '),Lp=O('

    Thread

    ',1),Dp=O(''),Mp=O(" "),Op=O(''),Np=O(''),Pp=O(''),zp=O('

    Profile

    Active
    Contact information
    Handle
    User ID
    About

    ',1),Fp=O('
    No thread open Hover any message and tap the bubble to keep side conversations tidy.
    '),Up=O(''),Bp=O("

    "),Hp=O(''),$p=O(''),qp=O('

    ',1);function Gp(e,t){ri(t,!1);const n=Z(),i=Z(),a=Z(),s=Z(),l=Z(),c=Z(),o=Z();let u=Z(null),h=Z([]),w=Z([]),m=Z([]),E=Z([]),T=Z([]),L=Z(""),S=Z(""),I=Z(""),A=Z(null),W=Z(null),R=Z(null),K=Z(null),te=Z(""),de=Z(""),Te=Z(""),De=Z(""),be=Z(""),pe=Z(""),ce=Z([]),ke=Z(null),Qe=Z(!1),At=Z(!1),jt=Z(""),it=Z(""),vt=Z(""),dn=Z(""),Sn=Z(""),Ie=Z(!1),Rt=Z("loading"),ze=Z(!1),pn=null,ge=Z(!1),Zt,Yt=Z(null),wt=Z(!1),An=Z(!1),Xt=Z(!1),fe=Z(null),Ye=Z(null),Ct=Z(null),Vt=Z(null),Le=Z("message");const Zr=[{title:"Ship it",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYjJ1bm1meHE4N2x3bnN0djJkMWtjNGc5bXYzZDFiOHBsbG16M3F0ZSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/l0HlHFRbmaZtBRhXG/giphy.gif",tags:["ship","launch","done"]},{title:"Approved",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExazBpbzJ6ODZ3bXQ3OHBvNGJidWZoajc0cHV6YnVub3MzZ3c1a2Z2dSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/111ebonMs90YLu/giphy.gif",tags:["yes","approved","nice"]},{title:"Deploy dance",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExY3NkaTVmZW9ydWNnZnl0ZWQ5aHQyeGNrd2k3NG4wZWNqYzNmd3k1ZCZlcD12MV9naWZzX3NlYXJjaCZjdD1n/GeimqsH0TLDt4tScGw/giphy.gif",tags:["deploy","dance","celebrate"]},{title:"Looking",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYWZ3emE0dm5mN2h0bGVsY2w0OXBodGd2cGJlNDRiZXo1YWNtdWRmZyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/26n6WywJyh39n1pBu/giphy.gif",tags:["search","looking","debug"]},{title:"Typing faster",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExOWFlbnJnbnIzbHYxcDIzdXZ3NGF3N2FocHNvMmR5enU3bHpycHBlZSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/13HgwGsXF0aiGY/giphy.gif",tags:["typing","code","work"]},{title:"Tiny victory",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdjJ2b2tqNmF4dG16NjE0eXhuc3h5bTlvamgwNTR0Zmd6ZjhtM2JuaSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/3o7abKhOpu0NwenH3O/giphy.gif",tags:["win","victory","celebrate"]}];Ao(()=>{Yr()}),_f(()=>{const d=pn;pn=null,v(ge,!1),d?.close(),Zt&&window.clearTimeout(Zt)});async function Yr(){try{const d=await nt("/api/me");v(u,d.user),await wr(),v(Rt,"ready")}catch(d){if(d instanceof Ro&&(d.status===401||d.status===403)){v(ze,!0),v(Rt,"auth");return}v(Rt,d instanceof Error?d.message:"Could not load ClickClack")}}function Kt(){r(u)&&(v(it,r(u).display_name),v(vt,r(u).handle?`@${r(u).handle}`:""),v(dn,r(u).avatar_url),v(Sn,""),v(Ie,!1),v(At,!0))}async function kr(){v(Sn,""),v(Ie,!1);try{const d=await nt("/api/me",{method:"PATCH",body:JSON.stringify({display_name:r(it),handle:r(vt),avatar_url:r(dn)})});v(u,d.user),v(E,r(E).map(b=>b.author?.id===r(u)?.id?{...b,author:d.user}:b)),v(T,r(T).map(b=>b.author?.id===r(u)?.id?{...b,author:d.user}:b)),r(A)?.author?.id===r(u).id&&v(A,{...r(A),author:d.user}),v(Sn,"Saved"),v(At,!1)}catch(d){v(Sn,d instanceof Error?d.message:"Could not save profile"),v(Ie,!0)}}async function wr(){const d=await nt("/api/workspaces");v(h,d.workspaces),v(L,r(L)||r(h)[0]?.id||""),await Jn(),await vn(),r(h).length===0&&v(Rt,"create a workspace"),Un()}async function Ra(){if(!r(Te).trim())return;const d=await nt("/api/workspaces",{method:"POST",body:JSON.stringify({name:r(Te)})});v(Te,""),v(wt,!1),v(h,[...r(h),d.workspace]),v(L,d.workspace.id),await Jn(),await vn(),Un()}async function Jn(){if(!r(L))return;const d=await nt(`/api/workspaces/${r(L)}/channels`);v(w,d.channels),v(S,r(w).find(b=>b.id===r(S))?.id||r(w)[0]?.id||""),v(A,null),v(R,null),v(Le,"message"),v(T,[]),await lt()}async function Ca(){if(!r(L)||!r(De).trim())return;const d=await nt(`/api/workspaces/${r(L)}/channels`,{method:"POST",body:JSON.stringify({name:r(De),kind:"public"})});v(De,""),v(w,[...r(w),d.channel]),v(S,d.channel.id),v(I,""),await lt()}async function lt(){if(r(I)){const b=await nt(`/api/dms/${r(I)}/messages`);v(E,b.messages),await Rn();return}if(!r(S)){v(E,[]);return}const d=await nt(`/api/channels/${r(S)}/messages`);v(E,d.messages),await Rn()}async function Rn(){await Ui(),r(Yt)&&Nu(Yt,r(Yt).scrollTop=r(Yt).scrollHeight)}async function Cn(){const d=r(te).trim();if(!d)return;if(!r(S)&&!r(I)){v(Rt,"pick or create a channel");return}const b=r(I)?"dm":"channel",N=r(fe)&&r(Ye)===b?r(fe):null;v(te,"");const Q=r(I)?`/api/dms/${r(I)}/messages`:`/api/channels/${r(S)}/messages`,we={body:d};N&&(we.quoted_message_id=N.id);const ae=await nt(Q,{method:"POST",body:JSON.stringify(we)});let He=ae.message;if(N&&ot(),r(ke)){const Dt=r(ke);await nt(`/api/messages/${ae.message.id}/attachments`,{method:"POST",body:JSON.stringify({upload_id:Dt.id})}),v(ke,null),He={...He,attachments:[...He.attachments||[],Dt]}}r(E).some(Dt=>Dt.id===He.id)?v(E,r(E).map(Dt=>Dt.id===He.id?He:Dt)):v(E,[...r(E),He]),await Rn()}async function yt(d){v(R,null),v(A,d),v(Le,"thread");const b=await nt(`/api/messages/${d.id}/thread`);v(A,b.root),v(T,b.replies),v(W,b.thread_state)}async function yr(){const d=r(de).trim();if(!d||!r(A))return;const b=r(fe)&&r(Ye)==="thread"?r(fe):null;v(de,"");const N={body:d};b&&(N.quoted_message_id=b.id);const Q=await nt(`/api/messages/${r(A).id}/thread/replies`,{method:"POST",body:JSON.stringify(N)});b&&ot(),r(T).some(we=>we.id===Q.message.id)||v(T,[...r(T),Q.message]),v(W,Q.thread_state)}function xr(d,b){v(fe,d),v(Ye,b),v(Le,b==="thread"?"thread":"message")}const Ia=new Set(["button","checkbox","combobox","link","listbox","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","option","radio","radiogroup","slider","spinbutton","switch","tab","tablist","textbox","tree","treeitem"]),Xr=new Set(["INPUT","TEXTAREA","SELECT","BUTTON","A","DETAILS","SUMMARY","VIDEO","AUDIO"]);function Vr(){return r(K)!==null||r(At)}function Tr(d){if(!d)return!1;if(d.isContentEditable)return!0;if(d instanceof HTMLInputElement){const b=(d.type||"text").toLowerCase();return b!=="checkbox"&&b!=="radio"&&b!=="button"&&b!=="submit"&&b!=="reset"&&b!=="file"}return d instanceof HTMLTextAreaElement}function Er(d){if(!d||It(d))return!1;if(Xr.has(d.tagName))return!0;const b=d.getAttribute("role");if(b&&Ia.has(b))return!0;const N=d.getAttribute("tabindex");return!!(N!==null&&N!=="-1"&&d.hasAttribute("aria-keyshortcuts"))}function It(d){if(!d.closest(".messages, .thread"))return!1;if(d instanceof HTMLButtonElement||d instanceof HTMLAnchorElement)return!0;const b=d.getAttribute("role");return b==="button"||b==="link"}function zn(){const d=typeof window<"u"?window.getSelection():null;if(!d||d.isCollapsed||d.rangeCount===0)return!1;const b=d.getRangeAt(0).commonAncestorContainer;return b?!!(b.nodeType===Node.ELEMENT_NODE?b:b.parentElement)?.closest(".messages, .thread, .markdown"):!1}function Kr(d){if(r(ze)||Vr()||d.defaultPrevented||d.isComposing||d.keyCode===229||d.ctrlKey||d.metaKey||d.altKey||d.key.length!==1||zn())return!1;const b=document.activeElement;return!(b===r(Ct)||b===r(Vt)||Tr(b)||Er(b))}function Jr(d){if(!Kr(d))return;const b=ui();if(!b||b.disabled||b.readOnly)return;d.key===" "&&d.preventDefault(),b.focus({preventScroll:!0});const N=b.value.length;if(b.setSelectionRange(N,N),d.key===" "){const Q=b.selectionStart??N,we=b.selectionEnd??N;b.setRangeText(" ",Q,we,"end"),b.dispatchEvent(new Event("input",{bubbles:!0}))}}function ui(){return r(Le)==="thread"&&r(A)&&r(Vt)?r(Vt):r(Ct)}function ot(){v(fe,null),v(Ye,null)}function Sr(d,b){const N=()=>{const ae=d.style.height;d.style.height="auto";const He=`${d.scrollHeight}px`;ae!==He?d.style.height=He:d.style.height=ae},Q=()=>N(),we=()=>N();return requestAnimationFrame(N),d.addEventListener("input",Q),window.addEventListener("resize",we),{update(){requestAnimationFrame(N)},destroy(){d.removeEventListener("input",Q),window.removeEventListener("resize",we)}}}function Fn(d,b=120){if(!d)return"";const N=d.replace(/\s+/g," ").trim();return N.length>b?N.slice(0,b-1)+"…":N}function hn(d){return d.quoted_author?.display_name||"Unknown"}async function La(d){const b=d.quoted_message_id;if(!b)return;await Ui();const N=document.querySelector(`[data-message-id="${CSS.escape(b)}"]`);N&&(N.scrollIntoView({behavior:"smooth",block:"center"}),N.classList.add("highlight"),window.setTimeout(()=>N.classList.remove("highlight"),1500))}async function fi(){if(!r(L)||!r(pe).trim()){v(ce,[]);return}const d=await nt(`/api/search?workspace_id=${encodeURIComponent(r(L))}&q=${encodeURIComponent(r(pe).trim())}`);v(ce,d.results)}async function Fe(d){const b=d.currentTarget,N=b.files?.[0];if(!N||!r(L))return;const Q=new FormData;Q.set("workspace_id",r(L)),Q.set("file",N);const we=await nt("/api/uploads",{method:"POST",body:Q});v(ke,we.upload),b.value=""}async function vn(){if(!r(L))return;const d=await nt(`/api/dms?workspace_id=${r(L)}`);v(m,d.conversations)}async function di(){if(!r(L)||!r(be).trim())return;const d=await nt("/api/dms",{method:"POST",body:JSON.stringify({workspace_id:r(L),member_ids:[r(be).trim()]})});v(be,""),v(m,[...r(m),d.conversation]),v(I,d.conversation.id),v(S,""),v(A,null),v(R,null),v(Le,"message"),await lt()}async function Da(d){if(!r(L)||!d)return;const b=r(m).find(Q=>Q.members.some(we=>we.id===d));if(b){v(I,b.id),v(S,""),v(A,null),v(R,null),v(Le,"message"),await lt();return}const N=await nt("/api/dms",{method:"POST",body:JSON.stringify({workspace_id:r(L),member_ids:[d]})});v(m,[...r(m),N.conversation]),v(I,N.conversation.id),v(S,""),v(A,null),v(R,null),v(Le,"message"),await lt()}function Un(){Zt&&window.clearTimeout(Zt);const d=pn;if(pn=null,v(ge,!1),d?.close(),!r(L))return;const b=localStorage.getItem(`clickclack:${r(L)}:cursor`)||"",N=new URL("/api/realtime/ws",window.location.href);N.protocol=window.location.protocol==="https:"?"wss:":"ws:",N.searchParams.set("workspace_id",r(L)),b&&N.searchParams.set("after_cursor",b);const Q=new WebSocket(N);pn=Q,Q.addEventListener("open",()=>{pn===Q&&v(ge,!0)}),Q.addEventListener("message",we=>{const ae=JSON.parse(String(we.data));ae.cursor&&localStorage.setItem(`clickclack:${r(L)}:cursor`,ae.cursor),Ma(ae)}),Q.addEventListener("close",()=>{pn===Q&&(v(ge,!1),Zt=window.setTimeout(Un,1200))})}async function Ma(d){if((d.type==="channel.created"||d.type==="channel.updated")&&d.workspace_id===r(L)){await Jn();return}(d.channel_id===r(S)||d.payload.direct_conversation_id===r(I))&&(d.type==="message.created"||d.type==="message.updated"||d.type==="message.deleted")&&await lt();const b=d.payload.root_message_id||d.payload.message_id;r(A)&&b===r(A).id&&await yt(r(A))}function Oa(d){const b=d.trim();if(!b)return"?";const N=b.split(/\s+/);return N.length>=2?(N[0][0]+N[1][0]).toUpperCase():b.slice(0,2).toUpperCase()}function Jt(d){if(!d)return"?";const b=d.trim();return b?b[0].toUpperCase():"?"}function Ue(d){return d?`@${d}`:""}function Lt(d){return d.members.find(b=>b.id!==r(u)?.id)||d.members[0]}function Na(d,b,N){const Q=new Map;for(const we of b)for(const ae of we.members)ae.id&&ae.id!==N&&Q.set(ae.id,ae);for(const we of[...d].reverse()){const ae=we.author;ae?.id&&ae.id!==N&&Q.set(ae.id,ae)}return[...Q.values()].slice(0,12)}function Pa(d){return r(m).find(b=>b.members.some(N=>N.id===d))}function Qn(d){d&&(v(A,null),v(R,d))}function xt(d){let b=0;for(let N=0;N>>0;return b%360}function Qt(d){const b=new Date(d),N=new Date,Q=new Date;Q.setDate(N.getDate()-1);const we=(ae,He)=>ae.getFullYear()===He.getFullYear()&&ae.getMonth()===He.getMonth()&&ae.getDate()===He.getDate();return we(b,N)?"Today":we(b,Q)?"Yesterday":new Intl.DateTimeFormat(void 0,{weekday:"long",month:"long",day:"numeric"}).format(b)}function za(d){const b=[];let N="",Q="",we=0;for(const ae of d){const He=new Date(ae.created_at),Dt=He.toDateString(),Ar=ae.author?.id||ae.author_id||"local",ea=Dt!==N,Ba=Ar!==Q,hi=He.getTime()-we>300*1e3;ea||Ba||hi||b.length===0?b.push({key:ae.id,dayLabel:ea?Qt(ae.created_at):null,messages:[ae],authorName:ae.author?.display_name||"Local User",authorHandle:ae.author?.handle||"",authorAvatarURL:ae.author?.avatar_url||"",authorID:Ar,timestamp:ae.created_at}):b[b.length-1].messages.push(ae),N=Dt,Q=Ar,we=He.getTime()}return b}function er(d){const b=d.members.filter(Q=>Q.id!==r(u)?.id);return(b.length>0?b:d.members).map(Q=>Q.display_name).join(", ")}function pi(d){if(d.key==="Escape"&&r(fe)&&r(Ye)!=="thread"){d.preventDefault(),ot();return}d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),Cn())}function Fa(d){if(d.key==="Escape"&&r(fe)&&r(Ye)==="thread"){d.preventDefault(),ot();return}d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),yr())}function tr(d){return`/api/uploads/${encodeURIComponent(d.id)}`}function nr(d,b){v(K,{url:d,title:b})}function H(d){const b=d.target;b instanceof HTMLImageElement&&b.closest(".markdown")&&(d.preventDefault(),nr(b.currentSrc||b.src,b.alt||"Image"))}function f(d){return d.content_type.startsWith("image/")}function x(d){return d<1024?`${d} B`:d<1024*1024?`${Math.round(d/1024)} KB`:`${(d/(1024*1024)).toFixed(1)} MB`}function P(d){const b=r(te)&&!r(te).endsWith(` -`)?` -`:"";v(te,`${r(te)}${b}${d}`)}function he(d,b=d){P(`${d}${d==="```"?` -code -`:"text"}${b}`)}function Xe(d,b){P(`![${b}](${d})`),v(Qe,!1),v(jt,"")}function Me(d){return r(A)?.id===d.id?"Open":"Thread"}function Ve(){r(Ye)==="thread"&&ot(),v(A,null),v(R,null),v(Le,"message"),v(T,[])}function je(){v(K,null),v(At,!1)}mn(()=>(r(h),r(L)),()=>{v(n,r(h).find(d=>d.id===r(L)))}),mn(()=>(r(w),r(S)),()=>{v(i,r(w).find(d=>d.id===r(S)))}),mn(()=>(r(m),r(I)),()=>{v(a,r(m).find(d=>d.id===r(I)))}),mn(()=>(r(A),r(R)),()=>{v(s,r(A)!==null||r(R)!==null)}),mn(()=>r(E),()=>{v(l,za(r(E)))}),mn(()=>(r(E),r(m),r(u)),()=>{v(c,Na(r(E),r(m),r(u)?.id||""))}),mn(()=>(r(Ye),r(fe),r(E)),()=>{r(Ye)==="channel"&&r(fe)&&!r(E).some(d=>d.id===r(fe)?.id)&&ot()}),mn(()=>(r(Ye),r(fe),r(E)),()=>{r(Ye)==="dm"&&r(fe)&&!r(E).some(d=>d.id===r(fe)?.id)&&ot()}),mn(()=>(r(Ye),r(fe),r(A),r(T)),()=>{r(Ye)==="thread"&&r(fe)&&r(A)&&r(fe).id!==r(A).id&&!r(T).some(d=>d.id===r(fe)?.id)&&ot()}),mn(()=>r(jt),()=>{v(o,Zr.filter(d=>{const b=r(jt).trim().toLowerCase();return!b||d.title.toLowerCase().includes(b)||d.tags.some(N=>N.includes(b))}))}),Gu(),So();var gt=as();Eo("1oa2eo8",d=>{var b=zd();C(d,b)}),zt("keydown",zi,d=>{if(d.key==="Escape"){if(Vr())je();else if(r(fe)){d.preventDefault(),ot();return}}Jr(d)});var Qr=Gn(gt);{var Be=d=>{var b=Fd();C(d,b)},Ua=d=>{var b=qp(),N=Gn(b);let Q;var we=p(N),ae=p(we);{var He=y=>{var k=ut("×");C(y,k)},Dt=y=>{var k=Ud();C(y,k)};j(ae,y=>{r(Xt)?y(He):y(Dt,-1)})}var Ar=g(we,2),ea=g(p(Ar),4),Ba=p(ea);Et(Ba,1,()=>r(h),y=>y.id,(y,k)=>{var U=Bd();let Y;var se=p(U),ie=p(se),ee=p(ie);z(le=>{Y=_t(U,1,"guild-wrap",null,Y,{active:r(k).id===r(L)}),q(se,"title",(r(k),_(()=>r(k).name))),M(ee,le)},[()=>(r(k),_(()=>Oa(r(k).name)))]),G("click",se,async()=>{v(L,r(k).id),await Jn(),await vn(),Un()}),C(y,U)});var hi=g(Ba,2),qo=g(ea,2);{var Go=y=>{var k=Hd(),U=p(k);zt("submit",k,Y=>{Y.preventDefault(),Ra()}),bn(U,()=>r(Te),Y=>v(Te,Y)),C(y,k)};j(qo,y=>{r(wt)&&y(Go)})}var hs=g(Ar,2),vs=p(hs),gs=p(vs),_s=p(gs),Wo=p(_s),ms=g(_s,2);let bs;var jo=p(ms),Ha=g(gs,2),Zo=p(Ha),Yo=p(Zo),ks=g(vs,2),ws=p(ks),ys=g(p(ws),2),xs=p(ys);Et(xs,1,()=>r(w),y=>y.id,(y,k)=>{var U=$d();let Y;var se=g(p(U),2),ie=p(se);z(()=>{Y=_t(U,1,"nav-item channel",null,Y,{active:r(k).id===r(S)&&!r(I)}),M(ie,(r(k),_(()=>r(k).name)))}),G("click",U,async()=>{v(S,r(k).id),v(I,""),v(A,null),v(R,null),v(Le,"message"),v(Xt,!1),await lt()}),C(y,U)});var Xo=g(xs,2);{var Vo=y=>{var k=qd();C(y,k)};j(Xo,y=>{r(w),_(()=>r(w).length===0)&&y(Vo)})}var Ts=g(ys,2),Ko=p(Ts),Es=g(ws,2),Ss=g(p(Es),2),As=p(Ss);Et(As,1,()=>r(m),y=>y.id,(y,k)=>{var U=Wd();let Y;var se=p(U),ie=p(se);{var ee=F=>{var V=Gd();z(Oe=>q(V,"src",Oe),[()=>(r(k),_(()=>Lt(r(k))?.avatar_url))]),C(F,V)},le=Ja(()=>(r(k),_(()=>Lt(r(k))?.avatar_url))),B=F=>{var V=ut();z(Oe=>M(V,Oe),[()=>(r(k),_(()=>Jt(Lt(r(k))?.display_name)))]),C(F,V)};j(ie,F=>{r(le)?F(ee):F(B,-1)})}var ve=g(se,2),Ee=p(ve);z((F,V)=>{Y=_t(U,1,"nav-item dm",null,Y,{active:r(k).id===r(I)}),On(se,`--hue: ${F??""}deg`),M(Ee,V)},[()=>(r(k),_(()=>xt(Lt(r(k))?.id||r(k).id))),()=>(r(k),_(()=>er(r(k))))]),G("click",U,async()=>{v(I,r(k).id),v(S,""),v(A,null),v(R,null),v(Le,"message"),v(Xt,!1),await lt()}),C(y,U)});var Jo=g(As,2);{var Qo=y=>{var k=jd();C(y,k)};j(Jo,y=>{r(m),_(()=>r(m).length===0)&&y(Qo)})}var Rs=g(Ss,2),ec=p(Rs),tc=g(Es,2),nc=g(p(tc),2),Cs=p(nc);Et(Cs,1,()=>r(c),y=>y.id,(y,k)=>{const U=Pr(()=>(r(k),_(()=>Pa(r(k).id))));var Y=Yd();let se;var ie=p(Y),ee=p(ie);{var le=F=>{var V=Zd();z(()=>q(V,"src",(r(k),_(()=>r(k).avatar_url)))),C(F,V)},B=F=>{var V=ut();z(Oe=>M(V,Oe),[()=>(r(k),_(()=>Jt(r(k).display_name)))]),C(F,V)};j(ee,F=>{r(k),_(()=>r(k).avatar_url)?F(le):F(B,-1)})}var ve=g(ie,2),Ee=p(ve);z(F=>{se=_t(Y,1,"nav-item dm",null,se,{active:r(U)?.id===r(I)||r(R)?.id===r(k).id}),On(ie,`--hue: ${F??""}deg`),M(Ee,(r(k),_(()=>r(k).display_name)))},[()=>(r(k),_(()=>xt(r(k).id)))]),G("click",Y,async()=>{r(U)?(v(I,r(U).id),v(S,""),v(A,null),v(R,null),v(Le,"message"),v(Xt,!1),await lt()):Qn(r(k))}),C(y,Y)});var rc=g(Cs,2);{var ac=y=>{var k=Xd();C(y,k)};j(rc,y=>{r(c),_(()=>r(c).length===0)&&y(ac)})}var ic=g(ks,2);{var sc=y=>{var k=Kd(),U=p(k),Y=p(U);{var se=F=>{var V=Vd();z(()=>q(V,"src",(r(u),_(()=>r(u).avatar_url)))),C(F,V)},ie=F=>{var V=ut();z(Oe=>M(V,Oe),[()=>(r(u),_(()=>Jt(r(u).display_name)))]),C(F,V)};j(Y,F=>{r(u),_(()=>r(u).avatar_url)?F(se):F(ie,-1)})}var ee=g(U,2),le=p(ee),B=p(le),ve=g(le,2),Ee=p(ve);z((F,V,Oe)=>{q(k,"aria-label",F),On(U,`--hue: ${V??""}deg`),M(B,(r(u),_(()=>r(u).display_name))),M(Ee,Oe)},[()=>(r(u),_(()=>`Account settings for ${r(u).display_name} ${Ue(r(u).handle)}`)),()=>(r(u),_(()=>xt(r(u).id))),()=>(r(u),r(ge),_(()=>r(u).handle?Ue(r(u).handle):r(ge)?"Active":"Reconnecting…"))]),G("click",k,Kt),G("contextmenu",k,F=>{F.preventDefault(),Kt()}),C(y,k)};j(ic,y=>{r(u)&&y(sc)})}var Is=g(hs,2),Ls=p(Is),Ds=p(Ls),Ms=p(Ds);{var lc=y=>{var k=Jd(),U=p(k);z(Y=>M(U,Y),[()=>(r(a),_(()=>`@${er(r(a))}`))]),C(y,k)},oc=y=>{var k=Qd(),U=p(k);z(()=>M(U,(r(i),_(()=>`#${r(i).name}`)))),C(y,k)},cc=y=>{var k=ep();C(y,k)};j(Ms,y=>{r(a)?y(lc):r(i)?y(oc,1):y(cc,-1)})}var uc=g(Ms,4),fc=p(uc),vi=g(Ds,2),Os=g(p(vi),2),dc=g(Os,2);{var pc=y=>{var k=tp();G("click",k,()=>{v(pe,""),v(ce,[])}),C(y,k)};j(dc,y=>{r(pe)&&y(pc)})}var hc=g(vi,2),ta=p(hc);let Ns;var vc=g(ta,2),Ps=g(Ls,2);{var gc=y=>{var k=ap(),U=p(k),Y=p(U),se=p(Y),ie=g(Y,2),ee=g(U,2);Et(ee,1,()=>r(ce),le=>le.message.id,(le,B)=>{var ve=rp(),Ee=p(ve),F=p(Ee);{var V=Se=>{var Ke=np();z(()=>q(Ke,"src",(r(B),_(()=>r(B).message.author.avatar_url)))),C(Se,Ke)},Oe=Se=>{var Ke=ut();z(gn=>M(Ke,gn),[()=>(r(B),_(()=>Jt(r(B).message.author?.display_name)))]),C(Se,Ke)};j(F,Se=>{r(B),_(()=>r(B).message.author?.avatar_url)?Se(V):Se(Oe,-1)})}var Mt=g(Ee,2),Ot=p(Mt),en=p(Ot),tn=p(en),In=g(en,2),_e=p(In),$=g(Ot,2),et=p($);z((Se,Ke)=>{On(Ee,`--hue: ${Se??""}deg`),M(tn,(r(B),_(()=>r(B).message.author?.display_name||"Local User"))),M(_e,Ke),M(et,(r(B),_(()=>r(B).message.body)))},[()=>(r(B),_(()=>xt(r(B).message.author?.id||r(B).message.author_id||"x"))),()=>(rn(kn),r(B),_(()=>kn(r(B).message.created_at)))]),G("click",ve,async()=>{v(ce,[]),r(B).message.channel_id&&(v(S,r(B).message.channel_id),v(I,""),await lt()),r(B).message.direct_conversation_id&&(v(I,r(B).message.direct_conversation_id),v(S,""),await lt())}),C(le,ve)}),z(()=>M(se,`${r(ce),_(()=>r(ce).length)??""} ${r(ce),_(()=>r(ce).length===1?"result":"results")??""}`)),G("click",ie,()=>{v(ce,[])}),C(y,k)};j(Ps,y=>{r(ce),_(()=>r(ce).length>0)&&y(gc)})}var na=g(Ps,2),zs=p(na);{var _c=y=>{var k=ip(),U=p(k),Y=p(U);{var se=F=>{var V=ut("@");C(F,V)},ie=F=>{var V=ut("#");C(F,V)};j(Y,F=>{r(a)?F(se):F(ie,-1)})}var ee=g(U,2),le=p(ee);{var B=F=>{var V=ut();z(Oe=>M(V,`This is the start of your conversation with ${Oe??""}.`),[()=>(r(a),_(()=>er(r(a))))]),C(F,V)},ve=F=>{var V=ut();z(()=>M(V,`Welcome to #${r(i),_(()=>r(i).name)??""}!`)),C(F,V)},Ee=F=>{var V=ut("Pick a channel to get started.");C(F,V)};j(le,F=>{r(a)?F(B):r(i)?F(ve,1):F(Ee,-1)})}C(y,k)};j(zs,y=>{r(E),_(()=>r(E).length===0)&&y(_c)})}var mc=g(zs,2);Et(mc,1,()=>r(l),y=>y.key,(y,k)=>{var U=hp(),Y=Gn(U);{var se=_e=>{var $=sp(),et=p($),Se=p(et);z(()=>M(Se,(r(k),_(()=>r(k).dayLabel)))),C(_e,$)};j(Y,_e=>{r(k),_(()=>r(k).dayLabel)&&_e(se)})}var ie=g(Y,2),ee=p(ie),le=p(ee);{var B=_e=>{var $=lp();z(()=>q($,"src",(r(k),_(()=>r(k).authorAvatarURL)))),C(_e,$)},ve=_e=>{var $=ut();z(et=>M($,et),[()=>(r(k),_(()=>Jt(r(k).authorName)))]),C(_e,$)};j(le,_e=>{r(k),_(()=>r(k).authorAvatarURL)?_e(B):_e(ve,-1)})}var Ee=g(ee,2),F=p(Ee),V=p(F),Oe=p(V),Mt=g(V,2);{var Ot=_e=>{var $=op(),et=p($);z(Se=>M(et,Se),[()=>(r(k),_(()=>Ue(r(k).authorHandle)))]),C(_e,$)};j(Mt,_e=>{r(k),_(()=>r(k).authorHandle)&&_e(Ot)})}var en=g(Mt,2),tn=p(en),In=g(F,2);Et(In,3,()=>(r(k),_(()=>r(k).messages)),_e=>_e.id,(_e,$,et)=>{var Se=pp();let Ke;var gn=p(Se),Bn=p(gn),Ln=g(gn,2),xe=p(Ln);{var tt=Tt=>{var X=fp();let D;var Ce=g(p(X),2),Ze=p(Ce),Dn=p(Ze),me=g(Ze,2);{var Ae=ct=>{var Pt=cp(),aa=p(Pt);z(Ir=>M(aa,Ir),[()=>(r($),_(()=>Fn(r($).quoted_body_snapshot)))]),C(ct,Pt)},Mn=ct=>{var Pt=up(),aa=p(Pt);z(Ir=>M(aa,`[original deleted] ${Ir??""}`),[()=>(r($),_(()=>Fn(r($).quoted_body_snapshot)))]),C(ct,Pt)};j(me,ct=>{r($),_(()=>r($).quoted_message_id)?ct(Ae):ct(Mn,-1)})}z((ct,Pt)=>{D=_t(X,1,"quote-block",null,D,{dangling:!r($).quoted_message_id}),X.disabled=(r($),_(()=>!r($).quoted_message_id)),q(X,"aria-label",ct),M(Dn,Pt)},[()=>(r($),_(()=>r($).quoted_message_id?`Jump to quoted message from ${hn(r($))}`:"Original message was deleted")),()=>(r($),_(()=>hn(r($))))]),G("click",X,()=>La(r($))),C(Tt,X)};j(xe,Tt=>{r($),_(()=>r($).quoted_message_id||r($).quoted_body_snapshot)&&Tt(tt)})}var Nt=g(xe,2);yi(Nt,()=>(rn(Dr),r($),_(()=>Dr(r($).body))),!0);var Hn=g(Nt,2);{var Rr=Tt=>{var X=dp();Et(X,5,()=>(r($),_(()=>r($).attachments)),D=>D.id,(D,Ce)=>{{let Ze=Pr(()=>(r(Ce),_(()=>tr(r(Ce)))));Ii(D,{get upload(){return r(Ce)},get url(){return r(Ze)},onOpenImage:nr})}}),C(Tt,X)};j(Hn,Tt=>{r($),_(()=>r($).attachments?.length)&&Tt(Rr)})}var ra=g(Ln,2),Cr=p(ra),nn=g(Cr,2);z((Tt,X)=>{Ke=_t(Se,1,"message-row",null,Ke,{selected:r(A)?.id===r($).id}),q(Se,"data-message-id",(r($),_(()=>r($).id))),M(Bn,Tt),q(nn,"data-tooltip",X)},[()=>(rn(r(et)),rn(kn),r($),_(()=>r(et)===0?"":kn(r($).created_at))),()=>(r($),_(()=>Me(r($))))]),G("click",Cr,()=>xr(r($),r(I)?"dm":"channel")),G("click",nn,()=>yt(r($))),C(_e,Se)}),z((_e,$)=>{On(ee,`--hue: ${_e??""}deg`),q(ee,"aria-label",(r(k),_(()=>`View profile for ${r(k).authorName}`))),M(Oe,(r(k),_(()=>r(k).authorName))),M(tn,$)},[()=>(r(k),_(()=>xt(r(k).authorID))),()=>(rn(kn),r(k),_(()=>kn(r(k).timestamp)))]),G("click",ee,()=>Qn(r(k).messages[0]?.author)),G("click",V,()=>Qn(r(k).messages[0]?.author)),C(y,U)}),Xa(na,y=>v(Yt,y),()=>r(Yt));var Fs=g(na,2),Us=p(Fs);{var bc=y=>{var k=gp(),U=p(k),Y=g(p(U),2),se=g(U,2);Et(se,5,()=>r(o),ie=>ie.url,(ie,ee)=>{var le=vp(),B=p(le),ve=g(B,2),Ee=p(ve);z(()=>{q(B,"src",(r(ee),_(()=>r(ee).url))),q(B,"alt",(r(ee),_(()=>r(ee).title))),M(Ee,(r(ee),_(()=>r(ee).title)))}),G("click",le,()=>Xe(r(ee).url,r(ee).title)),C(ie,le)}),bn(Y,()=>r(jt),ie=>v(jt,ie)),C(y,k)};j(Us,y=>{r(Qe)&&y(bc)})}var kc=g(Us,2),Bs=p(kc);{var wc=y=>{var k=mp(),U=g(p(k),2);{var Y=B=>{var ve=_p();z(Ee=>{q(ve,"src",Ee),q(ve,"alt",(r(ke),_(()=>r(ke).filename)))},[()=>(r(ke),_(()=>tr(r(ke))))]),C(B,ve)},se=Ja(()=>(r(ke),_(()=>f(r(ke)))));j(U,B=>{r(se)&&B(Y)})}var ie=g(U,2),ee=p(ie),le=g(ie,2);z(B=>M(ee,`${r(ke),_(()=>r(ke).filename)??""} · ${B??""}`),[()=>(r(ke),_(()=>x(r(ke).byte_size)))]),G("click",le,()=>v(ke,null)),C(y,k)};j(Bs,y=>{r(ke)&&y(wc)})}var Hs=g(Bs,2);{var yc=y=>{var k=bp(),U=g(p(k),2),Y=p(U),se=g(p(Y)),ie=p(se),ee=g(Y,2),le=p(ee),B=g(U,2);z(ve=>{M(ie,(r(fe),_(()=>r(fe).author?.display_name||"Local User"))),M(le,ve)},[()=>(r(fe),_(()=>Fn(r(fe).body)))]),G("click",B,ot),C(y,k)};j(Hs,y=>{r(fe)&&r(Ye)===(r(I)?"dm":"channel")&&y(yc)})}var $s=g(Hs,2),qs=p($s),xc=p(qs),rr=g(qs,2);Xa(rr,y=>v(Ct,y),()=>r(Ct)),wa(()=>bn(rr,()=>r(te),y=>v(te,y))),ol(rr,(y,k)=>Sr?.(y),()=>r(te));var Tc=g(rr,2),Ec=g($s,2),Gs=p(Ec),Ws=g(Gs,2),gi=g(Ws,2),Sc=p(gi);Sc.textContent="<>";var _i=g(gi,2),Ac=p(_i);Ac.textContent="{}";var js=g(_i,2),Zs=g(js,2);let Ys;var mi=g(Is,2);let Xs;var Rc=p(mi);{var Cc=y=>{var k=Lp(),U=Gn(k),Y=p(U),se=g(p(Y),2),ie=p(se),ee=g(Y,2),le=g(U,2),B=p(le),ve=p(B),Ee=p(ve);{var F=X=>{var D=kp();z(()=>q(D,"src",(r(A),_(()=>r(A).author.avatar_url)))),C(X,D)},V=X=>{var D=ut();z(Ce=>M(D,Ce),[()=>(r(A),_(()=>Jt(r(A).author?.display_name)))]),C(X,D)};j(Ee,X=>{r(A),_(()=>r(A).author?.avatar_url)?X(F):X(V,-1)})}var Oe=g(ve,2),Mt=p(Oe),Ot=p(Mt),en=p(Ot),tn=g(Ot,2);{var In=X=>{var D=wp(),Ce=p(D);z(Ze=>M(Ce,Ze),[()=>(r(A),_(()=>Ue(r(A).author.handle)))]),C(X,D)};j(tn,X=>{r(A),_(()=>r(A).author?.handle)&&X(In)})}var _e=g(tn,2),$=p(_e),et=g(_e,2),Se=g(Mt,2);yi(Se,()=>(rn(Dr),r(A),_(()=>Dr(r(A).body))),!0);var Ke=g(Se,2);{var gn=X=>{var D=yp();Et(D,5,()=>(r(A),_(()=>r(A).attachments)),Ce=>Ce.id,(Ce,Ze)=>{{let Dn=Pr(()=>(r(Ze),_(()=>tr(r(Ze)))));Ii(Ce,{get upload(){return r(Ze)},get url(){return r(Dn)},onOpenImage:nr})}}),C(X,D)};j(Ke,X=>{r(A),_(()=>r(A).attachments?.length)&&X(gn)})}var Bn=g(B,2),Ln=p(Bn),xe=p(Ln),tt=g(Bn,2);Et(tt,5,()=>r(T),X=>X.id,(X,D)=>{var Ce=Cp(),Ze=p(Ce),Dn=p(Ze);{var me=$e=>{var qe=xp();z(()=>q(qe,"src",(r(D),_(()=>r(D).author.avatar_url)))),C($e,qe)},Ae=$e=>{var qe=ut();z(_n=>M(qe,_n),[()=>(r(D),_(()=>Jt(r(D).author?.display_name)))]),C($e,qe)};j(Dn,$e=>{r(D),_(()=>r(D).author?.avatar_url)?$e(me):$e(Ae,-1)})}var Mn=g(Ze,2),ct=p(Mn),Pt=p(ct),aa=p(Pt),Ir=g(Pt,2);{var Nc=$e=>{var qe=Tp(),_n=p(qe);z(ar=>M(_n,ar),[()=>(r(D),_(()=>Ue(r(D).author.handle)))]),C($e,qe)};j(Ir,$e=>{r(D),_(()=>r(D).author?.handle)&&$e(Nc)})}var Ks=g(Ir,2),Pc=p(Ks),zc=g(Ks,2),Js=g(ct,2);{var Fc=$e=>{var qe=Ap();let _n;var ar=g(p(qe),2),$a=p(ar),Hc=p($a),$c=g($a,2);{var qc=$n=>{var ir=Ep(),bi=p(ir);z(ki=>M(bi,ki),[()=>(r(D),_(()=>Fn(r(D).quoted_body_snapshot)))]),C($n,ir)},Gc=$n=>{var ir=Sp(),bi=p(ir);z(ki=>M(bi,`[original deleted] ${ki??""}`),[()=>(r(D),_(()=>Fn(r(D).quoted_body_snapshot)))]),C($n,ir)};j($c,$n=>{r(D),_(()=>r(D).quoted_message_id)?$n(qc):$n(Gc,-1)})}z(($n,ir)=>{_n=_t(qe,1,"quote-block",null,_n,{dangling:!r(D).quoted_message_id}),qe.disabled=(r(D),_(()=>!r(D).quoted_message_id)),q(qe,"aria-label",$n),M(Hc,ir)},[()=>(r(D),_(()=>r(D).quoted_message_id?`Jump to quoted message from ${hn(r(D))}`:"Original message was deleted")),()=>(r(D),_(()=>hn(r(D))))]),G("click",qe,()=>La(r(D))),C($e,qe)};j(Js,$e=>{r(D),_(()=>r(D).quoted_message_id||r(D).quoted_body_snapshot)&&$e(Fc)})}var Qs=g(Js,2);yi(Qs,()=>(rn(Dr),r(D),_(()=>Dr(r(D).body))),!0);var Uc=g(Qs,2);{var Bc=$e=>{var qe=Rp();Et(qe,5,()=>(r(D),_(()=>r(D).attachments)),_n=>_n.id,(_n,ar)=>{{let $a=Pr(()=>(r(ar),_(()=>tr(r(ar)))));Ii(_n,{get upload(){return r(ar)},get url(){return r($a)},onOpenImage:nr})}}),C($e,qe)};j(Uc,$e=>{r(D),_(()=>r(D).attachments?.length)&&$e(Bc)})}z(($e,qe)=>{q(Ce,"data-message-id",(r(D),_(()=>r(D).id))),On(Ze,`--hue: ${$e??""}deg`),M(aa,(r(D),_(()=>r(D).author?.display_name||"Local User"))),M(Pc,qe)},[()=>(r(D),_(()=>xt(r(D).author?.id||r(D).author_id||"x"))),()=>(rn(kn),r(D),_(()=>kn(r(D).created_at)))]),G("click",zc,()=>xr(r(D),"thread")),C(X,Ce)});var Nt=g(le,2),Hn=p(Nt),Rr=p(Hn);{var ra=X=>{var D=Ip(),Ce=g(p(D),2),Ze=p(Ce),Dn=g(p(Ze)),me=p(Dn),Ae=g(Ze,2),Mn=p(Ae),ct=g(Ce,2);z(Pt=>{M(me,(r(fe),_(()=>r(fe).author?.display_name||"Local User"))),M(Mn,Pt)},[()=>(r(fe),_(()=>Fn(r(fe).body)))]),G("click",ct,ot),C(X,D)};j(Rr,X=>{r(fe)&&r(Ye)==="thread"&&X(ra)})}var Cr=g(Rr,2),nn=p(Cr);Xa(nn,X=>v(Vt,X),()=>r(Vt)),wa(()=>bn(nn,()=>r(de),X=>v(de,X))),ol(nn,(X,D)=>Sr?.(X),()=>r(de));var Tt=g(nn,2);z((X,D,Ce)=>{M(ie,`${r(W),r(T),_(()=>r(W)?.reply_count??r(T).length)??""} ${r(W),r(T),_(()=>(r(W)?.reply_count??r(T).length)===1?"reply":"replies")??""}`),q(B,"data-message-id",(r(A),_(()=>r(A).id))),On(ve,`--hue: ${X??""}deg`),M(en,(r(A),_(()=>r(A).author?.display_name||"Local User"))),M($,D),M(xe,`${r(T),_(()=>r(T).length)??""} ${r(T),_(()=>r(T).length===1?"reply":"replies")??""}`),Tt.disabled=Ce},[()=>(r(A),_(()=>xt(r(A).author?.id||r(A).author_id||"x"))),()=>(rn(kn),r(A),_(()=>kn(r(A).created_at))),()=>(r(de),_(()=>!r(de).trim()))]),G("click",ee,()=>{Ve()}),G("pointerdown",le,()=>v(Le,"thread")),G("pointerup",le,H),G("click",et,()=>r(A)&&xr(r(A),"thread")),zt("submit",Nt,X=>{X.preventDefault(),yr()}),zt("focus",nn,()=>v(Le,"thread")),G("keydown",nn,Fa),C(y,k)},Ic=y=>{var k=zp(),U=Gn(k),Y=p(U),se=g(p(Y),2),ie=p(se),ee=g(Y,2),le=g(U,2),B=p(le),ve=p(B),Ee=p(ve);{var F=me=>{var Ae=Dp();z(()=>q(Ae,"src",(r(R),_(()=>r(R).avatar_url)))),C(me,Ae)},V=me=>{var Ae=ut();z(Mn=>M(Ae,Mn),[()=>(r(R),_(()=>Jt(r(R).display_name)))]),C(me,Ae)};j(Ee,me=>{r(R),_(()=>r(R).avatar_url)?me(F):me(V,-1)})}var Oe=g(B,2),Mt=p(Oe),Ot=p(Mt),en=p(Ot),tn=p(en),In=g(en,2);{var _e=me=>{var Ae=Mp(),Mn=p(Ae);z(ct=>M(Mn,ct),[()=>(r(R),_(()=>Ue(r(R).handle)))]),C(me,Ae)};j(In,me=>{r(R),_(()=>r(R).handle)&&me(_e)})}var $=g(Ot,2);{var et=me=>{var Ae=Op();G("click",Ae,Kt),C(me,Ae)};j($,me=>{r(u),r(R),_(()=>r(u)?.id===r(R).id)&&me(et)})}var Se=g(Mt,4),Ke=p(Se);{var gn=me=>{var Ae=Np();G("click",Ae,()=>Da(r(R)?.id||"")),C(me,Ae)};j(Ke,me=>{r(u),r(R),_(()=>r(u)?.id!==r(R).id)&&me(gn)})}var Bn=g(Ke,2),Ln=g(Se,2),xe=p(Ln),tt=g(p(xe),2);{var Nt=me=>{var Ae=Pp();G("click",Ae,Kt),C(me,Ae)};j(tt,me=>{r(u),r(R),_(()=>r(u)?.id===r(R).id)&&me(Nt)})}var Hn=g(xe,2),Rr=g(p(Hn),2),ra=g(p(Rr),2),Cr=p(ra),nn=g(Hn,2),Tt=g(p(nn),2),X=g(p(Tt),2),D=p(X),Ce=g(Ln,2),Ze=g(p(Ce),2),Dn=p(Ze);z((me,Ae)=>{M(ie,(r(R),_(()=>r(R).display_name))),On(B,`--hue: ${me??""}deg`),M(tn,(r(R),_(()=>r(R).display_name))),M(Cr,Ae),M(D,(r(R),_(()=>r(R).id))),M(Dn,`Member of ${r(n),_(()=>r(n)?.name||"this workspace")??""}. Click Message to keep the conversation in your sidebar.`)},[()=>(r(R),_(()=>xt(r(R).id))),()=>(r(R),_(()=>r(R).handle?Ue(r(R).handle):"No handle set"))]),G("click",ee,Ve),G("click",Bn,()=>v(Rt,"status messages are coming soon")),C(y,k)},Lc=y=>{var k=Fp();C(y,k)};j(Rc,y=>{r(A)?y(Cc):r(R)?y(Ic,1):y(Lc,-1)})}var Vs=g(N,2);{var Dc=y=>{var k=Hp(),U=p(k),Y=g(U,2),se=p(Y),ie=g(p(se),2),ee=g(se,2),le=p(ee),B=p(le),ve=p(B);{var Ee=xe=>{var tt=Up();z(()=>q(tt,"src",r(dn))),C(xe,tt)},F=xe=>{var tt=ut();z(Nt=>M(tt,Nt),[()=>(r(it),_(()=>Jt(r(it))))]),C(xe,tt)};j(ve,xe=>{r(dn)?xe(Ee):xe(F,-1)})}var V=g(B,2),Oe=p(V),Mt=p(Oe),Ot=g(Oe,2),en=p(Ot),tn=g(le,2),In=g(p(tn),2),_e=g(tn,2),$=g(p(_e),2),et=g(_e,2),Se=g(p(et),2),Ke=g(et,2);{var gn=xe=>{var tt=Bp();let Nt;var Hn=p(tt);z(()=>{Nt=_t(tt,1,"profile-status",null,Nt,{error:r(Ie)}),M(Hn,r(Sn))}),C(xe,tt)};j(Ke,xe=>{r(Sn)&&xe(gn)})}var Bn=g(Ke,2),Ln=p(Bn);z((xe,tt)=>{On(B,`--hue: ${xe??""}deg`),M(Mt,(r(it),r(u),_(()=>r(it)||r(u).display_name))),M(en,tt)},[()=>(r(u),_(()=>xt(r(u).id))),()=>(r(vt),r(u),_(()=>r(vt)||Ue(r(u).handle)||"No handle set"))]),G("click",U,je),G("click",ie,je),zt("submit",ee,xe=>{xe.preventDefault(),kr()}),bn(In,()=>r(it),xe=>v(it,xe)),bn($,()=>r(vt),xe=>v(vt,xe)),bn(Se,()=>r(dn),xe=>v(dn,xe)),G("click",Ln,je),C(y,k)};j(Vs,y=>{r(At)&&r(u)&&y(Dc)})}var Mc=g(Vs,2);{var Oc=y=>{var k=$p(),U=p(k),Y=g(U,2),se=p(Y),ie=p(se),ee=p(ie),le=g(ie,2),B=p(le),ve=g(B,2),Ee=g(se,2),F=p(Ee);z(()=>{M(ee,(r(K),_(()=>r(K).title))),q(B,"href",(r(K),_(()=>r(K).url))),q(F,"src",(r(K),_(()=>r(K).url))),q(F,"alt",(r(K),_(()=>r(K).title)))}),G("click",U,je),G("click",ve,je),C(y,k)};j(Mc,y=>{r(K)&&y(Oc)})}z((y,k)=>{Q=_t(N,1,"shell",null,Q,{"nav-open":r(Xt),"sidebar-collapsed":r(An),"thread-open":r(s)}),M(Wo,(r(n),_(()=>r(n)?.name||"Pick a workspace"))),bs=_t(ms,1,"presence",null,bs,{online:r(ge)}),M(jo,r(ge)?"Connected":r(Rt)),q(Ha,"aria-label",r(An)?"Expand sidebar":"Collapse sidebar"),q(Ha,"title",r(An)?"Expand sidebar":"Collapse sidebar"),q(Yo,"d",r(An)?"m9 6 6 6-6 6":"m15 6-6 6 6 6"),M(fc,(r(n),_(()=>r(n)?.name||"no workspace"))),q(ta,"title",r(A)?"Close thread":"Open a message thread"),q(ta,"aria-label",r(A)?"Close thread":"Open a message thread"),Ns=_t(ta,1,"",null,Ns,{active:r(s)}),q(rr,"placeholder",y),Tc.disabled=k,Ys=_t(Zs,1,"",null,Ys,{active:r(Qe)}),Xs=_t(mi,1,"thread",null,Xs,{open:r(s)}),q(mi,"aria-label",r(R)?"Profile pane":"Thread pane")},[()=>(r(a),r(i),_(()=>r(a)?`Message ${er(r(a))}`:r(i)?`Message #${r(i).name}`:"Pick a channel to start")),()=>(r(te),_(()=>!r(te).trim()))]),G("click",we,()=>v(Xt,!r(Xt))),G("click",hi,()=>v(wt,!r(wt))),G("click",Ha,()=>v(An,!r(An))),zt("submit",Ts,y=>{y.preventDefault(),Ca()}),bn(Ko,()=>r(De),y=>v(De,y)),zt("submit",Rs,y=>{y.preventDefault(),di()}),bn(ec,()=>r(be),y=>v(be,y)),zt("submit",vi,y=>{y.preventDefault(),fi()}),bn(Os,()=>r(pe),y=>v(pe,y)),G("click",ta,()=>{r(s)?Ve():v(Rt,"pick a message to open its thread")}),G("click",vc,()=>v(Rt,"no pinned items")),G("pointerdown",na,()=>v(Le,"message")),G("pointerup",na,H),zt("submit",Fs,y=>{y.preventDefault(),Cn()}),G("change",xc,Fe),zt("focus",rr,()=>v(Le,"message")),G("keydown",rr,pi),G("click",Gs,()=>he("**")),G("click",Ws,()=>he("_")),G("click",gi,()=>he("`")),G("click",_i,()=>he("```","\n```")),G("click",js,()=>P("[label](https://)")),G("click",Zs,()=>v(Qe,!r(Qe))),C(d,b)};j(Qr,d=>{r(ze)?d(Be):d(Ua,-1)})}C(e,gt),ai()}To(["click","contextmenu","pointerdown","pointerup","change","keydown"]);var Wp=O(' ',1),jp=O("

    "),Zp=O(`

    Self-hostable chat. Serious tool. Mild brine.

    ClickClack

    A single-binary chat app for teams, communities, bots, and agents: - Slack-style threads, durable realtime, OpenAPI, SQLite, and a CLI that - can drive the whole thing from a shell.

    What it is

    Chat infrastructure that stays boring when the socket drops.

    WebSocket is the pipe. The database is the truth. Every durable message, - thread reply, reaction, and channel update can be recovered over HTTP with - a cursor, so clients and agents can reconnect without drama.

    Agent path

    A friendly CLI, no LLM baked in.

    External agents, CI jobs, and humans use the same public API as the web - app. Tokens and workspace defaults are scoped per server, so switching - hosts does not leak credentials or stale IDs.

     

    Destinations

    Product at the root. Docs and app where people expect them.

    `);function Yp(e,t){ri(t,!1);const n="https://docs.clickclack.chat",i=["localhost","127.0.0.1","::1"].includes(window.location.hostname)?"/app":"https://app.clickclack.chat",a="https://github.com/openclaw/clickclack",s=[["Single binary","Go server, embedded Svelte app, embedded migrations, local SQLite and uploads."],["Threads that recover","Slack-style one-level threads with durable event replay after reconnects."],["Agent-friendly","A CLI, OpenAPI contract, TypeScript SDK, webhooks, and slash-command shapes."],["Self-host first","SQLite is the default, not the demo. Postgres can arrive behind the store layer."]],l=["clickclack serve --data ./data","clickclack login --magic-token mgt_...",'clickclack send --channel general "deploy started"',"clickclack threads reply msg_... --stdin {var ke=Wp();wa(()=>{to.title="ClickClack - Self-hostable chat with claws"}),C(ce,ke)});var o=p(c),u=g(p(o),2),h=g(p(u),2),w=p(h);q(w,"href",n);var m=g(w,2),E=g(m,2);q(E,"href",a);var T=g(u,2),L=g(p(T),6),S=p(L),I=g(S,2);q(I,"href",n);var A=g(I,2);q(A,"href",a);var W=g(o,4);Et(W,5,()=>s,sf,(ce,ke)=>{var Qe=jp(),At=p(Qe),jt=p(At),it=g(At,2),vt=p(it);z(()=>{M(jt,r(ke)[0]),M(vt,r(ke)[1])}),C(ce,Qe)});var R=g(W,2),K=g(p(R),2),te=p(K),de=g(R,2),Te=g(p(de),2),De=g(p(Te),2);q(De,"href",n);var be=g(De,2),pe=g(be,2);q(pe,"href",a),z(ce=>{q(m,"href",i),q(S,"href",i),M(te,ce),q(be,"href",i)},[()=>l.join(` -`)]),C(e,c),ai()}function Xp(e){const t=window.location.pathname,i=window.location.hostname.startsWith("app.")||t==="/app"||t.startsWith("/app/");var a=as(),s=Gn(a);{var l=o=>{Gp(o,{})},c=o=>{Yp(o,{})};j(s,o=>{i?o(l):o(c,-1)})}C(e,a)}tf(Xp,{target:document.getElementById("app")}); diff --git a/apps/api/internal/webassets/dist/assets/index-CJGH_9qR.js b/apps/api/internal/webassets/dist/assets/index-CJGH_9qR.js new file mode 100644 index 0000000..cf8319d --- /dev/null +++ b/apps/api/internal/webassets/dist/assets/index-CJGH_9qR.js @@ -0,0 +1,72 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))a(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&a(s)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();const Vs=!1;var Oi=Array.isArray,Js=Array.prototype.indexOf,Wn=Array.prototype.includes,ea=Array.from,Ks=Object.defineProperty,Gn=Object.getOwnPropertyDescriptor,Li=Object.getOwnPropertyDescriptors,$s=Object.prototype,el=Array.prototype,La=Object.getPrototypeOf,ti=Object.isExtensible;const tl=()=>{};function nl(t){return t()}function ha(t){for(var e=0;e{t=a,e=r});return{promise:n,resolve:t,reject:e}}const qe=2,qn=4,Er=8,Ni=1<<24,Ft=16,Lt=32,cn=64,pa=128,wt=512,De=1024,Ge=2048,Mt=4096,Je=8192,pt=16384,Rn=32768,ga=1<<25,jn=65536,va=1<<17,Pi=1<<18,Cn=1<<19,Ui=1<<20,zt=1<<25,xn=65536,Xr=1<<21,yr=1<<22,ln=1<<23,kn=Symbol("$state"),rl=Symbol("legacy props"),al=Symbol(""),Qt=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},il=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function zi(t){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function sl(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function ll(t,e,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function ol(t){throw new Error("https://svelte.dev/e/effect_in_teardown")}function cl(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function ul(t){throw new Error("https://svelte.dev/e/effect_orphan")}function fl(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function dl(t){throw new Error("https://svelte.dev/e/props_invalid_value")}function hl(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function pl(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function gl(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function vl(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const ml=1,_l=2,Fi=4,bl=8,kl=16,yl=1,wl=2,Tl=4,xl=8,Sl=16,El=1,Al=2,Ue=Symbol(),Bi="http://www.w3.org/1999/xhtml",Rl="http://www.w3.org/2000/svg",Cl="http://www.w3.org/1998/Math/MathML";function Il(){console.warn("https://svelte.dev/e/derived_inert")}function Dl(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Hi(t){return t===this.v}function Gi(t,e){return t!=t?e==e:t!==e||t!==null&&typeof t=="object"||typeof t=="function"}function Wi(t){return!Gi(t,this.v)}let Qn=!1,Ol=!1;function Ll(){Qn=!0}let _e=null;function Zn(t){_e=t}function Ae(t,e=!1,n){_e={p:_e,i:!1,c:null,e:null,s:t,x:null,r:ee,l:Qn&&!e?{s:null,u:null,$:[]}:null}}function Re(t){var e=_e,n=e.e;if(n!==null){e.e=null;for(var a of n)us(a)}return e.i=!0,_e=e.p,{}}function Ar(){return!Qn||_e!==null&&_e.l===null}let _n=[];function qi(){var t=_n;_n=[],ha(t)}function on(t){if(_n.length===0&&!br){var e=_n;queueMicrotask(()=>{e===_n&&qi()})}_n.push(t)}function Ml(){for(;_n.length>0;)qi()}function ji(t){var e=ee;if(e===null)return ce.f|=ln,t;if((e.f&Rn)===0&&(e.f&qn)===0)throw t;an(t,e)}function an(t,e){for(;e!==null;){if((e.f&pa)!==0){if((e.f&Rn)===0)throw t;try{e.b.error(t);return}catch(n){t=n}}e=e.parent}throw t}const Nl=-7169;function xe(t,e){t.f=t.f&Nl|e}function Ma(t){(t.f&wt)!==0||t.deps===null?xe(t,De):xe(t,Mt)}function Zi(t){if(t!==null)for(const e of t)(e.f&qe)===0||(e.f&xn)===0||(e.f^=xn,Zi(e.deps))}function Yi(t,e,n){(t.f&Ge)!==0?e.add(t):(t.f&Mt)!==0&&n.add(t),Zi(t.deps),xe(t,De)}let Hr=!1;function Pl(t){var e=Hr;try{return Hr=!1,[t(),Hr]}finally{Hr=e}}const vn=new Set;let oe=null,Dt=null,ma=null,br=!1,la=!1,Bn=null,Zr=null;var ni=0;let Ul=1;class un{id=Ul++;current=new Map;previous=new Map;#n=new Set;#o=new Set;#e=new Set;#a=new Map;#r=new Map;#i=null;#t=[];#s=[];#c=new Set;#u=new Set;#l=new Map;#d=new Set;is_fork=!1;#p=!1;#h=new Set;#f(){return this.is_fork||this.#r.size>0}#m(){for(const a of this.#h)for(const r of a.#r.keys()){for(var e=!1,n=r;n.parent!==null;){if(this.#l.has(n)){e=!0;break}n=n.parent}if(!e)return!0}return!1}skip_effect(e){this.#l.has(e)||this.#l.set(e,{d:[],m:[]}),this.#d.delete(e)}unskip_effect(e,n=a=>this.schedule(a)){var a=this.#l.get(e);if(a){this.#l.delete(e);for(var r of a.d)xe(r,Ge),n(r);for(r of a.m)xe(r,Mt),n(r)}this.#d.add(e)}#g(){if(ni++>1e3&&(vn.delete(this),Fl()),!this.#f()){for(const c of this.#c)this.#u.delete(c),xe(c,Ge),this.schedule(c);for(const c of this.#u)xe(c,Mt),this.schedule(c)}const e=this.#t;this.#t=[],this.apply();var n=Bn=[],a=[],r=Zr=[];for(const c of e)try{this.#_(c,n,a)}catch(l){throw Vi(c),l}if(oe=null,r.length>0){var i=un.ensure();for(const c of r)i.schedule(c)}if(Bn=null,Zr=null,this.#f()||this.#m()){this.#v(a),this.#v(n);for(const[c,l]of this.#l)Qi(c,l)}else{this.#a.size===0&&vn.delete(this),this.#c.clear(),this.#u.clear();for(const c of this.#n)c(this);this.#n.clear(),ri(a),ri(n),this.#i?.resolve()}var s=oe;if(this.#t.length>0){const c=s??=this;c.#t.push(...this.#t.filter(l=>!c.#t.includes(l)))}s!==null&&(vn.add(s),s.#g())}#_(e,n,a){e.f^=De;for(var r=e.first;r!==null;){var i=r.f,s=(i&(Lt|cn))!==0,c=s&&(i&De)!==0,l=c||(i&Je)!==0||this.#l.has(r);if(!l&&r.fn!==null){s?r.f^=De:(i&qn)!==0?n.push(r):Vn(r)&&((i&Ft)!==0&&this.#u.add(r),En(r));var u=r.first;if(u!==null){r=u;continue}}for(;r!==null;){var f=r.next;if(f!==null){r=f;break}r=r.parent}}}#v(e){for(var n=0;n!this.current.has(p));if(r.length===0)e&&f.discard();else if(n.length>0){if(e)for(const p of this.#d)f.unskip_effect(p,h=>{(h.f&(Ft|yr))!==0?f.schedule(h):f.#v([h])});f.activate();var i=new Set,s=new Map;for(var c of n)Xi(c,r,i,s);s=new Map;var l=[...f.current.keys()].filter(p=>this.current.has(p)?this.current.get(p)[0]!==p:!0);for(const p of this.#s)(p.f&(pt|Je|va))===0&&Na(p,l,s)&&((p.f&(yr|Ft))!==0?(xe(p,Ge),f.schedule(p)):f.#c.add(p));if(f.#t.length>0){f.apply();for(var u of f.#t)f.#_(u,[],[]);f.#t=[]}f.deactivate()}}for(const f of vn)f.#h.has(this)&&(f.#h.delete(this),f.#h.size===0&&!f.#f()&&(f.activate(),f.#g()))}increment(e,n){let a=this.#a.get(n)??0;if(this.#a.set(n,a+1),e){let r=this.#r.get(n)??0;this.#r.set(n,r+1)}}decrement(e,n,a){let r=this.#a.get(n)??0;if(r===1?this.#a.delete(n):this.#a.set(n,r-1),e){let i=this.#r.get(n)??0;i===1?this.#r.delete(n):this.#r.set(n,i-1)}this.#p||a||(this.#p=!0,on(()=>{this.#p=!1,this.flush()}))}transfer_effects(e,n){for(const a of e)this.#c.add(a);for(const a of n)this.#u.add(a);e.clear(),n.clear()}oncommit(e){this.#n.add(e)}ondiscard(e){this.#o.add(e)}on_fork_commit(e){this.#e.add(e)}run_fork_commit_callbacks(){for(const e of this.#e)e(this);this.#e.clear()}settled(){return(this.#i??=Mi()).promise}static ensure(){if(oe===null){const e=oe=new un;la||(vn.add(oe),br||on(()=>{oe===e&&e.flush()}))}return oe}apply(){{Dt=null;return}}schedule(e){if(ma=e,e.b?.is_pending&&(e.f&(qn|Er|Ni))!==0&&(e.f&Rn)===0){e.b.defer_effect(e);return}for(var n=e;n.parent!==null;){n=n.parent;var a=n.f;if(Bn!==null&&n===ee&&(ce===null||(ce.f&qe)===0))return;if((a&(cn|Lt))!==0){if((a&De)===0)return;n.f^=De}}this.#t.push(n)}}function zl(t){var e=br;br=!0;try{for(var n;;){if(Ml(),oe===null)return n;oe.flush()}}finally{br=e}}function Fl(){try{fl()}catch(t){an(t,ma)}}let Xt=null;function ri(t){var e=t.length;if(e!==0){for(var n=0;n0)){yn.clear();for(const r of Xt){if((r.f&(pt|Je))!==0)continue;const i=[r];let s=r.parent;for(;s!==null;)Xt.has(s)&&(Xt.delete(s),i.push(s)),s=s.parent;for(let c=i.length-1;c>=0;c--){const l=i[c];(l.f&(pt|Je))===0&&En(l)}}Xt.clear()}}Xt=null}}function Xi(t,e,n,a){if(!n.has(t)&&(n.add(t),t.reactions!==null))for(const r of t.reactions){const i=r.f;(i&qe)!==0?Xi(r,e,n,a):(i&(yr|Ft))!==0&&(i&Ge)===0&&Na(r,e,a)&&(xe(r,Ge),Pa(r))}}function Na(t,e,n){const a=n.get(t);if(a!==void 0)return a;if(t.deps!==null)for(const r of t.deps){if(Wn.call(e,r))return!0;if((r.f&qe)!==0&&Na(r,e,n))return n.set(r,!0),!0}return n.set(t,!1),!1}function Pa(t){oe.schedule(t)}function Qi(t,e){if(!((t.f&Lt)!==0&&(t.f&De)!==0)){(t.f&Ge)!==0?e.d.push(t):(t.f&Mt)!==0&&e.m.push(t),xe(t,De);for(var n=t.first;n!==null;)Qi(n,e),n=n.next}}function Vi(t){xe(t,De);for(var e=t.first;e!==null;)Vi(e),e=e.next}function Bl(t){let e=0,n=Sn(0),a;return()=>{Fa()&&(o(n),Ir(()=>(e===0&&(a=ze(()=>t(()=>kr(n)))),e+=1,()=>{on(()=>{e-=1,e===0&&(a?.(),a=void 0,kr(n))})})))}}var Hl=jn|Cn;function Gl(t,e,n,a){new Wl(t,e,n,a)}class Wl{parent;is_pending=!1;transform_error;#n;#o=null;#e;#a;#r;#i=null;#t=null;#s=null;#c=null;#u=0;#l=0;#d=!1;#p=new Set;#h=new Set;#f=null;#m=Bl(()=>(this.#f=Sn(this.#u),()=>{this.#f=null}));constructor(e,n,a,r){this.#n=e,this.#e=n,this.#a=i=>{var s=ee;s.b=this,s.f|=pa,a(i)},this.parent=ee.b,this.transform_error=r??this.parent?.transform_error??(i=>i),this.#r=ta(()=>{this.#b()},Hl)}#g(){try{this.#i=yt(()=>this.#a(this.#n))}catch(e){this.error(e)}}#_(e){const n=this.#e.failed;n&&(this.#s=yt(()=>{n(this.#n,()=>e,()=>()=>{})}))}#v(){const e=this.#e.pending;e&&(this.is_pending=!0,this.#t=yt(()=>e(this.#n)),on(()=>{var n=this.#c=document.createDocumentFragment(),a=Bt();n.append(a),this.#i=this.#y(()=>yt(()=>this.#a(a))),this.#l===0&&(this.#n.before(n),this.#c=null,wn(this.#t,()=>{this.#t=null}),this.#k(oe))}))}#b(){try{if(this.is_pending=this.has_pending_snippet(),this.#l=0,this.#u=0,this.#i=yt(()=>{this.#a(this.#n)}),this.#l>0){var e=this.#c=document.createDocumentFragment();Wa(this.#i,e);const n=this.#e.pending;this.#t=yt(()=>n(this.#n))}else this.#k(oe)}catch(n){this.error(n)}}#k(e){this.is_pending=!1,e.transfer_effects(this.#p,this.#h)}defer_effect(e){Yi(e,this.#p,this.#h)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#e.pending}#y(e){var n=ee,a=ce,r=_e;Et(this.#r),St(this.#r),Zn(this.#r.ctx);try{return un.ensure(),e()}catch(i){return ji(i),null}finally{Et(n),St(a),Zn(r)}}#w(e,n){if(!this.has_pending_snippet()){this.parent&&this.parent.#w(e,n);return}this.#l+=e,this.#l===0&&(this.#k(n),this.#t&&wn(this.#t,()=>{this.#t=null}),this.#c&&(this.#n.before(this.#c),this.#c=null))}update_pending_count(e,n){this.#w(e,n),this.#u+=e,!(!this.#f||this.#d)&&(this.#d=!0,on(()=>{this.#d=!1,this.#f&&Yn(this.#f,this.#u)}))}get_effect_pending(){return this.#m(),o(this.#f)}error(e){if(!this.#e.onerror&&!this.#e.failed)throw e;oe?.is_fork?(this.#i&&oe.skip_effect(this.#i),this.#t&&oe.skip_effect(this.#t),this.#s&&oe.skip_effect(this.#s),oe.on_fork_commit(()=>{this.#T(e)})):this.#T(e)}#T(e){this.#i&&(at(this.#i),this.#i=null),this.#t&&(at(this.#t),this.#t=null),this.#s&&(at(this.#s),this.#s=null);var n=this.#e.onerror;let a=this.#e.failed;var r=!1,i=!1;const s=()=>{if(r){Dl();return}r=!0,i&&vl(),this.#s!==null&&wn(this.#s,()=>{this.#s=null}),this.#y(()=>{this.#b()})},c=l=>{try{i=!0,n?.(l,s),i=!1}catch(u){an(u,this.#r&&this.#r.parent)}a&&(this.#s=this.#y(()=>{try{return yt(()=>{var u=ee;u.b=this,u.f|=pa,a(this.#n,()=>l,()=>s)})}catch(u){return an(u,this.#r.parent),null}}))};on(()=>{var l;try{l=this.transform_error(e)}catch(u){an(u,this.#r&&this.#r.parent);return}l!==null&&typeof l=="object"&&typeof l.then=="function"?l.then(c,u=>an(u,this.#r&&this.#r.parent)):c(l)})}}function ql(t,e,n,a){const r=Ar()?Rr:dt;var i=t.filter(h=>!h.settled);if(n.length===0&&i.length===0){a(e.map(r));return}var s=ee,c=jl(),l=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(h=>h.promise)):null;function u(h){c();try{a(h)}catch(w){(s.f&pt)===0&&an(w,s)}Qr()}if(n.length===0){l.then(()=>u(e.map(r)));return}var f=Ji();function p(){Promise.all(n.map(h=>Zl(h))).then(h=>u([...e.map(r),...h])).catch(h=>an(h,s)).finally(()=>f())}l?l.then(()=>{c(),p(),Qr()}):p()}function jl(){var t=ee,e=ce,n=_e,a=oe;return function(i=!0){Et(t),St(e),Zn(n),i&&(t.f&pt)===0&&(a?.activate(),a?.apply())}}function Qr(t=!0){Et(null),St(null),Zn(null),t&&oe?.deactivate()}function Ji(){var t=ee,e=t.b,n=oe,a=e.is_rendered();return e.update_pending_count(1,n),n.increment(a,t),(r=!1)=>{e.update_pending_count(-1,n),n.decrement(a,t,r)}}function Rr(t){var e=qe|Ge;return ee!==null&&(ee.f|=Cn),{ctx:_e,deps:null,effects:null,equals:Hi,f:e,fn:t,reactions:null,rv:0,v:Ue,wv:0,parent:ee,ac:null}}function Zl(t,e,n){let a=ee;a===null&&sl();var r=void 0,i=Sn(Ue),s=!ce,c=new Map;return ro(()=>{var l=ee,u=Mi();r=u.promise;try{Promise.resolve(t()).then(u.resolve,u.reject).finally(Qr)}catch(w){u.reject(w),Qr()}var f=oe;if(s){if((l.f&Rn)!==0)var p=Ji();if(a.b.is_rendered())c.get(f)?.reject(Qt),c.delete(f);else{for(const w of c.values())w.reject(Qt);c.clear()}c.set(f,u)}const h=(w,v=void 0)=>{if(p){var T=v===Qt;p(T)}if(!(v===Qt||(l.f&pt)!==0)){if(f.activate(),v)i.f|=ln,Yn(i,v);else{(i.f&ln)!==0&&(i.f^=ln),Yn(i,w);for(const[b,y]of c){if(c.delete(b),b===f)break;y.reject(Qt)}}f.deactivate()}};u.promise.then(h,w=>h(null,w||"unknown"))}),cs(()=>{for(const l of c.values())l.reject(Qt)}),new Promise(l=>{function u(f){function p(){f===r?l(i):u(r)}f.then(p,p)}u(r)})}function xt(t){const e=Rr(t);return vs(e),e}function dt(t){const e=Rr(t);return e.equals=Wi,e}function Yl(t){var e=t.effects;if(e!==null){t.effects=null;for(var n=0;no(t))),e}function m(t,e,n=!1){ce!==null&&(!Ot||(ce.f&va)!==0)&&Ar()&&(ce.f&(qe|Ft|yr|va))!==0&&(Tt===null||!Wn.call(Tt,t))&&gl();let a=n?Hn(e):e;return Yn(t,a,Zr)}function Yn(t,e,n=null){if(!t.equals(e)){yn.set(t,Jt?e:t.v);var a=un.ensure();if(a.capture(t,e),(t.f&qe)!==0){const r=t;(t.f&Ge)!==0&&Ua(r),Dt===null&&Ma(r)}t.wv=_s(),ts(t,Ge,n),Ar()&&ee!==null&&(ee.f&De)!==0&&(ee.f&(Lt|cn))===0&&(kt===null?io([t]):kt.push(t)),!a.is_fork&&_a.size>0&&!es&&Vl()}return e}function Vl(){es=!1;for(const t of _a)(t.f&De)!==0&&xe(t,Mt),Vn(t)&&En(t);_a.clear()}function kr(t){m(t,t.v+1)}function ts(t,e,n){var a=t.reactions;if(a!==null)for(var r=Ar(),i=a.length,s=0;s{if(Tn===i)return c();var l=ce,u=Tn;St(null),ii(i);var f=c();return St(l),ii(u),f};return a&&n.set("length",ht(t.length)),new Proxy(t,{defineProperty(c,l,u){(!("value"in u)||u.configurable===!1||u.enumerable===!1||u.writable===!1)&&hl();var f=n.get(l);return f===void 0?s(()=>{var p=ht(u.value);return n.set(l,p),p}):m(f,u.value,!0),!0},deleteProperty(c,l){var u=n.get(l);if(u===void 0){if(l in c){const f=s(()=>ht(Ue));n.set(l,f),kr(r)}}else m(u,Ue),kr(r);return!0},get(c,l,u){if(l===kn)return t;var f=n.get(l),p=l in c;if(f===void 0&&(!p||Gn(c,l)?.writable)&&(f=s(()=>{var w=Hn(p?c[l]:Ue),v=ht(w);return v}),n.set(l,f)),f!==void 0){var h=o(f);return h===Ue?void 0:h}return Reflect.get(c,l,u)},getOwnPropertyDescriptor(c,l){var u=Reflect.getOwnPropertyDescriptor(c,l);if(u&&"value"in u){var f=n.get(l);f&&(u.value=o(f))}else if(u===void 0){var p=n.get(l),h=p?.v;if(p!==void 0&&h!==Ue)return{enumerable:!0,configurable:!0,value:h,writable:!0}}return u},has(c,l){if(l===kn)return!0;var u=n.get(l),f=u!==void 0&&u.v!==Ue||Reflect.has(c,l);if(u!==void 0||ee!==null&&(!f||Gn(c,l)?.writable)){u===void 0&&(u=s(()=>{var h=f?Hn(c[l]):Ue,w=ht(h);return w}),n.set(l,u));var p=o(u);if(p===Ue)return!1}return f},set(c,l,u,f){var p=n.get(l),h=l in c;if(a&&l==="length")for(var w=u;wht(Ue)),n.set(w+"",v))}if(p===void 0)(!h||Gn(c,l)?.writable)&&(p=s(()=>ht(void 0)),m(p,Hn(u)),n.set(l,p));else{h=p.v!==Ue;var T=s(()=>Hn(u));m(p,T)}var b=Reflect.getOwnPropertyDescriptor(c,l);if(b?.set&&b.set.call(f,u),!h){if(a&&typeof l=="string"){var y=n.get("length"),R=Number(l);Number.isInteger(R)&&R>=y.v&&m(y,R+1)}kr(r)}return!0},ownKeys(c){o(r);var l=Reflect.ownKeys(c).filter(p=>{var h=n.get(p);return h===void 0||h.v!==Ue});for(var[u,f]of n)f.v!==Ue&&!(u in c)&&l.push(u);return l},setPrototypeOf(){pl()}})}var ba,ns,rs,as,is;function Jl(){if(ba===void 0){ba=window,ns=document,rs=/Firefox/.test(navigator.userAgent);var t=Element.prototype,e=Node.prototype,n=Text.prototype;as=Gn(e,"firstChild").get,is=Gn(e,"nextSibling").get,ti(t)&&(t.__click=void 0,t.__className=void 0,t.__attributes=null,t.__style=void 0,t.__e=void 0),ti(n)&&(n.__t=void 0)}}function Bt(t=""){return document.createTextNode(t)}function sn(t){return as.call(t)}function Cr(t){return is.call(t)}function g(t,e){return sn(t)}function Ht(t,e=!1){{var n=sn(t);return n instanceof Comment&&n.data===""?Cr(n):n}}function _(t,e=1,n=!1){let a=t;for(;e--;)a=Cr(a);return a}function Kl(t){t.textContent=""}function ss(){return!1}function ls(t,e,n){return document.createElementNS(e??Bi,t,void 0)}function za(t){var e=ce,n=ee;St(null),Et(null);try{return t()}finally{St(e),Et(n)}}function os(t){ee===null&&(ce===null&&ul(),cl()),Jt&&ol()}function $l(t,e){var n=e.last;n===null?e.last=e.first=t:(n.next=t,t.prev=n,e.last=t)}function Wt(t,e){var n=ee;n!==null&&(n.f&Je)!==0&&(t|=Je);var a={ctx:_e,deps:null,nodes:null,f:t|Ge|wt,first:null,fn:e,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};oe?.register_created_effect(a);var r=a;if((t&qn)!==0)Bn!==null?Bn.push(a):un.ensure().schedule(a);else if(e!==null){try{En(a)}catch(s){throw at(a),s}r.deps===null&&r.teardown===null&&r.nodes===null&&r.first===r.last&&(r.f&Cn)===0&&(r=r.first,(t&Ft)!==0&&(t&jn)!==0&&r!==null&&(r.f|=jn))}if(r!==null&&(r.parent=n,n!==null&&$l(r,n),ce!==null&&(ce.f&qe)!==0&&(t&cn)===0)){var i=ce;(i.effects??=[]).push(r)}return a}function Fa(){return ce!==null&&!Ot}function cs(t){const e=Wt(Er,null);return xe(e,De),e.teardown=t,e}function wr(t){os();var e=ee.f,n=!ce&&(e&Lt)!==0&&(e&Rn)===0;if(n){var a=_e;(a.e??=[]).push(t)}else return us(t)}function us(t){return Wt(qn|Ui,t)}function eo(t){return os(),Wt(Er|Ui,t)}function to(t){un.ensure();const e=Wt(cn|Cn,t);return(n={})=>new Promise(a=>{n.outro?wn(e,()=>{at(e),a(void 0)}):(at(e),a(void 0))})}function Ba(t){return Wt(qn,t)}function Yt(t,e){var n=_e,a={effect:null,ran:!1,deps:t};n.l.$.push(a),a.effect=Ir(()=>{if(t(),!a.ran){a.ran=!0;var r=ee;try{Et(r.parent),ze(e)}finally{Et(r)}}})}function no(){var t=_e;Ir(()=>{for(var e of t.l.$){e.deps();var n=e.effect;(n.f&De)!==0&&n.deps!==null&&xe(n,Mt),Vn(n)&&En(n),e.ran=!1}})}function ro(t){return Wt(yr|Cn,t)}function Ir(t,e=0){return Wt(Er|e,t)}function M(t,e=[],n=[],a=[]){ql(a,e,n,r=>{Wt(Er,()=>t(...r.map(o)))})}function ta(t,e=0){var n=Wt(Ft|e,t);return n}function yt(t){return Wt(Lt|Cn,t)}function fs(t){var e=t.teardown;if(e!==null){const n=Jt,a=ce;ai(!0),St(null);try{e.call(null)}finally{ai(n),St(a)}}}function Ha(t,e=!1){var n=t.first;for(t.first=t.last=null;n!==null;){const r=n.ac;r!==null&&za(()=>{r.abort(Qt)});var a=n.next;(n.f&cn)!==0?n.parent=null:at(n,e),n=a}}function ao(t){for(var e=t.first;e!==null;){var n=e.next;(e.f&Lt)===0&&at(e),e=n}}function at(t,e=!0){var n=!1;(e||(t.f&Pi)!==0)&&t.nodes!==null&&t.nodes.end!==null&&(ds(t.nodes.start,t.nodes.end),n=!0),xe(t,ga),Ha(t,e&&!n),Tr(t,0);var a=t.nodes&&t.nodes.t;if(a!==null)for(const i of a)i.stop();fs(t),t.f^=ga,t.f|=pt;var r=t.parent;r!==null&&r.first!==null&&hs(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes=t.ac=t.b=null}function ds(t,e){for(;t!==null;){var n=t===e?null:Cr(t);t.remove(),t=n}}function hs(t){var e=t.parent,n=t.prev,a=t.next;n!==null&&(n.next=a),a!==null&&(a.prev=n),e!==null&&(e.first===t&&(e.first=a),e.last===t&&(e.last=n))}function wn(t,e,n=!0){var a=[];ps(t,a,!0);var r=()=>{n&&at(t),e&&e()},i=a.length;if(i>0){var s=()=>--i||r();for(var c of a)c.out(s)}else r()}function ps(t,e,n){if((t.f&Je)===0){t.f^=Je;var a=t.nodes&&t.nodes.t;if(a!==null)for(const c of a)(c.is_global||n)&&e.push(c);for(var r=t.first;r!==null;){var i=r.next;if((r.f&cn)===0){var s=(r.f&jn)!==0||(r.f&Lt)!==0&&(t.f&Ft)!==0;ps(r,e,s?n:!1)}r=i}}}function Ga(t){gs(t,!0)}function gs(t,e){if((t.f&Je)!==0){t.f^=Je,(t.f&De)===0&&(xe(t,Ge),un.ensure().schedule(t));for(var n=t.first;n!==null;){var a=n.next,r=(n.f&jn)!==0||(n.f&Lt)!==0;gs(n,r?e:!1),n=a}var i=t.nodes&&t.nodes.t;if(i!==null)for(const s of i)(s.is_global||e)&&s.in()}}function Wa(t,e){if(t.nodes)for(var n=t.nodes.start,a=t.nodes.end;n!==null;){var r=n===a?null:Cr(n);e.append(n),n=r}}let Yr=!1,Jt=!1;function ai(t){Jt=t}let ce=null,Ot=!1;function St(t){ce=t}let ee=null;function Et(t){ee=t}let Tt=null;function vs(t){ce!==null&&(Tt===null?Tt=[t]:Tt.push(t))}let rt=null,ft=0,kt=null;function io(t){kt=t}let ms=1,bn=0,Tn=bn;function ii(t){Tn=t}function _s(){return++ms}function Vn(t){var e=t.f;if((e&Ge)!==0)return!0;if(e&qe&&(t.f&=~xn),(e&Mt)!==0){for(var n=t.deps,a=n.length,r=0;rt.wv)return!0}(e&wt)!==0&&Dt===null&&xe(t,De)}return!1}function bs(t,e,n=!0){var a=t.reactions;if(a!==null&&!(Tt!==null&&Wn.call(Tt,t)))for(var r=0;r{t.ac.abort(Qt)}),t.ac=null);try{t.f|=Xr;var f=t.fn,p=f();t.f|=Rn;var h=t.deps,w=oe?.is_fork;if(rt!==null){var v;if(w||Tr(t,ft),h!==null&&ft>0)for(h.length=ft+rt.length,v=0;vn?.call(this,i))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?on(()=>{e.addEventListener(t,r,a)}):e.addEventListener(t,r,a),r}function Gt(t,e,n,a,r){var i={capture:a,passive:r},s=co(t,e,n,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&cs(()=>{e.removeEventListener(t,s,i)})}function U(t,e,n){(e[gr]??={})[t]=n}function Le(t){for(var e=0;e{throw b});throw h}}finally{t[gr]=e,delete t.currentTarget,St(f),Et(p)}}}const uo=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:t=>t});function fo(t){return uo?.createHTML(t)??t}function ho(t){var e=ls("template");return e.innerHTML=fo(t.replaceAll("","")),e.content}function Xn(t,e){var n=ee;n.nodes===null&&(n.nodes={start:t,end:e,a:null,t:null})}function O(t,e){var n=(e&El)!==0,a=(e&Al)!==0,r,i=!t.startsWith("");return()=>{r===void 0&&(r=ho(i?t:""+t),n||(r=sn(r)));var s=a||rs?document.importNode(r,!0):r.cloneNode(!0);if(n){var c=sn(s),l=s.lastChild;Xn(c,l)}else Xn(s,s);return s}}function Qe(t=""){{var e=Bt(t+"");return Xn(e,e),e}}function Dr(){var t=document.createDocumentFragment(),e=document.createComment(""),n=Bt();return t.append(e,n),Xn(e,n),t}function A(t,e){t!==null&&t.before(e)}function P(t,e){var n=e==null?"":typeof e=="object"?`${e}`:e;n!==(t.__t??=t.nodeValue)&&(t.__t=n,t.nodeValue=`${n}`)}function po(t,e){return go(t,e)}const Gr=new Map;function go(t,{target:e,anchor:n,props:a={},events:r,context:i,intro:s=!0,transformError:c}){Jl();var l=void 0,u=to(()=>{var f=n??e.appendChild(Bt());Gl(f,{pending:()=>{}},w=>{Ae({});var v=_e;i&&(v.c=i),r&&(a.$$events=r),l=t(w,a)||{},Re()},c);var p=new Set,h=w=>{for(var v=0;v{for(var w of p)for(const b of[e,document]){var v=Gr.get(b),T=v.get(w);--T==0?(b.removeEventListener(w,wa),v.delete(w),v.size===0&&Gr.delete(b)):v.set(w,T)}ya.delete(h),f!==n&&f.parentNode?.removeChild(f)}});return vo.set(l,u),l}let vo=new WeakMap;class mo{anchor;#n=new Map;#o=new Map;#e=new Map;#a=new Set;#r=!0;constructor(e,n=!0){this.anchor=e,this.#r=n}#i=e=>{if(this.#n.has(e)){var n=this.#n.get(e),a=this.#o.get(n);if(a)Ga(a),this.#a.delete(n);else{var r=this.#e.get(n);r&&(this.#o.set(n,r.effect),this.#e.delete(n),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),a=r.effect)}for(const[i,s]of this.#n){if(this.#n.delete(i),i===e)break;const c=this.#e.get(s);c&&(at(c.effect),this.#e.delete(s))}for(const[i,s]of this.#o){if(i===n||this.#a.has(i))continue;const c=()=>{if(Array.from(this.#n.values()).includes(i)){var u=document.createDocumentFragment();Wa(s,u),u.append(Bt()),this.#e.set(i,{effect:s,fragment:u})}else at(s);this.#a.delete(i),this.#o.delete(i)};this.#r||!a?(this.#a.add(i),wn(s,c,!1)):c()}}};#t=e=>{this.#n.delete(e);const n=Array.from(this.#n.values());for(const[a,r]of this.#e)n.includes(a)||(at(r.effect),this.#e.delete(a))};ensure(e,n){var a=oe,r=ss();if(n&&!this.#o.has(e)&&!this.#e.has(e))if(r){var i=document.createDocumentFragment(),s=Bt();i.append(s),this.#e.set(e,{effect:yt(()=>n(s)),fragment:i})}else this.#o.set(e,yt(()=>n(this.anchor)));if(this.#n.set(a,e),r){for(const[c,l]of this.#o)c===e?a.unskip_effect(l):a.skip_effect(l);for(const[c,l]of this.#e)c===e?a.unskip_effect(l.effect):a.skip_effect(l.effect);a.oncommit(this.#i),a.ondiscard(this.#t)}else this.#i(a)}}function j(t,e,n=!1){var a=new mo(t),r=n?jn:0;function i(s,c){a.ensure(s,c)}ta(()=>{var s=!1;e((c,l=0)=>{s=!0,i(l,c)}),s||i(-1,null)},r)}function _o(t,e){return e}function bo(t,e,n){for(var a=[],r=e.length,i,s=e.length,c=0;c{if(i){if(i.pending.delete(p),i.done.add(p),i.pending.size===0){var h=t.outrogroups;Ta(t,ea(i.done)),h.delete(i),h.size===0&&(t.outrogroups=null)}}else s-=1},!1)}if(s===0){var l=a.length===0&&n!==null;if(l){var u=n,f=u.parentNode;Kl(f),f.append(u),t.items.clear()}Ta(t,e,!l)}else i={pending:new Set(e),done:new Set},(t.outrogroups??=new Set).add(i)}function Ta(t,e,n=!0){var a;if(t.pending.size>0){a=new Set;for(const s of t.pending.values())for(const c of s)a.add(t.items.get(c).e)}for(var r=0;r{var x=n();return Oi(x)?x:x==null?[]:ea(x)}),h,w=new Map,v=!0;function T(x){(R.effect.f&pt)===0&&(R.pending.delete(x),R.fallback=f,ko(R,h,s,e,a),f!==null&&(h.length===0?(f.f&zt)===0?Ga(f):(f.f^=zt,vr(f,null,s)):wn(f,()=>{f=null})))}function b(x){R.pending.delete(x)}var y=ta(()=>{h=o(p);for(var x=h.length,S=new Set,I=oe,Z=ss(),z=0;zi(s)):(f=yt(()=>i(oi??=Bt())),f.f|=zt)),x>S.size&&ll(),!v)if(w.set(I,S),Z){for(const[H,D]of c)S.has(H)||I.skip_effect(D.e);I.oncommit(T),I.ondiscard(b)}else T(I);o(p)}),R={effect:y,items:c,pending:w,outrogroups:null,fallback:f};v=!1}function or(t){for(;t!==null&&(t.f&Lt)===0;)t=t.next;return t}function ko(t,e,n,a,r){var i=(a&bl)!==0,s=e.length,c=t.items,l=or(t.effect.first),u,f=null,p,h=[],w=[],v,T,b,y;if(i)for(y=0;y0){var V=(a&Fi)!==0&&s===0?n:null;if(i){for(y=0;y{if(p!==void 0)for(b of p)b.nodes?.a?.apply()})}function yo(t,e,n,a,r,i,s,c){var l=(s&ml)!==0?(s&kl)===0?X(n,!1,!1):Sn(n):null,u=(s&_l)!==0?Sn(r):null;return{v:l,i:u,e:yt(()=>(i(e,l??n,u??r,c),()=>{t.delete(a)}))}}function vr(t,e,n){if(t.nodes)for(var a=t.nodes.start,r=t.nodes.end,i=e&&(e.f&zt)===0?e.nodes.start:n;a!==null;){var s=Cr(a);if(i.before(a),a===r)return;a=s}}function rn(t,e,n){e===null?t.effect.first=n:e.next=n,n===null?t.effect.last=e:n.prev=e}function xa(t,e,n=!1,a=!1,r=!1,i=!1){var s=t,c="";if(n)var l=t;M(()=>{var u=ee;if(c!==(c=e()??"")){if(n){u.nodes=null,l.innerHTML=c,c!==""&&Xn(sn(l),l.lastChild);return}if(u.nodes!==null&&(ds(u.nodes.start,u.nodes.end),u.nodes=null),c!==""){var f=a?Rl:r?Cl:void 0,p=ls(a?"svg":r?"math":"template",f);p.innerHTML=c;var h=a||r?p:p.content;if(Xn(sn(h),h.lastChild),a||r)for(;sn(h);)s.before(sn(h));else s.before(h)}}})}function xs(t,e){var n;n=document.head.appendChild(Bt()),ta(()=>e(n),Pi|Cn)}function wo(t,e,n){Ba(()=>{var a=ze(()=>e(t,n?.())||{});if(n&&a?.update){var r=!1,i={};Ir(()=>{var s=n();qa(s),r&&Gi(i,s)&&(i=s,a.update(s))}),r=!0}if(a?.destroy)return()=>a.destroy()})}function Ss(t){var e,n,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var r=t.length;for(e=0;e=0;){var c=s+i;(s===0||ci.includes(a[s-1]))&&(c===a.length||ci.includes(a[c]))?a=(s===0?"":a.substring(0,s))+a.substring(c+1):s=c}}return a===""?null:a}function Eo(t,e){return t==null?null:String(t)}function it(t,e,n,a,r,i){var s=t.__className;if(s!==n||s===void 0){var c=So(n,a,i);c==null?t.removeAttribute("class"):t.className=c,t.__className=n}else if(i&&r!==i)for(var l in i){var u=!!i[l];(r==null||u!==!!r[l])&&t.classList.toggle(l,u)}return i}function Kt(t,e,n,a){var r=t.__style;if(r!==e){var i=Eo(e);i==null?t.removeAttribute("style"):t.style.cssText=i,t.__style=e}return a}const Ao=Symbol("is custom element"),Ro=Symbol("is html"),Co=il?"progress":"PROGRESS";function Vt(t,e){var n=Es(t);n.value===(n.value=e??void 0)||t.value===e&&(e!==0||t.nodeName!==Co)||(t.value=e??"")}function F(t,e,n,a){var r=Es(t);r[e]!==(r[e]=n)&&(e==="loading"&&(t[al]=n),n==null?t.removeAttribute(e):typeof n!="string"&&Io(t).includes(e)?t[e]=n:t.setAttribute(e,n))}function Es(t){return t.__attributes??={[Ao]:t.nodeName.includes("-"),[Ro]:t.namespaceURI===Bi}}var ui=new Map;function Io(t){var e=t.getAttribute("is")||t.nodeName,n=ui.get(e);if(n)return n;ui.set(e,n=[]);for(var a,r=t,i=Element.prototype;i!==r;){a=Li(r);for(var s in a)a[s].set&&n.push(s);r=La(r)}return n}function fi(t,e){return t===e||t?.[kn]===e}function ja(t={},e,n,a){var r=_e.r,i=ee;return Ba(()=>{var s,c;return Ir(()=>{s=c,c=[],ze(()=>{t!==n(...c)&&(e(t,...c),s&&fi(n(...s),t)&&e(null,...s))})}),()=>{let l=i;for(;l!==r&&l.parent!==null&&l.parent.f&ga;)l=l.parent;const u=()=>{c&&fi(n(...c),t)&&e(null,...c)},f=l.teardown;l.teardown=()=>{u(),f?.()}}}),t}function As(t=!1){const e=_e,n=e.l.u;if(!n)return;let a=()=>qa(e.s);if(t){let r=0,i={};const s=Rr(()=>{let c=!1;const l=e.s;for(const u in l)l[u]!==i[u]&&(i[u]=l[u],c=!0);return c&&r++,r});a=()=>o(s)}n.b.length&&eo(()=>{di(e,a),ha(n.b)}),wr(()=>{const r=ze(()=>n.m.map(nl));return()=>{for(const i of r)typeof i=="function"&&i()}}),n.a.length&&wr(()=>{di(e,a),ha(n.a)})}function di(t,e){if(t.l.s)for(const n of t.l.s)o(n);e()}function Be(t,e,n,a){var r=!Qn||(n&wl)!==0,i=(n&xl)!==0,s=(n&Sl)!==0,c=a,l=!0,u=()=>(l&&(l=!1,c=s?ze(a):a),c);let f;if(i){var p=kn in t||rl in t;f=Gn(t,e)?.set??(p&&e in t?x=>t[e]=x:void 0)}var h,w=!1;i?[h,w]=Pl(()=>t[e]):h=t[e],h===void 0&&a!==void 0&&(h=u(),f&&(r&&dl(),f(h)));var v;if(r?v=()=>{var x=t[e];return x===void 0?u():(l=!0,x)}:v=()=>{var x=t[e];return x!==void 0&&(c=void 0),x===void 0?c:x},r&&(n&Tl)===0)return v;if(f){var T=t.$$legacy;return(function(x,S){return arguments.length>0?((!r||!S||T||w)&&f(S?v():x),x):v()})}var b=!1,y=((n&yl)!==0?Rr:dt)(()=>(b=!1,v()));i&&o(y);var R=ee;return(function(x,S){if(arguments.length>0){const I=S?o(y):r&&i?Hn(x):x;return m(y,I),b=!0,c!==void 0&&(c=I),x}return Jt&&b||(R.f&pt)!==0?y.v:o(y)})}function Rs(t){_e===null&&zi(),Qn&&_e.l!==null?Oo(_e).m.push(t):wr(()=>{const e=ze(t);if(typeof e=="function")return e})}function Do(t){_e===null&&zi(),Rs(()=>()=>ze(t))}function Oo(t){var e=t.l;return e.u??={a:[],b:[],m:[]}}const Lo="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(Lo);Ll();class Cs extends Error{constructor(e,n){super(n),this.status=e}status}async function Fe(t,e={}){const n=new Headers(e.headers);n.set("Accept","application/json"),e.body&&!(e.body instanceof FormData)&&n.set("Content-Type","application/json");const a=await fetch(t,{...e,headers:n});if(!a.ok)throw new Cs(a.status,await a.text());return a.json()}const Mo=[{title:"Ship it",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYjJ1bm1meHE4N2x3bnN0djJkMWtjNGc5bXYzZDFiOHBsbG16M3F0ZSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/l0HlHFRbmaZtBRhXG/giphy.gif",tags:["ship","launch","done"]},{title:"Approved",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExazBpbzJ6ODZ3bXQ3OHBvNGJidWZoajc0cHV6YnVub3MzZ3c1a2Z2dSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/111ebonMs90YLu/giphy.gif",tags:["yes","approved","nice"]},{title:"Deploy dance",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExY3NkaTVmZW9ydWNnZnl0ZWQ5aHQyeGNrd2k3NG4wZWNqYzNmd3k1ZCZlcD12MV9naWZzX3NlYXJjaCZjdD1n/GeimqsH0TLDt4tScGw/giphy.gif",tags:["deploy","dance","celebrate"]},{title:"Looking",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYWZ3emE0dm5mN2h0bGVsY2w0OXBodGd2cGJlNDRiZXo1YWNtdWRmZyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/26n6WywJyh39n1pBu/giphy.gif",tags:["search","looking","debug"]},{title:"Typing faster",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExOWFlbnJnbnIzbHYxcDIzdXZ3NGF3N2FocHNvMmR5enU3bHpycHBlZSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/13HgwGsXF0aiGY/giphy.gif",tags:["typing","code","work"]},{title:"Tiny victory",url:"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdjJ2b2tqNmF4dG16NjE0eXhuc3h5bTlvamgwNTR0Zmd6ZjhtM2JuaSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/3o7abKhOpu0NwenH3O/giphy.gif",tags:["win","victory","celebrate"]}];function No(t){const e=t.trim();if(!e)return"?";const n=e.split(/\s+/);return n.length>=2?(n[0][0]+n[1][0]).toUpperCase():e.slice(0,2).toUpperCase()}function $t(t){if(!t)return"?";const e=t.trim();return e?e[0].toUpperCase():"?"}function fn(t){return t?`@${t}`:""}function en(t){let e=0;for(let n=0;n>>0;return e%360}function Po(t,e){return t.members.find(n=>n.id!==e)||t.members[0]}function xr(t,e){const n=t.members.filter(r=>r.id!==e);return(n.length>0?n:t.members).map(r=>r.display_name).join(", ")}function Uo(t,e,n){const a=new Map;for(const r of e)for(const i of r.members)i.id&&i.id!==n&&a.set(i.id,i);for(const r of[...t].reverse()){const i=r.author;i?.id&&i.id!==n&&a.set(i.id,i)}return[...a.values()].slice(0,12)}function zo(t,e){return t.find(n=>n.members.some(a=>a.id===e))}const Fo=new Set(["button","checkbox","combobox","link","listbox","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","option","radio","radiogroup","slider","spinbutton","switch","tab","tablist","textbox","tree","treeitem"]),Bo=new Set(["INPUT","TEXTAREA","SELECT","BUTTON","A","DETAILS","SUMMARY","VIDEO","AUDIO"]);function Ho(t){if(!t)return!1;if(t.isContentEditable)return!0;if(t instanceof HTMLInputElement){const e=(t.type||"text").toLowerCase();return e!=="checkbox"&&e!=="radio"&&e!=="button"&&e!=="submit"&&e!=="reset"&&e!=="file"}return t instanceof HTMLTextAreaElement}function Go(t){if(!t||Wo(t))return!1;if(Bo.has(t.tagName))return!0;const e=t.getAttribute("role");if(e&&Fo.has(e))return!0;const n=t.getAttribute("tabindex");return!!(n!==null&&n!=="-1"&&t.hasAttribute("aria-keyshortcuts"))}function Wo(t){if(!t.closest(".messages, .thread"))return!1;if(t instanceof HTMLButtonElement||t instanceof HTMLAnchorElement)return!0;const e=t.getAttribute("role");return e==="button"||e==="link"}function qo(){const t=typeof window<"u"?window.getSelection():null;if(!t||t.isCollapsed||t.rangeCount===0)return!1;const e=t.getRangeAt(0).commonAncestorContainer;return e?!!(e.nodeType===Node.ELEMENT_NODE?e:e.parentElement)?.closest(".messages, .thread, .markdown"):!1}function jo(t,e){if(e.authRequired||e.isModalOpen()||t.defaultPrevented||t.isComposing||t.keyCode===229||t.ctrlKey||t.metaKey||t.altKey||t.key.length!==1||qo())return!1;const n=document.activeElement;return!(n===e.messageInput||n===e.replyInput||Ho(n)||Go(n))}function Zo(t,e){if(!jo(t,e))return;const n=e.target();if(!n||n.disabled||n.readOnly)return;t.key===" "&&t.preventDefault(),n.focus({preventScroll:!0});const a=n.value.length;if(n.setSelectionRange(a,a),t.key===" "){const r=n.selectionStart??a,i=n.selectionEnd??a;n.setRangeText(" ",r,i,"end"),n.dispatchEvent(new Event("input",{bubbles:!0}))}}function Yo(t,e){const n=()=>{const i=t.style.height;t.style.height="auto";const s=`${t.scrollHeight}px`;i!==s?t.style.height=s:t.style.height=i},a=()=>n(),r=()=>n();return requestAnimationFrame(n),t.addEventListener("input",a),window.addEventListener("resize",r),{update(){requestAnimationFrame(n)},destroy(){t.removeEventListener("input",a),window.removeEventListener("resize",r)}}}function Vr(t){return`/api/uploads/${encodeURIComponent(t.id)}`}function Xo(t){return t.content_type.startsWith("image/")}function Qo(t){return t<1024?`${t} B`:t<1024*1024?`${Math.round(t/1024)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}var Vo=O('
    ');function Jo(t,e){Ae(e,!0);var n=Vo(),a=g(n),r=_(a,2),i=_(r,2),s=g(i);s.textContent="<>";var c=_(i,2),l=g(c);l.textContent="{}";var u=_(c,2),f=_(u,2);let p;M(()=>p=it(f,1,"",null,p,{active:e.showGifPicker})),U("click",a,()=>e.onWrap("**")),U("click",r,()=>e.onWrap("_")),U("click",i,()=>e.onWrap("`")),U("click",c,()=>e.onWrap("```","\n```")),U("click",u,()=>e.onAppend("[label](https://)")),U("click",f,function(...h){e.onToggleGif?.apply(this,h)}),A(t,n),Re()}Le(["click"]);var Ko=O(''),$o=O('
    GIFs
    ');function ec(t,e){Ae(e,!0);var n=$o(),a=g(n),r=_(g(a),2),i=_(a,2);gt(i,21,()=>e.gifs,s=>s.url,(s,c)=>{var l=Ko(),u=g(l),f=_(u,2),p=g(f);M(()=>{F(u,"src",o(c).url),F(u,"alt",o(c).title),P(p,o(c).title)}),U("click",l,()=>e.onPick(o(c).url,o(c).title)),A(s,l)}),M(()=>Vt(r,e.query)),U("input",r,s=>e.onQuery(s.currentTarget.value)),A(t,n),Re()}Le(["input","click"]);function Sa(t,e=120){if(!t)return"";const n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"...":n}function hi(t){return t.quoted_author?.display_name||"Unknown"}function tc(t,e){return e===t.id?"Open":"Thread"}function nc(t){const e=new Date(t),n=new Date,a=new Date;a.setDate(n.getDate()-1);const r=(i,s)=>i.getFullYear()===s.getFullYear()&&i.getMonth()===s.getMonth()&&i.getDate()===s.getDate();return r(e,n)?"Today":r(e,a)?"Yesterday":new Intl.DateTimeFormat(void 0,{weekday:"long",month:"long",day:"numeric"}).format(e)}function rc(t){const e=[];let n="",a="",r=0;for(const i of t){const s=new Date(i.created_at),c=s.toDateString(),l=i.author?.id||i.author_id||"local",u=c!==n,f=l!==a,p=s.getTime()-r>300*1e3;u||f||p||e.length===0?e.push({key:i.id,dayLabel:u?nc(i.created_at):null,messages:[i],authorName:i.author?.display_name||"Local User",authorHandle:i.author?.handle||"",authorAvatarURL:i.author?.avatar_url||"",authorID:l,timestamp:i.created_at}):e[e.length-1].messages.push(i),n=c,a=l,r=s.getTime()}return e}var ac=O('
    Replying to
    ');function ic(t,e){Ae(e,!0);var n=ac(),a=_(g(n),2),r=g(a),i=_(g(r)),s=g(i),c=_(r,2),l=g(c),u=_(a,2);M(f=>{P(s,e.target.author?.display_name||"Local User"),P(l,f)},[()=>Sa(e.target.body)]),U("click",u,function(...f){e.onClear?.apply(this,f)}),A(t,n),Re()}Le(["click"]);var sc=O(''),lc=O('
    '),oc=O(''),cc=O('
    ');function Is(t,e){Ae(e,!0);let n=Be(e,"formClass",3,"composer"),a=Be(e,"pendingUpload",3,null),r=Be(e,"replyTarget",3,null),i=Be(e,"showUpload",3,!1),s=Be(e,"showToolbar",3,!1),c=Be(e,"showGifPicker",3,!1),l=Be(e,"gifQuery",3,""),u=Be(e,"filteredGifs",19,()=>[]),f=Be(e,"onUploadFile",3,()=>{}),p=Be(e,"onRemoveUpload",3,()=>{}),h=Be(e,"onClearReply",3,()=>{}),w=Be(e,"onApplyMarkdownWrap",3,()=>{}),v=Be(e,"onAppendToComposer",3,()=>{}),T=Be(e,"onToggleGif",3,()=>{}),b=Be(e,"onGifQuery",3,()=>{}),y=Be(e,"onPickGif",3,()=>{}),R=ht(null);wr(()=>(e.onInputRef(o(R)),()=>e.onInputRef(null)));var x=cc(),S=g(x);{var I=C=>{ec(C,{get gifs(){return u()},get query(){return l()},get onQuery(){return b()},get onPick(){return y()}})};j(S,C=>{c()&&C(I)})}var Z=_(S,2),z=g(Z);{var B=C=>{var ne=lc(),ke=_(g(ne),2);{var re=q=>{var ae=sc();M(ve=>{F(ae,"src",ve),F(ae,"alt",a().filename)},[()=>Vr(a())]),A(q,ae)},vt=xt(()=>Xo(a()));j(ke,q=>{o(vt)&&q(re)})}var se=_(ke,2),je=g(se),le=_(se,2);M(q=>P(je,`${a().filename??""} · ${q??""}`),[()=>Qo(a().byte_size)]),U("click",le,function(...q){p()?.apply(this,q)}),A(C,ne)};j(z,C=>{a()&&C(B)})}var V=_(z,2);{var Q=C=>{ic(C,{get target(){return r()},get onClear(){return h()}})};j(V,C=>{r()&&C(Q)})}var H=_(V,2),D=g(H);{var J=C=>{var ne=oc(),ke=g(ne);U("change",ke,function(...re){f()?.apply(this,re)}),A(C,ne)};j(D,C=>{i()&&C(J)})}var K=_(D,2);ja(K,C=>m(R,C),()=>o(R)),wo(K,(C,ne)=>Yo?.(C),()=>e.value);var W=_(K,2),Y=_(H,2);{var ue=C=>{Jo(C,{get showGifPicker(){return c()},get onWrap(){return w()},get onAppend(){return v()},get onToggleGif(){return T()}})};j(Y,C=>{s()&&C(ue)})}M(C=>{it(x,1,xo(n())),Vt(K,e.value),F(K,"placeholder",e.placeholder),F(K,"aria-label",e.ariaLabel),F(W,"aria-label",e.submitLabel),W.disabled=C},[()=>!e.value.trim()]),Gt("submit",x,C=>{C.preventDefault(),e.onSubmit()}),U("input",K,C=>e.onValue(C.currentTarget.value)),Gt("focus",K,function(...C){e.onFocus?.apply(this,C)}),U("keydown",K,function(...C){e.onKeydown?.apply(this,C)}),A(t,x),Re()}Le(["click","change","input","keydown"]);var uc=O('');function fc(t,e){var n=uc(),a=g(n),r=_(a,2),i=g(r),s=g(i),c=g(s),l=_(s,2),u=g(l),f=_(u,2),p=_(i,2),h=g(p);M(()=>{P(c,e.title),F(u,"href",e.url),F(h,"src",e.url),F(h,"alt",e.title)}),U("click",a,function(...w){e.onClose?.apply(this,w)}),U("click",f,function(...w){e.onClose?.apply(this,w)}),A(t,n)}Le(["click"]);const{entries:Ds,setPrototypeOf:pi,isFrozen:dc,getPrototypeOf:hc,getOwnPropertyDescriptor:pc}=Object;let{freeze:Ke,seal:At,create:zn}=Object,{apply:Ea,construct:Aa}=typeof Reflect<"u"&&Reflect;Ke||(Ke=function(e){return e});At||(At=function(e){return e});Ea||(Ea=function(e,n){for(var a=arguments.length,r=new Array(a>2?a-2:0),i=2;i1?n-1:0),r=1;r"u"?null:Oe(BigInt.prototype.toString),bi=typeof Symbol>"u"?null:Oe(Symbol.prototype.toString),Te=Oe(Object.prototype.hasOwnProperty),fr=Oe(Object.prototype.toString),He=Oe(RegExp.prototype.test),Wr=kc(TypeError);function Oe(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var n=arguments.length,a=new Array(n>1?n-1:0),r=1;r2&&arguments[2]!==void 0?arguments[2]:mr;if(pi&&pi(t,null),!Xe(e))return t;let a=e.length;for(;a--;){let r=e[a];if(typeof r=="string"){const i=n(r);i!==r&&(dc(e)||(e[a]=i),r=i)}t[r]=!0}return t}function yc(t){for(let e=0;e/gm),Rc=At(/\$\{[\w\W]*/gm),Cc=At(/^data-[\-\w.\u00B7-\uFFFF]+$/),Ic=At(/^aria-[\-\w]+$/),Os=At(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Dc=At(/^(?:\w+script|data):/i),Oc=At(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ls=At(/^html$/i),Lc=At(/^[a-z][.\w]*(-[.\w]+)+$/i);var xi=Object.freeze({__proto__:null,ARIA_ATTR:Ic,ATTR_WHITESPACE:Oc,CUSTOM_ELEMENT:Lc,DATA_ATTR:Cc,DOCTYPE_NAME:Ls,ERB_EXPR:Ac,IS_ALLOWED_URI:Os,IS_SCRIPT_OR_DATA:Dc,MUSTACHE_EXPR:Ec,TMPLIT_EXPR:Rc});const dr={element:1,text:3,progressingInstruction:7,comment:8,document:9},Mc=function(){return typeof window>"u"?null:window},Nc=function(e,n){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let a=null;const r="data-tt-policy-suffix";n&&n.hasAttribute(r)&&(a=n.getAttribute(r));const i="dompurify"+(a?"#"+a:"");try{return e.createPolicy(i,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},Si=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Ms(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Mc();const e=G=>Ms(G);if(e.version="3.4.2",e.removed=[],!t||!t.document||t.document.nodeType!==dr.document||!t.Element)return e.isSupported=!1,e;let{document:n}=t;const a=n,r=a.currentScript,{DocumentFragment:i,HTMLTemplateElement:s,Node:c,Element:l,NodeFilter:u,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:p,DOMParser:h,trustedTypes:w}=t,v=l.prototype,T=Fn(v,"cloneNode"),b=Fn(v,"remove"),y=Fn(v,"nextSibling"),R=Fn(v,"childNodes"),x=Fn(v,"parentNode");if(typeof s=="function"){const G=n.createElement("template");G.content&&G.content.ownerDocument&&(n=G.content.ownerDocument)}let S,I="";const{implementation:Z,createNodeIterator:z,createDocumentFragment:B,getElementsByTagName:V}=n,{importNode:Q}=a;let H=Si();e.isSupported=typeof Ds=="function"&&typeof x=="function"&&Z&&Z.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:D,ERB_EXPR:J,TMPLIT_EXPR:K,DATA_ATTR:W,ARIA_ATTR:Y,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:C,CUSTOM_ELEMENT:ne}=xi;let{IS_ALLOWED_URI:ke}=xi,re=null;const vt=$({},[...ki,...ca,...ua,...fa,...yi]);let se=null;const je=$({},[...wi,...da,...Ti,...qr]);let le=Object.seal(zn(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),q=null,ae=null;const ve=Object.seal(zn(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let st=!0,de=!0,Se=!1,qt=!0,$e=!1,ye=!0,me=!1,Ce=!1,lt=!1,ot=!1,tn=!1,Dn=!1,dn=!0,Lr=!1;const Mr="user-content-";let et=!0,jt=!1,Zt={},ct=null;const On=$({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Kn=null;const $n=$({},["audio","video","img","source","image","track"]);let er=null;const tt=$({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),hn="http://www.w3.org/1998/Math/MathML",Ln="http://www.w3.org/2000/svg",mt="http://www.w3.org/1999/xhtml";let nn=mt,tr=!1,pn=null;const aa=$({},[hn,Ln,mt],oa);let nr=$({},["mi","mo","mn","ms","mtext"]),rr=$({},["annotation-xml"]);const Mn=$({},["title","style","font","a","script"]);let gn=null;const Nr=["application/xhtml+xml","text/html"],ia="text/html";let Ee=null,Nt=null;const Pr=n.createElement("form"),Nn=function(d){return d instanceof RegExp||d instanceof Function},ar=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Nt&&Nt===d)return;(!d||typeof d!="object")&&(d={}),d=nt(d),gn=Nr.indexOf(d.PARSER_MEDIA_TYPE)===-1?ia:d.PARSER_MEDIA_TYPE,Ee=gn==="application/xhtml+xml"?oa:mr,re=Te(d,"ALLOWED_TAGS")&&Xe(d.ALLOWED_TAGS)?$({},d.ALLOWED_TAGS,Ee):vt,se=Te(d,"ALLOWED_ATTR")&&Xe(d.ALLOWED_ATTR)?$({},d.ALLOWED_ATTR,Ee):je,pn=Te(d,"ALLOWED_NAMESPACES")&&Xe(d.ALLOWED_NAMESPACES)?$({},d.ALLOWED_NAMESPACES,oa):aa,er=Te(d,"ADD_URI_SAFE_ATTR")&&Xe(d.ADD_URI_SAFE_ATTR)?$(nt(tt),d.ADD_URI_SAFE_ATTR,Ee):tt,Kn=Te(d,"ADD_DATA_URI_TAGS")&&Xe(d.ADD_DATA_URI_TAGS)?$(nt($n),d.ADD_DATA_URI_TAGS,Ee):$n,ct=Te(d,"FORBID_CONTENTS")&&Xe(d.FORBID_CONTENTS)?$({},d.FORBID_CONTENTS,Ee):On,q=Te(d,"FORBID_TAGS")&&Xe(d.FORBID_TAGS)?$({},d.FORBID_TAGS,Ee):nt({}),ae=Te(d,"FORBID_ATTR")&&Xe(d.FORBID_ATTR)?$({},d.FORBID_ATTR,Ee):nt({}),Zt=Te(d,"USE_PROFILES")?d.USE_PROFILES&&typeof d.USE_PROFILES=="object"?nt(d.USE_PROFILES):d.USE_PROFILES:!1,st=d.ALLOW_ARIA_ATTR!==!1,de=d.ALLOW_DATA_ATTR!==!1,Se=d.ALLOW_UNKNOWN_PROTOCOLS||!1,qt=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,$e=d.SAFE_FOR_TEMPLATES||!1,ye=d.SAFE_FOR_XML!==!1,me=d.WHOLE_DOCUMENT||!1,ot=d.RETURN_DOM||!1,tn=d.RETURN_DOM_FRAGMENT||!1,Dn=d.RETURN_TRUSTED_TYPE||!1,lt=d.FORCE_BODY||!1,dn=d.SANITIZE_DOM!==!1,Lr=d.SANITIZE_NAMED_PROPS||!1,et=d.KEEP_CONTENT!==!1,jt=d.IN_PLACE||!1,ke=Tc(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:Os,nn=typeof d.NAMESPACE=="string"?d.NAMESPACE:mt,nr=Te(d,"MATHML_TEXT_INTEGRATION_POINTS")&&d.MATHML_TEXT_INTEGRATION_POINTS&&typeof d.MATHML_TEXT_INTEGRATION_POINTS=="object"?nt(d.MATHML_TEXT_INTEGRATION_POINTS):$({},["mi","mo","mn","ms","mtext"]),rr=Te(d,"HTML_INTEGRATION_POINTS")&&d.HTML_INTEGRATION_POINTS&&typeof d.HTML_INTEGRATION_POINTS=="object"?nt(d.HTML_INTEGRATION_POINTS):$({},["annotation-xml"]);const E=Te(d,"CUSTOM_ELEMENT_HANDLING")&&d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING=="object"?nt(d.CUSTOM_ELEMENT_HANDLING):zn(null);if(le=zn(null),Te(E,"tagNameCheck")&&Nn(E.tagNameCheck)&&(le.tagNameCheck=E.tagNameCheck),Te(E,"attributeNameCheck")&&Nn(E.attributeNameCheck)&&(le.attributeNameCheck=E.attributeNameCheck),Te(E,"allowCustomizedBuiltInElements")&&typeof E.allowCustomizedBuiltInElements=="boolean"&&(le.allowCustomizedBuiltInElements=E.allowCustomizedBuiltInElements),$e&&(de=!1),tn&&(ot=!0),Zt&&(re=$({},yi),se=zn(null),Zt.html===!0&&($(re,ki),$(se,wi)),Zt.svg===!0&&($(re,ca),$(se,da),$(se,qr)),Zt.svgFilters===!0&&($(re,ua),$(se,da),$(se,qr)),Zt.mathMl===!0&&($(re,fa),$(se,Ti),$(se,qr))),ve.tagCheck=null,ve.attributeCheck=null,Te(d,"ADD_TAGS")&&(typeof d.ADD_TAGS=="function"?ve.tagCheck=d.ADD_TAGS:Xe(d.ADD_TAGS)&&(re===vt&&(re=nt(re)),$(re,d.ADD_TAGS,Ee))),Te(d,"ADD_ATTR")&&(typeof d.ADD_ATTR=="function"?ve.attributeCheck=d.ADD_ATTR:Xe(d.ADD_ATTR)&&(se===je&&(se=nt(se)),$(se,d.ADD_ATTR,Ee))),Te(d,"ADD_URI_SAFE_ATTR")&&Xe(d.ADD_URI_SAFE_ATTR)&&$(er,d.ADD_URI_SAFE_ATTR,Ee),Te(d,"FORBID_CONTENTS")&&Xe(d.FORBID_CONTENTS)&&(ct===On&&(ct=nt(ct)),$(ct,d.FORBID_CONTENTS,Ee)),Te(d,"ADD_FORBID_CONTENTS")&&Xe(d.ADD_FORBID_CONTENTS)&&(ct===On&&(ct=nt(ct)),$(ct,d.ADD_FORBID_CONTENTS,Ee)),et&&(re["#text"]=!0),me&&$(re,["html","head","body"]),re.table&&($(re,["tbody"]),delete q.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw Wr('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Wr('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');S=d.TRUSTED_TYPES_POLICY,I=S.createHTML("")}else S===void 0&&(S=Nc(w,r)),S!==null&&typeof I=="string"&&(I=S.createHTML(""));Ke&&Ke(d),Nt=d},Ur=$({},[...ca,...ua,...xc]),Pn=$({},[...fa,...Sc]),sa=function(d){let E=x(d);(!E||!E.tagName)&&(E={namespaceURI:nn,tagName:"template"});const N=mr(d.tagName),he=mr(E.tagName);return pn[d.namespaceURI]?d.namespaceURI===Ln?E.namespaceURI===mt?N==="svg":E.namespaceURI===hn?N==="svg"&&(he==="annotation-xml"||nr[he]):!!Ur[N]:d.namespaceURI===hn?E.namespaceURI===mt?N==="math":E.namespaceURI===Ln?N==="math"&&rr[he]:!!Pn[N]:d.namespaceURI===mt?E.namespaceURI===Ln&&!rr[he]||E.namespaceURI===hn&&!nr[he]?!1:!Pn[N]&&(Mn[N]||!Ur[N]):!!(gn==="application/xhtml+xml"&&pn[d.namespaceURI]):!1},Ze=function(d){ur(e.removed,{element:d});try{x(d).removeChild(d)}catch{b(d)}},Pt=function(d,E){try{ur(e.removed,{attribute:E.getAttributeNode(d),from:E})}catch{ur(e.removed,{attribute:null,from:E})}if(E.removeAttribute(d),d==="is")if(ot||tn)try{Ze(E)}catch{}else try{E.setAttribute(d,"")}catch{}},zr=function(d){let E=null,N=null;if(lt)d=""+d;else{const we=vi(d,/^[\r\n\t ]+/);N=we&&we[0]}gn==="application/xhtml+xml"&&nn===mt&&(d=''+d+"");const he=S?S.createHTML(d):d;if(nn===mt)try{E=new h().parseFromString(he,gn)}catch{}if(!E||!E.documentElement){E=Z.createDocument(nn,"template",null);try{E.documentElement.innerHTML=tr?I:he}catch{}}const Me=E.body||E.documentElement;return d&&N&&Me.insertBefore(n.createTextNode(N),Me.childNodes[0]||null),nn===mt?V.call(E,me?"html":"body")[0]:me?E.documentElement:Me},Fr=function(d){return z.call(d.ownerDocument||d,d,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},ir=function(d){return d instanceof p&&(typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||!(d.attributes instanceof f)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function")},k=function(d){return typeof c=="function"&&d instanceof c};function L(G,d,E){cr(G,N=>{N.call(e,d,E,Nt)})}const fe=function(d){let E=null;if(L(H.beforeSanitizeElements,d,null),ir(d))return Ze(d),!0;const N=Ee(d.nodeName);if(L(H.uponSanitizeElement,d,{tagName:N,allowedTags:re}),ye&&d.hasChildNodes()&&!k(d.firstElementChild)&&He(/<[/\w!]/g,d.innerHTML)&&He(/<[/\w!]/g,d.textContent)||ye&&d.namespaceURI===mt&&N==="style"&&k(d.firstElementChild)||d.nodeType===dr.progressingInstruction||ye&&d.nodeType===dr.comment&&He(/<[/\w]/g,d.data))return Ze(d),!0;if(q[N]||!(ve.tagCheck instanceof Function&&ve.tagCheck(N))&&!re[N]){if(!q[N]&&Rt(N)&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,N)||le.tagNameCheck instanceof Function&&le.tagNameCheck(N)))return!1;if(et&&!ct[N]){const he=x(d)||d.parentNode,Me=R(d)||d.childNodes;if(Me&&he){const we=Me.length;for(let Pe=we-1;Pe>=0;--Pe){const Ye=T(Me[Pe],!0);he.insertBefore(Ye,y(d))}}}return Ze(d),!0}return d instanceof l&&!sa(d)||(N==="noscript"||N==="noembed"||N==="noframes")&&He(/<\/no(script|embed|frames)/i,d.innerHTML)?(Ze(d),!0):($e&&d.nodeType===dr.text&&(E=d.textContent,cr([D,J,K],he=>{E=Un(E,he," ")}),d.textContent!==E&&(ur(e.removed,{element:d.cloneNode()}),d.textContent=E)),L(H.afterSanitizeElements,d,null),!1)},be=function(d,E,N){if(ae[E]||dn&&(E==="id"||E==="name")&&(N in n||N in Pr))return!1;const he=se[E]||ve.attributeCheck instanceof Function&&ve.attributeCheck(E,d);if(!(de&&!ae[E]&&He(W,E))){if(!(st&&He(Y,E))){if(!he||ae[E]){if(!(Rt(d)&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,d)||le.tagNameCheck instanceof Function&&le.tagNameCheck(d))&&(le.attributeNameCheck instanceof RegExp&&He(le.attributeNameCheck,E)||le.attributeNameCheck instanceof Function&&le.attributeNameCheck(E,d))||E==="is"&&le.allowCustomizedBuiltInElements&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,N)||le.tagNameCheck instanceof Function&&le.tagNameCheck(N))))return!1}else if(!er[E]){if(!He(ke,Un(N,C,""))){if(!((E==="src"||E==="xlink:href"||E==="href")&&d!=="script"&&mi(N,"data:")===0&&Kn[d])){if(!(Se&&!He(ue,Un(N,C,"")))){if(N)return!1}}}}}}return!0},We=$({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Rt=function(d){return!We[mr(d)]&&He(ne,d)},_t=function(d){L(H.beforeSanitizeAttributes,d,null);const{attributes:E}=d;if(!E||ir(d))return;const N={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:se,forceKeepAttr:void 0};let he=E.length;for(;he--;){const Me=E[he],{name:we,namespaceURI:Pe,value:Ye}=Me,ut=Ee(we),sr=Ye;let Ie=we==="value"?sr:mc(sr);if(N.attrName=ut,N.attrValue=Ie,N.keepAttr=!0,N.forceKeepAttr=void 0,L(H.uponSanitizeAttribute,d,N),Ie=N.attrValue,Lr&&(ut==="id"||ut==="name")&&mi(Ie,Mr)!==0&&(Pt(we,d),Ie=Mr+Ie),ye&&He(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Ie)){Pt(we,d);continue}if(ut==="attributename"&&vi(Ie,"href")){Pt(we,d);continue}if(N.forceKeepAttr)continue;if(!N.keepAttr){Pt(we,d);continue}if(!qt&&He(/\/>/i,Ie)){Pt(we,d);continue}$e&&cr([D,J,K],lr=>{Ie=Un(Ie,lr," ")});const Br=Ee(d.nodeName);if(!be(Br,ut,Ie)){Pt(we,d);continue}if(S&&typeof w=="object"&&typeof w.getAttributeType=="function"&&!Pe)switch(w.getAttributeType(Br,ut)){case"TrustedHTML":{Ie=S.createHTML(Ie);break}case"TrustedScriptURL":{Ie=S.createScriptURL(Ie);break}}if(Ie!==sr)try{Pe?d.setAttributeNS(Pe,we,Ie):d.setAttribute(we,Ie),ir(d)?Ze(d):gi(e.removed)}catch{Pt(we,d)}}L(H.afterSanitizeAttributes,d,null)},bt=function(d){let E=null;const N=Fr(d);for(L(H.beforeSanitizeShadowDOM,d,null);E=N.nextNode();)L(H.uponSanitizeShadowNode,E,null),fe(E),_t(E),E.content instanceof i&&bt(E.content);L(H.afterSanitizeShadowDOM,d,null)};return e.sanitize=function(G){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},E=null,N=null,he=null,Me=null;if(tr=!G,tr&&(G=""),typeof G!="string"&&!k(G)&&(G=wc(G),typeof G!="string"))throw Wr("dirty is not a string, aborting");if(!e.isSupported)return G;if(Ce||ar(d),e.removed=[],typeof G=="string"&&(jt=!1),jt){const Ye=G.nodeName;if(typeof Ye=="string"){const ut=Ee(Ye);if(!re[ut]||q[ut])throw Wr("root node is forbidden and cannot be sanitized in-place")}}else if(G instanceof c)E=zr(""),N=E.ownerDocument.importNode(G,!0),N.nodeType===dr.element&&N.nodeName==="BODY"||N.nodeName==="HTML"?E=N:E.appendChild(N);else{if(!ot&&!$e&&!me&&G.indexOf("<")===-1)return S&&Dn?S.createHTML(G):G;if(E=zr(G),!E)return ot?null:Dn?I:""}E&<&&Ze(E.firstChild);const we=Fr(jt?G:E);for(;he=we.nextNode();)fe(he),_t(he),he.content instanceof i&&bt(he.content);if(jt)return G;if(ot){if($e){E.normalize();let Ye=E.innerHTML;cr([D,J,K],ut=>{Ye=Un(Ye,ut," ")}),E.innerHTML=Ye}if(tn)for(Me=B.call(E.ownerDocument);E.firstChild;)Me.appendChild(E.firstChild);else Me=E;return(se.shadowroot||se.shadowrootmode)&&(Me=Q.call(a,Me,!0)),Me}let Pe=me?E.outerHTML:E.innerHTML;return me&&re["!doctype"]&&E.ownerDocument&&E.ownerDocument.doctype&&E.ownerDocument.doctype.name&&He(Ls,E.ownerDocument.doctype.name)&&(Pe=" +`+Pe),$e&&cr([D,J,K],Ye=>{Pe=Un(Pe,Ye," ")}),S&&Dn?S.createHTML(Pe):Pe},e.setConfig=function(){let G=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ar(G),Ce=!0},e.clearConfig=function(){Nt=null,Ce=!1},e.isValidAttribute=function(G,d,E){Nt||ar({});const N=Ee(G),he=Ee(d);return be(N,he,E)},e.addHook=function(G,d){typeof d=="function"&&ur(H[G],d)},e.removeHook=function(G,d){if(d!==void 0){const E=gc(H[G],d);return E===-1?void 0:vc(H[G],E,1)[0]}return gi(H[G])},e.removeHooks=function(G){H[G]=[]},e.removeAllHooks=function(){H=Si()},e}var Pc=Ms();function Za(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var In=Za();function Ns(t){In=t}var mn={exec:()=>null};function ie(t,e=""){let n=typeof t=="string"?t:t.source,a={replace:(r,i)=>{let s=typeof i=="string"?i:i.source;return s=s.replace(Ve.caret,"$1"),n=n.replace(r,s),a},getRegex:()=>new RegExp(n,e)};return a}var Uc=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),htmlBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}>`)},zc=/^(?:[ \t]*(?:\n|$))+/,Fc=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Bc=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Or=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Hc=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Ya=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Ps=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Us=ie(Ps).replace(/bull/g,Ya).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Gc=ie(Ps).replace(/bull/g,Ya).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Xa=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Wc=/^[^\n]+/,Qa=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,qc=ie(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Qa).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),jc=ie(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Ya).getRegex(),na="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Va=/|$))/,Zc=ie("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Va).replace("tag",na).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),zs=ie(Xa).replace("hr",Or).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",na).getRegex(),Yc=ie(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",zs).getRegex(),Ja={blockquote:Yc,code:Fc,def:qc,fences:Bc,heading:Hc,hr:Or,html:Zc,lheading:Us,list:jc,newline:zc,paragraph:zs,table:mn,text:Wc},Ei=ie("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Or).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",na).getRegex(),Xc={...Ja,lheading:Gc,table:Ei,paragraph:ie(Xa).replace("hr",Or).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Ei).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",na).getRegex()},Qc={...Ja,html:ie(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Va).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:mn,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ie(Xa).replace("hr",Or).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",Us).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Vc=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Jc=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Fs=/^( {2,}|\\)\n(?!\s*$)/,Kc=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Uc?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Hs=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,ru=ie(Hs,"u").replace(/punct/g,Jn).getRegex(),au=ie(Hs,"u").replace(/punct/g,Bs).getRegex(),Gs="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",iu=ie(Gs,"gu").replace(/notPunctSpace/g,Ka).replace(/punctSpace/g,ra).replace(/punct/g,Jn).getRegex(),su=ie(Gs,"gu").replace(/notPunctSpace/g,tu).replace(/punctSpace/g,eu).replace(/punct/g,Bs).getRegex(),lu=ie("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Ka).replace(/punctSpace/g,ra).replace(/punct/g,Jn).getRegex(),ou=ie(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,Jn).getRegex(),cu="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",uu=ie(cu,"gu").replace(/notPunctSpace/g,Ka).replace(/punctSpace/g,ra).replace(/punct/g,Jn).getRegex(),fu=ie(/\\(punct)/,"gu").replace(/punct/g,Jn).getRegex(),du=ie(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),hu=ie(Va).replace("(?:-->|$)","-->").getRegex(),pu=ie("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",hu).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Jr=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,gu=ie(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",Jr).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ws=ie(/^!?\[(label)\]\[(ref)\]/).replace("label",Jr).replace("ref",Qa).getRegex(),qs=ie(/^!?\[(ref)\](?:\[\])?/).replace("ref",Qa).getRegex(),vu=ie("reflink|nolink(?!\\()","g").replace("reflink",Ws).replace("nolink",qs).getRegex(),Ai=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,$a={_backpedal:mn,anyPunctuation:fu,autolink:du,blockSkip:nu,br:Fs,code:Jc,del:mn,delLDelim:mn,delRDelim:mn,emStrongLDelim:ru,emStrongRDelimAst:iu,emStrongRDelimUnd:lu,escape:Vc,link:gu,nolink:qs,punctuation:$c,reflink:Ws,reflinkSearch:vu,tag:pu,text:Kc,url:mn},mu={...$a,link:ie(/^!?\[(label)\]\((.*?)\)/).replace("label",Jr).getRegex(),reflink:ie(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Jr).getRegex()},Ra={...$a,emStrongRDelimAst:su,emStrongLDelim:au,delLDelim:ou,delRDelim:uu,url:ie(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Ai).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:ie(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Ri=t=>bu[t];function Ut(t,e){if(e){if(Ve.escapeTest.test(t))return t.replace(Ve.escapeReplace,Ri)}else if(Ve.escapeTestNoEncode.test(t))return t.replace(Ve.escapeReplaceNoEncode,Ri);return t}function Ci(t){try{t=encodeURI(t).replace(Ve.percentDecode,"%")}catch{return null}return t}function Ii(t,e){let n=t.replace(Ve.findPipe,(i,s,c)=>{let l=!1,u=s;for(;--u>=0&&c[u]==="\\";)l=!l;return l?"|":" |"}),a=n.split(Ve.splitPipe),r=0;if(a[0].trim()||a.shift(),a.length>0&&!a.at(-1)?.trim()&&a.pop(),e)if(a.length>e)a.splice(e);else for(;a.length0?-2:-1}function yu(t,e=0){let n=e,a="";for(let r of t)if(r===" "){let i=4-n%4;a+=" ".repeat(i),n+=i}else a+=r,n++;return a}function Di(t,e,n,a,r){let i=e.href,s=e.title||null,c=t[1].replace(r.other.outputLinkReplace,"$1");a.state.inLink=!0;let l={type:t[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:s,text:c,tokens:a.inlineTokens(c)};return a.state.inLink=!1,l}function wu(t,e,n){let a=t.match(n.other.indentCodeCompensation);if(a===null)return e;let r=a[1];return e.split(` +`).map(i=>{let s=i.match(n.other.beginningSpace);if(s===null)return i;let[c]=s;return c.length>=r.length?i.slice(r.length):i}).join(` +`)}var Kr=class{options;rules;lexer;constructor(t){this.options=t||In}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let n=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?n:pr(n,` +`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],a=wu(n,e[3]||"",this.rules);return{type:"code",raw:n,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:a}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim();if(this.rules.other.endingHash.test(n)){let a=pr(n,"#");(this.options.pedantic||!a||this.rules.other.endingSpaceChar.test(a))&&(n=a.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:pr(e[0],` +`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=pr(e[0],` +`).split(` +`),a="",r="",i=[];for(;n.length>0;){let s=!1,c=[],l;for(l=0;l1,r={type:"list",raw:"",ordered:a,start:a?+n.slice(0,-1):"",loose:!1,items:[]};n=a?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=a?n:"[*+-]");let i=this.rules.other.listItemRegex(n),s=!1;for(;t;){let l=!1,u="",f="";if(!(e=i.exec(t))||this.rules.block.hr.test(t))break;u=e[0],t=t.substring(u.length);let p=yu(e[2].split(` +`,1)[0],e[1].length),h=t.split(` +`,1)[0],w=!p.trim(),v=0;if(this.options.pedantic?(v=2,f=p.trimStart()):w?v=e[1].length+1:(v=p.search(this.rules.other.nonSpaceChar),v=v>4?1:v,f=p.slice(v),v+=e[1].length),w&&this.rules.other.blankLine.test(h)&&(u+=h+` +`,t=t.substring(h.length+1),l=!0),!l){let T=this.rules.other.nextBulletRegex(v),b=this.rules.other.hrRegex(v),y=this.rules.other.fencesBeginRegex(v),R=this.rules.other.headingBeginRegex(v),x=this.rules.other.htmlBeginRegex(v),S=this.rules.other.blockquoteBeginRegex(v);for(;t;){let I=t.split(` +`,1)[0],Z;if(h=I,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),Z=h):Z=h.replace(this.rules.other.tabCharGlobal," "),y.test(h)||R.test(h)||x.test(h)||S.test(h)||T.test(h)||b.test(h))break;if(Z.search(this.rules.other.nonSpaceChar)>=v||!h.trim())f+=` +`+Z.slice(v);else{if(w||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||y.test(p)||R.test(p)||b.test(p))break;f+=` +`+h}w=!h.trim(),u+=I+` +`,t=t.substring(I.length+1),p=Z.slice(v)}}r.loose||(s?r.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(s=!0)),r.items.push({type:"list_item",raw:u,task:!!this.options.gfm&&this.rules.other.listIsTask.test(f),loose:!1,text:f,tokens:[]}),r.raw+=u}let c=r.items.at(-1);if(c)c.raw=c.raw.trimEnd(),c.text=c.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let l of r.items){if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),l.task){if(l.text=l.text.replace(this.rules.other.listReplaceTask,""),l.tokens[0]?.type==="text"||l.tokens[0]?.type==="paragraph"){l.tokens[0].raw=l.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),l.tokens[0].text=l.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let f=this.lexer.inlineQueue.length-1;f>=0;f--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[f].src)){this.lexer.inlineQueue[f].src=this.lexer.inlineQueue[f].src.replace(this.rules.other.listReplaceTask,"");break}}let u=this.rules.other.listTaskCheckbox.exec(l.raw);if(u){let f={type:"checkbox",raw:u[0]+" ",checked:u[0]!=="[ ]"};l.checked=f.checked,r.loose?l.tokens[0]&&["paragraph","text"].includes(l.tokens[0].type)&&"tokens"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=f.raw+l.tokens[0].raw,l.tokens[0].text=f.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(f)):l.tokens.unshift({type:"paragraph",raw:f.raw,text:f.raw,tokens:[f]}):l.tokens.unshift(f)}}if(!r.loose){let u=l.tokens.filter(p=>p.type==="space"),f=u.length>0&&u.some(p=>this.rules.other.anyLine.test(p.raw));r.loose=f}}if(r.loose)for(let l of r.items){l.loose=!0;for(let u of l.tokens)u.type==="text"&&(u.type="paragraph")}return r}}html(t){let e=this.rules.block.html.exec(t);if(e)return{type:"html",block:!0,raw:e[0],pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:e[0]}}def(t){let e=this.rules.block.def.exec(t);if(e){let n=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),a=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:n,raw:e[0],href:a,title:r}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let n=Ii(e[1]),a=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(` +`):[],i={type:"table",raw:e[0],header:[],align:[],rows:[]};if(n.length===a.length){for(let s of a)this.rules.other.tableAlignRight.test(s)?i.align.push("right"):this.rules.other.tableAlignCenter.test(s)?i.align.push("center"):this.rules.other.tableAlignLeft.test(s)?i.align.push("left"):i.align.push(null);for(let s=0;s({text:c,tokens:this.lexer.inline(c),header:!1,align:i.align[l]})));return i}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e){let n=e[1].trim();return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let n=e[1].charAt(e[1].length-1)===` +`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:n,tokens:this.lexer.inline(n)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let n=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=pr(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{let i=ku(e[2],"()");if(i===-2)return;if(i>-1){let s=(e[0].indexOf("!")===0?5:4)+e[1].length+i;e[2]=e[2].substring(0,i),e[0]=e[0].substring(0,s).trim(),e[3]=""}}let a=e[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(a);i&&(a=i[1],r=i[3])}else r=e[3]?e[3].slice(1,-1):"";return a=a.trim(),this.rules.other.startAngleBracket.test(a)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?a=a.slice(1):a=a.slice(1,-1)),Di(e,{href:a&&a.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let a=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=e[a.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return Di(n,r,n[0],this.lexer,this.rules)}}emStrong(t,e,n=""){let a=this.rules.inline.emStrongLDelim.exec(t);if(!(!a||!a[1]&&!a[2]&&!a[3]&&!a[4]||a[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(a[1]||a[3])||!n||this.rules.inline.punctuation.exec(n))){let r=[...a[0]].length-1,i,s,c=r,l=0,u=a[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,e=e.slice(-1*t.length+r);(a=u.exec(e))!==null;){if(i=a[1]||a[2]||a[3]||a[4]||a[5]||a[6],!i)continue;if(s=[...i].length,a[3]||a[4]){c+=s;continue}else if((a[5]||a[6])&&r%3&&!((r+s)%3)){l+=s;continue}if(c-=s,c>0)continue;s=Math.min(s,s+c+l);let f=[...a[0]][0].length,p=t.slice(0,r+a.index+f+s);if(Math.min(r,s)%2){let w=p.slice(1,-1);return{type:"em",raw:p,text:w,tokens:this.lexer.inlineTokens(w)}}let h=p.slice(2,-2);return{type:"strong",raw:p,text:h,tokens:this.lexer.inlineTokens(h)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let n=e[2].replace(this.rules.other.newLineCharGlobal," "),a=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return a&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:e[0],text:n}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,n=""){let a=this.rules.inline.delLDelim.exec(t);if(a&&(!a[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...a[0]].length-1,i,s,c=r,l=this.rules.inline.delRDelim;for(l.lastIndex=0,e=e.slice(-1*t.length+r);(a=l.exec(e))!==null;){if(i=a[1]||a[2]||a[3]||a[4]||a[5]||a[6],!i||(s=[...i].length,s!==r))continue;if(a[3]||a[4]){c+=s;continue}if(c-=s,c>0)continue;s=Math.min(s,s+c);let u=[...a[0]][0].length,f=t.slice(0,r+a.index+u+s),p=f.slice(r,-r);return{type:"del",raw:f,text:p,tokens:this.lexer.inlineTokens(p)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let n,a;return e[2]==="@"?(n=e[1],a="mailto:"+n):(n=e[1],a=n),{type:"link",raw:e[0],text:n,href:a,tokens:[{type:"text",raw:n,text:n}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,a;if(e[2]==="@")n=e[0],a="mailto:"+n;else{let r;do r=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(r!==e[0]);n=e[0],e[1]==="www."?a="http://"+e[0]:a=e[0]}return{type:"link",raw:e[0],text:n,href:a,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let n=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:n}}}},Ct=class Ca{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||In,this.options.tokenizer=this.options.tokenizer||new Kr,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:Ve,block:jr.normal,inline:hr.normal};this.options.pedantic?(n.block=jr.pedantic,n.inline=hr.pedantic):this.options.gfm&&(n.block=jr.gfm,this.options.breaks?n.inline=hr.breaks:n.inline=hr.gfm),this.tokenizer.rules=n}static get rules(){return{block:jr,inline:hr}}static lex(e,n){return new Ca(n).lex(e)}static lexInline(e,n){return new Ca(n).inlineTokens(e)}lex(e){e=e.replace(Ve.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let n=0;n(r=s.call({lexer:this},e,n))?(e=e.substring(r.raw.length),n.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=n.at(-1);r.raw.length===1&&s!==void 0?s.raw+=` +`:n.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=n.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+r.raw,s.text+=` +`+r.text,this.inlineQueue.at(-1).src=s.text):n.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=n.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+r.raw,s.text+=` +`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},n.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),n.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,c=e.slice(1),l;this.options.extensions.startBlock.forEach(u=>{l=u.call({lexer:this},c),typeof l=="number"&&l>=0&&(s=Math.min(s,l))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=n.at(-1);a&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+r.raw,s.text+=` +`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):n.push(r),a=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=n.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+r.raw,s.text+=` +`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):n.push(r);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){this.tokenizer.lexer=this;let a=e,r=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(a))!==null;)l.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(a))!==null;)a=a.slice(0,r.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(a))!==null;)i=r[2]?r[2].length:0,a=a.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);a=this.options.hooks?.emStrongMask?.call({lexer:this},a)??a;let s=!1,c="";for(;e;){s||(c=""),s=!1;let l;if(this.options.extensions?.inline?.some(f=>(l=f.call({lexer:this},e,n))?(e=e.substring(l.raw.length),n.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let f=n.at(-1);l.type==="text"&&f?.type==="text"?(f.raw+=l.raw,f.text+=l.text):n.push(l);continue}if(l=this.tokenizer.emStrong(e,a,c)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.del(e,a,c)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),n.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),n.push(l);continue}let u=e;if(this.options.extensions?.startInline){let f=1/0,p=e.slice(1),h;this.options.extensions.startInline.forEach(w=>{h=w.call({lexer:this},p),typeof h=="number"&&h>=0&&(f=Math.min(f,h))}),f<1/0&&f>=0&&(u=e.substring(0,f+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(c=l.raw.slice(-1)),s=!0;let f=n.at(-1);f?.type==="text"?(f.raw+=l.raw,f.text+=l.text):n.push(l);continue}if(e){let f="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(f);break}else throw new Error(f)}}return n}},$r=class{options;parser;constructor(t){this.options=t||In}space(t){return""}code({text:t,lang:e,escaped:n}){let a=(e||"").match(Ve.notSpaceStart)?.[0],r=t.replace(Ve.endingNewline,"")+` +`;return a?'
    '+(n?r:Ut(r,!0))+`
    +`:"
    "+(n?r:Ut(r,!0))+`
    +`}blockquote({tokens:t}){return`
    +${this.parser.parse(t)}
    +`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} +`}hr(t){return`
    +`}list(t){let e=t.ordered,n=t.start,a="";for(let s=0;s +`+a+" +`}listitem(t){return`
  • ${this.parser.parse(t.tokens)}
  • +`}checkbox({checked:t}){return" '}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    +`}table(t){let e="",n="";for(let r=0;r${a}`),` + +`+e+` +`+a+`
    +`}tablerow({text:t}){return` +${t} +`}tablecell(t){let e=this.parser.parseInline(t.tokens),n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+` +`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${Ut(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:n}){let a=this.parser.parseInline(n),r=Ci(t);if(r===null)return a;t=r;let i='
    ",i}image({href:t,title:e,text:n,tokens:a}){a&&(n=this.parser.parseInline(a,this.parser.textRenderer));let r=Ci(t);if(r===null)return Ut(n);t=r;let i=`${Ut(n)}{let s=r[i].flat(1/0);n=n.concat(this.walkTokens(s,e))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,e)))}}return n}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(n=>{let a={...n};if(a.async=this.defaults.async||a.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=e.renderers[r.name];i?e.renderers[r.name]=function(...s){let c=r.renderer.apply(this,s);return c===!1&&(c=i.apply(this,s)),c}:e.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=e[r.level];i?i.unshift(r.tokenizer):e[r.level]=[r.tokenizer],r.start&&(r.level==="block"?e.startBlock?e.startBlock.push(r.start):e.startBlock=[r.start]:r.level==="inline"&&(e.startInline?e.startInline.push(r.start):e.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(e.childTokens[r.name]=r.childTokens)}),a.extensions=e),n.renderer){let r=this.defaults.renderer||new $r(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let s=i,c=n.renderer[s],l=r[s];r[s]=(...u)=>{let f=c.apply(r,u);return f===!1&&(f=l.apply(r,u)),f||""}}a.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new Kr(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let s=i,c=n.tokenizer[s],l=r[s];r[s]=(...u)=>{let f=c.apply(r,u);return f===!1&&(f=l.apply(r,u)),f}}a.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new _r;for(let i in n.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let s=i,c=n.hooks[s],l=r[s];_r.passThroughHooks.has(i)?r[s]=u=>{if(this.defaults.async&&_r.passThroughHooksRespectAsync.has(i))return(async()=>{let p=await c.call(r,u);return l.call(r,p)})();let f=c.call(r,u);return l.call(r,f)}:r[s]=(...u)=>{if(this.defaults.async)return(async()=>{let p=await c.apply(r,u);return p===!1&&(p=await l.apply(r,u)),p})();let f=c.apply(r,u);return f===!1&&(f=l.apply(r,u)),f}}a.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;a.walkTokens=function(s){let c=[];return c.push(i.call(this,s)),r&&(c=c.concat(r.call(this,s))),c}}this.defaults={...this.defaults,...a}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return Ct.lex(t,e??this.defaults)}parser(t,e){return It.parse(t,e??this.defaults)}parseMarkdown(t){return(e,n)=>{let a={...n},r={...this.defaults,...a},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&a.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=t),r.async)return(async()=>{let s=r.hooks?await r.hooks.preprocess(e):e,c=await(r.hooks?await r.hooks.provideLexer(t):t?Ct.lex:Ct.lexInline)(s,r),l=r.hooks?await r.hooks.processAllTokens(c):c;r.walkTokens&&await Promise.all(this.walkTokens(l,r.walkTokens));let u=await(r.hooks?await r.hooks.provideParser(t):t?It.parse:It.parseInline)(l,r);return r.hooks?await r.hooks.postprocess(u):u})().catch(i);try{r.hooks&&(e=r.hooks.preprocess(e));let s=(r.hooks?r.hooks.provideLexer(t):t?Ct.lex:Ct.lexInline)(e,r);r.hooks&&(s=r.hooks.processAllTokens(s)),r.walkTokens&&this.walkTokens(s,r.walkTokens);let c=(r.hooks?r.hooks.provideParser(t):t?It.parse:It.parseInline)(s,r);return r.hooks&&(c=r.hooks.postprocess(c)),c}catch(s){return i(s)}}}onError(t,e){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,t){let a="

    An error occurred:

    "+Ut(n.message+"",!0)+"
    ";return e?Promise.resolve(a):a}if(e)return Promise.reject(n);throw n}}},An=new Tu;function ge(t,e){return An.parse(t,e)}ge.options=ge.setOptions=function(t){return An.setOptions(t),ge.defaults=An.defaults,Ns(ge.defaults),ge};ge.getDefaults=Za;ge.defaults=In;ge.use=function(...t){return An.use(...t),ge.defaults=An.defaults,Ns(ge.defaults),ge};ge.walkTokens=function(t,e){return An.walkTokens(t,e)};ge.parseInline=An.parseInline;ge.Parser=It;ge.parser=It.parse;ge.Renderer=$r;ge.TextRenderer=ei;ge.Lexer=Ct;ge.lexer=Ct.lex;ge.Tokenizer=Kr;ge.Hooks=_r;ge.parse=ge;ge.options;ge.setOptions;ge.use;ge.walkTokens;ge.parseInline;It.parse;Ct.lex;function Da(t){return Pc.sanitize(ge.parse(t,{async:!1,breaks:!0,gfm:!0}))}function Sr(t){return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit"}).format(new Date(t))}var xu=O('
    '),Su=O(''),Eu=O(' ',1),Au=O('
    ',2),Ru=O(' ');function Oa(t,e){Ae(e,!0);let n=Be(e,"onOpenImage",3,()=>{}),a=ht(null),r=ht(!1),i=ht(""),s=xt(()=>e.upload.content_type?.startsWith("image/")??!1),c=xt(()=>e.upload.content_type?.startsWith("video/")??!1);function l(){m(r,!0)}function u(){if(!o(a)||!isFinite(o(a).duration))return;const y=Math.floor(o(a).duration),R=Math.floor(y/60),x=y%60;m(i,`${R}:${x.toString().padStart(2,"0")}`)}function f(){o(a)&&(m(r,!0),o(a).play())}function p(y){return y<1024?`${y} B`:y<1024*1024?`${Math.round(y/1024)} KB`:`${(y/(1024*1024)).toFixed(1)} MB`}var h=Dr(),w=Ht(h);{var v=y=>{var R=xu(),x=g(R),S=g(x),I=_(x,2),Z=g(I),z=g(Z),B=_(Z,2);M(()=>{F(x,"aria-label",`Open image ${e.upload.filename}`),F(S,"src",e.url),F(S,"alt",e.upload.filename),P(z,e.upload.filename),F(B,"href",e.url),F(B,"download",e.upload.filename),F(B,"aria-label",`Download ${e.upload.filename}`)}),U("click",x,()=>n()(e.url,e.upload.filename)),U("click",B,V=>V.stopPropagation()),A(y,R)},T=y=>{var R=Au();let x;var S=g(R),I=g(S);ja(S,D=>m(a,D),()=>o(a));var Z=_(S,2);{var z=D=>{var J=Eu(),K=Ht(J),W=_(K,2);{var Y=ue=>{var C=Su(),ne=g(C);M(()=>P(ne,o(i))),A(ue,C)};j(W,ue=>{o(i)&&ue(Y)})}M(()=>F(K,"aria-label",`Play ${e.upload.filename}`)),U("click",K,f),A(D,J)};j(Z,D=>{o(r)||D(z)})}var B=_(Z,2),V=g(B),Q=g(V),H=_(V,2);M(()=>{x=it(R,1,"media-tile media-tile--video",null,x,{"is-started":o(r)}),S.controls=o(r),F(S,"aria-label",e.upload.filename),F(I,"src",e.url),F(I,"type",e.upload.content_type),P(Q,e.upload.filename),F(H,"href",e.url),F(H,"download",e.upload.filename),F(H,"aria-label",`Download ${e.upload.filename}`)}),Gt("play",S,l),Gt("loadedmetadata",S,u),U("click",H,D=>D.stopPropagation()),A(y,R)},b=y=>{var R=Ru(),x=_(g(R),2),S=g(x),I=g(S),Z=_(S,2),z=g(Z);M(B=>{F(R,"href",e.url),P(I,e.upload.filename),P(z,B)},[()=>p(e.upload.byte_size)]),A(y,R)};j(w,y=>{o(s)?y(v):o(c)?y(T,1):y(b,-1)})}A(t,h),Re()}Le(["click"]);var Cu=O(' '),Iu=O(' '),Du=O('');function js(t,e){Ae(e,!0);var n=Dr(),a=Ht(n);{var r=i=>{var s=Du();let c;var l=_(g(s),2),u=g(l),f=g(u),p=_(u,2);{var h=v=>{var T=Cu(),b=g(T);M(y=>P(b,y),[()=>Sa(e.message.quoted_body_snapshot)]),A(v,T)},w=v=>{var T=Iu(),b=g(T);M(y=>P(b,`[original deleted] ${y??""}`),[()=>Sa(e.message.quoted_body_snapshot)]),A(v,T)};j(p,v=>{e.message.quoted_message_id?v(h):v(w,-1)})}M((v,T)=>{c=it(s,1,"quote-block",null,c,{dangling:!e.message.quoted_message_id}),s.disabled=!e.message.quoted_message_id,F(s,"aria-label",v),P(f,T)},[()=>e.message.quoted_message_id?`Jump to quoted message from ${hi(e.message)}`:"Original message was deleted",()=>hi(e.message)]),U("click",s,()=>e.onJump(e.message)),A(i,s)};j(a,i=>{(e.message.quoted_message_id||e.message.quoted_body_snapshot)&&i(r)})}A(t,n),Re()}Le(["click"]);var Ou=O('
    '),Lu=O('
    ');function Mu(t,e){Ae(e,!0);var n=Lu();let a;var r=g(n),i=g(r),s=_(r,2),c=g(s);js(c,{get message(){return e.message},get onJump(){return e.onJumpToQuote}});var l=_(c,2);xa(l,()=>Da(e.message.body),!0);var u=_(l,2);{var f=v=>{var T=Ou();gt(T,21,()=>e.message.attachments,b=>b.id,(b,y)=>{{let R=xt(()=>Vr(o(y)));Oa(b,{get upload(){return o(y)},get url(){return o(R)},get onOpenImage(){return e.onOpenImage}})}}),A(v,T)};j(u,v=>{e.message.attachments?.length&&v(f)})}var p=_(s,2),h=g(p),w=_(h,2);M((v,T)=>{a=it(n,1,"message-row",null,a,{selected:e.selected}),F(n,"data-message-id",e.message.id),P(i,v),F(w,"data-tooltip",T)},[()=>e.index===0?"":Sr(e.message.created_at),()=>tc(e.message,e.selectedThreadID)]),U("click",h,()=>e.onReply(e.message,e.replyContext)),U("click",w,()=>e.onOpenThread(e.message)),A(t,n),Re()}Le(["click"]);var Nu=O(''),Pu=O(" "),Uu=O('
    ');function zu(t,e){Ae(e,!0);var n=Uu(),a=g(n),r=g(a);{var i=b=>{var y=Nu();M(()=>F(y,"src",e.group.authorAvatarURL)),A(b,y)},s=b=>{var y=Qe();M(R=>P(y,R),[()=>$t(e.group.authorName)]),A(b,y)};j(r,b=>{e.group.authorAvatarURL?b(i):b(s,-1)})}var c=_(a,2),l=g(c),u=g(l),f=g(u),p=_(u,2);{var h=b=>{var y=Pu(),R=g(y);M(x=>P(R,x),[()=>fn(e.group.authorHandle)]),A(b,y)};j(p,b=>{e.group.authorHandle&&b(h)})}var w=_(p,2),v=g(w),T=_(l,2);gt(T,19,()=>e.group.messages,b=>b.id,(b,y,R)=>{{let x=xt(()=>e.selectedThreadID===o(y).id);Mu(b,{get message(){return o(y)},get index(){return o(R)},get selected(){return o(x)},get replyContext(){return e.replyContext},get selectedThreadID(){return e.selectedThreadID},get onReply(){return e.onReply},get onOpenThread(){return e.onOpenThread},get onJumpToQuote(){return e.onJumpToQuote},get onOpenImage(){return e.onOpenImage}})}}),M((b,y)=>{Kt(a,`--hue: ${b??""}deg`),F(a,"aria-label",`View profile for ${e.group.authorName}`),P(f,e.group.authorName),P(v,y)},[()=>en(e.group.authorID),()=>Sr(e.group.timestamp)]),U("click",a,()=>e.onOpenProfile(e.group.messages[0]?.author)),U("click",u,()=>e.onOpenProfile(e.group.messages[0]?.author)),A(t,n),Re()}Le(["click"]);var Fu=O('
    Send a message in Markdown — code fences, lists, links all work. Threads open from any message.
    '),Bu=O('
    '),Hu=O(" ",1),Gu=O('
    ');function Wu(t,e){Ae(e,!0);let n=ht(null),a=xt(()=>rc(e.messages)),r=xt(()=>e.selectedDirect?"dm":"channel");wr(()=>(e.onListRef(o(n)),()=>e.onListRef(null)));var i=Gu(),s=g(i);{var c=u=>{var f=Fu(),p=g(f),h=g(p);{var w=S=>{var I=Qe("@");A(S,I)},v=S=>{var I=Qe("#");A(S,I)};j(h,S=>{e.selectedDirect?S(w):S(v,-1)})}var T=_(p,2),b=g(T);{var y=S=>{var I=Qe();M(Z=>P(I,`This is the start of your conversation with ${Z??""}.`),[()=>xr(e.selectedDirect,e.currentUserID)]),A(S,I)},R=S=>{var I=Qe();M(()=>P(I,`Welcome to #${e.selectedChannel.name??""}!`)),A(S,I)},x=S=>{var I=Qe("Pick a channel to get started.");A(S,I)};j(b,S=>{e.selectedDirect?S(y):e.selectedChannel?S(R,1):S(x,-1)})}A(u,f)};j(s,u=>{e.messages.length===0&&u(c)})}var l=_(s,2);gt(l,17,()=>o(a),u=>u.key,(u,f)=>{var p=Hu(),h=Ht(p);{var w=T=>{var b=Bu(),y=g(b),R=g(y);M(()=>P(R,o(f).dayLabel)),A(T,b)};j(h,T=>{o(f).dayLabel&&T(w)})}var v=_(h,2);zu(v,{get group(){return o(f)},get selectedThreadID(){return e.selectedThreadID},get replyContext(){return o(r)},get onOpenProfile(){return e.onOpenProfile},get onReply(){return e.onReply},get onOpenThread(){return e.onOpenThread},get onJumpToQuote(){return e.onJumpToQuote},get onOpenImage(){return e.onOpenImage}}),A(u,p)}),ja(i,u=>m(n,u),()=>o(n)),U("pointerdown",i,function(...u){e.onActivateMessageComposer?.apply(this,u)}),U("pointerup",i,function(...u){e.onInlineImagePointerUp?.apply(this,u)}),A(t,i),Re()}Le(["pointerdown","pointerup"]);var qu=O('
    '),ju=O('
    '),Zu=O('');function Yu(t,e){Ae(e,!0);var n=Zu(),a=_(g(n),4),r=g(a);gt(r,17,()=>e.workspaces,l=>l.id,(l,u)=>{var f=qu();let p;var h=g(f),w=g(h),v=g(w);M(T=>{p=it(f,1,"guild-wrap",null,p,{active:o(u).id===e.selectedWorkspaceID}),F(h,"title",o(u).name),P(v,T)},[()=>No(o(u).name)]),U("click",h,()=>e.onSelectWorkspace(o(u).id)),A(l,f)});var i=_(r,2),s=_(a,2);{var c=l=>{var u=ju(),f=g(u);M(()=>Vt(f,e.workspaceName)),Gt("submit",u,p=>{p.preventDefault(),e.onCreateWorkspace()}),U("input",f,p=>e.onWorkspaceName(p.currentTarget.value)),A(l,u)};j(s,l=>{e.showWorkspaceCreate&&l(c)})}U("click",i,function(...l){e.onToggleWorkspaceCreate?.apply(this,l)}),A(t,n),Re()}Le(["click","input"]);var Xu=O(''),Qu=O(''),Vu=O('');function Ju(t,e){Ae(e,!0);var n=Vu(),a=_(g(n),2),r=g(a);gt(r,17,()=>e.channels,u=>u.id,(u,f)=>{var p=Xu();let h;var w=_(g(p),2),v=g(w);M(()=>{h=it(p,1,"nav-item channel",null,h,{active:o(f).id===e.selectedChannelID&&!e.selectedDirectID}),P(v,o(f).name)}),U("click",p,()=>e.onSelectChannel(o(f).id)),A(u,p)});var i=_(r,2);{var s=u=>{var f=Qu();A(u,f)};j(i,u=>{e.channels.length===0&&u(s)})}var c=_(a,2),l=g(c);M(()=>Vt(l,e.channelName)),Gt("submit",c,u=>{u.preventDefault(),e.onCreateChannel()}),U("input",l,u=>e.onChannelName(u.currentTarget.value)),A(t,n),Re()}Le(["click","input"]);var Ku=O(''),$u=O(''),ef=O(''),tf=O('');function nf(t,e){Ae(e,!0);var n=tf(),a=_(g(n),2),r=g(a);gt(r,17,()=>e.conversations,u=>u.id,(u,f)=>{const p=xt(()=>Po(o(f),e.currentUserID));var h=$u();let w;var v=g(h),T=g(v);{var b=S=>{var I=Ku();M(()=>F(I,"src",o(p).avatar_url)),A(S,I)},y=S=>{var I=Qe();M(Z=>P(I,Z),[()=>$t(o(p)?.display_name)]),A(S,I)};j(T,S=>{o(p)?.avatar_url?S(b):S(y,-1)})}var R=_(v,2),x=g(R);M((S,I)=>{w=it(h,1,"nav-item dm",null,w,{active:o(f).id===e.selectedDirectID}),Kt(v,`--hue: ${S??""}deg`),P(x,I)},[()=>en(o(p)?.id||o(f).id),()=>xr(o(f),e.currentUserID)]),U("click",h,()=>e.onSelectDirect(o(f).id)),A(u,h)});var i=_(r,2);{var s=u=>{var f=ef();A(u,f)};j(i,u=>{e.conversations.length===0&&u(s)})}var c=_(a,2),l=g(c);M(()=>Vt(l,e.directMemberID)),Gt("submit",c,u=>{u.preventDefault(),e.onCreateDirect()}),U("input",l,u=>e.onDirectMemberID(u.currentTarget.value)),A(t,n),Re()}Le(["click","input"]);var rf=O(''),af=O(''),sf=O(''),lf=O(''),of=O(''),cf=O('');function uf(t,e){Ae(e,!0);var n=cf(),a=g(n),r=g(a),i=g(r),s=g(i),c=_(i,2);let l;var u=g(c),f=_(r,2),p=g(f),h=g(p),w=_(a,2),v=g(w);Ju(v,{get channels(){return e.channels},get selectedChannelID(){return e.selectedChannelID},get selectedDirectID(){return e.selectedDirectID},get channelName(){return e.channelName},get onSelectChannel(){return e.onSelectChannel},get onChannelName(){return e.onChannelName},get onCreateChannel(){return e.onCreateChannel}});var T=_(v,2);{let z=xt(()=>e.currentUser?.id);nf(T,{get conversations(){return e.directConversations},get currentUserID(){return o(z)},get selectedDirectID(){return e.selectedDirectID},get directMemberID(){return e.directMemberID},get onSelectDirect(){return e.onSelectDirect},get onDirectMemberID(){return e.onDirectMemberID},get onCreateDirect(){return e.onCreateDirect}})}var b=_(T,2),y=_(g(b),2),R=g(y);gt(R,17,()=>e.recentPeople,z=>z.id,(z,B)=>{const V=xt(()=>zo(e.directConversations,o(B).id));var Q=af();let H;var D=g(Q),J=g(D);{var K=C=>{var ne=rf();M(()=>F(ne,"src",o(B).avatar_url)),A(C,ne)},W=C=>{var ne=Qe();M(ke=>P(ne,ke),[()=>$t(o(B).display_name)]),A(C,ne)};j(J,C=>{o(B).avatar_url?C(K):C(W,-1)})}var Y=_(D,2),ue=g(Y);M(C=>{H=it(Q,1,"nav-item dm",null,H,{active:o(V)?.id===e.selectedDirectID||e.selectedProfile?.id===o(B).id}),Kt(D,`--hue: ${C??""}deg`),P(ue,o(B).display_name)},[()=>en(o(B).id)]),U("click",Q,()=>{o(V)?e.onSelectDirect(o(V).id):e.onOpenProfile(o(B))}),A(z,Q)});var x=_(R,2);{var S=z=>{var B=sf();A(z,B)};j(x,z=>{e.recentPeople.length===0&&z(S)})}var I=_(w,2);{var Z=z=>{var B=of(),V=g(B),Q=g(V);{var H=C=>{var ne=lf();M(()=>F(ne,"src",e.currentUser.avatar_url)),A(C,ne)},D=C=>{var ne=Qe();M(ke=>P(ne,ke),[()=>$t(e.currentUser.display_name)]),A(C,ne)};j(Q,C=>{e.currentUser.avatar_url?C(H):C(D,-1)})}var J=_(V,2),K=g(J),W=g(K),Y=_(K,2),ue=g(Y);M((C,ne,ke)=>{F(B,"aria-label",C),Kt(V,`--hue: ${ne??""}deg`),P(W,e.currentUser.display_name),P(ue,ke)},[()=>`Account settings for ${e.currentUser.display_name} ${fn(e.currentUser.handle)}`,()=>en(e.currentUser.id),()=>e.currentUser.handle?fn(e.currentUser.handle):e.connected?"Active":"Reconnecting…"]),U("click",B,function(...C){e.onOpenSettings?.apply(this,C)}),U("contextmenu",B,C=>{C.preventDefault(),e.onOpenSettings()}),A(z,B)};j(I,z=>{e.currentUser&&z(Z)})}M(()=>{P(s,e.workspaceName||"Pick a workspace"),l=it(c,1,"presence",null,l,{online:e.connected}),P(u,e.connected?"Connected":e.status),F(f,"aria-label",e.sidebarCollapsed?"Expand sidebar":"Collapse sidebar"),F(f,"title",e.sidebarCollapsed?"Expand sidebar":"Collapse sidebar"),F(h,"d",e.sidebarCollapsed?"m9 6 6 6-6 6":"m15 6-6 6 6 6")}),U("click",f,function(...z){e.onToggleCollapse?.apply(this,z)}),A(t,n),Re()}Le(["click","contextmenu"]);var ff=O(''),df=O(" "),hf=O(''),pf=O(''),gf=O(''),vf=O('

    Profile

    Active
    Contact information
    Handle
    User ID
    About

    ',1);function mf(t,e){Ae(e,!0);var n=vf(),a=Ht(n),r=g(a),i=_(g(r),2),s=g(i),c=_(r,2),l=_(a,2),u=g(l),f=g(u),p=g(f);{var h=q=>{var ae=ff();M(()=>F(ae,"src",e.profile.avatar_url)),A(q,ae)},w=q=>{var ae=Qe();M(ve=>P(ae,ve),[()=>$t(e.profile.display_name)]),A(q,ae)};j(p,q=>{e.profile.avatar_url?q(h):q(w,-1)})}var v=_(u,2),T=g(v),b=g(T),y=g(b),R=g(y),x=_(y,2);{var S=q=>{var ae=df(),ve=g(ae);M(st=>P(ve,st),[()=>fn(e.profile.handle)]),A(q,ae)};j(x,q=>{e.profile.handle&&q(S)})}var I=_(b,2);{var Z=q=>{var ae=hf();U("click",ae,function(...ve){e.onEdit?.apply(this,ve)}),A(q,ae)};j(I,q=>{e.currentUser?.id===e.profile.id&&q(Z)})}var z=_(T,4),B=g(z);{var V=q=>{var ae=pf();U("click",ae,()=>e.onMessage(e.profile.id)),A(q,ae)};j(B,q=>{e.currentUser?.id!==e.profile.id&&q(V)})}var Q=_(B,2),H=_(z,2),D=g(H),J=_(g(D),2);{var K=q=>{var ae=gf();U("click",ae,function(...ve){e.onEdit?.apply(this,ve)}),A(q,ae)};j(J,q=>{e.currentUser?.id===e.profile.id&&q(K)})}var W=_(D,2),Y=_(g(W),2),ue=_(g(Y),2),C=g(ue),ne=_(W,2),ke=_(g(ne),2),re=_(g(ke),2),vt=g(re),se=_(H,2),je=_(g(se),2),le=g(je);M((q,ae)=>{P(s,e.profile.display_name),Kt(u,`--hue: ${q??""}deg`),P(R,e.profile.display_name),P(C,ae),P(vt,e.profile.id),P(le,`Member of ${(e.workspaceName||"this workspace")??""}. Click Message to keep the conversation in your sidebar.`)},[()=>en(e.profile.id),()=>e.profile.handle?fn(e.profile.handle):"No handle set"]),U("click",c,function(...q){e.onClose?.apply(this,q)}),U("click",Q,function(...q){e.onSetStatus?.apply(this,q)}),A(t,n),Re()}Le(["click"]);var _f=O(''),bf=O("

    "),kf=O('');function yf(t,e){Ae(e,!0);var n=kf(),a=g(n),r=_(a,2),i=g(r),s=_(g(i),2),c=_(i,2),l=g(c),u=g(l),f=g(u);{var p=D=>{var J=_f();M(()=>F(J,"src",e.avatarURL)),A(D,J)},h=D=>{var J=Qe();M(K=>P(J,K),[()=>$t(e.displayName)]),A(D,J)};j(f,D=>{e.avatarURL?D(p):D(h,-1)})}var w=_(u,2),v=g(w),T=g(v),b=_(v,2),y=g(b),R=_(l,2),x=_(g(R),2),S=_(R,2),I=_(g(S),2),Z=_(S,2),z=_(g(Z),2),B=_(Z,2);{var V=D=>{var J=bf();let K;var W=g(J);M(()=>{K=it(J,1,"profile-status",null,K,{error:e.statusError}),P(W,e.status)}),A(D,J)};j(B,D=>{e.status&&D(V)})}var Q=_(B,2),H=g(Q);M((D,J)=>{Kt(u,`--hue: ${D??""}deg`),P(T,e.displayName||e.user.display_name),P(y,J),Vt(x,e.displayName),Vt(I,e.handle),Vt(z,e.avatarURL)},[()=>en(e.user.id),()=>e.handle||fn(e.user.handle)||"No handle set"]),U("click",a,function(...D){e.onClose?.apply(this,D)}),U("click",s,function(...D){e.onClose?.apply(this,D)}),Gt("submit",c,D=>{D.preventDefault(),e.onSave()}),U("input",x,D=>e.onDisplayName(D.currentTarget.value)),U("input",I,D=>e.onHandle(D.currentTarget.value)),U("input",z,D=>e.onAvatarURL(D.currentTarget.value)),U("click",H,function(...D){e.onClose?.apply(this,D)}),A(t,n),Re()}Le(["click","input"]);var wf=O(''),Tf=O(''),xf=O('
    ');function Sf(t,e){Ae(e,!0);var n=Dr(),a=Ht(n);{var r=i=>{var s=xf(),c=g(s),l=g(c),u=g(l),f=_(l,2),p=_(c,2);gt(p,17,()=>e.results,h=>h.message.id,(h,w)=>{var v=Tf(),T=g(v),b=g(T);{var y=H=>{var D=wf();M(()=>F(D,"src",o(w).message.author.avatar_url)),A(H,D)},R=H=>{var D=Qe();M(J=>P(D,J),[()=>$t(o(w).message.author?.display_name)]),A(H,D)};j(b,H=>{o(w).message.author?.avatar_url?H(y):H(R,-1)})}var x=_(T,2),S=g(x),I=g(S),Z=g(I),z=_(I,2),B=g(z),V=_(S,2),Q=g(V);M((H,D)=>{Kt(T,`--hue: ${H??""}deg`),P(Z,o(w).message.author?.display_name||"Local User"),P(B,D),P(Q,o(w).message.body)},[()=>en(o(w).message.author?.id||o(w).message.author_id||"x"),()=>Sr(o(w).message.created_at)]),U("click",v,()=>e.onOpenResult(o(w))),A(h,v)}),M(()=>P(u,`${e.results.length??""} ${e.results.length===1?"result":"results"}`)),U("click",f,function(...h){e.onClose?.apply(this,h)}),A(i,s)};j(a,i=>{e.results.length>0&&i(r)})}A(t,n),Re()}Le(["click"]);var Ef=O(''),Af=O(" "),Rf=O('
    '),Cf=O(''),If=O(" "),Df=O('
    '),Of=O('
    '),Lf=O('

    Thread

    ',1);function Mf(t,e){Ae(e,!0);var n=Lf(),a=Ht(n),r=g(a),i=_(g(r),2),s=g(i),c=_(r,2),l=_(a,2),u=g(l),f=g(u),p=g(f);{var h=W=>{var Y=Ef();M(()=>F(Y,"src",e.root.author.avatar_url)),A(W,Y)},w=W=>{var Y=Qe();M(ue=>P(Y,ue),[()=>$t(e.root.author?.display_name)]),A(W,Y)};j(p,W=>{e.root.author?.avatar_url?W(h):W(w,-1)})}var v=_(f,2),T=g(v),b=g(T),y=g(b),R=_(b,2);{var x=W=>{var Y=Af(),ue=g(Y);M(C=>P(ue,C),[()=>fn(e.root.author.handle)]),A(W,Y)};j(R,W=>{e.root.author?.handle&&W(x)})}var S=_(R,2),I=g(S),Z=_(S,2),z=_(T,2);xa(z,()=>Da(e.root.body),!0);var B=_(z,2);{var V=W=>{var Y=Rf();gt(Y,21,()=>e.root.attachments,ue=>ue.id,(ue,C)=>{{let ne=xt(()=>Vr(o(C)));Oa(ue,{get upload(){return o(C)},get url(){return o(ne)},get onOpenImage(){return e.onOpenImage}})}}),A(W,Y)};j(B,W=>{e.root.attachments?.length&&W(V)})}var Q=_(u,2),H=g(Q),D=g(H),J=_(Q,2);gt(J,21,()=>e.replies,W=>W.id,(W,Y)=>{var ue=Of(),C=g(ue),ne=g(C);{var ke=me=>{var Ce=Cf();M(()=>F(Ce,"src",o(Y).author.avatar_url)),A(me,Ce)},re=me=>{var Ce=Qe();M(lt=>P(Ce,lt),[()=>$t(o(Y).author?.display_name)]),A(me,Ce)};j(ne,me=>{o(Y).author?.avatar_url?me(ke):me(re,-1)})}var vt=_(C,2),se=g(vt),je=g(se),le=g(je),q=_(je,2);{var ae=me=>{var Ce=If(),lt=g(Ce);M(ot=>P(lt,ot),[()=>fn(o(Y).author.handle)]),A(me,Ce)};j(q,me=>{o(Y).author?.handle&&me(ae)})}var ve=_(q,2),st=g(ve),de=_(ve,2),Se=_(se,2);js(Se,{get message(){return o(Y)},get onJump(){return e.onJumpToQuote}});var qt=_(Se,2);xa(qt,()=>Da(o(Y).body),!0);var $e=_(qt,2);{var ye=me=>{var Ce=Df();gt(Ce,21,()=>o(Y).attachments,lt=>lt.id,(lt,ot)=>{{let tn=xt(()=>Vr(o(ot)));Oa(lt,{get upload(){return o(ot)},get url(){return o(tn)},get onOpenImage(){return e.onOpenImage}})}}),A(me,Ce)};j($e,me=>{o(Y).attachments?.length&&me(ye)})}M((me,Ce)=>{F(ue,"data-message-id",o(Y).id),Kt(C,`--hue: ${me??""}deg`),P(le,o(Y).author?.display_name||"Local User"),P(st,Ce)},[()=>en(o(Y).author?.id||o(Y).author_id||"x"),()=>Sr(o(Y).created_at)]),U("click",de,()=>e.onSetReplyTarget(o(Y),"thread")),A(W,ue)});var K=_(l,2);Is(K,{get value(){return e.replyBody},placeholder:"Reply in thread",ariaLabel:"Reply body",submitLabel:"Reply",formClass:"composer reply-composer",get replyTarget(){return e.replyTarget},get onValue(){return e.onReplyBody},get onSubmit(){return e.onSubmitReply},get onKeydown(){return e.onReplyKeydown},get onFocus(){return e.onReplyFocus},get onInputRef(){return e.onReplyInputRef},get onClearReply(){return e.onClearReply}}),M((W,Y)=>{P(s,`${e.threadState?.reply_count??e.replies.length??""} ${(e.threadState?.reply_count??e.replies.length)===1?"reply":"replies"}`),F(u,"data-message-id",e.root.id),Kt(f,`--hue: ${W??""}deg`),P(y,e.root.author?.display_name||"Local User"),P(I,Y),P(D,`${e.replies.length??""} ${e.replies.length===1?"reply":"replies"}`)},[()=>en(e.root.author?.id||e.root.author_id||"x"),()=>Sr(e.root.created_at)]),U("click",c,function(...W){e.onClose?.apply(this,W)}),U("pointerdown",l,function(...W){e.onActivateThreadComposer?.apply(this,W)}),U("pointerup",l,function(...W){e.onInlineImagePointerUp?.apply(this,W)}),U("click",Z,()=>e.onSetReplyTarget(e.root,"thread")),A(t,n),Re()}Le(["click","pointerdown","pointerup"]);var Nf=O('

    '),Pf=O('

    '),Uf=O('

    ClickClack

    '),zf=O(''),Ff=O('

    ');function Bf(t,e){Ae(e,!0);var n=Ff(),a=g(n),r=g(a);{var i=R=>{var x=Nf(),S=g(x);M(I=>P(S,I),[()=>`@${xr(e.selectedDirect,e.currentUserID)}`]),A(R,x)},s=R=>{var x=Pf(),S=g(x);M(()=>P(S,`#${e.selectedChannel.name}`)),A(R,x)},c=R=>{var x=Uf();A(R,x)};j(r,R=>{e.selectedDirect?R(i):e.selectedChannel?R(s,1):R(c,-1)})}var l=_(r,4),u=g(l),f=_(a,2),p=_(g(f),2),h=_(p,2);{var w=R=>{var x=zf();U("click",x,function(...S){e.onResetSearch?.apply(this,S)}),A(R,x)};j(h,R=>{e.searchQuery&&R(w)})}var v=_(f,2),T=g(v);let b;var y=_(T,2);M(()=>{P(u,e.workspaceName||"no workspace"),Vt(p,e.searchQuery),F(T,"title",e.threadOpen?"Close thread":"Open a message thread"),F(T,"aria-label",e.threadOpen?"Close thread":"Open a message thread"),b=it(T,1,"",null,b,{active:e.sidePanelOpen})}),Gt("submit",f,R=>{R.preventDefault(),e.onSearch()}),U("input",p,R=>e.onSearchQuery(R.currentTarget.value)),U("click",T,function(...R){e.onToggleThread?.apply(this,R)}),U("click",y,function(...R){e.onPinnedItems?.apply(this,R)}),A(t,n),Re()}Le(["input","click"]);var Hf=O(''),Gf=O(`
    cc
    ClickClack OpenClaw workspace chat

    Welcome back.

    Workspace chat for the OpenClaw crew. Sign in with the GitHub account that's a member of the org.

    Limited to active members of the OpenClaw org.

    `),Wf=O(''),qf=O('
    No thread open Hover any message and tap the bubble to keep side conversations tidy.
    '),jf=O('
    ',1);function Zf(t,e){Ae(e,!1);const n=X(),a=X(),r=X(),i=X(),s=X(),c=X();let l=X(null),u=X([]),f=X([]),p=X([]),h=X([]),w=X([]),v=X(""),T=X(""),b=X(""),y=X(null),R=X(null),x=X(null),S=X(null),I=X(""),Z=X(""),z=X(""),B=X(""),V=X(""),Q=X(""),H=X([]),D=X(null),J=X(!1),K=X(!1),W=X(""),Y=X(""),ue=X(""),C=X(""),ne=X(""),ke=X(!1),re=X("loading"),vt=X(!1),se=null,je=X(!1),le,q=X(null),ae=X(!1),ve=X(!1),st=X(!1),de=X(null),Se=X(null),qt=X(null),$e=X(null),ye=X("message");Rs(()=>{me()}),Do(()=>{const k=se;se=null,m(je,!1),k?.close(),le&&window.clearTimeout(le)});async function me(){try{const k=await Fe("/api/me");m(l,k.user),await ot(),m(re,"ready")}catch(k){if(k instanceof Cs&&(k.status===401||k.status===403)){m(vt,!0),m(re,"auth");return}m(re,k instanceof Error?k.message:"Could not load ClickClack")}}function Ce(){o(l)&&(m(Y,o(l).display_name),m(ue,o(l).handle?`@${o(l).handle}`:""),m(C,o(l).avatar_url),m(ne,""),m(ke,!1),m(K,!0))}async function lt(){m(ne,""),m(ke,!1);try{const k=await Fe("/api/me",{method:"PATCH",body:JSON.stringify({display_name:o(Y),handle:o(ue),avatar_url:o(C)})});m(l,k.user),m(h,o(h).map(L=>L.author?.id===o(l)?.id?{...L,author:k.user}:L)),m(w,o(w).map(L=>L.author?.id===o(l)?.id?{...L,author:k.user}:L)),o(y)?.author?.id===o(l).id&&m(y,{...o(y),author:k.user}),m(ne,"Saved"),m(K,!1)}catch(k){m(ne,k instanceof Error?k.message:"Could not save profile"),m(ke,!0)}}async function ot(){const k=await Fe("/api/workspaces");m(u,k.workspaces),m(v,o(v)||o(u)[0]?.id||""),await dn(),await pn(),o(u).length===0&&m(re,"create a workspace"),Mn()}async function tn(){if(!o(z).trim())return;const k=await Fe("/api/workspaces",{method:"POST",body:JSON.stringify({name:o(z)})});m(z,""),m(ae,!1),m(u,[...o(u),k.workspace]),m(v,k.workspace.id),await dn(),await pn(),Mn()}async function Dn(k){m(v,k),await dn(),await pn(),Mn()}async function dn(){if(!o(v))return;const k=await Fe(`/api/workspaces/${o(v)}/channels`);m(f,k.channels),m(T,o(f).find(L=>L.id===o(T))?.id||o(f)[0]?.id||""),m(y,null),m(x,null),m(ye,"message"),m(w,[]),await et()}async function Lr(){if(!o(v)||!o(B).trim())return;const k=await Fe(`/api/workspaces/${o(v)}/channels`,{method:"POST",body:JSON.stringify({name:o(B),kind:"public"})});m(B,""),m(f,[...o(f),k.channel]),m(T,k.channel.id),m(b,""),await et()}async function Mr(k){m(T,k),m(b,""),m(y,null),m(x,null),m(ye,"message"),m(st,!1),await et()}async function et(){if(o(b)){const L=await Fe(`/api/dms/${o(b)}/messages`);m(h,L.messages),await jt();return}if(!o(T)){m(h,[]);return}const k=await Fe(`/api/channels/${o(T)}/messages`);m(h,k.messages),await jt()}async function jt(){await si(),o(q)&&Ql(q,o(q).scrollTop=o(q).scrollHeight)}async function Zt(){const k=o(I).trim();if(!k)return;if(!o(T)&&!o(b)){m(re,"pick or create a channel");return}const L=o(b)?"dm":"channel",fe=o(de)&&o(Se)===L?o(de):null;m(I,"");const be=o(b)?`/api/dms/${o(b)}/messages`:`/api/channels/${o(T)}/messages`,We={body:k};fe&&(We.quoted_message_id=fe.id);const Rt=await Fe(be,{method:"POST",body:JSON.stringify(We)});let _t=Rt.message;if(fe&&tt(),o(D)){const bt=o(D);await Fe(`/api/messages/${Rt.message.id}/attachments`,{method:"POST",body:JSON.stringify({upload_id:bt.id})}),m(D,null),_t={..._t,attachments:[..._t.attachments||[],bt]}}o(h).some(bt=>bt.id===_t.id)?m(h,o(h).map(bt=>bt.id===_t.id?_t:bt)):m(h,[...o(h),_t]),await jt()}async function ct(k){m(x,null),m(y,k),m(ye,"thread");const L=await Fe(`/api/messages/${k.id}/thread`);m(y,L.root),m(w,L.replies),m(R,L.thread_state)}async function On(){const k=o(Z).trim();if(!k||!o(y))return;const L=o(de)&&o(Se)==="thread"?o(de):null;m(Z,"");const fe={body:k};L&&(fe.quoted_message_id=L.id);const be=await Fe(`/api/messages/${o(y).id}/thread/replies`,{method:"POST",body:JSON.stringify(fe)});L&&tt(),o(w).some(We=>We.id===be.message.id)||m(w,[...o(w),be.message]),m(R,be.thread_state)}function Kn(k,L){m(de,k),m(Se,L),m(ye,L==="thread"?"thread":"message")}function $n(){return o(S)!==null||o(K)}function er(){return o(ye)==="thread"&&o(y)&&o($e)?o($e):o(qt)}function tt(){m(de,null),m(Se,null)}async function hn(k){const L=k.quoted_message_id;if(!L)return;await si();const fe=document.querySelector(`[data-message-id="${CSS.escape(L)}"]`);fe&&(fe.scrollIntoView({behavior:"smooth",block:"center"}),fe.classList.add("highlight"),window.setTimeout(()=>fe.classList.remove("highlight"),1500))}async function Ln(){if(!o(v)||!o(Q).trim()){m(H,[]);return}const k=await Fe(`/api/search?workspace_id=${encodeURIComponent(o(v))}&q=${encodeURIComponent(o(Q).trim())}`);m(H,k.results)}function mt(){m(Q,""),m(H,[])}async function nn(k){m(H,[]),k.message.channel_id&&(m(T,k.message.channel_id),m(b,""),await et()),k.message.direct_conversation_id&&(m(b,k.message.direct_conversation_id),m(T,""),await et())}async function tr(k){const L=k.currentTarget,fe=L.files?.[0];if(!fe||!o(v))return;const be=new FormData;be.set("workspace_id",o(v)),be.set("file",fe);const We=await Fe("/api/uploads",{method:"POST",body:be});m(D,We.upload),L.value=""}async function pn(){if(!o(v))return;const k=await Fe(`/api/dms?workspace_id=${o(v)}`);m(p,k.conversations)}async function aa(){if(!o(v)||!o(V).trim())return;const k=await Fe("/api/dms",{method:"POST",body:JSON.stringify({workspace_id:o(v),member_ids:[o(V).trim()]})});m(V,""),m(p,[...o(p),k.conversation]),m(b,k.conversation.id),m(T,""),m(y,null),m(x,null),m(ye,"message"),await et()}async function nr(k){m(b,k),m(T,""),m(y,null),m(x,null),m(ye,"message"),m(st,!1),await et()}async function rr(k){if(!o(v)||!k)return;const L=o(p).find(be=>be.members.some(We=>We.id===k));if(L){m(b,L.id),m(T,""),m(y,null),m(x,null),m(ye,"message"),await et();return}const fe=await Fe("/api/dms",{method:"POST",body:JSON.stringify({workspace_id:o(v),member_ids:[k]})});m(p,[...o(p),fe.conversation]),m(b,fe.conversation.id),m(T,""),m(y,null),m(x,null),m(ye,"message"),await et()}function Mn(){le&&window.clearTimeout(le);const k=se;if(se=null,m(je,!1),k?.close(),!o(v))return;const L=localStorage.getItem(`clickclack:${o(v)}:cursor`)||"",fe=new URL("/api/realtime/ws",window.location.href);fe.protocol=window.location.protocol==="https:"?"wss:":"ws:",fe.searchParams.set("workspace_id",o(v)),L&&fe.searchParams.set("after_cursor",L);const be=new WebSocket(fe);se=be,be.addEventListener("open",()=>{se===be&&m(je,!0)}),be.addEventListener("message",We=>{const Rt=JSON.parse(String(We.data));Rt.cursor&&localStorage.setItem(`clickclack:${o(v)}:cursor`,Rt.cursor),gn(Rt)}),be.addEventListener("close",()=>{se===be&&(m(je,!1),le=window.setTimeout(Mn,1200))})}async function gn(k){if((k.type==="channel.created"||k.type==="channel.updated")&&k.workspace_id===o(v)){await dn();return}(k.channel_id===o(T)||k.payload.direct_conversation_id===o(b))&&(k.type==="message.created"||k.type==="message.updated"||k.type==="message.deleted")&&await et();const L=k.payload.root_message_id||k.payload.message_id;o(y)&&L===o(y).id&&await ct(o(y))}function Nr(k){k&&(m(y,null),m(x,k))}function ia(k){if(k.key==="Escape"&&o(de)&&o(Se)!=="thread"){k.preventDefault(),tt();return}k.key==="Enter"&&!k.shiftKey&&(k.preventDefault(),Zt())}function Ee(k){if(k.key==="Escape"&&o(de)&&o(Se)==="thread"){k.preventDefault(),tt();return}k.key==="Enter"&&!k.shiftKey&&(k.preventDefault(),On())}function Nt(k,L){m(S,{url:k,title:L})}function Pr(k){const L=k.target;L instanceof HTMLImageElement&&L.closest(".markdown")&&(k.preventDefault(),Nt(L.currentSrc||L.src,L.alt||"Image"))}function Nn(k){const L=o(I)&&!o(I).endsWith(` +`)?` +`:"";m(I,`${o(I)}${L}${k}`)}function ar(k,L=k){Nn(`${k}${k==="```"?` +code +`:"text"}${L}`)}function Ur(k,L){Nn(`![${L}](${k})`),m(J,!1),m(W,"")}function Pn(){o(Se)==="thread"&&tt(),m(y,null),m(x,null),m(ye,"message"),m(w,[])}function sa(){o(i)?Pn():m(re,"pick a message to open its thread")}function Ze(){m(S,null),m(K,!1)}Yt(()=>(o(u),o(v)),()=>{m(n,o(u).find(k=>k.id===o(v)))}),Yt(()=>(o(f),o(T)),()=>{m(a,o(f).find(k=>k.id===o(T)))}),Yt(()=>(o(p),o(b)),()=>{m(r,o(p).find(k=>k.id===o(b)))}),Yt(()=>(o(y),o(x)),()=>{m(i,o(y)!==null||o(x)!==null)}),Yt(()=>(o(h),o(p),o(l)),()=>{m(s,Uo(o(h),o(p),o(l)?.id||""))}),Yt(()=>(o(Se),o(de),o(h)),()=>{o(Se)==="channel"&&o(de)&&!o(h).some(k=>k.id===o(de)?.id)&&tt()}),Yt(()=>(o(Se),o(de),o(h)),()=>{o(Se)==="dm"&&o(de)&&!o(h).some(k=>k.id===o(de)?.id)&&tt()}),Yt(()=>(o(Se),o(de),o(y),o(w)),()=>{o(Se)==="thread"&&o(de)&&o(y)&&o(de).id!==o(y).id&&!o(w).some(k=>k.id===o(de)?.id)&&tt()}),Yt(()=>o(W),()=>{m(c,Mo.filter(k=>{const L=o(W).trim().toLowerCase();return!L||k.title.toLowerCase().includes(L)||k.tags.some(fe=>fe.includes(L))}))}),no(),As();var Pt=Dr();xs("1oa2eo8",k=>{var L=Hf();A(k,L)}),Gt("keydown",ba,k=>{if(k.key==="Escape"){if($n())Ze();else if(o(de)){k.preventDefault(),tt();return}}Zo(k,{authRequired:o(vt),isModalOpen:$n,messageInput:o(qt),replyInput:o($e),target:er})});var zr=Ht(Pt);{var Fr=k=>{var L=Gf();A(k,L)},ir=k=>{var L=jf(),fe=Ht(L);let be;var We=g(fe),Rt=g(We);{var _t=te=>{var pe=Qe("×");A(te,pe)},bt=te=>{var pe=Wf();A(te,pe)};j(Rt,te=>{o(st)?te(_t):te(bt,-1)})}var G=_(We,2);Yu(G,{get workspaces(){return o(u)},get selectedWorkspaceID(){return o(v)},get workspaceName(){return o(z)},get showWorkspaceCreate(){return o(ae)},onSelectWorkspace:te=>{Dn(te)},onToggleWorkspaceCreate:()=>m(ae,!o(ae)),onWorkspaceName:te=>m(z,te),onCreateWorkspace:()=>{tn()}});var d=_(G,2);{let te=dt(()=>(o(n),ze(()=>o(n)?.name)));uf(d,{get workspaceName(){return o(te)},get status(){return o(re)},get connected(){return o(je)},get sidebarCollapsed(){return o(ve)},get channels(){return o(f)},get directConversations(){return o(p)},get recentPeople(){return o(s)},get currentUser(){return o(l)},get selectedChannelID(){return o(T)},get selectedDirectID(){return o(b)},get selectedProfile(){return o(x)},get channelName(){return o(B)},get directMemberID(){return o(V)},onToggleCollapse:()=>m(ve,!o(ve)),onSelectChannel:pe=>{Mr(pe)},onChannelName:pe=>m(B,pe),onCreateChannel:()=>{Lr()},onSelectDirect:pe=>{nr(pe)},onDirectMemberID:pe=>m(V,pe),onCreateDirect:()=>{aa()},onOpenProfile:Nr,onOpenSettings:Ce})}var E=_(d,2),N=g(E);{let te=dt(()=>(o(n),ze(()=>o(n)?.name))),pe=dt(()=>(o(l),ze(()=>o(l)?.id))),Ne=dt(()=>o(y)!==null);Bf(N,{get selectedDirect(){return o(r)},get selectedChannel(){return o(a)},get workspaceName(){return o(te)},get currentUserID(){return o(pe)},get searchQuery(){return o(Q)},get sidePanelOpen(){return o(i)},get threadOpen(){return o(Ne)},onSearchQuery:Qs=>m(Q,Qs),onSearch:()=>{Ln()},onResetSearch:mt,onToggleThread:sa,onPinnedItems:()=>m(re,"no pinned items")})}var he=_(N,2);Sf(he,{get results(){return o(H)},onClose:()=>m(H,[]),onOpenResult:te=>{nn(te)}});var Me=_(he,2);{let te=dt(()=>(o(y),ze(()=>o(y)?.id))),pe=dt(()=>(o(l),ze(()=>o(l)?.id)));Wu(Me,{get messages(){return o(h)},get selectedDirect(){return o(r)},get selectedChannel(){return o(a)},get selectedThreadID(){return o(te)},get currentUserID(){return o(pe)},onListRef:Ne=>m(q,Ne),onActivateMessageComposer:()=>m(ye,"message"),onInlineImagePointerUp:Pr,onOpenProfile:Nr,onReply:Kn,onOpenThread:ct,onJumpToQuote:Ne=>{hn(Ne)},onOpenImage:Nt})}var we=_(Me,2);{let te=dt(()=>(o(r),qa(xr),o(l),o(a),ze(()=>o(r)?`Message ${xr(o(r),o(l)?.id)}`:o(a)?`Message #${o(a).name}`:"Pick a channel to start"))),pe=dt(()=>o(de)&&o(Se)===(o(b)?"dm":"channel")?o(de):null);Is(we,{get value(){return o(I)},get placeholder(){return o(te)},ariaLabel:"Message body",submitLabel:"Send",get pendingUpload(){return o(D)},get replyTarget(){return o(pe)},showUpload:!0,showToolbar:!0,get showGifPicker(){return o(J)},get gifQuery(){return o(W)},get filteredGifs(){return o(c)},onValue:Ne=>m(I,Ne),onSubmit:()=>{Zt()},onKeydown:ia,onFocus:()=>m(ye,"message"),onInputRef:Ne=>m(qt,Ne),onUploadFile:tr,onRemoveUpload:()=>m(D,null),onClearReply:tt,onApplyMarkdownWrap:ar,onAppendToComposer:Nn,onToggleGif:()=>m(J,!o(J)),onGifQuery:Ne=>m(W,Ne),onPickGif:Ur})}var Pe=_(E,2);let Ye;var ut=g(Pe);{var sr=te=>{{let pe=dt(()=>o(de)&&o(Se)==="thread"?o(de):null);Mf(te,{get root(){return o(y)},get replies(){return o(w)},get threadState(){return o(R)},get replyBody(){return o(Z)},get replyTarget(){return o(pe)},onClose:Pn,onReplyBody:Ne=>m(Z,Ne),onSubmitReply:()=>{On()},onReplyKeydown:Ee,onReplyFocus:()=>m(ye,"thread"),onReplyInputRef:Ne=>m($e,Ne),onSetReplyTarget:Kn,onClearReply:tt,onActivateThreadComposer:()=>m(ye,"thread"),onInlineImagePointerUp:Pr,onJumpToQuote:Ne=>{hn(Ne)},onOpenImage:Nt})}},Ie=te=>{{let pe=dt(()=>(o(n),ze(()=>o(n)?.name)));mf(te,{get profile(){return o(x)},get currentUser(){return o(l)},get workspaceName(){return o(pe)},onClose:Pn,onEdit:Ce,onMessage:Ne=>{rr(Ne)},onSetStatus:()=>m(re,"status messages are coming soon")})}},Br=te=>{var pe=qf();A(te,pe)};j(ut,te=>{o(y)?te(sr):o(x)?te(Ie,1):te(Br,-1)})}var lr=_(fe,2);{var Zs=te=>{yf(te,{get user(){return o(l)},get displayName(){return o(Y)},get handle(){return o(ue)},get avatarURL(){return o(C)},get status(){return o(ne)},get statusError(){return o(ke)},onDisplayName:pe=>m(Y,pe),onHandle:pe=>m(ue,pe),onAvatarURL:pe=>m(C,pe),onClose:Ze,onSave:()=>{lt()}})};j(lr,te=>{o(K)&&o(l)&&te(Zs)})}var Ys=_(lr,2);{var Xs=te=>{fc(te,{get url(){return o(S),ze(()=>o(S).url)},get title(){return o(S),ze(()=>o(S).title)},onClose:Ze})};j(Ys,te=>{o(S)&&te(Xs)})}M(()=>{be=it(fe,1,"shell",null,be,{"nav-open":o(st),"sidebar-collapsed":o(ve),"thread-open":o(i)}),Ye=it(Pe,1,"thread",null,Ye,{open:o(i)}),F(Pe,"aria-label",o(x)?"Profile pane":"Thread pane")}),U("click",We,()=>m(st,!o(st))),A(k,L)};j(zr,k=>{o(vt)?k(Fr):k(ir,-1)})}A(t,Pt),Re()}Le(["click"]);var Yf=O(' ',1),Xf=O("

    "),Qf=O(`

    Self-hostable chat. Serious tool. Mild brine.

    ClickClack

    A single-binary chat app for teams, communities, bots, and agents: + Slack-style threads, durable realtime, OpenAPI, SQLite, and a CLI that + can drive the whole thing from a shell.

    What it is

    Chat infrastructure that stays boring when the socket drops.

    WebSocket is the pipe. The database is the truth. Every durable message, + thread reply, reaction, and channel update can be recovered over HTTP with + a cursor, so clients and agents can reconnect without drama.

    Agent path

    A friendly CLI, no LLM baked in.

    External agents, CI jobs, and humans use the same public API as the web + app. Tokens and workspace defaults are scoped per server, so switching + hosts does not leak credentials or stale IDs.

     

    Destinations

    Product at the root. Docs and app where people expect them.

    `);function Vf(t,e){Ae(e,!1);const n="https://docs.clickclack.chat",a=["localhost","127.0.0.1","::1"].includes(window.location.hostname)?"/app":"https://app.clickclack.chat",r="https://github.com/openclaw/clickclack",i=[["Single binary","Go server, embedded Svelte app, embedded migrations, local SQLite and uploads."],["Threads that recover","Slack-style one-level threads with durable event replay after reconnects."],["Agent-friendly","A CLI, OpenAPI contract, TypeScript SDK, webhooks, and slash-command shapes."],["Self-host first","SQLite is the default, not the demo. Postgres can arrive behind the store layer."]],s=["clickclack serve --data ./data","clickclack login --magic-token mgt_...",'clickclack send --channel general "deploy started"',"clickclack threads reply msg_... --stdin {var J=Yf();Ba(()=>{ns.title="ClickClack - Self-hostable chat with claws"}),A(D,J)});var l=g(c),u=_(g(l),2),f=_(g(u),2),p=g(f);F(p,"href",n);var h=_(p,2),w=_(h,2);F(w,"href",r);var v=_(u,2),T=_(g(v),6),b=g(T),y=_(b,2);F(y,"href",n);var R=_(y,2);F(R,"href",r);var x=_(l,4);gt(x,5,()=>i,_o,(D,J)=>{var K=Xf(),W=g(K),Y=g(W),ue=_(W,2),C=g(ue);M(()=>{P(Y,o(J)[0]),P(C,o(J)[1])}),A(D,K)});var S=_(x,2),I=_(g(S),2),Z=g(I),z=_(S,2),B=_(g(z),2),V=_(g(B),2);F(V,"href",n);var Q=_(V,2),H=_(Q,2);F(H,"href",r),M(D=>{F(h,"href",a),F(b,"href",a),P(Z,D),F(Q,"href",a)},[()=>s.join(` +`)]),A(t,c),Re()}function Jf(t){const e=window.location.pathname,a=window.location.hostname.startsWith("app.")||e==="/app"||e.startsWith("/app/");var r=Dr(),i=Ht(r);{var s=l=>{Zf(l,{})},c=l=>{Vf(l,{})};j(i,l=>{a?l(s):l(c,-1)})}A(t,r)}po(Jf,{target:document.getElementById("app")}); diff --git a/apps/api/internal/webassets/dist/assets/index-C_U7opSQ.css b/apps/api/internal/webassets/dist/assets/index-DqdK3eqN.css similarity index 78% rename from apps/api/internal/webassets/dist/assets/index-C_U7opSQ.css rename to apps/api/internal/webassets/dist/assets/index-DqdK3eqN.css index 75eb637..eeea33f 100644 --- a/apps/api/internal/webassets/dist/assets/index-C_U7opSQ.css +++ b/apps/api/internal/webassets/dist/assets/index-DqdK3eqN.css @@ -1 +1 @@ -.product-site{min-height:100vh;background:#f7f3ea;color:#151716;font-family:Avenir Next,Segoe UI,ui-sans-serif,system-ui,sans-serif}.product-site a{color:inherit;text-decoration:none}.hero{position:relative;display:grid;min-height:clamp(680px,92vh,920px);overflow:hidden;isolation:isolate;background:linear-gradient(90deg,#0c1f23c7,#0c1f232e 62%,#0c1f23b3),#103033;color:#fff8ee}.hero:after{position:absolute;inset:auto 0 0;height:22vh;min-height:130px;background:linear-gradient(0deg,#f7f3ea 8%,#f7f3ea00);content:"";z-index:-1}.hero:before{position:absolute;inset:0 38% 0 0;background:linear-gradient(90deg,#081c1efa,#081c1e00);content:"";z-index:-1}.hero-bg{position:absolute;inset:0 0 0 clamp(260px,28vw,460px);display:grid;grid-template-columns:92px minmax(360px,1fr) minmax(260px,28vw);gap:18px;padding:102px clamp(18px,5vw,70px) 80px;opacity:.36;z-index:-2}.workspace-rail,.timeline-preview,.thread-preview{border:1px solid rgba(255,248,238,.24);background:#fff8ee1f;box-shadow:0 28px 90px #0000003d;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.workspace-rail{display:grid;align-content:start;gap:14px;padding:16px}.workspace-rail span{display:grid;place-items:center;min-height:54px;border-radius:8px;background:#fff8ee2e;color:#fff8ee;font-weight:900;text-transform:uppercase}.timeline-preview{align-self:stretch;padding:clamp(18px,3vw,34px)}.preview-top{display:flex;justify-content:space-between;margin-bottom:48px;color:#b9ddd9;font-weight:800}.preview-top strong{color:#7ce0b5}.timeline-preview article,.thread-preview{max-width:720px;margin:0 0 18px;border-radius:8px;background:#fff8ee29;padding:18px}.timeline-preview b,.thread-preview span{color:#ff8a70}.timeline-preview p,.thread-preview p{margin:6px 0 0;color:#fff8ee;font-size:clamp(17px,1.8vw,24px)}.timeline-preview code{border-radius:5px;background:#0c1f2394;padding:2px 5px}.thread-line{margin-left:clamp(0px,8vw,130px)}.thread-preview{align-self:center;min-height:260px}.product-nav{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:24px clamp(18px,5vw,70px);font-weight:800}.product-nav>div{display:flex;gap:clamp(14px,3vw,34px)}.brand-lockup{display:inline-flex;align-items:center;gap:10px}.brand-mark{display:grid;place-items:center;width:40px;height:40px;border-radius:8px;background:#ff6f55;color:#151716;font-weight:950;text-transform:uppercase}.hero-copy{position:relative;z-index:2;align-self:center;width:min(780px,calc(100vw - 36px));padding:0 clamp(18px,5vw,70px) 16vh}.eyebrow,.section-kicker{margin:0 0 14px;color:#ffb09f;font-size:13px;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.hero h1,.product-band h2{margin:0;letter-spacing:0}.hero h1{font-family:Georgia,Times New Roman,serif;font-size:clamp(66px,13vw,152px);font-weight:900;line-height:.9}.lede{width:min(680px,100%);margin:26px 0 0;color:#fff3df;font-size:clamp(20px,2.2vw,31px);line-height:1.18}.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}.primary-action,.secondary-action{display:inline-flex;align-items:center;justify-content:center;min-height:48px;border-radius:8px;padding:0 18px;font-weight:950}.primary-action{background:#ff6f55;color:#151716}.secondary-action{border:1px solid rgba(255,248,238,.42);color:#fff8ee}.product-band{display:grid;grid-template-columns:minmax(260px,.9fr) minmax(280px,1.1fr);gap:clamp(28px,6vw,90px);padding:clamp(58px,8vw,112px) clamp(18px,5vw,70px)}.product-band h2{max-width:720px;font-size:clamp(34px,5vw,74px);line-height:.96}.product-band p{margin:0;color:#3f4743;font-size:clamp(18px,2.1vw,27px);line-height:1.34}.intro-band{padding-top:0}.intro-band .section-kicker,.cli-band .section-kicker,.docs-band .section-kicker{color:#b84632}.feature-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-block:1px solid #c8c0b2}.feature-grid article{min-height:250px;border-right:1px solid #c8c0b2;padding:clamp(22px,3vw,40px)}.feature-grid article:nth-child(2n){background:#e8f0e9}.feature-grid article:last-child{border-right:0}.feature-grid h3{margin:0 0 44px;font-size:24px}.feature-grid p{margin:0;color:#48504c;line-height:1.45}.cli-band{background:#162a2d;color:#fff8ee}.cli-band p{color:#c9d8d4}.cli-band pre{overflow:auto;align-self:start;margin:0;border:1px solid rgba(255,248,238,.18);border-radius:8px;background:#071314;color:#bdf1dc;padding:clamp(18px,3vw,32px);line-height:1.7}.docs-band{background:#fffaf0}.destination-list{display:grid;gap:12px}.destination-list a{display:flex;justify-content:space-between;gap:20px;border-top:1px solid #cbc2b3;padding:18px 0;font-size:clamp(21px,3vw,40px);font-weight:900}.destination-list span{color:#6f7772;font-size:15px;font-weight:700;text-align:right}@media(prefers-color-scheme:dark){.product-site{background:#101616;color:#fff8ee}.hero:after{background:linear-gradient(0deg,#101616 8%,#10161600)}.product-band p,.feature-grid p,.destination-list span{color:#bac7c3}.feature-grid{border-color:#34413e}.feature-grid article{border-color:#34413e}.feature-grid article:nth-child(2n),.docs-band{background:#182221}}@media(max-width:900px){.hero:before{inset-right:0}.hero-bg{inset:0;grid-template-columns:58px minmax(0,1fr);padding-top:90px;opacity:.38}.thread-preview{display:none}.product-band,.feature-grid{grid-template-columns:1fr}.feature-grid article,.feature-grid article:last-child{min-height:0;border-right:0;border-bottom:1px solid #c8c0b2}}@media(max-width:620px){.product-nav{align-items:flex-start;flex-direction:column}.hero{min-height:760px}.hero-bg{grid-template-columns:1fr;opacity:.42}.workspace-rail{display:none}.hero-copy{padding-bottom:90px}.destination-list a{flex-direction:column}.destination-list span{text-align:left}}:root{color-scheme:light dark;font-family:Inter,SF Pro Text,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-feature-settings:"ss01","cv11";--rail: #e9e1d7;--bg: #f7f3ed;--panel: #fffaf2;--panel-2: #efe7dc;--panel-3: #e4dbcf;--hover: rgba(16, 32, 39, .05);--hover-strong: rgba(16, 32, 39, .08);--line: rgba(16, 32, 39, .1);--line-strong: rgba(16, 32, 39, .16);--text: #22201d;--text-strong: #11100e;--muted: #6f675f;--muted-2: #958b80;--accent: #dd5d45;--accent-2: #006d77;--accent-soft: rgba(221, 93, 69, .16);--accent-glow: 0 0 0 1px rgba(221, 93, 69, .28), 0 8px 30px -12px rgba(221, 93, 69, .45);--success: #168b51;--warn: #f5b050;--danger: #c84343;--shadow: 0 24px 60px -24px rgba(16, 32, 39, .32);--radius-sm: 6px;--radius: 8px;--radius-lg: 14px;--radius-xl: 18px;background:var(--bg);color:var(--text)}@media(prefers-color-scheme:dark){:root{--rail: #0d0e12;--bg: #131419;--panel: #1a1b22;--panel-2: #20222b;--panel-3: #272a35;--hover: rgba(255, 255, 255, .04);--hover-strong: rgba(255, 255, 255, .07);--line: rgba(255, 255, 255, .07);--line-strong: rgba(255, 255, 255, .12);--text: #e7e9ee;--text-strong: #ffffff;--muted: #8a8f9c;--muted-2: #5d626d;--accent: #6f7eff;--accent-2: #5666ee;--accent-soft: rgba(111, 126, 255, .18);--accent-glow: 0 0 0 1px rgba(111, 126, 255, .4), 0 8px 30px -12px rgba(111, 126, 255, .6);--success: #2ecc71;--warn: #f5b050;--danger: #ff6b6b;--shadow: 0 24px 60px -20px rgba(0, 0, 0, .6)}}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%}body{background:radial-gradient(1000px 600px at 0% 0%,rgba(111,126,255,.08),transparent 60%),radial-gradient(900px 700px at 100% 100%,rgba(255,130,200,.05),transparent 60%),var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,textarea{font:inherit;color:inherit}button{cursor:pointer}input,textarea{background:transparent;border:0;outline:0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:999px;border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#ffffff1f;background-clip:content-box}.auth-shell{display:grid;min-height:100vh;place-items:center;padding:32px;background:radial-gradient(700px 500px at 30% 20%,rgba(111,126,255,.18),transparent 60%),radial-gradient(700px 500px at 80% 90%,rgba(255,110,196,.12),transparent 60%),var(--bg)}.auth-panel{display:grid;gap:22px;width:min(100%,440px);border:1px solid var(--line-strong);border-radius:var(--radius-xl);background:linear-gradient(180deg,#ffffff0a,#fff0) var(--panel);box-shadow:var(--shadow);padding:36px}.auth-brand{display:flex;align-items:center;gap:12px}.auth-brand .mark{width:44px;height:44px;display:grid;place-items:center;border-radius:12px;background:linear-gradient(135deg,var(--accent),#b46cff);color:#fff;font-weight:800;letter-spacing:-.02em;box-shadow:0 10px 24px -8px #6f7effb3}.auth-brand .brand-text strong{display:block;color:var(--text-strong);letter-spacing:-.01em}.auth-brand .brand-text span{display:block;color:var(--muted);font-size:12px}.auth-copy{display:grid;gap:8px;margin-top:8px}.auth-copy h1{margin:0;font-size:28px;letter-spacing:-.02em;color:var(--text-strong)}.auth-copy p{margin:0;color:var(--muted);line-height:1.5}.github-login{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:46px;border-radius:12px;background:#0d1117;color:#fff;font-weight:600;text-decoration:none;border:1px solid #2b2f36;transition:transform 80ms ease,background .12s ease,border-color .12s ease}.github-login:hover{background:#161b22;border-color:#3f4750;transform:translateY(-1px)}.auth-foot{margin:0;color:var(--muted-2);font-size:12px;text-align:center}.shell{display:grid;grid-template-columns:72px 260px minmax(0,1fr) 0;height:100vh;min-height:100vh;overflow:hidden;transition:grid-template-columns .22s cubic-bezier(.2,.8,.2,1)}.shell.thread-open{grid-template-columns:72px 260px minmax(0,1fr) minmax(340px,28vw)}.shell.sidebar-collapsed{grid-template-columns:72px 0 minmax(0,1fr) 0}.shell.sidebar-collapsed.thread-open{grid-template-columns:72px 0 minmax(0,1fr) minmax(340px,28vw)}.guild-rail{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px 0;background:var(--rail);border-right:1px solid var(--line);overflow-y:auto;position:relative}.guild-rail .guild{width:48px;height:48px;border-radius:16px;display:grid;place-items:center;background:var(--panel-2);color:var(--text);border:0;font-weight:700;font-size:14px;letter-spacing:-.02em;position:relative;transition:border-radius .14s ease,background .12s ease,transform .12s ease;box-shadow:0 1px #ffffff0a inset}.guild-rail .guild:hover{border-radius:12px;background:var(--accent);color:#fff;box-shadow:0 8px 24px -10px #6f7eff99}.guild-rail .guild.home{background:linear-gradient(135deg,var(--accent),#b46cff);color:#fff;font-weight:800}.guild-rail .guild.home:hover{border-radius:12px;filter:brightness(1.1)}.guild-rail .guild.add{background:transparent;color:var(--success);border:1px dashed rgba(46,204,113,.4)}.guild-rail .guild.add:hover{background:#2ecc711f;color:#fff;border-style:solid;border-color:var(--success)}.guild-divider{width:36px;height:1px;background:var(--line-strong);margin:4px 0}.guild-list{display:flex;flex-direction:column;align-items:center;gap:8px}.guild-wrap{position:relative}.guild-wrap:before{content:"";position:absolute;left:-14px;top:50%;transform:translateY(-50%) scaleY(.2);width:4px;height:28px;border-radius:0 4px 4px 0;background:var(--text-strong);opacity:0;transition:opacity .14s ease,transform .14s ease}.guild-wrap:hover:before{opacity:.6;transform:translateY(-50%) scaleY(.5)}.guild-wrap.active:before{opacity:1;transform:translateY(-50%) scaleY(1)}.guild-wrap.active .guild{border-radius:14px;background:var(--accent);color:#fff}.guild-create{position:absolute;left:100%;top:14px;margin-left:8px;background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius);padding:8px;box-shadow:var(--shadow);z-index:20}.guild-create input{height:32px;padding:0 10px;width:200px;border-radius:var(--radius-sm);background:var(--panel-2);color:var(--text)}.sidebar{display:grid;grid-template-rows:auto minmax(0,1fr) auto;background:var(--panel);border-right:1px solid var(--line);overflow:hidden;min-width:0;transition:opacity .16s ease,transform .22s cubic-bezier(.2,.8,.2,1)}.sidebar-collapsed .sidebar{opacity:0;pointer-events:none;transform:translate(-14px)}.workspace-header{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;min-height:60px}.sidebar-collapse{width:30px;height:30px;display:grid;place-items:center;border:0;border-radius:8px;background:var(--panel-2);color:var(--muted);transition:color .12s ease,background .12s ease,transform .12s ease}.sidebar-collapse:hover{background:var(--panel-3);color:var(--text-strong);transform:translate(-1px)}.workspace-name{display:flex;flex-direction:column;gap:2px;min-width:0}.workspace-name strong{color:var(--text-strong);letter-spacing:-.01em;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.workspace-name .presence{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:11px}.workspace-name .presence:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--muted-2)}.workspace-name .presence.online{color:var(--success)}.workspace-name .presence.online:before{background:var(--success);box-shadow:0 0 0 3px #2ecc712e}.sidebar-scroll{overflow-y:auto;padding:12px 8px 16px}.nav-section+.nav-section{margin-top:12px}.section-title{display:flex;align-items:center;gap:6px;width:100%;border:0;background:transparent;color:var(--muted);text-transform:uppercase;font-size:11px;font-weight:700;letter-spacing:.04em;padding:6px 8px;border-radius:var(--radius-sm)}.section-title:hover{color:var(--text);background:var(--hover)}.section-title .caret{font-size:10px;opacity:.7}.section-title .label{flex:1;text-align:left}.section-title .add-button{width:18px;height:18px;border-radius:4px;display:grid;place-items:center;font-size:14px;font-weight:700;background:#ffffff0f;color:var(--text)}.section-title:hover .add-button{background:var(--accent);color:#fff}.nav-list{display:flex;flex-direction:column;gap:1px;margin-top:4px}.nav-item{display:flex;align-items:center;gap:8px;width:100%;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--muted);text-align:left;padding:6px 10px;min-height:30px;transition:background .1s ease,color .1s ease}.nav-item:hover{background:var(--hover);color:var(--text)}.nav-item.active{background:var(--accent-soft);color:var(--text-strong)}.nav-item .hash{color:var(--muted);font-weight:600;width:14px;text-align:center}.nav-item.active .hash{color:var(--accent)}.nav-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px}.nav-empty{margin:4px 8px;color:var(--muted-2);font-size:12px}.dm-avatar{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:700;color:#fff;background:linear-gradient(135deg,hsl(var(--hue, 220deg) 70% 55%),hsl(calc(var(--hue, 220deg) + 40deg) 70% 45%));flex-shrink:0;overflow:hidden}.dm-avatar img,.avatar img{width:100%;height:100%;display:block;object-fit:cover}.presence-dot{width:8px;height:8px;border-radius:50%;background:var(--muted-2);flex-shrink:0}.presence-dot.active{background:var(--success);box-shadow:0 0 0 2px var(--panel)}.inline-create{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;margin:6px 4px 2px}.inline-create input{width:100%;min-width:0;height:30px;padding:0 10px;border-radius:var(--radius-sm);background:var(--panel-2);color:var(--text);border:1px solid var(--line)}.inline-create input:focus{border-color:var(--accent);background:var(--panel-3)}.inline-create button.ghost,button.ghost{width:30px;height:30px;border:0;border-radius:var(--radius-sm);background:var(--panel-3);color:var(--muted);font-weight:600;padding:0;font-size:14px;display:grid;place-items:center}.inline-create button.ghost:hover{background:var(--accent);color:#fff}.user-card{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:var(--panel-2);border-top:1px solid var(--line);border-right:0;border-bottom:0;border-left:0;color:inherit;text-align:left;cursor:pointer;transition:background .12s ease}.user-card:hover{background:var(--panel-3)}.user-card .dm-avatar{width:28px;height:28px;font-size:12px}.user-card .user-meta{flex:1;min-width:0}.user-card .user-meta strong{display:block;color:var(--text-strong);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-card .user-meta span{display:block;color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.timeline{display:flex;flex-direction:column;min-width:0;background:var(--bg);overflow:hidden}.timeline>*{min-width:0;flex-shrink:0}.timeline>.messages{flex:1 1 0;min-height:0}.topbar{display:flex;align-items:center;gap:14px;padding:12px 20px;min-height:60px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.02),transparent),var(--bg)}.topbar-title{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.topbar-title h1{margin:0;font-size:16px;font-weight:700;letter-spacing:-.01em;color:var(--text-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-title h1.with-glyph:first-letter{color:var(--muted);margin-right:1px}.topbar-divider{width:1px;height:18px;background:var(--line-strong);margin:0 6px}.topbar-meta{margin:0;color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search{display:flex;align-items:center;gap:8px;width:min(280px,30vw);height:34px;padding:0 10px;border-radius:var(--radius);background:var(--panel);border:1px solid var(--line);color:var(--muted);transition:border-color .12s ease,background .12s ease}.search:focus-within{border-color:var(--accent);background:var(--panel-2);color:var(--text)}.search input{flex:1;min-width:0;height:100%;color:var(--text)}.search input::placeholder{color:var(--muted)}.search-clear{width:18px;height:18px;border-radius:50%;border:0;background:var(--panel-3);color:var(--muted);display:grid;place-items:center;font-size:14px;line-height:1}.search-clear:hover{background:var(--accent);color:#fff}.search-submit{height:22px;padding:0 8px;border:0;border-radius:5px;background:var(--accent-soft);color:var(--accent);font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.search-submit:hover{background:var(--accent);color:#fff}.topbar-actions{display:inline-flex;align-items:center;gap:6px}.topbar-actions button{width:32px;height:32px;display:grid;place-items:center;border:1px solid var(--line);border-radius:9px;background:var(--panel);color:var(--muted);transition:background .12s ease,color .12s ease,border-color .12s ease,transform 80ms ease}.topbar-actions button:hover,.topbar-actions button.active{background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent) 55%,transparent);color:var(--accent)}.topbar-actions button:active{transform:translateY(1px)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.search-results{display:flex;flex-direction:column;gap:2px;padding:10px 14px 14px;border-bottom:1px solid var(--line);background:var(--panel);max-height:280px;overflow-y:auto}.search-results-head{display:flex;align-items:center;justify-content:space-between;padding:0 6px 8px}.search-results-head strong{color:var(--text-strong);font-size:13px}.search-results-head button{border:0;background:transparent;color:var(--muted);font-size:12px;padding:4px 8px;border-radius:var(--radius-sm)}.search-results-head button:hover{background:var(--hover);color:var(--text)}.search-result{display:flex;align-items:flex-start;gap:10px;border:0;background:transparent;color:var(--text);padding:8px;border-radius:var(--radius-sm);text-align:left}.search-result:hover{background:var(--hover)}.search-result .dm-avatar{width:30px;height:30px;font-size:13px}.search-result-body{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.search-result-body>div{display:flex;align-items:baseline;gap:8px}.search-result-body strong{color:var(--text-strong);font-size:13px}.search-result-body time{color:var(--muted);font-size:11px}.search-result-body span{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.messages{overflow-y:auto;padding:16px 4px 24px;scroll-behavior:smooth}.empty{display:grid;place-items:center;align-content:center;text-align:center;gap:10px;min-height:50vh;padding:48px 24px}.empty-icon{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,var(--accent),#b46cff);color:#fff;display:grid;place-items:center;font-size:26px;font-weight:800;box-shadow:0 18px 40px -16px #6f7effb3}.empty strong{color:var(--text-strong);font-size:18px;letter-spacing:-.01em}.empty span{color:var(--muted);max-width:380px;line-height:1.5}.day-divider{display:flex;align-items:center;gap:12px;margin:18px 18px 8px;position:sticky;top:0;z-index:1;pointer-events:none}.day-divider:before,.day-divider:after{content:"";flex:1;height:1px;background:var(--line)}.day-divider span{background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:4px 12px;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.message-group{display:grid;grid-template-columns:56px minmax(0,1fr);padding:8px 18px;position:relative}.message-group:hover{background:var(--hover)}.avatar{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;color:#fff;font-weight:700;font-size:14px;background:linear-gradient(135deg,hsl(var(--hue, 220deg) 70% 55%),hsl(calc(var(--hue, 220deg) + 40deg) 70% 45%));box-shadow:0 6px 20px -10px #0009;margin-top:2px;overflow:hidden}.avatar-button{position:relative;z-index:2;border:0;padding:0;cursor:pointer;transition:transform .1s ease,box-shadow .12s ease,filter .12s ease}.avatar-button:hover{transform:translateY(-1px);filter:brightness(1.05);box-shadow:0 10px 24px -12px #000c}.avatar.small{width:30px;height:30px;font-size:12px;border-radius:10px}.avatar.large{width:56px;height:56px;border-radius:16px;font-size:18px;margin:0}.group-body{min-width:0}.group-body>header{display:flex;align-items:baseline;gap:8px;margin-bottom:2px}.group-body>header strong{color:var(--text-strong);font-size:14.5px;letter-spacing:-.005em;font-weight:700}.author-name{border:0;background:transparent;color:var(--text-strong);padding:0;border-radius:4px;font-size:14.5px;letter-spacing:0;font-weight:700}.author-name:hover{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.group-body>header time{color:var(--muted);font-size:11px}.group-body>header span{color:var(--muted);font-size:12px}.message-row{margin-left:-56px;padding:1px 0 1px 56px;position:relative;border-radius:0;transition:background 80ms ease}.message-row:not(:first-child){margin-top:1px}.message-row:hover{background:var(--hover-strong)}.message-row.selected{background:var(--accent-soft)}.message-row.selected:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent)}.row-stamp{position:absolute;left:8px;top:4px;font-size:10px;color:var(--muted-2);opacity:0;font-variant-numeric:tabular-nums}.message-row:hover .row-stamp{opacity:1}.message-content{min-width:0}.message-actions{display:flex;align-items:flex-start;gap:4px;opacity:0;transform:translateY(-50%);position:absolute;right:8px;top:0;background:var(--panel);border:1px solid var(--line-strong);border-radius:8px;padding:2px;box-shadow:var(--shadow);transition:opacity .1s ease,transform .1s ease}.message-row:hover .message-actions,.message-row.selected .message-actions{opacity:1}.message-actions button{width:28px;height:28px;display:grid;place-items:center;border:0;border-radius:6px;background:transparent;color:var(--muted)}.message-actions button:hover{background:var(--hover-strong);color:var(--text-strong)}.markdown{line-height:1.5;color:var(--text);font-size:14.5px;overflow-wrap:anywhere;word-break:break-word}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown p{margin:0}.markdown p+p,.markdown ul,.markdown ol,.markdown blockquote,.markdown pre{margin-top:6px}.markdown a{color:var(--accent);text-decoration:none}.markdown a:hover{text-decoration:underline}.markdown code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}.markdown pre{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;overflow-x:auto}.markdown pre code{background:transparent;border:0;padding:0}.markdown blockquote{border-left:3px solid var(--accent);margin:0;padding:4px 0 4px 12px;color:var(--muted)}.markdown ul,.markdown ol{padding-left:22px}.markdown img{max-width:100%;max-height:360px;border-radius:var(--radius);margin-top:6px;border:1px solid var(--line);object-fit:contain;background:var(--panel);cursor:zoom-in}.attachment-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;margin-top:8px;max-width:560px}.attachment-grid.compact{grid-template-columns:minmax(0,1fr);max-width:420px}.media-tile{position:relative;display:block;width:100%;margin:0;padding:0;border:1px solid var(--line);border-radius:var(--radius-lg);background:#0a0c12;overflow:hidden;isolation:isolate;text-align:left;color:inherit;text-decoration:none;cursor:pointer;transition:border-color .14s ease,transform .14s ease,box-shadow .14s ease}.media-tile:hover{border-color:var(--line-strong);box-shadow:0 18px 40px -28px #000000e6}.media-tile:focus-visible{outline:none;border-color:var(--line-strong);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 35%,transparent)}.media-tile--image{cursor:zoom-in}.media-tile__open{display:block;width:100%;margin:0;padding:0;border:0;background:transparent;color:inherit;cursor:zoom-in}.media-tile__open:focus{outline:0}.media-tile__open:focus-visible+.media-tile__caption .media-tile__name{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.media-tile--video{cursor:default}.media-tile img,.media-tile video{display:block;width:100%;max-height:360px;object-fit:contain;background:#05070d}.media-tile--image img{max-height:320px}.media-tile__caption{position:absolute;inset:auto 0 0;z-index:3;display:flex;align-items:center;gap:8px;padding:22px 10px 8px;background:linear-gradient(to top,#000000c7,#00000080 40%,#0000);opacity:0;pointer-events:auto;transition:opacity .14s ease}.media-tile:hover .media-tile__caption,.media-tile:focus-within .media-tile__caption{opacity:1}.media-tile--video.is-started .media-tile__caption{display:none}.media-tile__name{flex:1;min-width:0;color:#fff;font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.6)}.media-tile__chip{position:relative;z-index:4;display:inline-grid;place-items:center;width:28px;height:28px;flex:none;border-radius:8px;background:#00000080;color:#fff;border:1px solid rgba(255,255,255,.18);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);text-decoration:none;transition:background .12s ease,border-color .12s ease,transform .12s ease}.media-tile__chip:hover{background:#000000b3;border-color:#ffffff52;transform:translateY(-1px)}.media-tile__play{position:absolute;inset:0 0 48px;display:grid;place-items:center;width:100%;height:auto;border:0;margin:0;padding:0;background:transparent;cursor:pointer;z-index:1}.media-tile__play:before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at center,#0000002e,#0000000d 45%,#0000 70%);opacity:.7;transition:opacity .16s ease;pointer-events:none}.media-tile__play:hover:before{opacity:.9}.media-tile__play-icon{position:relative;display:grid;place-items:center;width:46px;height:46px;border-radius:999px;background:#0000008c;color:#fff;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 6px 20px -8px #0000008c;padding-left:3px;transition:transform .2s cubic-bezier(.2,.8,.2,1),background .18s ease,box-shadow .2s ease}.media-tile__play-icon svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.4))}.media-tile__play:hover .media-tile__play-icon{transform:scale(1.06);background:#000000b3;box-shadow:0 10px 28px -10px #000000a6}.media-tile__play:active .media-tile__play-icon{transform:scale(.97);transition-duration:80ms}.media-tile__play:focus-visible{outline:none}.media-tile__play:focus-visible .media-tile__play-icon{box-shadow:0 0 0 2px #fff9,0 10px 28px -10px #000000a6}.media-tile__duration{position:absolute;left:8px;bottom:8px;z-index:2;padding:2px 6px;border-radius:4px;background:#000000b8;color:#fff;font-size:11px;font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:.02em;pointer-events:none}.file-attachment{display:flex;align-items:center;gap:10px;max-width:360px;padding:10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.file-attachment:hover{border-color:var(--line-strong);background:var(--panel-2)}.file-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:8px;background:var(--accent-soft);color:var(--accent);font-weight:800}.file-attachment strong,.file-attachment small{display:block}.file-attachment strong{color:var(--text-strong);font-size:13px}.file-attachment small{color:var(--muted);font-size:11px}.composer{padding:18px 18px 10px;background:var(--bg);display:grid;gap:0;position:relative}.composer-card{display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius-lg);overflow:hidden;transition:border-color .12s ease,box-shadow .12s ease}.composer:focus-within .composer-card{border-color:color-mix(in srgb,var(--accent) 55%,var(--line-strong));box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}.composer-toolbar{display:inline-flex;align-items:center;gap:2px;width:100%;padding:4px 6px;margin:0;border:0;border-top:1px solid var(--line);border-radius:0;background:color-mix(in srgb,var(--panel-2) 35%,transparent);box-shadow:none}.composer-toolbar button{min-width:28px;height:26px;display:grid;place-items:center;border:0;border-radius:6px;background:transparent;color:var(--text);opacity:.78;font-size:11.5px;font-weight:700;transition:background .1s ease,color .1s ease,opacity .1s ease,transform 80ms ease}.composer-toolbar button:hover{background:var(--hover-strong);color:var(--text-strong);opacity:1}.composer-toolbar button.active{background:var(--accent-soft);color:var(--accent);opacity:1}.composer-toolbar button:active{transform:translateY(1px)}.gif-picker{margin-top:8px;margin-bottom:8px;width:min(520px,calc(100vw - 40px));border:1px solid var(--line-strong);border-radius:16px;background:color-mix(in srgb,var(--panel) 96%,transparent);box-shadow:var(--shadow);padding:10px;animation:picker-in .16s cubic-bezier(.2,.8,.2,1)}.gif-picker-head{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:10px;padding:2px 2px 10px}.gif-picker-head strong{color:var(--text-strong);font-size:13px}.gif-picker-head input{min-width:0;height:32px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2)}.gif-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;max-height:240px;overflow-y:auto}.gif-grid button{position:relative;overflow:hidden;aspect-ratio:4 / 3;border:0;border-radius:12px;background:var(--panel-2);color:#fff;padding:0;box-shadow:inset 0 0 0 1px var(--line);transition:transform .12s ease,box-shadow .12s ease}.gif-grid button:hover{transform:translateY(-2px);box-shadow:inset 0 0 0 2px var(--accent),0 14px 30px -22px #000c}.gif-grid img{width:100%;height:100%;display:block;object-fit:cover}.gif-grid span{position:absolute;left:6px;right:6px;bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:999px;background:#0000008f;padding:4px 7px;font-size:10.5px;font-weight:700;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}@keyframes picker-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.composer-row{--composer-control-size: 36px;--composer-line-height: 22px;--composer-text-padding-block: 7px;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:4px;padding:8px 8px 4px 10px;background:transparent;border:0;border-radius:0}.composer:focus-within .composer-toolbar,.composer-row:focus-within{border-color:transparent}.composer-row:focus-within{box-shadow:none}.composer-icon{align-self:start;width:var(--composer-control-size);height:var(--composer-control-size);margin-top:calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2);display:grid;place-items:center;color:var(--muted);border-radius:10px;cursor:pointer;transition:background .12s ease,color .12s ease}.composer-icon:hover{background:var(--hover-strong);color:var(--text-strong)}.composer-icon input[type=file]{position:absolute;inline-size:1px;block-size:1px;opacity:0;pointer-events:none}.composer textarea,.reply-composer textarea{width:100%;height:auto;min-height:44px;max-height:50vh;padding:var(--composer-text-padding-block) 4px;resize:none;color:var(--text);line-height:var(--composer-line-height);font-size:14.5px;align-self:start;overflow-y:auto;box-sizing:border-box}.composer textarea::placeholder,.reply-composer textarea::placeholder{color:var(--muted)}.send{align-self:start;width:var(--composer-control-size);height:var(--composer-control-size);margin-top:calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2);display:grid;place-items:center;border:0;border-radius:10px;background:var(--accent);color:#fff;transition:background .12s ease,transform 80ms ease,opacity .12s ease}.send:hover:not(:disabled){background:var(--accent-2);transform:translateY(-1px)}.send:disabled{background:var(--panel-3);color:var(--muted-2);cursor:not-allowed}.composer-attachment{margin-top:8px;margin-bottom:8px;display:inline-flex;align-items:center;gap:8px;padding:6px 10px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);color:var(--text);font-size:13px;width:fit-content}.attachment-icon{display:grid;place-items:center;width:20px;height:20px;border-radius:6px;background:var(--accent-soft);color:var(--accent)}.pending-image{width:42px;height:32px;object-fit:cover;border-radius:7px;border:1px solid var(--line);background:var(--panel-2)}.attachment-name{max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-remove{width:18px;height:18px;border:0;background:transparent;color:var(--muted);border-radius:50%;font-size:14px;line-height:1}.attachment-remove:hover{background:var(--danger);color:#fff}.composer-hint{color:var(--muted-2);font-size:11px;padding:7px 4px 0}.composer-hint kbd{display:inline-block;background:var(--panel-2);border:1px solid var(--line);border-radius:4px;padding:0 5px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;color:var(--text)}.thread{display:grid;grid-template-rows:auto minmax(0,1fr) auto;background:var(--panel);border-left:1px solid var(--line);min-width:0;overflow:hidden;opacity:0;transform:translate(28px);pointer-events:none;transition:opacity .18s ease,transform .22s cubic-bezier(.2,.8,.2,1)}.thread.open{opacity:1;transform:translate(0);pointer-events:auto}.thread>header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;min-height:60px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.02),transparent),var(--panel)}.thread>header p,.thread>header strong{margin:0}.thread>header p{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em;font-weight:700}.thread>header strong{display:block;color:var(--text-strong);font-size:14px}.thread .close{width:28px;height:28px;border:0;border-radius:50%;background:var(--panel-2);color:var(--muted);font-size:18px;line-height:1}.thread .close:hover{background:var(--panel-3);color:var(--text-strong)}.thread-scroll{overflow-y:auto;padding:12px 16px}.thread-root{display:grid;grid-template-columns:38px minmax(0,1fr);gap:12px;padding-bottom:12px;border-bottom:1px solid var(--line)}.thread-divider{display:flex;align-items:center;gap:10px;margin:14px 0 10px}.thread-divider:before,.thread-divider:after{content:"";flex:1;height:1px;background:var(--line)}.thread-divider span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-weight:700}.reply-list{display:flex;flex-direction:column;gap:10px}.reply{display:grid;grid-template-columns:30px minmax(0,1fr);gap:10px;padding:6px;border-radius:var(--radius-sm)}.reply:hover{background:var(--hover)}.reply-composer{padding:10px 14px 14px;background:var(--panel);border-top:1px solid var(--line)}.reply-composer .composer-row{border-radius:0}.thread-empty{display:grid;place-items:center;align-content:center;gap:8px;padding:32px 24px;text-align:center;grid-row:span 3}.thread-icon{width:56px;height:56px;border-radius:16px;background:var(--panel-2);color:var(--muted);display:grid;place-items:center}.thread-empty strong{color:var(--text-strong);font-size:15px}.thread-empty span{color:var(--muted);font-size:13px;max-width:260px;line-height:1.5}.profile-pane{overflow-y:auto}.profile-hero{min-height:210px;display:grid;place-items:end center;padding:28px 20px;background:linear-gradient(180deg,transparent,rgba(0,0,0,.24)),linear-gradient(135deg,hsl(var(--hue, 220deg) 76% 58%),hsl(calc(var(--hue, 220deg) + 54deg) 74% 38%));border-bottom:1px solid var(--line)}.profile-avatar{width:min(240px,70%);aspect-ratio:1;display:grid;place-items:center;overflow:hidden;border-radius:16px;background:#ffffff2e;color:#fff;font-size:clamp(48px,12vw,88px);font-weight:800;box-shadow:0 26px 60px -30px #000000e6}.profile-avatar img{width:100%;height:100%;object-fit:cover}.profile-pane-body{display:grid;gap:18px;padding:18px 16px 22px}.profile-pane-title{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.profile-pane-title h2{margin:0;color:var(--text-strong);font-size:22px;letter-spacing:0}.profile-pane-title span{display:block;margin-top:3px;color:var(--muted);font-size:13px}.text-action{border:0;border-radius:6px;background:transparent;color:var(--accent);font-size:13px;font-weight:700;padding:4px 6px}.text-action:hover{background:var(--accent-soft)}.profile-presence{display:inline-flex;align-items:center;gap:8px;color:var(--text);font-size:14px}.profile-actions-row{display:flex;gap:8px;flex-wrap:wrap}.profile-actions-row .primary-action,.profile-actions-row .ghost-action{min-width:110px}.profile-info{display:grid;gap:12px;padding-top:18px;border-top:1px solid var(--line)}.profile-info header{display:flex;align-items:center;justify-content:space-between;gap:10px}.profile-info header strong{color:var(--text-strong);font-size:14px}.profile-info-row{display:grid;grid-template-columns:34px minmax(0,1fr);gap:10px;align-items:center}.info-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:9px;background:var(--panel-2);color:var(--muted);font-size:11px;font-weight:800}.profile-info-row small,.profile-info-row span{display:block}.profile-info-row small{color:var(--muted);font-size:11px}.profile-info-row span{color:var(--text);font-size:13px;overflow-wrap:anywhere}.profile-note{margin:0;color:var(--muted);line-height:1.5;font-size:13px}.modal-scrim{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:24px;background:#05080f8a;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.modal-backdrop{position:absolute;inset:0;border:0;background:transparent}.modal-backdrop:focus{outline:0}.profile-modal{position:relative;z-index:1;width:min(480px,100%);border:1px solid var(--line-strong);border-radius:14px;background:var(--panel);color:var(--text);box-shadow:var(--shadow);overflow:hidden}.profile-modal>header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 20px;border-bottom:1px solid var(--line);background:var(--panel-2)}.profile-modal p{margin:0 0 3px;color:var(--muted);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}.profile-modal h2{margin:0;color:var(--text-strong);font-size:20px;letter-spacing:0}.profile-modal>header button{width:32px;height:32px;border:0;border-radius:8px;background:transparent;color:var(--muted);font-size:22px}.profile-modal>header button:hover{background:var(--hover);color:var(--text-strong)}.profile-form{display:grid;gap:14px;padding:20px}.profile-preview{display:flex;align-items:center;gap:14px;padding:14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2)}.profile-preview strong,.profile-preview span{display:block}.profile-preview strong{color:var(--text-strong);font-size:15px}.profile-preview span{color:var(--muted);font-size:13px}.field{display:grid;gap:6px}.field span{color:var(--muted);font-size:12px;font-weight:700}.field input{width:100%;height:38px;padding:0 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);color:var(--text)}.field input:focus{border-color:var(--accent);outline:0;box-shadow:0 0 0 3px var(--accent-soft)}.profile-status{color:var(--success);font-size:12px}.profile-status.error{color:var(--danger)}.profile-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:4px}.ghost-action,.primary-action{height:36px;padding:0 14px;border-radius:var(--radius-sm);font-weight:700}.ghost-action{border:1px solid var(--line);background:var(--panel);color:var(--text)}.primary-action{border:0;background:var(--accent);color:#fff}.ghost-action:hover{background:var(--hover)}.primary-action:hover{filter:brightness(1.04)}.image-viewer-scrim{padding:28px;background:#000000c7;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.image-viewer{position:relative;z-index:1;display:grid;grid-template-rows:auto minmax(0,1fr);width:min(1120px,100%);max-height:min(86vh,900px);overflow:hidden;border-radius:14px;background:#07090f;color:#fff;box-shadow:0 34px 90px -34px #000000f2;animation:picker-in .15s cubic-bezier(.2,.8,.2,1)}.image-viewer>header{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:52px;padding:10px 12px 10px 16px;border-bottom:1px solid rgba(255,255,255,.1);background:#ffffff0a}.image-viewer>header strong{min-width:0;overflow:hidden;color:#fff;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.image-viewer>header div{display:inline-flex;align-items:center;gap:8px;flex-shrink:0}.image-viewer>header a{height:30px;display:inline-flex;align-items:center;padding:0 10px;border-radius:7px;background:#ffffff14;color:#fff;font-size:12px;font-weight:700;text-decoration:none}.image-viewer>header a:hover{background:#ffffff24}.image-viewer>header button{width:30px;height:30px;display:grid;place-items:center;border:0;border-radius:7px;background:transparent;color:#ffffffc7;font-size:22px;line-height:1}.image-viewer>header button:hover{background:#ffffff1f;color:#fff}.image-viewer-stage{display:grid;place-items:center;min-height:0;padding:18px}.image-viewer-stage img{display:block;max-width:100%;max-height:calc(86vh - 96px);object-fit:contain;border-radius:8px;background:#ffffff0a}.mobile-nav-toggle{display:none;position:fixed;top:14px;left:14px;z-index:30;width:38px;height:38px;border-radius:10px;border:1px solid var(--line-strong);background:var(--panel);color:var(--text);font-size:22px;line-height:1}.mobile-nav-toggle .bars{display:grid;gap:3px}.mobile-nav-toggle .bars i{display:block;width:16px;height:2px;background:currentColor;border-radius:2px}@media(max-width:1180px){.shell{grid-template-columns:72px 240px minmax(0,1fr)}.shell.sidebar-collapsed,.shell.sidebar-collapsed.thread-open{grid-template-columns:72px 0 minmax(0,1fr)}.thread{position:fixed;inset:0 0 0 auto;width:min(420px,100vw);box-shadow:var(--shadow);transform:translate(100%);transition:transform .18s ease;z-index:4;border-left:1px solid var(--line-strong)}.thread.open{transform:translate(0)}}@media(max-width:820px){.mobile-nav-toggle{display:grid;place-items:center}.shell,.shell.thread-open,.shell.sidebar-collapsed,.shell.sidebar-collapsed.thread-open{grid-template-columns:1fr}.sidebar-collapsed .sidebar{opacity:1;pointer-events:auto;transform:translate(-100%)}.guild-rail,.sidebar{position:fixed;inset:0 auto 0 0;z-index:20;transform:translate(-100%);transition:transform .18s ease}.guild-rail{width:72px}.sidebar{left:72px;width:260px}.nav-open .guild-rail,.nav-open .sidebar{transform:translate(0)}.topbar{padding-left:64px}.search{width:180px}}@media(max-width:520px){.search,.topbar-meta,.topbar-divider{display:none}}.message-row.highlight,.thread-root.highlight,.reply.highlight{animation:quote-flash 1.4s ease-out}@keyframes quote-flash{0%{background:#6366f138}to{background:transparent}}.quote-block{display:inline-flex;align-items:stretch;gap:.5rem;margin:0 0 .35rem;padding:.25rem .5rem .25rem 0;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;text-align:left;max-width:100%;font:inherit}.quote-block:hover:not(:disabled){background:#6366f114}.quote-block:disabled{cursor:default;opacity:.75}.quote-block .quote-bar{width:3px;align-self:stretch;background:var(--accent, #6366f1);border-radius:2px;flex:0 0 3px}.quote-block .quote-content{display:flex;flex-direction:column;gap:.1rem;min-width:0}.quote-block .quote-author{font-size:.78rem;font-weight:600;color:var(--accent, #6366f1)}.quote-block .quote-snippet{font-size:.85rem;color:var(--text-muted, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:56ch}.quote-block .quote-snippet.muted{font-style:italic;opacity:.75}.quote-preview{display:flex;align-items:center;gap:.5rem;padding:6px 10px 6px 12px;margin:0;background:color-mix(in srgb,var(--accent) 5%,transparent);border:0;border-bottom:1px solid var(--line);border-radius:0;font-size:12.5px;color:var(--muted)}.quote-preview .quote-bar{display:none}.quote-preview-body{display:flex;align-items:baseline;gap:.4rem;flex:1;min-width:0;overflow:hidden}.quote-preview-label{font-size:12px;color:color-mix(in srgb,var(--accent) 85%,var(--text));white-space:nowrap}.quote-preview-label strong{color:var(--text-strong);font-weight:600}.quote-preview-snippet{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted);font-size:12px;flex:1;min-width:0}.quote-preview-clear{background:transparent;border:0;color:var(--muted);font-size:16px;line-height:1;cursor:pointer;padding:2px 6px;border-radius:6px;transition:background .1s ease,color .1s ease}.quote-preview-clear:hover{color:var(--text-strong);background:var(--hover-strong)}.reply-quote-btn{position:relative;margin-left:auto;background:transparent;border:0;color:var(--text-muted, #6b7280);cursor:pointer;font-size:.95rem;padding:0 .3rem;opacity:0;transition:opacity .15s}.reply:hover .reply-quote-btn,.thread-root:hover .reply-quote-btn,.reply-quote-btn:focus-visible{opacity:1}.reply-quote-btn:hover{color:var(--accent, #6366f1)}.tooltip{position:relative}.tooltip:before,.reply-quote-btn:before{content:attr(data-tooltip);position:absolute;left:50%;bottom:calc(100% + 12px);z-index:20;transform:translate(-50%,4px) scale(.96);padding:.42rem .62rem;border-radius:9px;background:#3a3a44;color:#f4f4f7;box-shadow:0 10px 28px #00000047;font-size:.78rem;font-weight:700;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .12s ease,transform .12s ease}.tooltip:after,.reply-quote-btn:after{content:"";position:absolute;left:50%;bottom:calc(100% + 5px);z-index:20;width:12px;height:12px;border-radius:2px;background:#3a3a44;transform:translate(-50%,4px) rotate(45deg) scale(.9);opacity:0;pointer-events:none;transition:opacity .12s ease,transform .12s ease}.tooltip:hover:before,.tooltip:focus-visible:before,.reply-quote-btn:hover:before,.reply-quote-btn:focus-visible:before,.tooltip:hover:after,.tooltip:focus-visible:after,.reply-quote-btn:hover:after,.reply-quote-btn:focus-visible:after{opacity:1;transform:translate(-50%) scale(1)}.tooltip:hover:after,.tooltip:focus-visible:after,.reply-quote-btn:hover:after,.reply-quote-btn:focus-visible:after{transform:translate(-50%) rotate(45deg) scale(1)} +.product-site{min-height:100vh;background:#f7f3ea;color:#151716;font-family:Avenir Next,Segoe UI,ui-sans-serif,system-ui,sans-serif}.product-site a{color:inherit;text-decoration:none}.hero{position:relative;display:grid;min-height:clamp(680px,92vh,920px);overflow:hidden;isolation:isolate;background:linear-gradient(90deg,#0c1f23c7,#0c1f232e 62%,#0c1f23b3),#103033;color:#fff8ee}.hero:after{position:absolute;inset:auto 0 0;height:22vh;min-height:130px;background:linear-gradient(0deg,#f7f3ea 8%,#f7f3ea00);content:"";z-index:-1}.hero:before{position:absolute;inset:0 38% 0 0;background:linear-gradient(90deg,#081c1efa,#081c1e00);content:"";z-index:-1}.hero-bg{position:absolute;inset:0 0 0 clamp(260px,28vw,460px);display:grid;grid-template-columns:92px minmax(360px,1fr) minmax(260px,28vw);gap:18px;padding:102px clamp(18px,5vw,70px) 80px;opacity:.36;z-index:-2}.workspace-rail,.timeline-preview,.thread-preview{border:1px solid rgba(255,248,238,.24);background:#fff8ee1f;box-shadow:0 28px 90px #0000003d;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.workspace-rail{display:grid;align-content:start;gap:14px;padding:16px}.workspace-rail span{display:grid;place-items:center;min-height:54px;border-radius:8px;background:#fff8ee2e;color:#fff8ee;font-weight:900;text-transform:uppercase}.timeline-preview{align-self:stretch;padding:clamp(18px,3vw,34px)}.preview-top{display:flex;justify-content:space-between;margin-bottom:48px;color:#b9ddd9;font-weight:800}.preview-top strong{color:#7ce0b5}.timeline-preview article,.thread-preview{max-width:720px;margin:0 0 18px;border-radius:8px;background:#fff8ee29;padding:18px}.timeline-preview b,.thread-preview span{color:#ff8a70}.timeline-preview p,.thread-preview p{margin:6px 0 0;color:#fff8ee;font-size:clamp(17px,1.8vw,24px)}.timeline-preview code{border-radius:5px;background:#0c1f2394;padding:2px 5px}.thread-line{margin-left:clamp(0px,8vw,130px)}.thread-preview{align-self:center;min-height:260px}.product-nav{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:24px clamp(18px,5vw,70px);font-weight:800}.product-nav>div{display:flex;gap:clamp(14px,3vw,34px)}.brand-lockup{display:inline-flex;align-items:center;gap:10px}.brand-mark{display:grid;place-items:center;width:40px;height:40px;border-radius:8px;background:#ff6f55;color:#151716;font-weight:950;text-transform:uppercase}.hero-copy{position:relative;z-index:2;align-self:center;width:min(780px,calc(100vw - 36px));padding:0 clamp(18px,5vw,70px) 16vh}.eyebrow,.section-kicker{margin:0 0 14px;color:#ffb09f;font-size:13px;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.hero h1,.product-band h2{margin:0;letter-spacing:0}.hero h1{font-family:Georgia,Times New Roman,serif;font-size:clamp(66px,13vw,152px);font-weight:900;line-height:.9}.lede{width:min(680px,100%);margin:26px 0 0;color:#fff3df;font-size:clamp(20px,2.2vw,31px);line-height:1.18}.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}.primary-action,.secondary-action{display:inline-flex;align-items:center;justify-content:center;min-height:48px;border-radius:8px;padding:0 18px;font-weight:950}.primary-action{background:#ff6f55;color:#151716}.secondary-action{border:1px solid rgba(255,248,238,.42);color:#fff8ee}.product-band{display:grid;grid-template-columns:minmax(260px,.9fr) minmax(280px,1.1fr);gap:clamp(28px,6vw,90px);padding:clamp(58px,8vw,112px) clamp(18px,5vw,70px)}.product-band h2{max-width:720px;font-size:clamp(34px,5vw,74px);line-height:.96}.product-band p{margin:0;color:#3f4743;font-size:clamp(18px,2.1vw,27px);line-height:1.34}.intro-band{padding-top:0}.intro-band .section-kicker,.cli-band .section-kicker,.docs-band .section-kicker{color:#b84632}.feature-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-block:1px solid #c8c0b2}.feature-grid article{min-height:250px;border-right:1px solid #c8c0b2;padding:clamp(22px,3vw,40px)}.feature-grid article:nth-child(2n){background:#e8f0e9}.feature-grid article:last-child{border-right:0}.feature-grid h3{margin:0 0 44px;font-size:24px}.feature-grid p{margin:0;color:#48504c;line-height:1.45}.cli-band{background:#162a2d;color:#fff8ee}.cli-band p{color:#c9d8d4}.cli-band pre{overflow:auto;align-self:start;margin:0;border:1px solid rgba(255,248,238,.18);border-radius:8px;background:#071314;color:#bdf1dc;padding:clamp(18px,3vw,32px);line-height:1.7}.docs-band{background:#fffaf0}.destination-list{display:grid;gap:12px}.destination-list a{display:flex;justify-content:space-between;gap:20px;border-top:1px solid #cbc2b3;padding:18px 0;font-size:clamp(21px,3vw,40px);font-weight:900}.destination-list span{color:#6f7772;font-size:15px;font-weight:700;text-align:right}@media(prefers-color-scheme:dark){.product-site{background:#101616;color:#fff8ee}.hero:after{background:linear-gradient(0deg,#101616 8%,#10161600)}.product-band p,.feature-grid p,.destination-list span{color:#bac7c3}.feature-grid{border-color:#34413e}.feature-grid article{border-color:#34413e}.feature-grid article:nth-child(2n),.docs-band{background:#182221}}@media(max-width:900px){.hero:before{inset-right:0}.hero-bg{inset:0;grid-template-columns:58px minmax(0,1fr);padding-top:90px;opacity:.38}.thread-preview{display:none}.product-band,.feature-grid{grid-template-columns:1fr}.feature-grid article,.feature-grid article:last-child{min-height:0;border-right:0;border-bottom:1px solid #c8c0b2}}@media(max-width:620px){.product-nav{align-items:flex-start;flex-direction:column}.hero{min-height:760px}.hero-bg{grid-template-columns:1fr;opacity:.42}.workspace-rail{display:none}.hero-copy{padding-bottom:90px}.destination-list a{flex-direction:column}.destination-list span{text-align:left}}:root{color-scheme:light dark;font-family:Inter,SF Pro Text,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-feature-settings:"ss01","cv11";--rail: #e9e1d7;--bg: #f7f3ed;--panel: #fffaf2;--panel-2: #efe7dc;--panel-3: #e4dbcf;--hover: rgba(16, 32, 39, .05);--hover-strong: rgba(16, 32, 39, .08);--line: rgba(16, 32, 39, .1);--line-strong: rgba(16, 32, 39, .16);--text: #22201d;--text-strong: #11100e;--muted: #6f675f;--muted-2: #958b80;--accent: #dd5d45;--accent-2: #006d77;--accent-soft: rgba(221, 93, 69, .16);--accent-glow: 0 0 0 1px rgba(221, 93, 69, .28), 0 8px 30px -12px rgba(221, 93, 69, .45);--success: #168b51;--warn: #f5b050;--danger: #c84343;--shadow: 0 24px 60px -24px rgba(16, 32, 39, .32);--radius-sm: 6px;--radius: 8px;--radius-lg: 14px;--radius-xl: 18px;background:var(--bg);color:var(--text)}@media(prefers-color-scheme:dark){:root{--rail: #0d0e12;--bg: #131419;--panel: #1a1b22;--panel-2: #20222b;--panel-3: #272a35;--hover: rgba(255, 255, 255, .04);--hover-strong: rgba(255, 255, 255, .07);--line: rgba(255, 255, 255, .07);--line-strong: rgba(255, 255, 255, .12);--text: #e7e9ee;--text-strong: #ffffff;--muted: #8a8f9c;--muted-2: #5d626d;--accent: #6f7eff;--accent-2: #5666ee;--accent-soft: rgba(111, 126, 255, .18);--accent-glow: 0 0 0 1px rgba(111, 126, 255, .4), 0 8px 30px -12px rgba(111, 126, 255, .6);--success: #2ecc71;--warn: #f5b050;--danger: #ff6b6b;--shadow: 0 24px 60px -20px rgba(0, 0, 0, .6)}}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%}body{background:radial-gradient(1000px 600px at 0% 0%,rgba(111,126,255,.08),transparent 60%),radial-gradient(900px 700px at 100% 100%,rgba(255,130,200,.05),transparent 60%),var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,textarea{font:inherit;color:inherit}button{cursor:pointer}input,textarea{background:transparent;border:0;outline:0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:999px;border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#ffffff1f;background-clip:content-box}.auth-shell{display:grid;min-height:100vh;place-items:center;padding:32px;background:radial-gradient(700px 500px at 30% 20%,rgba(111,126,255,.18),transparent 60%),radial-gradient(700px 500px at 80% 90%,rgba(255,110,196,.12),transparent 60%),var(--bg)}.auth-panel{display:grid;gap:22px;width:min(100%,440px);border:1px solid var(--line-strong);border-radius:var(--radius-xl);background:linear-gradient(180deg,#ffffff0a,#fff0) var(--panel);box-shadow:var(--shadow);padding:36px}.auth-brand{display:flex;align-items:center;gap:12px}.auth-brand .mark{width:44px;height:44px;display:grid;place-items:center;border-radius:12px;background:linear-gradient(135deg,var(--accent),#b46cff);color:#fff;font-weight:800;letter-spacing:-.02em;box-shadow:0 10px 24px -8px #6f7effb3}.auth-brand .brand-text strong{display:block;color:var(--text-strong);letter-spacing:-.01em}.auth-brand .brand-text span{display:block;color:var(--muted);font-size:12px}.auth-copy{display:grid;gap:8px;margin-top:8px}.auth-copy h1{margin:0;font-size:28px;letter-spacing:-.02em;color:var(--text-strong)}.auth-copy p{margin:0;color:var(--muted);line-height:1.5}.github-login{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:46px;border-radius:12px;background:#0d1117;color:#fff;font-weight:600;text-decoration:none;border:1px solid #2b2f36;transition:transform 80ms ease,background .12s ease,border-color .12s ease}.github-login:hover{background:#161b22;border-color:#3f4750;transform:translateY(-1px)}.auth-foot{margin:0;color:var(--muted-2);font-size:12px;text-align:center}.shell{display:grid;grid-template-columns:72px 260px minmax(0,1fr) 0;height:100vh;min-height:100vh;overflow:hidden;transition:grid-template-columns .22s cubic-bezier(.2,.8,.2,1)}.shell.thread-open{grid-template-columns:72px 260px minmax(0,1fr) minmax(340px,28vw)}.shell.sidebar-collapsed{grid-template-columns:72px 0 minmax(0,1fr) 0}.shell.sidebar-collapsed.thread-open{grid-template-columns:72px 0 minmax(0,1fr) minmax(340px,28vw)}.timeline{display:flex;flex-direction:column;min-width:0;background:var(--bg);overflow:hidden}.timeline>*{min-width:0;flex-shrink:0}.timeline>.messages{flex:1 1 0;min-height:0}.topbar{display:flex;align-items:center;gap:14px;padding:12px 20px;min-height:60px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.02),transparent),var(--bg)}.topbar-title{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.topbar-title h1{margin:0;font-size:16px;font-weight:700;letter-spacing:-.01em;color:var(--text-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-title h1.with-glyph:first-letter{color:var(--muted);margin-right:1px}.topbar-divider{width:1px;height:18px;background:var(--line-strong);margin:0 6px}.topbar-meta{margin:0;color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search{display:flex;align-items:center;gap:8px;width:min(280px,30vw);height:34px;padding:0 10px;border-radius:var(--radius);background:var(--panel);border:1px solid var(--line);color:var(--muted);transition:border-color .12s ease,background .12s ease}.search:focus-within{border-color:var(--accent);background:var(--panel-2);color:var(--text)}.search input{flex:1;min-width:0;height:100%;color:var(--text)}.search input::placeholder{color:var(--muted)}.search-clear{width:18px;height:18px;border-radius:50%;border:0;background:var(--panel-3);color:var(--muted);display:grid;place-items:center;font-size:14px;line-height:1}.search-clear:hover{background:var(--accent);color:#fff}.search-submit{height:22px;padding:0 8px;border:0;border-radius:5px;background:var(--accent-soft);color:var(--accent);font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.search-submit:hover{background:var(--accent);color:#fff}.topbar-actions{display:inline-flex;align-items:center;gap:6px}.topbar-actions button{width:32px;height:32px;display:grid;place-items:center;border:1px solid var(--line);border-radius:9px;background:var(--panel);color:var(--muted);transition:background .12s ease,color .12s ease,border-color .12s ease,transform 80ms ease}.topbar-actions button:hover,.topbar-actions button.active{background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent) 55%,transparent);color:var(--accent)}.topbar-actions button:active{transform:translateY(1px)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.search-results{display:flex;flex-direction:column;gap:2px;padding:10px 14px 14px;border-bottom:1px solid var(--line);background:var(--panel);max-height:280px;overflow-y:auto}.search-results-head{display:flex;align-items:center;justify-content:space-between;padding:0 6px 8px}.search-results-head strong{color:var(--text-strong);font-size:13px}.search-results-head button{border:0;background:transparent;color:var(--muted);font-size:12px;padding:4px 8px;border-radius:var(--radius-sm)}.search-results-head button:hover{background:var(--hover);color:var(--text)}.search-result{display:flex;align-items:flex-start;gap:10px;border:0;background:transparent;color:var(--text);padding:8px;border-radius:var(--radius-sm);text-align:left}.search-result:hover{background:var(--hover)}.search-result .dm-avatar{width:30px;height:30px;font-size:13px}.search-result-body{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.search-result-body>div{display:flex;align-items:baseline;gap:8px}.search-result-body strong{color:var(--text-strong);font-size:13px}.search-result-body time{color:var(--muted);font-size:11px}.search-result-body span{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.guild-rail{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px 0;background:var(--rail);border-right:1px solid var(--line);overflow-y:auto;position:relative}.guild-rail .guild{width:48px;height:48px;border-radius:16px;display:grid;place-items:center;background:var(--panel-2);color:var(--text);border:0;font-weight:700;font-size:14px;letter-spacing:-.02em;position:relative;transition:border-radius .14s ease,background .12s ease,transform .12s ease;box-shadow:0 1px #ffffff0a inset}.guild-rail .guild:hover{border-radius:12px;background:var(--accent);color:#fff;box-shadow:0 8px 24px -10px #6f7eff99}.guild-rail .guild.home{background:linear-gradient(135deg,var(--accent),#b46cff);color:#fff;font-weight:800}.guild-rail .guild.home:hover{border-radius:12px;filter:brightness(1.1)}.guild-rail .guild.add{background:transparent;color:var(--success);border:1px dashed rgba(46,204,113,.4)}.guild-rail .guild.add:hover{background:#2ecc711f;color:#fff;border-style:solid;border-color:var(--success)}.guild-divider{width:36px;height:1px;background:var(--line-strong);margin:4px 0}.guild-list{display:flex;flex-direction:column;align-items:center;gap:8px}.guild-wrap{position:relative}.guild-wrap:before{content:"";position:absolute;left:-14px;top:50%;transform:translateY(-50%) scaleY(.2);width:4px;height:28px;border-radius:0 4px 4px 0;background:var(--text-strong);opacity:0;transition:opacity .14s ease,transform .14s ease}.guild-wrap:hover:before{opacity:.6;transform:translateY(-50%) scaleY(.5)}.guild-wrap.active:before{opacity:1;transform:translateY(-50%) scaleY(1)}.guild-wrap.active .guild{border-radius:14px;background:var(--accent);color:#fff}.guild-create{position:absolute;left:100%;top:14px;margin-left:8px;background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius);padding:8px;box-shadow:var(--shadow);z-index:20}.guild-create input{height:32px;padding:0 10px;width:200px;border-radius:var(--radius-sm);background:var(--panel-2);color:var(--text)}.sidebar{display:grid;grid-template-rows:auto minmax(0,1fr) auto;background:var(--panel);border-right:1px solid var(--line);overflow:hidden;min-width:0;transition:opacity .16s ease,transform .22s cubic-bezier(.2,.8,.2,1)}.sidebar-collapsed .sidebar{opacity:0;pointer-events:none;transform:translate(-14px)}.workspace-header{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;min-height:60px}.sidebar-collapse{width:30px;height:30px;display:grid;place-items:center;border:0;border-radius:8px;background:var(--panel-2);color:var(--muted);transition:color .12s ease,background .12s ease,transform .12s ease}.sidebar-collapse:hover{background:var(--panel-3);color:var(--text-strong);transform:translate(-1px)}.workspace-name{display:flex;flex-direction:column;gap:2px;min-width:0}.workspace-name strong{color:var(--text-strong);letter-spacing:-.01em;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.workspace-name .presence{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:11px}.workspace-name .presence:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--muted-2)}.workspace-name .presence.online{color:var(--success)}.workspace-name .presence.online:before{background:var(--success);box-shadow:0 0 0 3px #2ecc712e}.sidebar-scroll{overflow-y:auto;padding:12px 8px 16px}.nav-section+.nav-section{margin-top:12px}.section-title{display:flex;align-items:center;gap:6px;width:100%;border:0;background:transparent;color:var(--muted);text-transform:uppercase;font-size:11px;font-weight:700;letter-spacing:.04em;padding:6px 8px;border-radius:var(--radius-sm)}.section-title:hover{color:var(--text);background:var(--hover)}.section-title .caret{font-size:10px;opacity:.7}.section-title .label{flex:1;text-align:left}.section-title .add-button{width:18px;height:18px;border-radius:4px;display:grid;place-items:center;font-size:14px;font-weight:700;background:#ffffff0f;color:var(--text)}.section-title:hover .add-button{background:var(--accent);color:#fff}.nav-list{display:flex;flex-direction:column;gap:1px;margin-top:4px}.nav-item{display:flex;align-items:center;gap:8px;width:100%;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--muted);text-align:left;padding:6px 10px;min-height:30px;transition:background .1s ease,color .1s ease}.nav-item:hover{background:var(--hover);color:var(--text)}.nav-item.active{background:var(--accent-soft);color:var(--text-strong)}.nav-item .hash{color:var(--muted);font-weight:600;width:14px;text-align:center}.nav-item.active .hash{color:var(--accent)}.nav-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px}.nav-empty{margin:4px 8px;color:var(--muted-2);font-size:12px}.dm-avatar{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:700;color:#fff;background:linear-gradient(135deg,hsl(var(--hue, 220deg) 70% 55%),hsl(calc(var(--hue, 220deg) + 40deg) 70% 45%));flex-shrink:0;overflow:hidden}.dm-avatar img,.avatar img{width:100%;height:100%;display:block;object-fit:cover}.presence-dot{width:8px;height:8px;border-radius:50%;background:var(--muted-2);flex-shrink:0}.presence-dot.active{background:var(--success);box-shadow:0 0 0 2px var(--panel)}.inline-create{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;margin:6px 4px 2px}.inline-create input{width:100%;min-width:0;height:30px;padding:0 10px;border-radius:var(--radius-sm);background:var(--panel-2);color:var(--text);border:1px solid var(--line)}.inline-create input:focus{border-color:var(--accent);background:var(--panel-3)}.inline-create button.ghost,button.ghost{width:30px;height:30px;border:0;border-radius:var(--radius-sm);background:var(--panel-3);color:var(--muted);font-weight:600;padding:0;font-size:14px;display:grid;place-items:center}.inline-create button.ghost:hover{background:var(--accent);color:#fff}.user-card{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:var(--panel-2);border-top:1px solid var(--line);border-right:0;border-bottom:0;border-left:0;color:inherit;text-align:left;cursor:pointer;transition:background .12s ease}.user-card:hover{background:var(--panel-3)}.user-card .dm-avatar{width:28px;height:28px;font-size:12px}.user-card .user-meta{flex:1;min-width:0}.user-card .user-meta strong{display:block;color:var(--text-strong);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-card .user-meta span{display:block;color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.messages{overflow-y:auto;padding:16px 4px 24px;scroll-behavior:smooth}.empty{display:grid;place-items:center;align-content:center;text-align:center;gap:10px;min-height:50vh;padding:48px 24px}.empty-icon{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,var(--accent),#b46cff);color:#fff;display:grid;place-items:center;font-size:26px;font-weight:800;box-shadow:0 18px 40px -16px #6f7effb3}.empty strong{color:var(--text-strong);font-size:18px;letter-spacing:-.01em}.empty span{color:var(--muted);max-width:380px;line-height:1.5}.day-divider{display:flex;align-items:center;gap:12px;margin:18px 18px 8px;position:sticky;top:0;z-index:1;pointer-events:none}.day-divider:before,.day-divider:after{content:"";flex:1;height:1px;background:var(--line)}.day-divider span{background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:4px 12px;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.message-group{display:grid;grid-template-columns:56px minmax(0,1fr);padding:8px 18px;position:relative}.message-group:hover{background:var(--hover)}.avatar{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;color:#fff;font-weight:700;font-size:14px;background:linear-gradient(135deg,hsl(var(--hue, 220deg) 70% 55%),hsl(calc(var(--hue, 220deg) + 40deg) 70% 45%));box-shadow:0 6px 20px -10px #0009;margin-top:2px;overflow:hidden}.avatar-button{position:relative;z-index:2;border:0;padding:0;cursor:pointer;transition:transform .1s ease,box-shadow .12s ease,filter .12s ease}.avatar-button:hover{transform:translateY(-1px);filter:brightness(1.05);box-shadow:0 10px 24px -12px #000c}.avatar.small{width:30px;height:30px;font-size:12px;border-radius:10px}.avatar.large{width:56px;height:56px;border-radius:16px;font-size:18px;margin:0}.group-body{min-width:0}.group-body>header{display:flex;align-items:baseline;gap:8px;margin-bottom:2px}.group-body>header strong{color:var(--text-strong);font-size:14.5px;letter-spacing:-.005em;font-weight:700}.author-name{border:0;background:transparent;color:var(--text-strong);padding:0;border-radius:4px;font-size:14.5px;letter-spacing:0;font-weight:700}.author-name:hover{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.group-body>header time{color:var(--muted);font-size:11px}.group-body>header span{color:var(--muted);font-size:12px}.message-row{margin-left:-56px;padding:1px 0 1px 56px;position:relative;border-radius:0;transition:background 80ms ease}.message-row:not(:first-child){margin-top:1px}.message-row:hover{background:var(--hover-strong)}.message-row.selected{background:var(--accent-soft)}.message-row.selected:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent)}.row-stamp{position:absolute;left:8px;top:4px;font-size:10px;color:var(--muted-2);opacity:0;font-variant-numeric:tabular-nums}.message-row:hover .row-stamp{opacity:1}.message-content{min-width:0}.message-actions{display:flex;align-items:flex-start;gap:4px;opacity:0;transform:translateY(-50%);position:absolute;right:8px;top:0;background:var(--panel);border:1px solid var(--line-strong);border-radius:8px;padding:2px;box-shadow:var(--shadow);transition:opacity .1s ease,transform .1s ease}.message-row:hover .message-actions,.message-row.selected .message-actions{opacity:1}.message-actions button{width:28px;height:28px;display:grid;place-items:center;border:0;border-radius:6px;background:transparent;color:var(--muted)}.message-actions button:hover{background:var(--hover-strong);color:var(--text-strong)}.markdown{line-height:1.5;color:var(--text);font-size:14.5px;overflow-wrap:anywhere;word-break:break-word}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown p{margin:0}.markdown p+p,.markdown ul,.markdown ol,.markdown blockquote,.markdown pre{margin-top:6px}.markdown a{color:var(--accent);text-decoration:none}.markdown a:hover{text-decoration:underline}.markdown code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}.markdown pre{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;overflow-x:auto}.markdown pre code{background:transparent;border:0;padding:0}.markdown blockquote{border-left:3px solid var(--accent);margin:0;padding:4px 0 4px 12px;color:var(--muted)}.markdown ul,.markdown ol{padding-left:22px}.markdown img{max-width:100%;max-height:360px;border-radius:var(--radius);margin-top:6px;border:1px solid var(--line);object-fit:contain;background:var(--panel);cursor:zoom-in}.attachment-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;margin-top:8px;max-width:560px}.attachment-grid.compact{grid-template-columns:minmax(0,1fr);max-width:420px}.media-tile{position:relative;display:block;width:100%;margin:0;padding:0;border:1px solid var(--line);border-radius:var(--radius-lg);background:#0a0c12;overflow:hidden;isolation:isolate;text-align:left;color:inherit;text-decoration:none;cursor:pointer;transition:border-color .14s ease,transform .14s ease,box-shadow .14s ease}.media-tile:hover{border-color:var(--line-strong);box-shadow:0 18px 40px -28px #000000e6}.media-tile:focus-visible{outline:none;border-color:var(--line-strong);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 35%,transparent)}.media-tile--image{cursor:zoom-in}.media-tile__open{display:block;width:100%;margin:0;padding:0;border:0;background:transparent;color:inherit;cursor:zoom-in}.media-tile__open:focus{outline:0}.media-tile__open:focus-visible+.media-tile__caption .media-tile__name{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.media-tile--video{cursor:default}.media-tile img,.media-tile video{display:block;width:100%;max-height:360px;object-fit:contain;background:#05070d}.media-tile--image img{max-height:320px}.media-tile__caption{position:absolute;inset:auto 0 0;z-index:3;display:flex;align-items:center;gap:8px;padding:22px 10px 8px;background:linear-gradient(to top,#000000c7,#00000080 40%,#0000);opacity:0;pointer-events:auto;transition:opacity .14s ease}.media-tile:hover .media-tile__caption,.media-tile:focus-within .media-tile__caption{opacity:1}.media-tile--video.is-started .media-tile__caption{display:none}.media-tile__name{flex:1;min-width:0;color:#fff;font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.6)}.media-tile__chip{position:relative;z-index:4;display:inline-grid;place-items:center;width:28px;height:28px;flex:none;border-radius:8px;background:#00000080;color:#fff;border:1px solid rgba(255,255,255,.18);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);text-decoration:none;transition:background .12s ease,border-color .12s ease,transform .12s ease}.media-tile__chip:hover{background:#000000b3;border-color:#ffffff52;transform:translateY(-1px)}.media-tile__play{position:absolute;inset:0 0 48px;display:grid;place-items:center;width:100%;height:auto;border:0;margin:0;padding:0;background:transparent;cursor:pointer;z-index:1}.media-tile__play:before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at center,#0000002e,#0000000d 45%,#0000 70%);opacity:.7;transition:opacity .16s ease;pointer-events:none}.media-tile__play:hover:before{opacity:.9}.media-tile__play-icon{position:relative;display:grid;place-items:center;width:46px;height:46px;border-radius:999px;background:#0000008c;color:#fff;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 6px 20px -8px #0000008c;padding-left:3px;transition:transform .2s cubic-bezier(.2,.8,.2,1),background .18s ease,box-shadow .2s ease}.media-tile__play-icon svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.4))}.media-tile__play:hover .media-tile__play-icon{transform:scale(1.06);background:#000000b3;box-shadow:0 10px 28px -10px #000000a6}.media-tile__play:active .media-tile__play-icon{transform:scale(.97);transition-duration:80ms}.media-tile__play:focus-visible{outline:none}.media-tile__play:focus-visible .media-tile__play-icon{box-shadow:0 0 0 2px #fff9,0 10px 28px -10px #000000a6}.media-tile__duration{position:absolute;left:8px;bottom:8px;z-index:2;padding:2px 6px;border-radius:4px;background:#000000b8;color:#fff;font-size:11px;font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:.02em;pointer-events:none}.file-attachment{display:flex;align-items:center;gap:10px;max-width:360px;padding:10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.file-attachment:hover{border-color:var(--line-strong);background:var(--panel-2)}.file-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:8px;background:var(--accent-soft);color:var(--accent);font-weight:800}.file-attachment strong,.file-attachment small{display:block}.file-attachment strong{color:var(--text-strong);font-size:13px}.file-attachment small{color:var(--muted);font-size:11px}.composer{padding:18px 18px 10px;background:var(--bg);display:grid;gap:0;position:relative}.composer-card{display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius-lg);overflow:hidden;transition:border-color .12s ease,box-shadow .12s ease}.composer:focus-within .composer-card{border-color:color-mix(in srgb,var(--accent) 55%,var(--line-strong));box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}.composer-toolbar{display:inline-flex;align-items:center;gap:2px;width:100%;padding:4px 6px;margin:0;border:0;border-top:1px solid var(--line);border-radius:0;background:color-mix(in srgb,var(--panel-2) 35%,transparent);box-shadow:none}.composer-toolbar button{min-width:28px;height:26px;display:grid;place-items:center;border:0;border-radius:6px;background:transparent;color:var(--text);opacity:.78;font-size:11.5px;font-weight:700;transition:background .1s ease,color .1s ease,opacity .1s ease,transform 80ms ease}.composer-toolbar button:hover{background:var(--hover-strong);color:var(--text-strong);opacity:1}.composer-toolbar button.active{background:var(--accent-soft);color:var(--accent);opacity:1}.composer-toolbar button:active{transform:translateY(1px)}.gif-picker{margin-top:8px;margin-bottom:8px;width:min(520px,calc(100vw - 40px));border:1px solid var(--line-strong);border-radius:16px;background:color-mix(in srgb,var(--panel) 96%,transparent);box-shadow:var(--shadow);padding:10px;animation:picker-in .16s cubic-bezier(.2,.8,.2,1)}.gif-picker-head{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:10px;padding:2px 2px 10px}.gif-picker-head strong{color:var(--text-strong);font-size:13px}.gif-picker-head input{min-width:0;height:32px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2)}.gif-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;max-height:240px;overflow-y:auto}.gif-grid button{position:relative;overflow:hidden;aspect-ratio:4 / 3;border:0;border-radius:12px;background:var(--panel-2);color:#fff;padding:0;box-shadow:inset 0 0 0 1px var(--line);transition:transform .12s ease,box-shadow .12s ease}.gif-grid button:hover{transform:translateY(-2px);box-shadow:inset 0 0 0 2px var(--accent),0 14px 30px -22px #000c}.gif-grid img{width:100%;height:100%;display:block;object-fit:cover}.gif-grid span{position:absolute;left:6px;right:6px;bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:999px;background:#0000008f;padding:4px 7px;font-size:10.5px;font-weight:700;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}@keyframes picker-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.composer-row{--composer-control-size: 36px;--composer-line-height: 22px;--composer-text-padding-block: 7px;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:4px;padding:8px 8px 4px 10px;background:transparent;border:0;border-radius:0}.composer:focus-within .composer-toolbar,.composer-row:focus-within{border-color:transparent}.composer-row:focus-within{box-shadow:none}.composer-icon{align-self:start;width:var(--composer-control-size);height:var(--composer-control-size);margin-top:calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2);display:grid;place-items:center;color:var(--muted);border-radius:10px;cursor:pointer;transition:background .12s ease,color .12s ease}.composer-icon:hover{background:var(--hover-strong);color:var(--text-strong)}.composer-icon input[type=file]{position:absolute;inline-size:1px;block-size:1px;opacity:0;pointer-events:none}.composer textarea,.reply-composer textarea{width:100%;height:auto;min-height:44px;max-height:50vh;padding:var(--composer-text-padding-block) 4px;resize:none;color:var(--text);line-height:var(--composer-line-height);font-size:14.5px;align-self:start;overflow-y:auto;box-sizing:border-box}.composer textarea::placeholder,.reply-composer textarea::placeholder{color:var(--muted)}.send{align-self:start;width:var(--composer-control-size);height:var(--composer-control-size);margin-top:calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2);display:grid;place-items:center;border:0;border-radius:10px;background:var(--accent);color:#fff;transition:background .12s ease,transform 80ms ease,opacity .12s ease}.send:hover:not(:disabled){background:var(--accent-2);transform:translateY(-1px)}.send:disabled{background:var(--panel-3);color:var(--muted-2);cursor:not-allowed}.composer-attachment{margin-top:8px;margin-bottom:8px;display:inline-flex;align-items:center;gap:8px;padding:6px 10px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);color:var(--text);font-size:13px;width:fit-content}.attachment-icon{display:grid;place-items:center;width:20px;height:20px;border-radius:6px;background:var(--accent-soft);color:var(--accent)}.pending-image{width:42px;height:32px;object-fit:cover;border-radius:7px;border:1px solid var(--line);background:var(--panel-2)}.attachment-name{max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-remove{width:18px;height:18px;border:0;background:transparent;color:var(--muted);border-radius:50%;font-size:14px;line-height:1}.attachment-remove:hover{background:var(--danger);color:#fff}.composer-hint{color:var(--muted-2);font-size:11px;padding:7px 4px 0}.composer-hint kbd{display:inline-block;background:var(--panel-2);border:1px solid var(--line);border-radius:4px;padding:0 5px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;color:var(--text)}.thread{display:grid;grid-template-rows:auto minmax(0,1fr) auto;background:var(--panel);border-left:1px solid var(--line);min-width:0;overflow:hidden;opacity:0;transform:translate(28px);pointer-events:none;transition:opacity .18s ease,transform .22s cubic-bezier(.2,.8,.2,1)}.thread.open{opacity:1;transform:translate(0);pointer-events:auto}.thread>header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;min-height:60px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.02),transparent),var(--panel)}.thread>header p,.thread>header strong{margin:0}.thread>header p{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em;font-weight:700}.thread>header strong{display:block;color:var(--text-strong);font-size:14px}.thread .close{width:28px;height:28px;border:0;border-radius:50%;background:var(--panel-2);color:var(--muted);font-size:18px;line-height:1}.thread .close:hover{background:var(--panel-3);color:var(--text-strong)}.thread-scroll{overflow-y:auto;padding:12px 16px}.thread-root{display:grid;grid-template-columns:38px minmax(0,1fr);gap:12px;padding-bottom:12px;border-bottom:1px solid var(--line)}.thread-divider{display:flex;align-items:center;gap:10px;margin:14px 0 10px}.thread-divider:before,.thread-divider:after{content:"";flex:1;height:1px;background:var(--line)}.thread-divider span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-weight:700}.reply-list{display:flex;flex-direction:column;gap:10px}.reply{display:grid;grid-template-columns:30px minmax(0,1fr);gap:10px;padding:6px;border-radius:var(--radius-sm)}.reply:hover{background:var(--hover)}.reply-composer{padding:10px 14px 14px;background:var(--panel);border-top:1px solid var(--line)}.reply-composer .composer-row{border-radius:0}.thread-empty{display:grid;place-items:center;align-content:center;gap:8px;padding:32px 24px;text-align:center;grid-row:span 3}.thread-icon{width:56px;height:56px;border-radius:16px;background:var(--panel-2);color:var(--muted);display:grid;place-items:center}.thread-empty strong{color:var(--text-strong);font-size:15px}.thread-empty span{color:var(--muted);font-size:13px;max-width:260px;line-height:1.5}.profile-pane{overflow-y:auto}.profile-hero{min-height:210px;display:grid;place-items:end center;padding:28px 20px;background:linear-gradient(180deg,transparent,rgba(0,0,0,.24)),linear-gradient(135deg,hsl(var(--hue, 220deg) 76% 58%),hsl(calc(var(--hue, 220deg) + 54deg) 74% 38%));border-bottom:1px solid var(--line)}.profile-avatar{width:min(240px,70%);aspect-ratio:1;display:grid;place-items:center;overflow:hidden;border-radius:16px;background:#ffffff2e;color:#fff;font-size:clamp(48px,12vw,88px);font-weight:800;box-shadow:0 26px 60px -30px #000000e6}.profile-avatar img{width:100%;height:100%;object-fit:cover}.profile-pane-body{display:grid;gap:18px;padding:18px 16px 22px}.profile-pane-title{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.profile-pane-title h2{margin:0;color:var(--text-strong);font-size:22px;letter-spacing:0}.profile-pane-title span{display:block;margin-top:3px;color:var(--muted);font-size:13px}.text-action{border:0;border-radius:6px;background:transparent;color:var(--accent);font-size:13px;font-weight:700;padding:4px 6px}.text-action:hover{background:var(--accent-soft)}.profile-presence{display:inline-flex;align-items:center;gap:8px;color:var(--text);font-size:14px}.profile-actions-row{display:flex;gap:8px;flex-wrap:wrap}.profile-actions-row .primary-action,.profile-actions-row .ghost-action{min-width:110px}.profile-info{display:grid;gap:12px;padding-top:18px;border-top:1px solid var(--line)}.profile-info header{display:flex;align-items:center;justify-content:space-between;gap:10px}.profile-info header strong{color:var(--text-strong);font-size:14px}.profile-info-row{display:grid;grid-template-columns:34px minmax(0,1fr);gap:10px;align-items:center}.info-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:9px;background:var(--panel-2);color:var(--muted);font-size:11px;font-weight:800}.profile-info-row small,.profile-info-row span{display:block}.profile-info-row small{color:var(--muted);font-size:11px}.profile-info-row span{color:var(--text);font-size:13px;overflow-wrap:anywhere}.profile-note{margin:0;color:var(--muted);line-height:1.5;font-size:13px}.modal-scrim{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:24px;background:#05080f8a;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.modal-backdrop{position:absolute;inset:0;border:0;background:transparent}.modal-backdrop:focus{outline:0}.profile-modal{position:relative;z-index:1;width:min(480px,100%);border:1px solid var(--line-strong);border-radius:14px;background:var(--panel);color:var(--text);box-shadow:var(--shadow);overflow:hidden}.profile-modal>header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 20px;border-bottom:1px solid var(--line);background:var(--panel-2)}.profile-modal p{margin:0 0 3px;color:var(--muted);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}.profile-modal h2{margin:0;color:var(--text-strong);font-size:20px;letter-spacing:0}.profile-modal>header button{width:32px;height:32px;border:0;border-radius:8px;background:transparent;color:var(--muted);font-size:22px}.profile-modal>header button:hover{background:var(--hover);color:var(--text-strong)}.profile-form{display:grid;gap:14px;padding:20px}.profile-preview{display:flex;align-items:center;gap:14px;padding:14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2)}.profile-preview strong,.profile-preview span{display:block}.profile-preview strong{color:var(--text-strong);font-size:15px}.profile-preview span{color:var(--muted);font-size:13px}.field{display:grid;gap:6px}.field span{color:var(--muted);font-size:12px;font-weight:700}.field input{width:100%;height:38px;padding:0 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);color:var(--text)}.field input:focus{border-color:var(--accent);outline:0;box-shadow:0 0 0 3px var(--accent-soft)}.profile-status{color:var(--success);font-size:12px}.profile-status.error{color:var(--danger)}.profile-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:4px}.ghost-action,.primary-action{height:36px;padding:0 14px;border-radius:var(--radius-sm);font-weight:700}.ghost-action{border:1px solid var(--line);background:var(--panel);color:var(--text)}.primary-action{border:0;background:var(--accent);color:#fff}.ghost-action:hover{background:var(--hover)}.primary-action:hover{filter:brightness(1.04)}.image-viewer-scrim{padding:28px;background:#000000c7;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.image-viewer{position:relative;z-index:1;display:grid;grid-template-rows:auto minmax(0,1fr);width:min(1120px,100%);max-height:min(86vh,900px);overflow:hidden;border-radius:14px;background:#07090f;color:#fff;box-shadow:0 34px 90px -34px #000000f2;animation:picker-in .15s cubic-bezier(.2,.8,.2,1)}.image-viewer>header{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:52px;padding:10px 12px 10px 16px;border-bottom:1px solid rgba(255,255,255,.1);background:#ffffff0a}.image-viewer>header strong{min-width:0;overflow:hidden;color:#fff;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.image-viewer>header div{display:inline-flex;align-items:center;gap:8px;flex-shrink:0}.image-viewer>header a{height:30px;display:inline-flex;align-items:center;padding:0 10px;border-radius:7px;background:#ffffff14;color:#fff;font-size:12px;font-weight:700;text-decoration:none}.image-viewer>header a:hover{background:#ffffff24}.image-viewer>header button{width:30px;height:30px;display:grid;place-items:center;border:0;border-radius:7px;background:transparent;color:#ffffffc7;font-size:22px;line-height:1}.image-viewer>header button:hover{background:#ffffff1f;color:#fff}.image-viewer-stage{display:grid;place-items:center;min-height:0;padding:18px}.image-viewer-stage img{display:block;max-width:100%;max-height:calc(86vh - 96px);object-fit:contain;border-radius:8px;background:#ffffff0a}.mobile-nav-toggle{display:none;position:fixed;top:14px;left:14px;z-index:30;width:38px;height:38px;border-radius:10px;border:1px solid var(--line-strong);background:var(--panel);color:var(--text);font-size:22px;line-height:1}.mobile-nav-toggle .bars{display:grid;gap:3px}.mobile-nav-toggle .bars i{display:block;width:16px;height:2px;background:currentColor;border-radius:2px}@media(max-width:1180px){.shell{grid-template-columns:72px 240px minmax(0,1fr)}.shell.sidebar-collapsed,.shell.sidebar-collapsed.thread-open{grid-template-columns:72px 0 minmax(0,1fr)}.thread{position:fixed;inset:0 0 0 auto;width:min(420px,100vw);box-shadow:var(--shadow);transform:translate(100%);transition:transform .18s ease;z-index:4;border-left:1px solid var(--line-strong)}.thread.open{transform:translate(0)}}@media(max-width:820px){.mobile-nav-toggle{display:grid;place-items:center}.shell,.shell.thread-open,.shell.sidebar-collapsed,.shell.sidebar-collapsed.thread-open{grid-template-columns:1fr}.sidebar-collapsed .sidebar{opacity:1;pointer-events:auto;transform:translate(-100%)}.guild-rail,.sidebar{position:fixed;inset:0 auto 0 0;z-index:20;transform:translate(-100%);transition:transform .18s ease}.guild-rail{width:72px}.sidebar{left:72px;width:260px}.nav-open .guild-rail,.nav-open .sidebar{transform:translate(0)}.topbar{padding-left:64px}.search{width:180px}}@media(max-width:520px){.search,.topbar-meta,.topbar-divider{display:none}}.message-row.highlight,.thread-root.highlight,.reply.highlight{animation:quote-flash 1.4s ease-out}@keyframes quote-flash{0%{background:#6366f138}to{background:transparent}}.quote-block{display:inline-flex;align-items:stretch;gap:.5rem;margin:0 0 .35rem;padding:.25rem .5rem .25rem 0;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;text-align:left;max-width:100%;font:inherit}.quote-block:hover:not(:disabled){background:#6366f114}.quote-block:disabled{cursor:default;opacity:.75}.quote-block .quote-bar{width:3px;align-self:stretch;background:var(--accent, #6366f1);border-radius:2px;flex:0 0 3px}.quote-block .quote-content{display:flex;flex-direction:column;gap:.1rem;min-width:0}.quote-block .quote-author{font-size:.78rem;font-weight:600;color:var(--accent, #6366f1)}.quote-block .quote-snippet{font-size:.85rem;color:var(--text-muted, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:56ch}.quote-block .quote-snippet.muted{font-style:italic;opacity:.75}.quote-preview{display:flex;align-items:center;gap:.5rem;padding:6px 10px 6px 12px;margin:0;background:color-mix(in srgb,var(--accent) 5%,transparent);border:0;border-bottom:1px solid var(--line);border-radius:0;font-size:12.5px;color:var(--muted)}.quote-preview .quote-bar{display:none}.quote-preview-body{display:flex;align-items:baseline;gap:.4rem;flex:1;min-width:0;overflow:hidden}.quote-preview-label{font-size:12px;color:color-mix(in srgb,var(--accent) 85%,var(--text));white-space:nowrap}.quote-preview-label strong{color:var(--text-strong);font-weight:600}.quote-preview-snippet{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted);font-size:12px;flex:1;min-width:0}.quote-preview-clear{background:transparent;border:0;color:var(--muted);font-size:16px;line-height:1;cursor:pointer;padding:2px 6px;border-radius:6px;transition:background .1s ease,color .1s ease}.quote-preview-clear:hover{color:var(--text-strong);background:var(--hover-strong)}.reply-quote-btn{position:relative;margin-left:auto;background:transparent;border:0;color:var(--text-muted, #6b7280);cursor:pointer;font-size:.95rem;padding:0 .3rem;opacity:0;transition:opacity .15s}.reply:hover .reply-quote-btn,.thread-root:hover .reply-quote-btn,.reply-quote-btn:focus-visible{opacity:1}.reply-quote-btn:hover{color:var(--accent, #6366f1)}.tooltip{position:relative}.tooltip:before,.reply-quote-btn:before{content:attr(data-tooltip);position:absolute;left:50%;bottom:calc(100% + 12px);z-index:20;transform:translate(-50%,4px) scale(.96);padding:.42rem .62rem;border-radius:9px;background:#3a3a44;color:#f4f4f7;box-shadow:0 10px 28px #00000047;font-size:.78rem;font-weight:700;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .12s ease,transform .12s ease}.tooltip:after,.reply-quote-btn:after{content:"";position:absolute;left:50%;bottom:calc(100% + 5px);z-index:20;width:12px;height:12px;border-radius:2px;background:#3a3a44;transform:translate(-50%,4px) rotate(45deg) scale(.9);opacity:0;pointer-events:none;transition:opacity .12s ease,transform .12s ease}.tooltip:hover:before,.tooltip:focus-visible:before,.reply-quote-btn:hover:before,.reply-quote-btn:focus-visible:before,.tooltip:hover:after,.tooltip:focus-visible:after,.reply-quote-btn:hover:after,.reply-quote-btn:focus-visible:after{opacity:1;transform:translate(-50%) scale(1)}.tooltip:hover:after,.tooltip:focus-visible:after,.reply-quote-btn:hover:after,.reply-quote-btn:focus-visible:after{transform:translate(-50%) rotate(45deg) scale(1)} diff --git a/apps/api/internal/webassets/dist/index.html b/apps/api/internal/webassets/dist/index.html index ef8097e..f80ba2a 100644 --- a/apps/api/internal/webassets/dist/index.html +++ b/apps/api/internal/webassets/dist/index.html @@ -4,8 +4,8 @@ ClickClack - - + +
    diff --git a/apps/web/src/ChatApp.svelte b/apps/web/src/ChatApp.svelte index 4f77f3c..4145d7f 100644 --- a/apps/web/src/ChatApp.svelte +++ b/apps/web/src/ChatApp.svelte @@ -1,8 +1,19 @@ + +
    { + event.preventDefault(); + onSubmit(); + }} +> + {#if showGifPicker} + + {/if} +
    + {#if pendingUpload} +
    + + {#if isImageUpload(pendingUpload)} + {pendingUpload.filename} + {/if} + {pendingUpload.filename} · {formatBytes(pendingUpload.byte_size)} + +
    + {/if} + {#if replyTarget} + + {/if} +
    + {#if showUpload} + + {/if} + + +
    + {#if showToolbar} + + {/if} +
    + diff --git a/apps/web/src/components/composer/ComposerToolbar.svelte b/apps/web/src/components/composer/ComposerToolbar.svelte new file mode 100644 index 0000000..79f7bb9 --- /dev/null +++ b/apps/web/src/components/composer/ComposerToolbar.svelte @@ -0,0 +1,39 @@ + + +
    + + + + + + +
    diff --git a/apps/web/src/components/composer/GifPicker.svelte b/apps/web/src/components/composer/GifPicker.svelte new file mode 100644 index 0000000..15b2c0d --- /dev/null +++ b/apps/web/src/components/composer/GifPicker.svelte @@ -0,0 +1,32 @@ + + +
    +
    + GIFs + onQuery(event.currentTarget.value)} + /> +
    +
    + {#each gifs as gif (gif.url)} + + {/each} +
    +
    diff --git a/apps/web/src/components/composer/ReplyPreview.svelte b/apps/web/src/components/composer/ReplyPreview.svelte new file mode 100644 index 0000000..97119ad --- /dev/null +++ b/apps/web/src/components/composer/ReplyPreview.svelte @@ -0,0 +1,20 @@ + + +
    + + + Replying to {target.author?.display_name || "Local User"} + {quoteSnippet(target.body)} + + +
    diff --git a/apps/web/src/components/media/ImageViewer.svelte b/apps/web/src/components/media/ImageViewer.svelte new file mode 100644 index 0000000..c56ebca --- /dev/null +++ b/apps/web/src/components/media/ImageViewer.svelte @@ -0,0 +1,25 @@ + + + diff --git a/apps/web/src/components/messages/MessageGroup.svelte b/apps/web/src/components/messages/MessageGroup.svelte new file mode 100644 index 0000000..55bb3c4 --- /dev/null +++ b/apps/web/src/components/messages/MessageGroup.svelte @@ -0,0 +1,69 @@ + + +
    + +
    +
    + + {#if group.authorHandle}{handleLabel(group.authorHandle)}{/if} + +
    + {#each group.messages as message, index (message.id)} + + {/each} +
    +
    diff --git a/apps/web/src/components/messages/MessageList.svelte b/apps/web/src/components/messages/MessageList.svelte new file mode 100644 index 0000000..5e11b8a --- /dev/null +++ b/apps/web/src/components/messages/MessageList.svelte @@ -0,0 +1,89 @@ + + +
    + {#if messages.length === 0} +
    +
    + {#if selectedDirect}@{:else}#{/if} +
    + + {#if selectedDirect} + This is the start of your conversation with {dmTitle(selectedDirect, currentUserID)}. + {:else if selectedChannel} + Welcome to #{selectedChannel.name}! + {:else} + Pick a channel to get started. + {/if} + + Send a message in Markdown — code fences, lists, links all work. Threads open from any message. +
    + {/if} + {#each groupedMessages as group (group.key)} + {#if group.dayLabel} +
    {group.dayLabel}
    + {/if} + + {/each} +
    diff --git a/apps/web/src/components/messages/MessageRow.svelte b/apps/web/src/components/messages/MessageRow.svelte new file mode 100644 index 0000000..4e76081 --- /dev/null +++ b/apps/web/src/components/messages/MessageRow.svelte @@ -0,0 +1,75 @@ + + +
    + +
    + +
    {@html markdown(message.body)}
    + {#if message.attachments?.length} +
    + {#each message.attachments as attachment (attachment.id)} + + {/each} +
    + {/if} +
    +
    + + +
    +
    diff --git a/apps/web/src/components/messages/QuoteBlock.svelte b/apps/web/src/components/messages/QuoteBlock.svelte new file mode 100644 index 0000000..3f0c3b4 --- /dev/null +++ b/apps/web/src/components/messages/QuoteBlock.svelte @@ -0,0 +1,32 @@ + + +{#if message.quoted_message_id || message.quoted_body_snapshot} + +{/if} diff --git a/apps/web/src/components/navigation/ChannelList.svelte b/apps/web/src/components/navigation/ChannelList.svelte new file mode 100644 index 0000000..6dce59b --- /dev/null +++ b/apps/web/src/components/navigation/ChannelList.svelte @@ -0,0 +1,59 @@ + + + diff --git a/apps/web/src/components/navigation/DirectMessageList.svelte b/apps/web/src/components/navigation/DirectMessageList.svelte new file mode 100644 index 0000000..87fc61a --- /dev/null +++ b/apps/web/src/components/navigation/DirectMessageList.svelte @@ -0,0 +1,69 @@ + + + diff --git a/apps/web/src/components/navigation/GuildRail.svelte b/apps/web/src/components/navigation/GuildRail.svelte new file mode 100644 index 0000000..eaf478a --- /dev/null +++ b/apps/web/src/components/navigation/GuildRail.svelte @@ -0,0 +1,64 @@ + + + diff --git a/apps/web/src/components/navigation/Sidebar.svelte b/apps/web/src/components/navigation/Sidebar.svelte new file mode 100644 index 0000000..9c85087 --- /dev/null +++ b/apps/web/src/components/navigation/Sidebar.svelte @@ -0,0 +1,169 @@ + + + diff --git a/apps/web/src/components/profile/ProfilePane.svelte b/apps/web/src/components/profile/ProfilePane.svelte new file mode 100644 index 0000000..b74b2c2 --- /dev/null +++ b/apps/web/src/components/profile/ProfilePane.svelte @@ -0,0 +1,88 @@ + + +
    +
    +

    Profile

    + {profile.display_name} +
    + +
    +
    +
    + + {#if profile.avatar_url} + + {:else} + {avatarInitial(profile.display_name)} + {/if} + +
    +
    +
    +
    +

    {profile.display_name}

    + {#if profile.handle}{handleLabel(profile.handle)}{/if} +
    + {#if currentUser?.id === profile.id} + + {/if} +
    +
    + + Active +
    +
    + {#if currentUser?.id !== profile.id} + + {/if} + +
    +
    +
    + Contact information + {#if currentUser?.id === profile.id} + + {/if} +
    +
    + +
    + Handle + {profile.handle ? handleLabel(profile.handle) : "No handle set"} +
    +
    +
    + +
    + User ID + {profile.id} +
    +
    +
    +
    +
    + About +
    +

    Member of {workspaceName || "this workspace"}. Click Message to keep the conversation in your sidebar.

    +
    +
    +
    diff --git a/apps/web/src/components/profile/ProfileSettingsModal.svelte b/apps/web/src/components/profile/ProfileSettingsModal.svelte new file mode 100644 index 0000000..857c7c0 --- /dev/null +++ b/apps/web/src/components/profile/ProfileSettingsModal.svelte @@ -0,0 +1,101 @@ + + + diff --git a/apps/web/src/components/search/SearchResults.svelte b/apps/web/src/components/search/SearchResults.svelte new file mode 100644 index 0000000..dc59b98 --- /dev/null +++ b/apps/web/src/components/search/SearchResults.svelte @@ -0,0 +1,40 @@ + + +{#if results.length > 0} +
    +
    + {results.length} {results.length === 1 ? "result" : "results"} + +
    + {#each results as result (result.message.id)} + + {/each} +
    +{/if} diff --git a/apps/web/src/components/thread/ThreadPanel.svelte b/apps/web/src/components/thread/ThreadPanel.svelte new file mode 100644 index 0000000..bced9ba --- /dev/null +++ b/apps/web/src/components/thread/ThreadPanel.svelte @@ -0,0 +1,159 @@ + + +
    +
    +

    Thread

    + {threadState?.reply_count ?? replies.length} {(threadState?.reply_count ?? replies.length) === 1 ? "reply" : "replies"} +
    + +
    +
    +
    +
    + {#if root.author?.avatar_url} + + {:else} + {avatarInitial(root.author?.display_name)} + {/if} +
    +
    +
    + {root.author?.display_name || "Local User"} + {#if root.author?.handle}{handleLabel(root.author.handle)}{/if} + + +
    +
    {@html markdown(root.body)}
    + {#if root.attachments?.length} +
    + {#each root.attachments as attachment (attachment.id)} + + {/each} +
    + {/if} +
    +
    +
    {replies.length} {replies.length === 1 ? "reply" : "replies"}
    +
    + {#each replies as reply (reply.id)} +
    +
    + {#if reply.author?.avatar_url} + + {:else} + {avatarInitial(reply.author?.display_name)} + {/if} +
    +
    +
    + {reply.author?.display_name || "Local User"} + {#if reply.author?.handle}{handleLabel(reply.author.handle)}{/if} + + +
    + +
    {@html markdown(reply.body)}
    + {#if reply.attachments?.length} +
    + {#each reply.attachments as attachment (attachment.id)} + + {/each} +
    + {/if} +
    +
    + {/each} +
    +
    + diff --git a/apps/web/src/components/topbar/Topbar.svelte b/apps/web/src/components/topbar/Topbar.svelte new file mode 100644 index 0000000..e39f6d1 --- /dev/null +++ b/apps/web/src/components/topbar/Topbar.svelte @@ -0,0 +1,88 @@ + + +
    +
    + {#if selectedDirect} +

    {`@${dmTitle(selectedDirect, currentUserID)}`}

    + {:else if selectedChannel} +

    {`#${selectedChannel.name}`}

    + {:else} +

    ClickClack

    + {/if} + +

    {workspaceName || "no workspace"}

    +
    + +
    + + +
    +
    diff --git a/apps/web/src/lib/actions/autogrow.ts b/apps/web/src/lib/actions/autogrow.ts new file mode 100644 index 0000000..332898e --- /dev/null +++ b/apps/web/src/lib/actions/autogrow.ts @@ -0,0 +1,23 @@ +export function autoGrow(node: HTMLTextAreaElement, _value: string) { + const resize = () => { + const previous = node.style.height; + node.style.height = "auto"; + const next = `${node.scrollHeight}px`; + if (previous !== next) node.style.height = next; + else node.style.height = previous; + }; + const onInput = () => resize(); + const onWindowResize = () => resize(); + requestAnimationFrame(resize); + node.addEventListener("input", onInput); + window.addEventListener("resize", onWindowResize); + return { + update() { + requestAnimationFrame(resize); + }, + destroy() { + node.removeEventListener("input", onInput); + window.removeEventListener("resize", onWindowResize); + }, + }; +} diff --git a/apps/web/src/lib/chat/messages.ts b/apps/web/src/lib/chat/messages.ts new file mode 100644 index 0000000..3d85dcd --- /dev/null +++ b/apps/web/src/lib/chat/messages.ts @@ -0,0 +1,78 @@ +import type { Message } from "../types"; + +export type MessageGroup = { + key: string; + dayLabel: string | null; + messages: Message[]; + authorName: string; + authorHandle: string; + authorAvatarURL: string; + authorID: string; + timestamp: string; +}; + +export function quoteSnippet(text: string | undefined, max = 120): string { + if (!text) return ""; + const collapsed = text.replace(/\s+/g, " ").trim(); + return collapsed.length > max ? collapsed.slice(0, max - 1) + "..." : collapsed; +} + +export function quotedAuthorName(message: Message): string { + return message.quoted_author?.display_name || "Unknown"; +} + +export function threadSummary(message: Message, selectedThreadID?: string): string { + if (selectedThreadID === message.id) return "Open"; + return "Thread"; +} + +export function dayLabel(value: string): string { + const date = new Date(value); + const today = new Date(); + const yesterday = new Date(); + yesterday.setDate(today.getDate() - 1); + const sameDay = (a: Date, b: Date) => + a.getFullYear() === b.getFullYear() && + a.getMonth() === b.getMonth() && + a.getDate() === b.getDate(); + if (sameDay(date, today)) return "Today"; + if (sameDay(date, yesterday)) return "Yesterday"; + return new Intl.DateTimeFormat(undefined, { + weekday: "long", + month: "long", + day: "numeric", + }).format(date); +} + +export function groupMessages(list: Message[]): MessageGroup[] { + const groups: MessageGroup[] = []; + let lastDay = ""; + let lastAuthor = ""; + let lastTime = 0; + for (const message of list) { + const created = new Date(message.created_at); + const dayKey = created.toDateString(); + const authorID = message.author?.id || message.author_id || "local"; + const dayChanged = dayKey !== lastDay; + const newAuthor = authorID !== lastAuthor; + const tooFarApart = created.getTime() - lastTime > 5 * 60 * 1000; + if (dayChanged || newAuthor || tooFarApart || groups.length === 0) { + groups.push({ + key: message.id, + dayLabel: dayChanged ? dayLabel(message.created_at) : null, + messages: [message], + authorName: message.author?.display_name || "Local User", + authorHandle: message.author?.handle || "", + authorAvatarURL: message.author?.avatar_url || "", + authorID, + timestamp: message.created_at, + }); + } else { + groups[groups.length - 1].messages.push(message); + } + lastDay = dayKey; + lastAuthor = authorID; + lastTime = created.getTime(); + } + return groups; +} diff --git a/apps/web/src/lib/chat/people.ts b/apps/web/src/lib/chat/people.ts new file mode 100644 index 0000000..2dc98d1 --- /dev/null +++ b/apps/web/src/lib/chat/people.ts @@ -0,0 +1,64 @@ +import type { DirectConversation, Message, User } from "../types"; + +export function workspaceInitial(name: string): string { + const trimmed = name.trim(); + if (!trimmed) return "?"; + const parts = trimmed.split(/\s+/); + if (parts.length >= 2) return (parts[0][0] + parts[1][0]).toUpperCase(); + return trimmed.slice(0, 2).toUpperCase(); +} + +export function avatarInitial(name?: string | null): string { + if (!name) return "?"; + const trimmed = name.trim(); + return trimmed ? trimmed[0].toUpperCase() : "?"; +} + +export function handleLabel(value?: string | null): string { + return value ? `@${value}` : ""; +} + +export function avatarHue(seed: string): number { + let hash = 0; + for (let i = 0; i < seed.length; i++) hash = (hash * 31 + seed.charCodeAt(i)) >>> 0; + return hash % 360; +} + +export function dmAvatarUser(conversation: DirectConversation, currentUserID?: string): User { + return ( + conversation.members.find((member) => member.id !== currentUserID) || conversation.members[0] + ); +} + +export function dmTitle(conversation: DirectConversation, currentUserID?: string): string { + const others = conversation.members.filter((member) => member.id !== currentUserID); + const list = others.length > 0 ? others : conversation.members; + return list.map((member) => member.display_name).join(", "); +} + +export function collectRecentPeople( + messageList: Message[], + conversations: DirectConversation[], + currentUserID: string, +): User[] { + const people = new Map(); + for (const conversation of conversations) { + for (const member of conversation.members) { + if (member.id && member.id !== currentUserID) people.set(member.id, member); + } + } + for (const message of [...messageList].reverse()) { + const author = message.author; + if (author?.id && author.id !== currentUserID) people.set(author.id, author); + } + return [...people.values()].slice(0, 12); +} + +export function directConversationForUser( + conversations: DirectConversation[], + memberID: string, +): DirectConversation | undefined { + return conversations.find((conversation) => + conversation.members.some((member) => member.id === memberID), + ); +} diff --git a/apps/web/src/lib/chat/typeToFocus.ts b/apps/web/src/lib/chat/typeToFocus.ts new file mode 100644 index 0000000..9958d29 --- /dev/null +++ b/apps/web/src/lib/chat/typeToFocus.ts @@ -0,0 +1,119 @@ +type RedirectTypingOptions = { + authRequired: boolean; + isModalOpen: () => boolean; + messageInput: HTMLTextAreaElement | null; + replyInput: HTMLTextAreaElement | null; + target: () => HTMLTextAreaElement | null; +}; + +const KEY_CONSUMING_ROLES = new Set([ + "button", + "checkbox", + "combobox", + "link", + "listbox", + "menu", + "menubar", + "menuitem", + "menuitemcheckbox", + "menuitemradio", + "option", + "radio", + "radiogroup", + "slider", + "spinbutton", + "switch", + "tab", + "tablist", + "textbox", + "tree", + "treeitem", +]); + +const KEY_CONSUMING_TAGS = new Set([ + "INPUT", + "TEXTAREA", + "SELECT", + "BUTTON", + "A", + "DETAILS", + "SUMMARY", + "VIDEO", + "AUDIO", +]); + +function isEditableElement(el: HTMLElement | null): boolean { + if (!el) return false; + if (el.isContentEditable) return true; + if (el instanceof HTMLInputElement) { + const t = (el.type || "text").toLowerCase(); + return ( + t !== "checkbox" && + t !== "radio" && + t !== "button" && + t !== "submit" && + t !== "reset" && + t !== "file" + ); + } + if (el instanceof HTMLTextAreaElement) return true; + return false; +} + +function consumesKeystrokes(el: HTMLElement | null): boolean { + if (!el) return false; + if (isChatSurfaceAction(el)) return false; + if (KEY_CONSUMING_TAGS.has(el.tagName)) return true; + const role = el.getAttribute("role"); + if (role && KEY_CONSUMING_ROLES.has(role)) return true; + const tabindex = el.getAttribute("tabindex"); + if (tabindex !== null && tabindex !== "-1" && el.hasAttribute("aria-keyshortcuts")) return true; + return false; +} + +function isChatSurfaceAction(el: HTMLElement): boolean { + if (!el.closest(".messages, .thread")) return false; + if (el instanceof HTMLButtonElement || el instanceof HTMLAnchorElement) return true; + const role = el.getAttribute("role"); + return role === "button" || role === "link"; +} + +function hasMessageTextSelection(): boolean { + const sel = typeof window !== "undefined" ? window.getSelection() : null; + if (!sel || sel.isCollapsed || sel.rangeCount === 0) return false; + const node = sel.getRangeAt(0).commonAncestorContainer; + if (!node) return false; + const host = node.nodeType === Node.ELEMENT_NODE ? (node as HTMLElement) : node.parentElement; + return !!host?.closest(".messages, .thread, .markdown"); +} + +function shouldRedirectKeystroke(event: KeyboardEvent, options: RedirectTypingOptions): boolean { + if (options.authRequired) return false; + if (options.isModalOpen()) return false; + if (event.defaultPrevented) return false; + if (event.isComposing || event.keyCode === 229) return false; + if (event.ctrlKey || event.metaKey || event.altKey) return false; + if (event.key.length !== 1) return false; + if (hasMessageTextSelection()) return false; + const active = document.activeElement as HTMLElement | null; + if (active === options.messageInput || active === options.replyInput) return false; + if (isEditableElement(active)) return false; + if (consumesKeystrokes(active)) return false; + return true; +} + +export function redirectTypingToComposer(event: KeyboardEvent, options: RedirectTypingOptions) { + if (!shouldRedirectKeystroke(event, options)) return; + const target = options.target(); + if (!target || target.disabled || target.readOnly) return; + if (event.key === " ") event.preventDefault(); + target.focus({ preventScroll: true }); + const len = target.value.length; + target.setSelectionRange(len, len); + if (event.key === " ") { + const start = target.selectionStart ?? len; + const end = target.selectionEnd ?? len; + target.setRangeText(" ", start, end, "end"); + target.dispatchEvent(new Event("input", { bubbles: true })); + } +} diff --git a/apps/web/src/lib/gifs.ts b/apps/web/src/lib/gifs.ts new file mode 100644 index 0000000..153dad1 --- /dev/null +++ b/apps/web/src/lib/gifs.ts @@ -0,0 +1,38 @@ +export type GifItem = { + title: string; + url: string; + tags: string[]; +}; + +export const gifLibrary: GifItem[] = [ + { + title: "Ship it", + url: "https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYjJ1bm1meHE4N2x3bnN0djJkMWtjNGc5bXYzZDFiOHBsbG16M3F0ZSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/l0HlHFRbmaZtBRhXG/giphy.gif", + tags: ["ship", "launch", "done"], + }, + { + title: "Approved", + url: "https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExazBpbzJ6ODZ3bXQ3OHBvNGJidWZoajc0cHV6YnVub3MzZ3c1a2Z2dSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/111ebonMs90YLu/giphy.gif", + tags: ["yes", "approved", "nice"], + }, + { + title: "Deploy dance", + url: "https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExY3NkaTVmZW9ydWNnZnl0ZWQ5aHQyeGNrd2k3NG4wZWNqYzNmd3k1ZCZlcD12MV9naWZzX3NlYXJjaCZjdD1n/GeimqsH0TLDt4tScGw/giphy.gif", + tags: ["deploy", "dance", "celebrate"], + }, + { + title: "Looking", + url: "https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYWZ3emE0dm5mN2h0bGVsY2w0OXBodGd2cGJlNDRiZXo1YWNtdWRmZyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/26n6WywJyh39n1pBu/giphy.gif", + tags: ["search", "looking", "debug"], + }, + { + title: "Typing faster", + url: "https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExOWFlbnJnbnIzbHYxcDIzdXZ3NGF3N2FocHNvMmR5enU3bHpycHBlZSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/13HgwGsXF0aiGY/giphy.gif", + tags: ["typing", "code", "work"], + }, + { + title: "Tiny victory", + url: "https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdjJ2b2tqNmF4dG16NjE0eXhuc3h5bTlvamgwNTR0Zmd6ZjhtM2JuaSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/3o7abKhOpu0NwenH3O/giphy.gif", + tags: ["win", "victory", "celebrate"], + }, +]; diff --git a/apps/web/src/lib/uploads.ts b/apps/web/src/lib/uploads.ts new file mode 100644 index 0000000..e48f567 --- /dev/null +++ b/apps/web/src/lib/uploads.ts @@ -0,0 +1,19 @@ +import type { Upload } from "./types"; + +export function uploadURL(upload: Upload): string { + return `/api/uploads/${encodeURIComponent(upload.id)}`; +} + +export function isImageUpload(upload: Upload): boolean { + return upload.content_type.startsWith("image/"); +} + +export function isVideoUpload(upload: Upload): boolean { + return upload.content_type.startsWith("video/"); +} + +export function formatBytes(size: number): string { + if (size < 1024) return `${size} B`; + if (size < 1024 * 1024) return `${Math.round(size / 1024)} KB`; + return `${(size / (1024 * 1024)).toFixed(1)} MB`; +} diff --git a/apps/web/src/styles.css b/apps/web/src/styles.css index 455861d..d48eeda 100644 --- a/apps/web/src/styles.css +++ b/apps/web/src/styles.css @@ -1,2937 +1,7 @@ -:root { - color-scheme: light dark; - font-family: - "Inter", - "SF Pro Text", - ui-sans-serif, - system-ui, - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - sans-serif; - font-feature-settings: "ss01", "cv11"; - --rail: #e9e1d7; - --bg: #f7f3ed; - --panel: #fffaf2; - --panel-2: #efe7dc; - --panel-3: #e4dbcf; - --hover: rgba(16, 32, 39, 0.05); - --hover-strong: rgba(16, 32, 39, 0.08); - --line: rgba(16, 32, 39, 0.1); - --line-strong: rgba(16, 32, 39, 0.16); - --text: #22201d; - --text-strong: #11100e; - --muted: #6f675f; - --muted-2: #958b80; - --accent: #dd5d45; - --accent-2: #006d77; - --accent-soft: rgba(221, 93, 69, 0.16); - --accent-glow: 0 0 0 1px rgba(221, 93, 69, 0.28), 0 8px 30px -12px rgba(221, 93, 69, 0.45); - --success: #168b51; - --warn: #f5b050; - --danger: #c84343; - --shadow: 0 24px 60px -24px rgba(16, 32, 39, 0.32); - --radius-sm: 6px; - --radius: 8px; - --radius-lg: 14px; - --radius-xl: 18px; - background: var(--bg); - color: var(--text); -} - -@media (prefers-color-scheme: dark) { - :root { - --rail: #0d0e12; - --bg: #131419; - --panel: #1a1b22; - --panel-2: #20222b; - --panel-3: #272a35; - --hover: rgba(255, 255, 255, 0.04); - --hover-strong: rgba(255, 255, 255, 0.07); - --line: rgba(255, 255, 255, 0.07); - --line-strong: rgba(255, 255, 255, 0.12); - --text: #e7e9ee; - --text-strong: #ffffff; - --muted: #8a8f9c; - --muted-2: #5d626d; - --accent: #6f7eff; - --accent-2: #5666ee; - --accent-soft: rgba(111, 126, 255, 0.18); - --accent-glow: 0 0 0 1px rgba(111, 126, 255, 0.4), 0 8px 30px -12px rgba(111, 126, 255, 0.6); - --success: #2ecc71; - --warn: #f5b050; - --danger: #ff6b6b; - --shadow: 0 24px 60px -20px rgba(0, 0, 0, 0.6); - } -} - -* { - box-sizing: border-box; -} - -html, -body { - margin: 0; - padding: 0; - height: 100%; -} - -body { - background: - radial-gradient(1000px 600px at 0% 0%, rgba(111, 126, 255, 0.08), transparent 60%), - radial-gradient(900px 700px at 100% 100%, rgba(255, 130, 200, 0.05), transparent 60%), var(--bg); - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -button, -input, -textarea { - font: inherit; - color: inherit; -} - -button { - cursor: pointer; -} - -input, -textarea { - background: transparent; - border: 0; - outline: 0; -} - -::-webkit-scrollbar { - width: 10px; - height: 10px; -} - -::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0.06); - border-radius: 999px; - border: 2px solid transparent; - background-clip: content-box; -} - -::-webkit-scrollbar-thumb:hover { - background: rgba(255, 255, 255, 0.12); - background-clip: content-box; -} - -/* ---------- AUTH ---------- */ - -.auth-shell { - display: grid; - min-height: 100vh; - place-items: center; - padding: 32px; - background: - radial-gradient(700px 500px at 30% 20%, rgba(111, 126, 255, 0.18), transparent 60%), - radial-gradient(700px 500px at 80% 90%, rgba(255, 110, 196, 0.12), transparent 60%), var(--bg); -} - -.auth-panel { - display: grid; - gap: 22px; - width: min(100%, 440px); - border: 1px solid var(--line-strong); - border-radius: var(--radius-xl); - background: linear-gradient(180deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)) - var(--panel); - box-shadow: var(--shadow); - padding: 36px; -} - -.auth-brand { - display: flex; - align-items: center; - gap: 12px; -} - -.auth-brand .mark { - width: 44px; - height: 44px; - display: grid; - place-items: center; - border-radius: 12px; - background: linear-gradient(135deg, var(--accent), #b46cff); - color: white; - font-weight: 800; - letter-spacing: -0.02em; - box-shadow: 0 10px 24px -8px rgba(111, 126, 255, 0.7); -} - -.auth-brand .brand-text strong { - display: block; - color: var(--text-strong); - letter-spacing: -0.01em; -} - -.auth-brand .brand-text span { - display: block; - color: var(--muted); - font-size: 12px; -} - -.auth-copy { - display: grid; - gap: 8px; - margin-top: 8px; -} - -.auth-copy h1 { - margin: 0; - font-size: 28px; - letter-spacing: -0.02em; - color: var(--text-strong); -} - -.auth-copy p { - margin: 0; - color: var(--muted); - line-height: 1.5; -} - -.github-login { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 10px; - min-height: 46px; - border-radius: 12px; - background: #0d1117; - color: white; - font-weight: 600; - text-decoration: none; - border: 1px solid #2b2f36; - transition: - transform 80ms ease, - background 120ms ease, - border-color 120ms ease; -} - -.github-login:hover { - background: #161b22; - border-color: #3f4750; - transform: translateY(-1px); -} - -.auth-foot { - margin: 0; - color: var(--muted-2); - font-size: 12px; - text-align: center; -} - -/* ---------- SHELL ---------- */ - -.shell { - display: grid; - grid-template-columns: 72px 260px minmax(0, 1fr) 0; - height: 100vh; - min-height: 100vh; - overflow: hidden; - transition: grid-template-columns 220ms cubic-bezier(0.2, 0.8, 0.2, 1); -} - -.shell.thread-open { - grid-template-columns: 72px 260px minmax(0, 1fr) minmax(340px, 28vw); -} - -.shell.sidebar-collapsed { - grid-template-columns: 72px 0 minmax(0, 1fr) 0; -} - -.shell.sidebar-collapsed.thread-open { - grid-template-columns: 72px 0 minmax(0, 1fr) minmax(340px, 28vw); -} - -/* ---------- GUILD RAIL (Discord style) ---------- */ - -.guild-rail { - display: flex; - flex-direction: column; - align-items: center; - gap: 8px; - padding: 14px 0; - background: var(--rail); - border-right: 1px solid var(--line); - overflow-y: auto; - position: relative; -} - -.guild-rail .guild { - width: 48px; - height: 48px; - border-radius: 16px; - display: grid; - place-items: center; - background: var(--panel-2); - color: var(--text); - border: 0; - font-weight: 700; - font-size: 14px; - letter-spacing: -0.02em; - position: relative; - transition: - border-radius 140ms ease, - background 120ms ease, - transform 120ms ease; - box-shadow: 0 1px 0 rgba(255, 255, 255, 0.04) inset; -} - -.guild-rail .guild:hover { - border-radius: 12px; - background: var(--accent); - color: white; - box-shadow: 0 8px 24px -10px rgba(111, 126, 255, 0.6); -} - -.guild-rail .guild.home { - background: linear-gradient(135deg, var(--accent), #b46cff); - color: white; - font-weight: 800; -} - -.guild-rail .guild.home:hover { - border-radius: 12px; - filter: brightness(1.1); -} - -.guild-rail .guild.add { - background: transparent; - color: var(--success); - border: 1px dashed rgba(46, 204, 113, 0.4); -} - -.guild-rail .guild.add:hover { - background: rgba(46, 204, 113, 0.12); - color: white; - border-style: solid; - border-color: var(--success); -} - -.guild-divider { - width: 36px; - height: 1px; - background: var(--line-strong); - margin: 4px 0; -} - -.guild-list { - display: flex; - flex-direction: column; - align-items: center; - gap: 8px; -} - -.guild-wrap { - position: relative; -} - -.guild-wrap::before { - content: ""; - position: absolute; - left: -14px; - top: 50%; - transform: translate(0, -50%) scaleY(0.2); - width: 4px; - height: 28px; - border-radius: 0 4px 4px 0; - background: var(--text-strong); - opacity: 0; - transition: - opacity 140ms ease, - transform 140ms ease; -} - -.guild-wrap:hover::before { - opacity: 0.6; - transform: translate(0, -50%) scaleY(0.5); -} - -.guild-wrap.active::before { - opacity: 1; - transform: translate(0, -50%) scaleY(1); -} - -.guild-wrap.active .guild { - border-radius: 14px; - background: var(--accent); - color: white; -} - -.guild-create { - position: absolute; - left: 100%; - top: 14px; - margin-left: 8px; - background: var(--panel); - border: 1px solid var(--line-strong); - border-radius: var(--radius); - padding: 8px; - box-shadow: var(--shadow); - z-index: 20; -} - -.guild-create input { - height: 32px; - padding: 0 10px; - width: 200px; - border-radius: var(--radius-sm); - background: var(--panel-2); - color: var(--text); -} - -/* ---------- SIDEBAR (Slack style) ---------- */ - -.sidebar { - display: grid; - grid-template-rows: auto minmax(0, 1fr) auto; - background: var(--panel); - border-right: 1px solid var(--line); - overflow: hidden; - min-width: 0; - transition: - opacity 160ms ease, - transform 220ms cubic-bezier(0.2, 0.8, 0.2, 1); -} - -.sidebar-collapsed .sidebar { - opacity: 0; - pointer-events: none; - transform: translateX(-14px); -} - -.workspace-header { - padding: 14px 16px; - border-bottom: 1px solid var(--line); - display: flex; - align-items: center; - justify-content: space-between; - min-height: 60px; -} - -.sidebar-collapse { - width: 30px; - height: 30px; - display: grid; - place-items: center; - border: 0; - border-radius: 8px; - background: var(--panel-2); - color: var(--muted); - transition: - color 120ms ease, - background 120ms ease, - transform 120ms ease; -} - -.sidebar-collapse:hover { - background: var(--panel-3); - color: var(--text-strong); - transform: translateX(-1px); -} - -.workspace-name { - display: flex; - flex-direction: column; - gap: 2px; - min-width: 0; -} - -.workspace-name strong { - color: var(--text-strong); - letter-spacing: -0.01em; - font-size: 15px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.workspace-name .presence { - display: inline-flex; - align-items: center; - gap: 6px; - color: var(--muted); - font-size: 11px; -} - -.workspace-name .presence::before { - content: ""; - width: 7px; - height: 7px; - border-radius: 50%; - background: var(--muted-2); -} - -.workspace-name .presence.online { - color: var(--success); -} - -.workspace-name .presence.online::before { - background: var(--success); - box-shadow: 0 0 0 3px rgba(46, 204, 113, 0.18); -} - -.sidebar-scroll { - overflow-y: auto; - padding: 12px 8px 16px; -} - -.nav-section + .nav-section { - margin-top: 12px; -} - -.section-title { - display: flex; - align-items: center; - gap: 6px; - width: 100%; - border: 0; - background: transparent; - color: var(--muted); - text-transform: uppercase; - font-size: 11px; - font-weight: 700; - letter-spacing: 0.04em; - padding: 6px 8px; - border-radius: var(--radius-sm); -} - -.section-title:hover { - color: var(--text); - background: var(--hover); -} - -.section-title .caret { - font-size: 10px; - opacity: 0.7; -} - -.section-title .label { - flex: 1; - text-align: left; -} - -.section-title .add-button { - width: 18px; - height: 18px; - border-radius: 4px; - display: grid; - place-items: center; - font-size: 14px; - font-weight: 700; - background: rgba(255, 255, 255, 0.06); - color: var(--text); -} - -.section-title:hover .add-button { - background: var(--accent); - color: white; -} - -.nav-list { - display: flex; - flex-direction: column; - gap: 1px; - margin-top: 4px; -} - -.nav-item { - display: flex; - align-items: center; - gap: 8px; - width: 100%; - border: 0; - border-radius: var(--radius-sm); - background: transparent; - color: var(--muted); - text-align: left; - padding: 6px 10px; - min-height: 30px; - transition: - background 100ms ease, - color 100ms ease; -} - -.nav-item:hover { - background: var(--hover); - color: var(--text); -} - -.nav-item.active { - background: var(--accent-soft); - color: var(--text-strong); -} - -.nav-item .hash { - color: var(--muted); - font-weight: 600; - width: 14px; - text-align: center; -} - -.nav-item.active .hash { - color: var(--accent); -} - -.nav-label { - flex: 1; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - font-size: 14px; -} - -.nav-empty { - margin: 4px 8px; - color: var(--muted-2); - font-size: 12px; -} - -.dm-avatar { - width: 22px; - height: 22px; - border-radius: 50%; - display: grid; - place-items: center; - font-size: 11px; - font-weight: 700; - color: white; - background: linear-gradient( - 135deg, - hsl(var(--hue, 220deg) 70% 55%), - hsl(calc(var(--hue, 220deg) + 40deg) 70% 45%) - ); - flex-shrink: 0; - overflow: hidden; -} - -.dm-avatar img, -.avatar img { - width: 100%; - height: 100%; - display: block; - object-fit: cover; -} - -.presence-dot { - width: 8px; - height: 8px; - border-radius: 50%; - background: var(--muted-2); - flex-shrink: 0; -} - -.presence-dot.active { - background: var(--success); - box-shadow: 0 0 0 2px var(--panel); -} - -.inline-create { - display: grid; - grid-template-columns: minmax(0, 1fr) auto; - gap: 6px; - margin: 6px 4px 2px; -} - -.inline-create input { - width: 100%; - min-width: 0; - height: 30px; - padding: 0 10px; - border-radius: var(--radius-sm); - background: var(--panel-2); - color: var(--text); - border: 1px solid var(--line); -} - -.inline-create input:focus { - border-color: var(--accent); - background: var(--panel-3); -} - -.inline-create button.ghost, -button.ghost { - width: 30px; - height: 30px; - border: 0; - border-radius: var(--radius-sm); - background: var(--panel-3); - color: var(--muted); - font-weight: 600; - padding: 0; - font-size: 14px; - display: grid; - place-items: center; -} - -.inline-create button.ghost:hover { - background: var(--accent); - color: white; -} - -.user-card { - display: flex; - align-items: center; - gap: 10px; - width: 100%; - padding: 10px 12px; - background: var(--panel-2); - border-top: 1px solid var(--line); - border-right: 0; - border-bottom: 0; - border-left: 0; - color: inherit; - text-align: left; - cursor: pointer; - transition: background 120ms ease; -} - -.user-card:hover { - background: var(--panel-3); -} - -.user-card .dm-avatar { - width: 28px; - height: 28px; - font-size: 12px; -} - -.user-card .user-meta { - flex: 1; - min-width: 0; -} - -.user-card .user-meta strong { - display: block; - color: var(--text-strong); - font-size: 13px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.user-card .user-meta span { - display: block; - color: var(--muted); - font-size: 11px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -/* ---------- TIMELINE ---------- */ - -.timeline { - display: flex; - flex-direction: column; - min-width: 0; - background: var(--bg); - overflow: hidden; -} - -.timeline > * { - min-width: 0; - flex-shrink: 0; -} - -.timeline > .messages { - flex: 1 1 0; - min-height: 0; -} - -.topbar { - display: flex; - align-items: center; - gap: 14px; - padding: 12px 20px; - min-height: 60px; - border-bottom: 1px solid var(--line); - background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent), var(--bg); -} - -.topbar-title { - display: flex; - align-items: center; - gap: 10px; - min-width: 0; - flex: 1; -} - -.topbar-title h1 { - margin: 0; - font-size: 16px; - font-weight: 700; - letter-spacing: -0.01em; - color: var(--text-strong); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.topbar-title h1.with-glyph::first-letter { - color: var(--muted); - margin-right: 1px; -} - -.topbar-divider { - width: 1px; - height: 18px; - background: var(--line-strong); - margin: 0 6px; -} - -.topbar-meta { - margin: 0; - color: var(--muted); - font-size: 12px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.search { - display: flex; - align-items: center; - gap: 8px; - width: min(280px, 30vw); - height: 34px; - padding: 0 10px; - border-radius: var(--radius); - background: var(--panel); - border: 1px solid var(--line); - color: var(--muted); - transition: - border-color 120ms ease, - background 120ms ease; -} - -.search:focus-within { - border-color: var(--accent); - background: var(--panel-2); - color: var(--text); -} - -.search input { - flex: 1; - min-width: 0; - height: 100%; - color: var(--text); -} - -.search input::placeholder { - color: var(--muted); -} - -.search-clear { - width: 18px; - height: 18px; - border-radius: 50%; - border: 0; - background: var(--panel-3); - color: var(--muted); - display: grid; - place-items: center; - font-size: 14px; - line-height: 1; -} - -.search-clear:hover { - background: var(--accent); - color: white; -} - -.search-submit { - height: 22px; - padding: 0 8px; - border: 0; - border-radius: 5px; - background: var(--accent-soft); - color: var(--accent); - font-size: 10.5px; - font-weight: 700; - letter-spacing: 0.04em; - text-transform: uppercase; -} - -.search-submit:hover { - background: var(--accent); - color: white; -} - -.topbar-actions { - display: inline-flex; - align-items: center; - gap: 6px; -} - -.topbar-actions button { - width: 32px; - height: 32px; - display: grid; - place-items: center; - border: 1px solid var(--line); - border-radius: 9px; - background: var(--panel); - color: var(--muted); - transition: - background 120ms ease, - color 120ms ease, - border-color 120ms ease, - transform 80ms ease; -} - -.topbar-actions button:hover, -.topbar-actions button.active { - background: var(--accent-soft); - border-color: color-mix(in srgb, var(--accent) 55%, transparent); - color: var(--accent); -} - -.topbar-actions button:active { - transform: translateY(1px); -} - -@keyframes pulse { - 0%, - 100% { - opacity: 1; - } - 50% { - opacity: 0.5; - } -} - -/* ---------- SEARCH RESULTS ---------- */ - -.search-results { - display: flex; - flex-direction: column; - gap: 2px; - padding: 10px 14px 14px; - border-bottom: 1px solid var(--line); - background: var(--panel); - max-height: 280px; - overflow-y: auto; -} - -.search-results-head { - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 6px 8px; -} - -.search-results-head strong { - color: var(--text-strong); - font-size: 13px; -} - -.search-results-head button { - border: 0; - background: transparent; - color: var(--muted); - font-size: 12px; - padding: 4px 8px; - border-radius: var(--radius-sm); -} - -.search-results-head button:hover { - background: var(--hover); - color: var(--text); -} - -.search-result { - display: flex; - align-items: flex-start; - gap: 10px; - border: 0; - background: transparent; - color: var(--text); - padding: 8px; - border-radius: var(--radius-sm); - text-align: left; -} - -.search-result:hover { - background: var(--hover); -} - -.search-result .dm-avatar { - width: 30px; - height: 30px; - font-size: 13px; -} - -.search-result-body { - display: flex; - flex-direction: column; - gap: 2px; - min-width: 0; - flex: 1; -} - -.search-result-body > div { - display: flex; - align-items: baseline; - gap: 8px; -} - -.search-result-body strong { - color: var(--text-strong); - font-size: 13px; -} - -.search-result-body time { - color: var(--muted); - font-size: 11px; -} - -.search-result-body span { - color: var(--muted); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -/* ---------- MESSAGES ---------- */ - -.messages { - overflow-y: auto; - padding: 16px 4px 24px; - scroll-behavior: smooth; -} - -.empty { - display: grid; - place-items: center; - align-content: center; - text-align: center; - gap: 10px; - min-height: 50vh; - padding: 48px 24px; -} - -.empty-icon { - width: 64px; - height: 64px; - border-radius: 18px; - background: linear-gradient(135deg, var(--accent), #b46cff); - color: white; - display: grid; - place-items: center; - font-size: 26px; - font-weight: 800; - box-shadow: 0 18px 40px -16px rgba(111, 126, 255, 0.7); -} - -.empty strong { - color: var(--text-strong); - font-size: 18px; - letter-spacing: -0.01em; -} - -.empty span { - color: var(--muted); - max-width: 380px; - line-height: 1.5; -} - -.day-divider { - display: flex; - align-items: center; - gap: 12px; - margin: 18px 18px 8px; - position: sticky; - top: 0; - z-index: 1; - pointer-events: none; -} - -.day-divider::before, -.day-divider::after { - content: ""; - flex: 1; - height: 1px; - background: var(--line); -} - -.day-divider span { - background: var(--bg); - border: 1px solid var(--line); - border-radius: 999px; - padding: 4px 12px; - font-size: 11px; - font-weight: 600; - color: var(--muted); - text-transform: uppercase; - letter-spacing: 0.04em; -} - -.message-group { - display: grid; - grid-template-columns: 56px minmax(0, 1fr); - padding: 8px 18px; - position: relative; -} - -.message-group:hover { - background: var(--hover); -} - -.avatar { - width: 38px; - height: 38px; - border-radius: 12px; - display: grid; - place-items: center; - color: white; - font-weight: 700; - font-size: 14px; - background: linear-gradient( - 135deg, - hsl(var(--hue, 220deg) 70% 55%), - hsl(calc(var(--hue, 220deg) + 40deg) 70% 45%) - ); - box-shadow: 0 6px 20px -10px rgba(0, 0, 0, 0.6); - margin-top: 2px; - overflow: hidden; -} - -.avatar-button { - position: relative; - z-index: 2; - border: 0; - padding: 0; - cursor: pointer; - transition: - transform 100ms ease, - box-shadow 120ms ease, - filter 120ms ease; -} - -.avatar-button:hover { - transform: translateY(-1px); - filter: brightness(1.05); - box-shadow: 0 10px 24px -12px rgba(0, 0, 0, 0.8); -} - -.avatar.small { - width: 30px; - height: 30px; - font-size: 12px; - border-radius: 10px; -} - -.avatar.large { - width: 56px; - height: 56px; - border-radius: 16px; - font-size: 18px; - margin: 0; -} - -.group-body { - min-width: 0; -} - -.group-body > header { - display: flex; - align-items: baseline; - gap: 8px; - margin-bottom: 2px; -} - -.group-body > header strong { - color: var(--text-strong); - font-size: 14.5px; - letter-spacing: -0.005em; - font-weight: 700; -} - -.author-name { - border: 0; - background: transparent; - color: var(--text-strong); - padding: 0; - border-radius: 4px; - font-size: 14.5px; - letter-spacing: 0; - font-weight: 700; -} - -.author-name:hover { - color: var(--accent); - text-decoration: underline; - text-underline-offset: 2px; -} - -.group-body > header time { - color: var(--muted); - font-size: 11px; -} - -.group-body > header span { - color: var(--muted); - font-size: 12px; -} - -.message-row { - margin-left: -56px; - padding: 1px 0 1px 56px; - position: relative; - border-radius: 0; - transition: background 80ms ease; -} - -.message-row:not(:first-child) { - margin-top: 1px; -} - -.message-row:hover { - background: var(--hover-strong); -} - -.message-row.selected { - background: var(--accent-soft); -} - -.message-row.selected::before { - content: ""; - position: absolute; - left: 0; - top: 0; - bottom: 0; - width: 3px; - background: var(--accent); -} - -.row-stamp { - position: absolute; - left: 8px; - top: 4px; - font-size: 10px; - color: var(--muted-2); - opacity: 0; - font-variant-numeric: tabular-nums; -} - -.message-row:hover .row-stamp { - opacity: 1; -} - -.message-content { - min-width: 0; -} - -.message-actions { - display: flex; - align-items: flex-start; - gap: 4px; - padding-right: 12px; - opacity: 0; - transform: translateY(-50%); - position: absolute; - right: 8px; - top: 0; - background: var(--panel); - border: 1px solid var(--line-strong); - border-radius: 8px; - padding: 2px; - box-shadow: var(--shadow); - transition: - opacity 100ms ease, - transform 100ms ease; -} - -.message-row:hover .message-actions, -.message-row.selected .message-actions { - opacity: 1; -} - -.message-actions button { - width: 28px; - height: 28px; - display: grid; - place-items: center; - border: 0; - border-radius: 6px; - background: transparent; - color: var(--muted); -} - -.message-actions button:hover { - background: var(--hover-strong); - color: var(--text-strong); -} - -.markdown { - line-height: 1.5; - color: var(--text); - font-size: 14.5px; - overflow-wrap: anywhere; - word-break: break-word; -} - -.markdown > :first-child { - margin-top: 0; -} - -.markdown > :last-child { - margin-bottom: 0; -} - -.markdown p { - margin: 0; -} - -.markdown p + p, -.markdown ul, -.markdown ol, -.markdown blockquote, -.markdown pre { - margin-top: 6px; -} - -.markdown a { - color: var(--accent); - text-decoration: none; -} - -.markdown a:hover { - text-decoration: underline; -} - -.markdown code { - background: var(--panel-2); - border: 1px solid var(--line); - border-radius: 4px; - padding: 1px 5px; - font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; - font-size: 0.9em; -} - -.markdown pre { - background: var(--panel-2); - border: 1px solid var(--line); - border-radius: var(--radius); - padding: 12px 14px; - overflow-x: auto; -} - -.markdown pre code { - background: transparent; - border: 0; - padding: 0; -} - -.markdown blockquote { - border-left: 3px solid var(--accent); - margin: 0; - padding: 4px 0 4px 12px; - color: var(--muted); -} - -.markdown ul, -.markdown ol { - padding-left: 22px; -} - -.markdown img { - max-width: 100%; - max-height: 360px; - border-radius: var(--radius); - margin-top: 6px; - border: 1px solid var(--line); - object-fit: contain; - background: var(--panel); - cursor: zoom-in; -} - -.attachment-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); - gap: 8px; - margin-top: 8px; - max-width: 560px; -} - -.attachment-grid.compact { - grid-template-columns: minmax(0, 1fr); - max-width: 420px; -} - -.media-tile { - position: relative; - display: block; - width: 100%; - margin: 0; - padding: 0; - border: 1px solid var(--line); - border-radius: var(--radius-lg); - background: #0a0c12; - overflow: hidden; - isolation: isolate; - text-align: left; - color: inherit; - text-decoration: none; - cursor: pointer; - transition: - border-color 140ms ease, - transform 140ms ease, - box-shadow 140ms ease; -} - -.media-tile:hover { - border-color: var(--line-strong); - box-shadow: 0 18px 40px -28px rgba(0, 0, 0, 0.9); -} - -.media-tile:focus-visible { - outline: none; - border-color: var(--line-strong); - box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 35%, transparent); -} - -.media-tile--image { - cursor: zoom-in; -} - -.media-tile__open { - display: block; - width: 100%; - margin: 0; - padding: 0; - border: 0; - background: transparent; - color: inherit; - cursor: zoom-in; -} - -.media-tile__open:focus { - outline: 0; -} - -.media-tile__open:focus-visible + .media-tile__caption .media-tile__name { - text-decoration: underline; - text-decoration-thickness: 1px; - text-underline-offset: 3px; -} - -.media-tile--video { - cursor: default; -} - -.media-tile img, -.media-tile video { - display: block; - width: 100%; - max-height: 360px; - object-fit: contain; - background: #05070d; -} - -.media-tile--image img { - max-height: 320px; -} - -.media-tile__caption { - position: absolute; - inset: auto 0 0 0; - z-index: 3; - display: flex; - align-items: center; - gap: 8px; - padding: 22px 10px 8px; - background: linear-gradient( - to top, - rgba(0, 0, 0, 0.78) 0%, - rgba(0, 0, 0, 0.5) 40%, - rgba(0, 0, 0, 0) 100% - ); - opacity: 0; - pointer-events: auto; - transition: opacity 140ms ease; -} - -.media-tile:hover .media-tile__caption, -.media-tile:focus-within .media-tile__caption { - opacity: 1; -} - -.media-tile--video.is-started .media-tile__caption { - display: none; -} - -.media-tile__name { - flex: 1; - min-width: 0; - color: white; - font-size: 12px; - font-weight: 500; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} - -.media-tile__chip { - position: relative; - z-index: 4; - display: inline-grid; - place-items: center; - width: 28px; - height: 28px; - flex: none; - border-radius: 8px; - background: rgba(0, 0, 0, 0.5); - color: white; - border: 1px solid rgba(255, 255, 255, 0.18); - backdrop-filter: blur(10px); - text-decoration: none; - transition: - background 120ms ease, - border-color 120ms ease, - transform 120ms ease; -} - -.media-tile__chip:hover { - background: rgba(0, 0, 0, 0.7); - border-color: rgba(255, 255, 255, 0.32); - transform: translateY(-1px); -} - -.media-tile__play { - position: absolute; - inset: 0 0 48px 0; - display: grid; - place-items: center; - width: 100%; - height: auto; - border: 0; - margin: 0; - padding: 0; - background: transparent; - cursor: pointer; - z-index: 1; -} - -.media-tile__play::before { - content: ""; - position: absolute; - inset: 0; - background: radial-gradient( - ellipse at center, - rgba(0, 0, 0, 0.18) 0%, - rgba(0, 0, 0, 0.05) 45%, - rgba(0, 0, 0, 0) 70% - ); - opacity: 0.7; - transition: opacity 160ms ease; - pointer-events: none; -} - -.media-tile__play:hover::before { - opacity: 0.9; -} - -.media-tile__play-icon { - position: relative; - display: grid; - place-items: center; - width: 46px; - height: 46px; - border-radius: 999px; - background: rgba(0, 0, 0, 0.55); - color: white; - backdrop-filter: blur(10px); - -webkit-backdrop-filter: blur(10px); - box-shadow: 0 6px 20px -8px rgba(0, 0, 0, 0.55); - padding-left: 3px; /* optical centering of the play glyph */ - transition: - transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1), - background 180ms ease, - box-shadow 200ms ease; -} - -.media-tile__play-icon svg { - filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4)); -} - -.media-tile__play:hover .media-tile__play-icon { - transform: scale(1.06); - background: rgba(0, 0, 0, 0.7); - box-shadow: 0 10px 28px -10px rgba(0, 0, 0, 0.65); -} - -.media-tile__play:active .media-tile__play-icon { - transform: scale(0.97); - transition-duration: 80ms; -} - -.media-tile__play:focus-visible { - outline: none; -} - -.media-tile__play:focus-visible .media-tile__play-icon { - box-shadow: - 0 0 0 2px rgba(255, 255, 255, 0.6), - 0 10px 28px -10px rgba(0, 0, 0, 0.65); -} - -.media-tile__duration { - position: absolute; - left: 8px; - bottom: 8px; - z-index: 2; - padding: 2px 6px; - border-radius: 4px; - background: rgba(0, 0, 0, 0.72); - color: white; - font-size: 11px; - font-variant-numeric: tabular-nums; - font-weight: 600; - letter-spacing: 0.02em; - pointer-events: none; -} - -.file-attachment { - display: flex; - align-items: center; - gap: 10px; - max-width: 360px; - padding: 10px; - border: 1px solid var(--line); - border-radius: var(--radius); - background: var(--panel); -} - -.file-attachment:hover { - border-color: var(--line-strong); - background: var(--panel-2); -} - -.file-icon { - width: 34px; - height: 34px; - display: grid; - place-items: center; - border-radius: 8px; - background: var(--accent-soft); - color: var(--accent); - font-weight: 800; -} - -.file-attachment strong, -.file-attachment small { - display: block; -} - -.file-attachment strong { - color: var(--text-strong); - font-size: 13px; -} - -.file-attachment small { - color: var(--muted); - font-size: 11px; -} - -/* ---------- COMPOSER ---------- */ - -.composer { - padding: 18px 18px 10px; - background: var(--bg); - display: grid; - gap: 0; - position: relative; -} - -.composer-card { - display: flex; - flex-direction: column; - background: var(--panel); - border: 1px solid var(--line-strong); - border-radius: var(--radius-lg); - overflow: hidden; - transition: - border-color 120ms ease, - box-shadow 120ms ease; -} - -.composer:focus-within .composer-card { - border-color: color-mix(in srgb, var(--accent) 55%, var(--line-strong)); - box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent); -} - -.composer-toolbar { - display: inline-flex; - align-items: center; - gap: 2px; - width: 100%; - padding: 4px 6px; - margin: 0; - border: 0; - border-top: 1px solid var(--line); - border-radius: 0; - background: color-mix(in srgb, var(--panel-2) 35%, transparent); - box-shadow: none; -} - -.composer-toolbar button { - min-width: 28px; - height: 26px; - display: grid; - place-items: center; - border: 0; - border-radius: 6px; - background: transparent; - color: var(--text); - opacity: 0.78; - font-size: 11.5px; - font-weight: 700; - transition: - background 100ms ease, - color 100ms ease, - opacity 100ms ease, - transform 80ms ease; -} - -.composer-toolbar button:hover { - background: var(--hover-strong); - color: var(--text-strong); - opacity: 1; -} - -.composer-toolbar button.active { - background: var(--accent-soft); - color: var(--accent); - opacity: 1; -} - -.composer-toolbar button:active { - transform: translateY(1px); -} - -.gif-picker { - margin-top: 8px; - margin-bottom: 8px; - width: min(520px, calc(100vw - 40px)); - border: 1px solid var(--line-strong); - border-radius: 16px; - background: color-mix(in srgb, var(--panel) 96%, transparent); - box-shadow: var(--shadow); - padding: 10px; - animation: picker-in 160ms cubic-bezier(0.2, 0.8, 0.2, 1); -} - -.gif-picker-head { - display: grid; - grid-template-columns: auto minmax(0, 1fr); - align-items: center; - gap: 10px; - padding: 2px 2px 10px; -} - -.gif-picker-head strong { - color: var(--text-strong); - font-size: 13px; -} - -.gif-picker-head input { - min-width: 0; - height: 32px; - padding: 0 10px; - border: 1px solid var(--line); - border-radius: var(--radius); - background: var(--panel-2); -} - -.gif-grid { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 8px; - max-height: 240px; - overflow-y: auto; -} - -.gif-grid button { - position: relative; - overflow: hidden; - aspect-ratio: 4 / 3; - border: 0; - border-radius: 12px; - background: var(--panel-2); - color: white; - padding: 0; - box-shadow: inset 0 0 0 1px var(--line); - transition: - transform 120ms ease, - box-shadow 120ms ease; -} - -.gif-grid button:hover { - transform: translateY(-2px); - box-shadow: - inset 0 0 0 2px var(--accent), - 0 14px 30px -22px rgba(0, 0, 0, 0.8); -} - -.gif-grid img { - width: 100%; - height: 100%; - display: block; - object-fit: cover; -} - -.gif-grid span { - position: absolute; - left: 6px; - right: 6px; - bottom: 6px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - border-radius: 999px; - background: rgba(0, 0, 0, 0.56); - padding: 4px 7px; - font-size: 10.5px; - font-weight: 700; - backdrop-filter: blur(8px); -} - -@keyframes picker-in { - from { - opacity: 0; - transform: translateY(8px) scale(0.98); - } - to { - opacity: 1; - transform: translateY(0) scale(1); - } -} - -.composer-row { - --composer-control-size: 36px; - --composer-line-height: 22px; - --composer-text-padding-block: 7px; - - display: grid; - grid-template-columns: auto minmax(0, 1fr) auto; - align-items: start; - gap: 4px; - padding: 8px 8px 4px 10px; - background: transparent; - border: 0; - border-radius: 0; -} - -.composer:focus-within .composer-toolbar, -.composer-row:focus-within { - border-color: transparent; -} - -.composer-row:focus-within { - box-shadow: none; -} - -.composer-icon { - align-self: start; - width: var(--composer-control-size); - height: var(--composer-control-size); - margin-top: calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2); - display: grid; - place-items: center; - color: var(--muted); - border-radius: 10px; - cursor: pointer; - transition: - background 120ms ease, - color 120ms ease; -} - -.composer-icon:hover { - background: var(--hover-strong); - color: var(--text-strong); -} - -.composer-icon input[type="file"] { - position: absolute; - inline-size: 1px; - block-size: 1px; - opacity: 0; - pointer-events: none; -} - -.composer textarea, -.reply-composer textarea { - width: 100%; - height: auto; - min-height: 44px; - max-height: 50vh; - padding: var(--composer-text-padding-block) 4px; - resize: none; - color: var(--text); - line-height: var(--composer-line-height); - font-size: 14.5px; - align-self: start; - overflow-y: auto; - box-sizing: border-box; -} - -.composer textarea::placeholder, -.reply-composer textarea::placeholder { - color: var(--muted); -} - -.send { - align-self: start; - width: var(--composer-control-size); - height: var(--composer-control-size); - margin-top: calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2); - display: grid; - place-items: center; - border: 0; - border-radius: 10px; - background: var(--accent); - color: white; - transition: - background 120ms ease, - transform 80ms ease, - opacity 120ms ease; -} - -.send:hover:not(:disabled) { - background: var(--accent-2); - transform: translateY(-1px); -} - -.send:disabled { - background: var(--panel-3); - color: var(--muted-2); - cursor: not-allowed; -} - -.composer-attachment { - margin-top: 8px; - margin-bottom: 8px; - display: inline-flex; - align-items: center; - gap: 8px; - padding: 6px 10px; - background: var(--panel); - border: 1px solid var(--line); - border-radius: var(--radius); - color: var(--text); - font-size: 13px; - width: fit-content; -} - -.attachment-icon { - display: grid; - place-items: center; - width: 20px; - height: 20px; - border-radius: 6px; - background: var(--accent-soft); - color: var(--accent); -} - -.pending-image { - width: 42px; - height: 32px; - object-fit: cover; - border-radius: 7px; - border: 1px solid var(--line); - background: var(--panel-2); -} - -.attachment-name { - max-width: 240px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.attachment-remove { - width: 18px; - height: 18px; - border: 0; - background: transparent; - color: var(--muted); - border-radius: 50%; - font-size: 14px; - line-height: 1; -} - -.attachment-remove:hover { - background: var(--danger); - color: white; -} - -.composer-hint { - color: var(--muted-2); - font-size: 11px; - padding: 7px 4px 0; -} - -.composer-hint kbd { - display: inline-block; - background: var(--panel-2); - border: 1px solid var(--line); - border-radius: 4px; - padding: 0 5px; - font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; - font-size: 10.5px; - color: var(--text); -} - -/* ---------- THREAD ---------- */ - -.thread { - display: grid; - grid-template-rows: auto minmax(0, 1fr) auto; - background: var(--panel); - border-left: 1px solid var(--line); - min-width: 0; - overflow: hidden; - opacity: 0; - transform: translateX(28px); - pointer-events: none; - transition: - opacity 180ms ease, - transform 220ms cubic-bezier(0.2, 0.8, 0.2, 1); -} - -.thread.open { - opacity: 1; - transform: translateX(0); - pointer-events: auto; -} - -.thread > header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 12px 16px; - min-height: 60px; - border-bottom: 1px solid var(--line); - background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent), var(--panel); -} - -.thread > header p, -.thread > header strong { - margin: 0; -} - -.thread > header p { - color: var(--muted); - font-size: 11px; - text-transform: uppercase; - letter-spacing: 0.04em; - font-weight: 700; -} - -.thread > header strong { - display: block; - color: var(--text-strong); - font-size: 14px; -} - -.thread .close { - width: 28px; - height: 28px; - border: 0; - border-radius: 50%; - background: var(--panel-2); - color: var(--muted); - font-size: 18px; - line-height: 1; -} - -.thread .close:hover { - background: var(--panel-3); - color: var(--text-strong); -} - -.thread-scroll { - overflow-y: auto; - padding: 12px 16px; -} - -.thread-root { - display: grid; - grid-template-columns: 38px minmax(0, 1fr); - gap: 12px; - padding-bottom: 12px; - border-bottom: 1px solid var(--line); -} - -.thread-divider { - display: flex; - align-items: center; - gap: 10px; - margin: 14px 0 10px; -} - -.thread-divider::before, -.thread-divider::after { - content: ""; - flex: 1; - height: 1px; - background: var(--line); -} - -.thread-divider span { - font-size: 11px; - color: var(--muted); - text-transform: uppercase; - letter-spacing: 0.04em; - font-weight: 700; -} - -.reply-list { - display: flex; - flex-direction: column; - gap: 10px; -} - -.reply { - display: grid; - grid-template-columns: 30px minmax(0, 1fr); - gap: 10px; - padding: 6px; - border-radius: var(--radius-sm); -} - -.reply:hover { - background: var(--hover); -} - -.reply-composer { - padding: 10px 14px 14px; - background: var(--panel); - border-top: 1px solid var(--line); -} - -.reply-composer .composer-row { - border-radius: 0; -} - -.thread-empty { - display: grid; - place-items: center; - align-content: center; - gap: 8px; - padding: 32px 24px; - text-align: center; - grid-row: span 3; -} - -.thread-icon { - width: 56px; - height: 56px; - border-radius: 16px; - background: var(--panel-2); - color: var(--muted); - display: grid; - place-items: center; -} - -.thread-empty strong { - color: var(--text-strong); - font-size: 15px; -} - -.thread-empty span { - color: var(--muted); - font-size: 13px; - max-width: 260px; - line-height: 1.5; -} - -/* ---------- PROFILE PANE ---------- */ - -.profile-pane { - overflow-y: auto; -} - -.profile-hero { - min-height: 210px; - display: grid; - place-items: end center; - padding: 28px 20px; - background: - linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.24)), - linear-gradient( - 135deg, - hsl(var(--hue, 220deg) 76% 58%), - hsl(calc(var(--hue, 220deg) + 54deg) 74% 38%) - ); - border-bottom: 1px solid var(--line); -} - -.profile-avatar { - width: min(240px, 70%); - aspect-ratio: 1; - display: grid; - place-items: center; - overflow: hidden; - border-radius: 16px; - background: rgba(255, 255, 255, 0.18); - color: white; - font-size: clamp(48px, 12vw, 88px); - font-weight: 800; - box-shadow: 0 26px 60px -30px rgba(0, 0, 0, 0.9); -} - -.profile-avatar img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.profile-pane-body { - display: grid; - gap: 18px; - padding: 18px 16px 22px; -} - -.profile-pane-title { - display: flex; - align-items: flex-start; - justify-content: space-between; - gap: 12px; -} - -.profile-pane-title h2 { - margin: 0; - color: var(--text-strong); - font-size: 22px; - letter-spacing: 0; -} - -.profile-pane-title span { - display: block; - margin-top: 3px; - color: var(--muted); - font-size: 13px; -} - -.text-action { - border: 0; - border-radius: 6px; - background: transparent; - color: var(--accent); - font-size: 13px; - font-weight: 700; - padding: 4px 6px; -} - -.text-action:hover { - background: var(--accent-soft); -} - -.profile-presence { - display: inline-flex; - align-items: center; - gap: 8px; - color: var(--text); - font-size: 14px; -} - -.profile-actions-row { - display: flex; - gap: 8px; - flex-wrap: wrap; -} - -.profile-actions-row .primary-action, -.profile-actions-row .ghost-action { - min-width: 110px; -} - -.profile-info { - display: grid; - gap: 12px; - padding-top: 18px; - border-top: 1px solid var(--line); -} - -.profile-info header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 10px; -} - -.profile-info header strong { - color: var(--text-strong); - font-size: 14px; -} - -.profile-info-row { - display: grid; - grid-template-columns: 34px minmax(0, 1fr); - gap: 10px; - align-items: center; -} - -.info-icon { - width: 34px; - height: 34px; - display: grid; - place-items: center; - border-radius: 9px; - background: var(--panel-2); - color: var(--muted); - font-size: 11px; - font-weight: 800; -} - -.profile-info-row small, -.profile-info-row span { - display: block; -} - -.profile-info-row small { - color: var(--muted); - font-size: 11px; -} - -.profile-info-row span { - color: var(--text); - font-size: 13px; - overflow-wrap: anywhere; -} - -.profile-note { - margin: 0; - color: var(--muted); - line-height: 1.5; - font-size: 13px; -} - -/* ---------- ACCOUNT SETTINGS ---------- */ - -.modal-scrim { - position: fixed; - inset: 0; - z-index: 50; - display: grid; - place-items: center; - padding: 24px; - background: rgba(5, 8, 15, 0.54); - backdrop-filter: blur(14px); -} - -.modal-backdrop { - position: absolute; - inset: 0; - border: 0; - background: transparent; -} - -.modal-backdrop:focus { - outline: 0; -} - -.profile-modal { - position: relative; - z-index: 1; - width: min(480px, 100%); - border: 1px solid var(--line-strong); - border-radius: 14px; - background: var(--panel); - color: var(--text); - box-shadow: var(--shadow); - overflow: hidden; -} - -.profile-modal > header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - padding: 18px 20px; - border-bottom: 1px solid var(--line); - background: var(--panel-2); -} - -.profile-modal p { - margin: 0 0 3px; - color: var(--muted); - font-size: 11px; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.06em; -} - -.profile-modal h2 { - margin: 0; - color: var(--text-strong); - font-size: 20px; - letter-spacing: 0; -} - -.profile-modal > header button { - width: 32px; - height: 32px; - border: 0; - border-radius: 8px; - background: transparent; - color: var(--muted); - font-size: 22px; -} - -.profile-modal > header button:hover { - background: var(--hover); - color: var(--text-strong); -} - -.profile-form { - display: grid; - gap: 14px; - padding: 20px; -} - -.profile-preview { - display: flex; - align-items: center; - gap: 14px; - padding: 14px; - border: 1px solid var(--line); - border-radius: var(--radius); - background: var(--panel-2); -} - -.profile-preview strong, -.profile-preview span { - display: block; -} - -.profile-preview strong { - color: var(--text-strong); - font-size: 15px; -} - -.profile-preview span { - color: var(--muted); - font-size: 13px; -} - -.field { - display: grid; - gap: 6px; -} - -.field span { - color: var(--muted); - font-size: 12px; - font-weight: 700; -} - -.field input { - width: 100%; - height: 38px; - padding: 0 12px; - border: 1px solid var(--line); - border-radius: var(--radius-sm); - background: var(--panel-2); - color: var(--text); -} - -.field input:focus { - border-color: var(--accent); - outline: 0; - box-shadow: 0 0 0 3px var(--accent-soft); -} - -.profile-status { - color: var(--success); - font-size: 12px; -} - -.profile-status.error { - color: var(--danger); -} - -.profile-actions { - display: flex; - justify-content: flex-end; - gap: 8px; - padding-top: 4px; -} - -.ghost-action, -.primary-action { - height: 36px; - padding: 0 14px; - border-radius: var(--radius-sm); - font-weight: 700; -} - -.ghost-action { - border: 1px solid var(--line); - background: var(--panel); - color: var(--text); -} - -.primary-action { - border: 0; - background: var(--accent); - color: white; -} - -.ghost-action:hover { - background: var(--hover); -} - -.primary-action:hover { - filter: brightness(1.04); -} - -/* ---------- IMAGE VIEWER ---------- */ - -.image-viewer-scrim { - padding: 28px; - background: rgba(0, 0, 0, 0.78); - backdrop-filter: blur(18px); -} - -.image-viewer { - position: relative; - z-index: 1; - display: grid; - grid-template-rows: auto minmax(0, 1fr); - width: min(1120px, 100%); - max-height: min(86vh, 900px); - overflow: hidden; - border-radius: 14px; - background: #07090f; - color: white; - box-shadow: 0 34px 90px -34px rgba(0, 0, 0, 0.95); - animation: picker-in 150ms cubic-bezier(0.2, 0.8, 0.2, 1); -} - -.image-viewer > header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - min-height: 52px; - padding: 10px 12px 10px 16px; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(255, 255, 255, 0.04); -} - -.image-viewer > header strong { - min-width: 0; - overflow: hidden; - color: white; - font-size: 13px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.image-viewer > header div { - display: inline-flex; - align-items: center; - gap: 8px; - flex-shrink: 0; -} - -.image-viewer > header a { - height: 30px; - display: inline-flex; - align-items: center; - padding: 0 10px; - border-radius: 7px; - background: rgba(255, 255, 255, 0.08); - color: white; - font-size: 12px; - font-weight: 700; - text-decoration: none; -} - -.image-viewer > header a:hover { - background: rgba(255, 255, 255, 0.14); -} - -.image-viewer > header button { - width: 30px; - height: 30px; - display: grid; - place-items: center; - border: 0; - border-radius: 7px; - background: transparent; - color: rgba(255, 255, 255, 0.78); - font-size: 22px; - line-height: 1; -} - -.image-viewer > header button:hover { - background: rgba(255, 255, 255, 0.12); - color: white; -} - -.image-viewer-stage { - display: grid; - place-items: center; - min-height: 0; - padding: 18px; -} - -.image-viewer-stage img { - display: block; - max-width: 100%; - max-height: calc(86vh - 96px); - object-fit: contain; - border-radius: 8px; - background: rgba(255, 255, 255, 0.04); -} - -/* ---------- MOBILE ---------- */ - -.mobile-nav-toggle { - display: none; - position: fixed; - top: 14px; - left: 14px; - z-index: 30; - width: 38px; - height: 38px; - border-radius: 10px; - border: 1px solid var(--line-strong); - background: var(--panel); - color: var(--text); - font-size: 22px; - line-height: 1; -} - -.mobile-nav-toggle .bars { - display: grid; - gap: 3px; -} - -.mobile-nav-toggle .bars i { - display: block; - width: 16px; - height: 2px; - background: currentColor; - border-radius: 2px; -} - -@media (max-width: 1180px) { - .shell { - grid-template-columns: 72px 240px minmax(0, 1fr); - } - .shell.sidebar-collapsed, - .shell.sidebar-collapsed.thread-open { - grid-template-columns: 72px 0 minmax(0, 1fr); - } - .thread { - position: fixed; - inset: 0 0 0 auto; - width: min(420px, 100vw); - box-shadow: var(--shadow); - transform: translateX(100%); - transition: transform 180ms ease; - z-index: 4; - border-left: 1px solid var(--line-strong); - } - .thread.open { - transform: translateX(0); - } -} - -@media (max-width: 820px) { - .mobile-nav-toggle { - display: grid; - place-items: center; - } - .shell { - grid-template-columns: 1fr; - } - .shell.thread-open, - .shell.sidebar-collapsed, - .shell.sidebar-collapsed.thread-open { - grid-template-columns: 1fr; - } - .sidebar-collapsed .sidebar { - opacity: 1; - pointer-events: auto; - transform: translateX(-100%); - } - .guild-rail, - .sidebar { - position: fixed; - inset: 0 auto 0 0; - z-index: 20; - transform: translateX(-100%); - transition: transform 180ms ease; - } - .guild-rail { - width: 72px; - } - .sidebar { - left: 72px; - width: 260px; - } - .nav-open .guild-rail, - .nav-open .sidebar { - transform: translateX(0); - } - .topbar { - padding-left: 64px; - } - .search { - width: 180px; - } -} - -@media (max-width: 520px) { - .search { - display: none; - } - .topbar-meta, - .topbar-divider { - display: none; - } -} - -/* Inline quote-reply */ -.message-row.highlight, -.thread-root.highlight, -.reply.highlight { - animation: quote-flash 1.4s ease-out; -} - -@keyframes quote-flash { - 0% { - background: rgba(99, 102, 241, 0.22); - } - 100% { - background: transparent; - } -} - -.quote-block { - display: inline-flex; - align-items: stretch; - gap: 0.5rem; - margin: 0 0 0.35rem; - padding: 0.25rem 0.5rem 0.25rem 0; - background: transparent; - border: 0; - border-radius: 6px; - color: inherit; - cursor: pointer; - text-align: left; - max-width: 100%; - font: inherit; -} - -.quote-block:hover:not(:disabled) { - background: rgba(99, 102, 241, 0.08); -} - -.quote-block:disabled { - cursor: default; - opacity: 0.75; -} - -.quote-block .quote-bar { - width: 3px; - align-self: stretch; - background: var(--accent, #6366f1); - border-radius: 2px; - flex: 0 0 3px; -} - -.quote-block .quote-content { - display: flex; - flex-direction: column; - gap: 0.1rem; - min-width: 0; -} - -.quote-block .quote-author { - font-size: 0.78rem; - font-weight: 600; - color: var(--accent, #6366f1); -} - -.quote-block .quote-snippet { - font-size: 0.85rem; - color: var(--text-muted, #6b7280); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 56ch; -} - -.quote-block .quote-snippet.muted { - font-style: italic; - opacity: 0.75; -} - -.quote-preview { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 6px 10px 6px 12px; - margin: 0; - background: color-mix(in srgb, var(--accent) 5%, transparent); - border: 0; - border-bottom: 1px solid var(--line); - border-radius: 0; - font-size: 12.5px; - color: var(--muted); -} - -.quote-preview .quote-bar { - display: none; -} - -.quote-preview-body { - display: flex; - align-items: baseline; - gap: 0.4rem; - flex: 1; - min-width: 0; - overflow: hidden; -} - -.quote-preview-label { - font-size: 12px; - color: color-mix(in srgb, var(--accent) 85%, var(--text)); - white-space: nowrap; -} - -.quote-preview-label strong { - color: var(--text-strong); - font-weight: 600; -} - -.quote-preview-snippet { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - color: var(--muted); - font-size: 12px; - flex: 1; - min-width: 0; -} - -.quote-preview-clear { - background: transparent; - border: 0; - color: var(--muted); - font-size: 16px; - line-height: 1; - cursor: pointer; - padding: 2px 6px; - border-radius: 6px; - transition: - background 100ms ease, - color 100ms ease; -} - -.quote-preview-clear:hover { - color: var(--text-strong); - background: var(--hover-strong); -} - -.reply-quote-btn { - position: relative; - margin-left: auto; - background: transparent; - border: 0; - color: var(--text-muted, #6b7280); - cursor: pointer; - font-size: 0.95rem; - padding: 0 0.3rem; - opacity: 0; - transition: opacity 0.15s; -} - -.reply:hover .reply-quote-btn, -.thread-root:hover .reply-quote-btn, -.reply-quote-btn:focus-visible { - opacity: 1; -} - -.reply-quote-btn:hover { - color: var(--accent, #6366f1); -} - -.tooltip { - position: relative; -} - -.tooltip::before, -.reply-quote-btn::before { - content: attr(data-tooltip); - position: absolute; - left: 50%; - bottom: calc(100% + 12px); - z-index: 20; - transform: translate(-50%, 4px) scale(0.96); - padding: 0.42rem 0.62rem; - border-radius: 9px; - background: #3a3a44; - color: #f4f4f7; - box-shadow: 0 10px 28px rgba(0, 0, 0, 0.28); - font-size: 0.78rem; - font-weight: 700; - line-height: 1; - white-space: nowrap; - opacity: 0; - pointer-events: none; - transition: - opacity 120ms ease, - transform 120ms ease; -} - -.tooltip::after, -.reply-quote-btn::after { - content: ""; - position: absolute; - left: 50%; - bottom: calc(100% + 5px); - z-index: 20; - width: 12px; - height: 12px; - border-radius: 2px; - background: #3a3a44; - transform: translate(-50%, 4px) rotate(45deg) scale(0.9); - opacity: 0; - pointer-events: none; - transition: - opacity 120ms ease, - transform 120ms ease; -} - -.tooltip:hover::before, -.tooltip:focus-visible::before, -.reply-quote-btn:hover::before, -.reply-quote-btn:focus-visible::before, -.tooltip:hover::after, -.tooltip:focus-visible::after, -.reply-quote-btn:hover::after, -.reply-quote-btn:focus-visible::after { - opacity: 1; - transform: translate(-50%, 0) scale(1); -} - -.tooltip:hover::after, -.tooltip:focus-visible::after, -.reply-quote-btn:hover::after, -.reply-quote-btn:focus-visible::after { - transform: translate(-50%, 0) rotate(45deg) scale(1); -} +@import "./styles/base.css"; +@import "./styles/layout.css"; +@import "./styles/sidebar.css"; +@import "./styles/messages.css"; +@import "./styles/composer.css"; +@import "./styles/thread.css"; +@import "./styles/modals.css"; diff --git a/apps/web/src/styles/base.css b/apps/web/src/styles/base.css new file mode 100644 index 0000000..22c5727 --- /dev/null +++ b/apps/web/src/styles/base.css @@ -0,0 +1,121 @@ +:root { + color-scheme: light dark; + font-family: + "Inter", + "SF Pro Text", + ui-sans-serif, + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + sans-serif; + font-feature-settings: "ss01", "cv11"; + --rail: #e9e1d7; + --bg: #f7f3ed; + --panel: #fffaf2; + --panel-2: #efe7dc; + --panel-3: #e4dbcf; + --hover: rgba(16, 32, 39, 0.05); + --hover-strong: rgba(16, 32, 39, 0.08); + --line: rgba(16, 32, 39, 0.1); + --line-strong: rgba(16, 32, 39, 0.16); + --text: #22201d; + --text-strong: #11100e; + --muted: #6f675f; + --muted-2: #958b80; + --accent: #dd5d45; + --accent-2: #006d77; + --accent-soft: rgba(221, 93, 69, 0.16); + --accent-glow: 0 0 0 1px rgba(221, 93, 69, 0.28), 0 8px 30px -12px rgba(221, 93, 69, 0.45); + --success: #168b51; + --warn: #f5b050; + --danger: #c84343; + --shadow: 0 24px 60px -24px rgba(16, 32, 39, 0.32); + --radius-sm: 6px; + --radius: 8px; + --radius-lg: 14px; + --radius-xl: 18px; + background: var(--bg); + color: var(--text); +} + +@media (prefers-color-scheme: dark) { + :root { + --rail: #0d0e12; + --bg: #131419; + --panel: #1a1b22; + --panel-2: #20222b; + --panel-3: #272a35; + --hover: rgba(255, 255, 255, 0.04); + --hover-strong: rgba(255, 255, 255, 0.07); + --line: rgba(255, 255, 255, 0.07); + --line-strong: rgba(255, 255, 255, 0.12); + --text: #e7e9ee; + --text-strong: #ffffff; + --muted: #8a8f9c; + --muted-2: #5d626d; + --accent: #6f7eff; + --accent-2: #5666ee; + --accent-soft: rgba(111, 126, 255, 0.18); + --accent-glow: 0 0 0 1px rgba(111, 126, 255, 0.4), 0 8px 30px -12px rgba(111, 126, 255, 0.6); + --success: #2ecc71; + --warn: #f5b050; + --danger: #ff6b6b; + --shadow: 0 24px 60px -20px rgba(0, 0, 0, 0.6); + } +} + +* { + box-sizing: border-box; +} + +html, +body { + margin: 0; + padding: 0; + height: 100%; +} + +body { + background: + radial-gradient(1000px 600px at 0% 0%, rgba(111, 126, 255, 0.08), transparent 60%), + radial-gradient(900px 700px at 100% 100%, rgba(255, 130, 200, 0.05), transparent 60%), var(--bg); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +button, +input, +textarea { + font: inherit; + color: inherit; +} + +button { + cursor: pointer; +} + +input, +textarea { + background: transparent; + border: 0; + outline: 0; +} + +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.06); + border-radius: 999px; + border: 2px solid transparent; + background-clip: content-box; +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.12); + background-clip: content-box; +} + diff --git a/apps/web/src/styles/composer.css b/apps/web/src/styles/composer.css new file mode 100644 index 0000000..a0557b8 --- /dev/null +++ b/apps/web/src/styles/composer.css @@ -0,0 +1,349 @@ +/* ---------- COMPOSER ---------- */ + +.composer { + padding: 18px 18px 10px; + background: var(--bg); + display: grid; + gap: 0; + position: relative; +} + +.composer-card { + display: flex; + flex-direction: column; + background: var(--panel); + border: 1px solid var(--line-strong); + border-radius: var(--radius-lg); + overflow: hidden; + transition: + border-color 120ms ease, + box-shadow 120ms ease; +} + +.composer:focus-within .composer-card { + border-color: color-mix(in srgb, var(--accent) 55%, var(--line-strong)); + box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent); +} + +.composer-toolbar { + display: inline-flex; + align-items: center; + gap: 2px; + width: 100%; + padding: 4px 6px; + margin: 0; + border: 0; + border-top: 1px solid var(--line); + border-radius: 0; + background: color-mix(in srgb, var(--panel-2) 35%, transparent); + box-shadow: none; +} + +.composer-toolbar button { + min-width: 28px; + height: 26px; + display: grid; + place-items: center; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--text); + opacity: 0.78; + font-size: 11.5px; + font-weight: 700; + transition: + background 100ms ease, + color 100ms ease, + opacity 100ms ease, + transform 80ms ease; +} + +.composer-toolbar button:hover { + background: var(--hover-strong); + color: var(--text-strong); + opacity: 1; +} + +.composer-toolbar button.active { + background: var(--accent-soft); + color: var(--accent); + opacity: 1; +} + +.composer-toolbar button:active { + transform: translateY(1px); +} + +.gif-picker { + margin-top: 8px; + margin-bottom: 8px; + width: min(520px, calc(100vw - 40px)); + border: 1px solid var(--line-strong); + border-radius: 16px; + background: color-mix(in srgb, var(--panel) 96%, transparent); + box-shadow: var(--shadow); + padding: 10px; + animation: picker-in 160ms cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.gif-picker-head { + display: grid; + grid-template-columns: auto minmax(0, 1fr); + align-items: center; + gap: 10px; + padding: 2px 2px 10px; +} + +.gif-picker-head strong { + color: var(--text-strong); + font-size: 13px; +} + +.gif-picker-head input { + min-width: 0; + height: 32px; + padding: 0 10px; + border: 1px solid var(--line); + border-radius: var(--radius); + background: var(--panel-2); +} + +.gif-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 8px; + max-height: 240px; + overflow-y: auto; +} + +.gif-grid button { + position: relative; + overflow: hidden; + aspect-ratio: 4 / 3; + border: 0; + border-radius: 12px; + background: var(--panel-2); + color: white; + padding: 0; + box-shadow: inset 0 0 0 1px var(--line); + transition: + transform 120ms ease, + box-shadow 120ms ease; +} + +.gif-grid button:hover { + transform: translateY(-2px); + box-shadow: + inset 0 0 0 2px var(--accent), + 0 14px 30px -22px rgba(0, 0, 0, 0.8); +} + +.gif-grid img { + width: 100%; + height: 100%; + display: block; + object-fit: cover; +} + +.gif-grid span { + position: absolute; + left: 6px; + right: 6px; + bottom: 6px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border-radius: 999px; + background: rgba(0, 0, 0, 0.56); + padding: 4px 7px; + font-size: 10.5px; + font-weight: 700; + backdrop-filter: blur(8px); +} + +@keyframes picker-in { + from { + opacity: 0; + transform: translateY(8px) scale(0.98); + } + to { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +.composer-row { + --composer-control-size: 36px; + --composer-line-height: 22px; + --composer-text-padding-block: 7px; + + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: start; + gap: 4px; + padding: 8px 8px 4px 10px; + background: transparent; + border: 0; + border-radius: 0; +} + +.composer:focus-within .composer-toolbar, +.composer-row:focus-within { + border-color: transparent; +} + +.composer-row:focus-within { + box-shadow: none; +} + +.composer-icon { + align-self: start; + width: var(--composer-control-size); + height: var(--composer-control-size); + margin-top: calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2); + display: grid; + place-items: center; + color: var(--muted); + border-radius: 10px; + cursor: pointer; + transition: + background 120ms ease, + color 120ms ease; +} + +.composer-icon:hover { + background: var(--hover-strong); + color: var(--text-strong); +} + +.composer-icon input[type="file"] { + position: absolute; + inline-size: 1px; + block-size: 1px; + opacity: 0; + pointer-events: none; +} + +.composer textarea, +.reply-composer textarea { + width: 100%; + height: auto; + min-height: 44px; + max-height: 50vh; + padding: var(--composer-text-padding-block) 4px; + resize: none; + color: var(--text); + line-height: var(--composer-line-height); + font-size: 14.5px; + align-self: start; + overflow-y: auto; + box-sizing: border-box; +} + +.composer textarea::placeholder, +.reply-composer textarea::placeholder { + color: var(--muted); +} + +.send { + align-self: start; + width: var(--composer-control-size); + height: var(--composer-control-size); + margin-top: calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2); + display: grid; + place-items: center; + border: 0; + border-radius: 10px; + background: var(--accent); + color: white; + transition: + background 120ms ease, + transform 80ms ease, + opacity 120ms ease; +} + +.send:hover:not(:disabled) { + background: var(--accent-2); + transform: translateY(-1px); +} + +.send:disabled { + background: var(--panel-3); + color: var(--muted-2); + cursor: not-allowed; +} + +.composer-attachment { + margin-top: 8px; + margin-bottom: 8px; + display: inline-flex; + align-items: center; + gap: 8px; + padding: 6px 10px; + background: var(--panel); + border: 1px solid var(--line); + border-radius: var(--radius); + color: var(--text); + font-size: 13px; + width: fit-content; +} + +.attachment-icon { + display: grid; + place-items: center; + width: 20px; + height: 20px; + border-radius: 6px; + background: var(--accent-soft); + color: var(--accent); +} + +.pending-image { + width: 42px; + height: 32px; + object-fit: cover; + border-radius: 7px; + border: 1px solid var(--line); + background: var(--panel-2); +} + +.attachment-name { + max-width: 240px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.attachment-remove { + width: 18px; + height: 18px; + border: 0; + background: transparent; + color: var(--muted); + border-radius: 50%; + font-size: 14px; + line-height: 1; +} + +.attachment-remove:hover { + background: var(--danger); + color: white; +} + +.composer-hint { + color: var(--muted-2); + font-size: 11px; + padding: 7px 4px 0; +} + +.composer-hint kbd { + display: inline-block; + background: var(--panel-2); + border: 1px solid var(--line); + border-radius: 4px; + padding: 0 5px; + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-size: 10.5px; + color: var(--text); +} + diff --git a/apps/web/src/styles/layout.css b/apps/web/src/styles/layout.css new file mode 100644 index 0000000..3a851dd --- /dev/null +++ b/apps/web/src/styles/layout.css @@ -0,0 +1,402 @@ +/* ---------- AUTH ---------- */ + +.auth-shell { + display: grid; + min-height: 100vh; + place-items: center; + padding: 32px; + background: + radial-gradient(700px 500px at 30% 20%, rgba(111, 126, 255, 0.18), transparent 60%), + radial-gradient(700px 500px at 80% 90%, rgba(255, 110, 196, 0.12), transparent 60%), var(--bg); +} + +.auth-panel { + display: grid; + gap: 22px; + width: min(100%, 440px); + border: 1px solid var(--line-strong); + border-radius: var(--radius-xl); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)) + var(--panel); + box-shadow: var(--shadow); + padding: 36px; +} + +.auth-brand { + display: flex; + align-items: center; + gap: 12px; +} + +.auth-brand .mark { + width: 44px; + height: 44px; + display: grid; + place-items: center; + border-radius: 12px; + background: linear-gradient(135deg, var(--accent), #b46cff); + color: white; + font-weight: 800; + letter-spacing: -0.02em; + box-shadow: 0 10px 24px -8px rgba(111, 126, 255, 0.7); +} + +.auth-brand .brand-text strong { + display: block; + color: var(--text-strong); + letter-spacing: -0.01em; +} + +.auth-brand .brand-text span { + display: block; + color: var(--muted); + font-size: 12px; +} + +.auth-copy { + display: grid; + gap: 8px; + margin-top: 8px; +} + +.auth-copy h1 { + margin: 0; + font-size: 28px; + letter-spacing: -0.02em; + color: var(--text-strong); +} + +.auth-copy p { + margin: 0; + color: var(--muted); + line-height: 1.5; +} + +.github-login { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 10px; + min-height: 46px; + border-radius: 12px; + background: #0d1117; + color: white; + font-weight: 600; + text-decoration: none; + border: 1px solid #2b2f36; + transition: + transform 80ms ease, + background 120ms ease, + border-color 120ms ease; +} + +.github-login:hover { + background: #161b22; + border-color: #3f4750; + transform: translateY(-1px); +} + +.auth-foot { + margin: 0; + color: var(--muted-2); + font-size: 12px; + text-align: center; +} + +/* ---------- SHELL ---------- */ + +.shell { + display: grid; + grid-template-columns: 72px 260px minmax(0, 1fr) 0; + height: 100vh; + min-height: 100vh; + overflow: hidden; + transition: grid-template-columns 220ms cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.shell.thread-open { + grid-template-columns: 72px 260px minmax(0, 1fr) minmax(340px, 28vw); +} + +.shell.sidebar-collapsed { + grid-template-columns: 72px 0 minmax(0, 1fr) 0; +} + +.shell.sidebar-collapsed.thread-open { + grid-template-columns: 72px 0 minmax(0, 1fr) minmax(340px, 28vw); +} + +/* ---------- TIMELINE ---------- */ + +.timeline { + display: flex; + flex-direction: column; + min-width: 0; + background: var(--bg); + overflow: hidden; +} + +.timeline > * { + min-width: 0; + flex-shrink: 0; +} + +.timeline > .messages { + flex: 1 1 0; + min-height: 0; +} + +.topbar { + display: flex; + align-items: center; + gap: 14px; + padding: 12px 20px; + min-height: 60px; + border-bottom: 1px solid var(--line); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent), var(--bg); +} + +.topbar-title { + display: flex; + align-items: center; + gap: 10px; + min-width: 0; + flex: 1; +} + +.topbar-title h1 { + margin: 0; + font-size: 16px; + font-weight: 700; + letter-spacing: -0.01em; + color: var(--text-strong); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.topbar-title h1.with-glyph::first-letter { + color: var(--muted); + margin-right: 1px; +} + +.topbar-divider { + width: 1px; + height: 18px; + background: var(--line-strong); + margin: 0 6px; +} + +.topbar-meta { + margin: 0; + color: var(--muted); + font-size: 12px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.search { + display: flex; + align-items: center; + gap: 8px; + width: min(280px, 30vw); + height: 34px; + padding: 0 10px; + border-radius: var(--radius); + background: var(--panel); + border: 1px solid var(--line); + color: var(--muted); + transition: + border-color 120ms ease, + background 120ms ease; +} + +.search:focus-within { + border-color: var(--accent); + background: var(--panel-2); + color: var(--text); +} + +.search input { + flex: 1; + min-width: 0; + height: 100%; + color: var(--text); +} + +.search input::placeholder { + color: var(--muted); +} + +.search-clear { + width: 18px; + height: 18px; + border-radius: 50%; + border: 0; + background: var(--panel-3); + color: var(--muted); + display: grid; + place-items: center; + font-size: 14px; + line-height: 1; +} + +.search-clear:hover { + background: var(--accent); + color: white; +} + +.search-submit { + height: 22px; + padding: 0 8px; + border: 0; + border-radius: 5px; + background: var(--accent-soft); + color: var(--accent); + font-size: 10.5px; + font-weight: 700; + letter-spacing: 0.04em; + text-transform: uppercase; +} + +.search-submit:hover { + background: var(--accent); + color: white; +} + +.topbar-actions { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.topbar-actions button { + width: 32px; + height: 32px; + display: grid; + place-items: center; + border: 1px solid var(--line); + border-radius: 9px; + background: var(--panel); + color: var(--muted); + transition: + background 120ms ease, + color 120ms ease, + border-color 120ms ease, + transform 80ms ease; +} + +.topbar-actions button:hover, +.topbar-actions button.active { + background: var(--accent-soft); + border-color: color-mix(in srgb, var(--accent) 55%, transparent); + color: var(--accent); +} + +.topbar-actions button:active { + transform: translateY(1px); +} + +@keyframes pulse { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0.5; + } +} + +/* ---------- SEARCH RESULTS ---------- */ + +.search-results { + display: flex; + flex-direction: column; + gap: 2px; + padding: 10px 14px 14px; + border-bottom: 1px solid var(--line); + background: var(--panel); + max-height: 280px; + overflow-y: auto; +} + +.search-results-head { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 6px 8px; +} + +.search-results-head strong { + color: var(--text-strong); + font-size: 13px; +} + +.search-results-head button { + border: 0; + background: transparent; + color: var(--muted); + font-size: 12px; + padding: 4px 8px; + border-radius: var(--radius-sm); +} + +.search-results-head button:hover { + background: var(--hover); + color: var(--text); +} + +.search-result { + display: flex; + align-items: flex-start; + gap: 10px; + border: 0; + background: transparent; + color: var(--text); + padding: 8px; + border-radius: var(--radius-sm); + text-align: left; +} + +.search-result:hover { + background: var(--hover); +} + +.search-result .dm-avatar { + width: 30px; + height: 30px; + font-size: 13px; +} + +.search-result-body { + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; + flex: 1; +} + +.search-result-body > div { + display: flex; + align-items: baseline; + gap: 8px; +} + +.search-result-body strong { + color: var(--text-strong); + font-size: 13px; +} + +.search-result-body time { + color: var(--muted); + font-size: 11px; +} + +.search-result-body span { + color: var(--muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + diff --git a/apps/web/src/styles/messages.css b/apps/web/src/styles/messages.css new file mode 100644 index 0000000..8940997 --- /dev/null +++ b/apps/web/src/styles/messages.css @@ -0,0 +1,643 @@ +/* ---------- MESSAGES ---------- */ + +.messages { + overflow-y: auto; + padding: 16px 4px 24px; + scroll-behavior: smooth; +} + +.empty { + display: grid; + place-items: center; + align-content: center; + text-align: center; + gap: 10px; + min-height: 50vh; + padding: 48px 24px; +} + +.empty-icon { + width: 64px; + height: 64px; + border-radius: 18px; + background: linear-gradient(135deg, var(--accent), #b46cff); + color: white; + display: grid; + place-items: center; + font-size: 26px; + font-weight: 800; + box-shadow: 0 18px 40px -16px rgba(111, 126, 255, 0.7); +} + +.empty strong { + color: var(--text-strong); + font-size: 18px; + letter-spacing: -0.01em; +} + +.empty span { + color: var(--muted); + max-width: 380px; + line-height: 1.5; +} + +.day-divider { + display: flex; + align-items: center; + gap: 12px; + margin: 18px 18px 8px; + position: sticky; + top: 0; + z-index: 1; + pointer-events: none; +} + +.day-divider::before, +.day-divider::after { + content: ""; + flex: 1; + height: 1px; + background: var(--line); +} + +.day-divider span { + background: var(--bg); + border: 1px solid var(--line); + border-radius: 999px; + padding: 4px 12px; + font-size: 11px; + font-weight: 600; + color: var(--muted); + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.message-group { + display: grid; + grid-template-columns: 56px minmax(0, 1fr); + padding: 8px 18px; + position: relative; +} + +.message-group:hover { + background: var(--hover); +} + +.avatar { + width: 38px; + height: 38px; + border-radius: 12px; + display: grid; + place-items: center; + color: white; + font-weight: 700; + font-size: 14px; + background: linear-gradient( + 135deg, + hsl(var(--hue, 220deg) 70% 55%), + hsl(calc(var(--hue, 220deg) + 40deg) 70% 45%) + ); + box-shadow: 0 6px 20px -10px rgba(0, 0, 0, 0.6); + margin-top: 2px; + overflow: hidden; +} + +.avatar-button { + position: relative; + z-index: 2; + border: 0; + padding: 0; + cursor: pointer; + transition: + transform 100ms ease, + box-shadow 120ms ease, + filter 120ms ease; +} + +.avatar-button:hover { + transform: translateY(-1px); + filter: brightness(1.05); + box-shadow: 0 10px 24px -12px rgba(0, 0, 0, 0.8); +} + +.avatar.small { + width: 30px; + height: 30px; + font-size: 12px; + border-radius: 10px; +} + +.avatar.large { + width: 56px; + height: 56px; + border-radius: 16px; + font-size: 18px; + margin: 0; +} + +.group-body { + min-width: 0; +} + +.group-body > header { + display: flex; + align-items: baseline; + gap: 8px; + margin-bottom: 2px; +} + +.group-body > header strong { + color: var(--text-strong); + font-size: 14.5px; + letter-spacing: -0.005em; + font-weight: 700; +} + +.author-name { + border: 0; + background: transparent; + color: var(--text-strong); + padding: 0; + border-radius: 4px; + font-size: 14.5px; + letter-spacing: 0; + font-weight: 700; +} + +.author-name:hover { + color: var(--accent); + text-decoration: underline; + text-underline-offset: 2px; +} + +.group-body > header time { + color: var(--muted); + font-size: 11px; +} + +.group-body > header span { + color: var(--muted); + font-size: 12px; +} + +.message-row { + margin-left: -56px; + padding: 1px 0 1px 56px; + position: relative; + border-radius: 0; + transition: background 80ms ease; +} + +.message-row:not(:first-child) { + margin-top: 1px; +} + +.message-row:hover { + background: var(--hover-strong); +} + +.message-row.selected { + background: var(--accent-soft); +} + +.message-row.selected::before { + content: ""; + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 3px; + background: var(--accent); +} + +.row-stamp { + position: absolute; + left: 8px; + top: 4px; + font-size: 10px; + color: var(--muted-2); + opacity: 0; + font-variant-numeric: tabular-nums; +} + +.message-row:hover .row-stamp { + opacity: 1; +} + +.message-content { + min-width: 0; +} + +.message-actions { + display: flex; + align-items: flex-start; + gap: 4px; + padding-right: 12px; + opacity: 0; + transform: translateY(-50%); + position: absolute; + right: 8px; + top: 0; + background: var(--panel); + border: 1px solid var(--line-strong); + border-radius: 8px; + padding: 2px; + box-shadow: var(--shadow); + transition: + opacity 100ms ease, + transform 100ms ease; +} + +.message-row:hover .message-actions, +.message-row.selected .message-actions { + opacity: 1; +} + +.message-actions button { + width: 28px; + height: 28px; + display: grid; + place-items: center; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--muted); +} + +.message-actions button:hover { + background: var(--hover-strong); + color: var(--text-strong); +} + +.markdown { + line-height: 1.5; + color: var(--text); + font-size: 14.5px; + overflow-wrap: anywhere; + word-break: break-word; +} + +.markdown > :first-child { + margin-top: 0; +} + +.markdown > :last-child { + margin-bottom: 0; +} + +.markdown p { + margin: 0; +} + +.markdown p + p, +.markdown ul, +.markdown ol, +.markdown blockquote, +.markdown pre { + margin-top: 6px; +} + +.markdown a { + color: var(--accent); + text-decoration: none; +} + +.markdown a:hover { + text-decoration: underline; +} + +.markdown code { + background: var(--panel-2); + border: 1px solid var(--line); + border-radius: 4px; + padding: 1px 5px; + font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-size: 0.9em; +} + +.markdown pre { + background: var(--panel-2); + border: 1px solid var(--line); + border-radius: var(--radius); + padding: 12px 14px; + overflow-x: auto; +} + +.markdown pre code { + background: transparent; + border: 0; + padding: 0; +} + +.markdown blockquote { + border-left: 3px solid var(--accent); + margin: 0; + padding: 4px 0 4px 12px; + color: var(--muted); +} + +.markdown ul, +.markdown ol { + padding-left: 22px; +} + +.markdown img { + max-width: 100%; + max-height: 360px; + border-radius: var(--radius); + margin-top: 6px; + border: 1px solid var(--line); + object-fit: contain; + background: var(--panel); + cursor: zoom-in; +} + +.attachment-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 8px; + margin-top: 8px; + max-width: 560px; +} + +.attachment-grid.compact { + grid-template-columns: minmax(0, 1fr); + max-width: 420px; +} + +.media-tile { + position: relative; + display: block; + width: 100%; + margin: 0; + padding: 0; + border: 1px solid var(--line); + border-radius: var(--radius-lg); + background: #0a0c12; + overflow: hidden; + isolation: isolate; + text-align: left; + color: inherit; + text-decoration: none; + cursor: pointer; + transition: + border-color 140ms ease, + transform 140ms ease, + box-shadow 140ms ease; +} + +.media-tile:hover { + border-color: var(--line-strong); + box-shadow: 0 18px 40px -28px rgba(0, 0, 0, 0.9); +} + +.media-tile:focus-visible { + outline: none; + border-color: var(--line-strong); + box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 35%, transparent); +} + +.media-tile--image { + cursor: zoom-in; +} + +.media-tile__open { + display: block; + width: 100%; + margin: 0; + padding: 0; + border: 0; + background: transparent; + color: inherit; + cursor: zoom-in; +} + +.media-tile__open:focus { + outline: 0; +} + +.media-tile__open:focus-visible + .media-tile__caption .media-tile__name { + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 3px; +} + +.media-tile--video { + cursor: default; +} + +.media-tile img, +.media-tile video { + display: block; + width: 100%; + max-height: 360px; + object-fit: contain; + background: #05070d; +} + +.media-tile--image img { + max-height: 320px; +} + +.media-tile__caption { + position: absolute; + inset: auto 0 0 0; + z-index: 3; + display: flex; + align-items: center; + gap: 8px; + padding: 22px 10px 8px; + background: linear-gradient( + to top, + rgba(0, 0, 0, 0.78) 0%, + rgba(0, 0, 0, 0.5) 40%, + rgba(0, 0, 0, 0) 100% + ); + opacity: 0; + pointer-events: auto; + transition: opacity 140ms ease; +} + +.media-tile:hover .media-tile__caption, +.media-tile:focus-within .media-tile__caption { + opacity: 1; +} + +.media-tile--video.is-started .media-tile__caption { + display: none; +} + +.media-tile__name { + flex: 1; + min-width: 0; + color: white; + font-size: 12px; + font-weight: 500; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.media-tile__chip { + position: relative; + z-index: 4; + display: inline-grid; + place-items: center; + width: 28px; + height: 28px; + flex: none; + border-radius: 8px; + background: rgba(0, 0, 0, 0.5); + color: white; + border: 1px solid rgba(255, 255, 255, 0.18); + backdrop-filter: blur(10px); + text-decoration: none; + transition: + background 120ms ease, + border-color 120ms ease, + transform 120ms ease; +} + +.media-tile__chip:hover { + background: rgba(0, 0, 0, 0.7); + border-color: rgba(255, 255, 255, 0.32); + transform: translateY(-1px); +} + +.media-tile__play { + position: absolute; + inset: 0 0 48px 0; + display: grid; + place-items: center; + width: 100%; + height: auto; + border: 0; + margin: 0; + padding: 0; + background: transparent; + cursor: pointer; + z-index: 1; +} + +.media-tile__play::before { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient( + ellipse at center, + rgba(0, 0, 0, 0.18) 0%, + rgba(0, 0, 0, 0.05) 45%, + rgba(0, 0, 0, 0) 70% + ); + opacity: 0.7; + transition: opacity 160ms ease; + pointer-events: none; +} + +.media-tile__play:hover::before { + opacity: 0.9; +} + +.media-tile__play-icon { + position: relative; + display: grid; + place-items: center; + width: 46px; + height: 46px; + border-radius: 999px; + background: rgba(0, 0, 0, 0.55); + color: white; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + box-shadow: 0 6px 20px -8px rgba(0, 0, 0, 0.55); + padding-left: 3px; /* optical centering of the play glyph */ + transition: + transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1), + background 180ms ease, + box-shadow 200ms ease; +} + +.media-tile__play-icon svg { + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4)); +} + +.media-tile__play:hover .media-tile__play-icon { + transform: scale(1.06); + background: rgba(0, 0, 0, 0.7); + box-shadow: 0 10px 28px -10px rgba(0, 0, 0, 0.65); +} + +.media-tile__play:active .media-tile__play-icon { + transform: scale(0.97); + transition-duration: 80ms; +} + +.media-tile__play:focus-visible { + outline: none; +} + +.media-tile__play:focus-visible .media-tile__play-icon { + box-shadow: + 0 0 0 2px rgba(255, 255, 255, 0.6), + 0 10px 28px -10px rgba(0, 0, 0, 0.65); +} + +.media-tile__duration { + position: absolute; + left: 8px; + bottom: 8px; + z-index: 2; + padding: 2px 6px; + border-radius: 4px; + background: rgba(0, 0, 0, 0.72); + color: white; + font-size: 11px; + font-variant-numeric: tabular-nums; + font-weight: 600; + letter-spacing: 0.02em; + pointer-events: none; +} + +.file-attachment { + display: flex; + align-items: center; + gap: 10px; + max-width: 360px; + padding: 10px; + border: 1px solid var(--line); + border-radius: var(--radius); + background: var(--panel); +} + +.file-attachment:hover { + border-color: var(--line-strong); + background: var(--panel-2); +} + +.file-icon { + width: 34px; + height: 34px; + display: grid; + place-items: center; + border-radius: 8px; + background: var(--accent-soft); + color: var(--accent); + font-weight: 800; +} + +.file-attachment strong, +.file-attachment small { + display: block; +} + +.file-attachment strong { + color: var(--text-strong); + font-size: 13px; +} + +.file-attachment small { + color: var(--muted); + font-size: 11px; +} + diff --git a/apps/web/src/styles/modals.css b/apps/web/src/styles/modals.css new file mode 100644 index 0000000..eb333d6 --- /dev/null +++ b/apps/web/src/styles/modals.css @@ -0,0 +1,620 @@ +/* ---------- ACCOUNT SETTINGS ---------- */ + +.modal-scrim { + position: fixed; + inset: 0; + z-index: 50; + display: grid; + place-items: center; + padding: 24px; + background: rgba(5, 8, 15, 0.54); + backdrop-filter: blur(14px); +} + +.modal-backdrop { + position: absolute; + inset: 0; + border: 0; + background: transparent; +} + +.modal-backdrop:focus { + outline: 0; +} + +.profile-modal { + position: relative; + z-index: 1; + width: min(480px, 100%); + border: 1px solid var(--line-strong); + border-radius: 14px; + background: var(--panel); + color: var(--text); + box-shadow: var(--shadow); + overflow: hidden; +} + +.profile-modal > header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 18px 20px; + border-bottom: 1px solid var(--line); + background: var(--panel-2); +} + +.profile-modal p { + margin: 0 0 3px; + color: var(--muted); + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; +} + +.profile-modal h2 { + margin: 0; + color: var(--text-strong); + font-size: 20px; + letter-spacing: 0; +} + +.profile-modal > header button { + width: 32px; + height: 32px; + border: 0; + border-radius: 8px; + background: transparent; + color: var(--muted); + font-size: 22px; +} + +.profile-modal > header button:hover { + background: var(--hover); + color: var(--text-strong); +} + +.profile-form { + display: grid; + gap: 14px; + padding: 20px; +} + +.profile-preview { + display: flex; + align-items: center; + gap: 14px; + padding: 14px; + border: 1px solid var(--line); + border-radius: var(--radius); + background: var(--panel-2); +} + +.profile-preview strong, +.profile-preview span { + display: block; +} + +.profile-preview strong { + color: var(--text-strong); + font-size: 15px; +} + +.profile-preview span { + color: var(--muted); + font-size: 13px; +} + +.field { + display: grid; + gap: 6px; +} + +.field span { + color: var(--muted); + font-size: 12px; + font-weight: 700; +} + +.field input { + width: 100%; + height: 38px; + padding: 0 12px; + border: 1px solid var(--line); + border-radius: var(--radius-sm); + background: var(--panel-2); + color: var(--text); +} + +.field input:focus { + border-color: var(--accent); + outline: 0; + box-shadow: 0 0 0 3px var(--accent-soft); +} + +.profile-status { + color: var(--success); + font-size: 12px; +} + +.profile-status.error { + color: var(--danger); +} + +.profile-actions { + display: flex; + justify-content: flex-end; + gap: 8px; + padding-top: 4px; +} + +.ghost-action, +.primary-action { + height: 36px; + padding: 0 14px; + border-radius: var(--radius-sm); + font-weight: 700; +} + +.ghost-action { + border: 1px solid var(--line); + background: var(--panel); + color: var(--text); +} + +.primary-action { + border: 0; + background: var(--accent); + color: white; +} + +.ghost-action:hover { + background: var(--hover); +} + +.primary-action:hover { + filter: brightness(1.04); +} + +/* ---------- IMAGE VIEWER ---------- */ + +.image-viewer-scrim { + padding: 28px; + background: rgba(0, 0, 0, 0.78); + backdrop-filter: blur(18px); +} + +.image-viewer { + position: relative; + z-index: 1; + display: grid; + grid-template-rows: auto minmax(0, 1fr); + width: min(1120px, 100%); + max-height: min(86vh, 900px); + overflow: hidden; + border-radius: 14px; + background: #07090f; + color: white; + box-shadow: 0 34px 90px -34px rgba(0, 0, 0, 0.95); + animation: picker-in 150ms cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.image-viewer > header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + min-height: 52px; + padding: 10px 12px 10px 16px; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.04); +} + +.image-viewer > header strong { + min-width: 0; + overflow: hidden; + color: white; + font-size: 13px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.image-viewer > header div { + display: inline-flex; + align-items: center; + gap: 8px; + flex-shrink: 0; +} + +.image-viewer > header a { + height: 30px; + display: inline-flex; + align-items: center; + padding: 0 10px; + border-radius: 7px; + background: rgba(255, 255, 255, 0.08); + color: white; + font-size: 12px; + font-weight: 700; + text-decoration: none; +} + +.image-viewer > header a:hover { + background: rgba(255, 255, 255, 0.14); +} + +.image-viewer > header button { + width: 30px; + height: 30px; + display: grid; + place-items: center; + border: 0; + border-radius: 7px; + background: transparent; + color: rgba(255, 255, 255, 0.78); + font-size: 22px; + line-height: 1; +} + +.image-viewer > header button:hover { + background: rgba(255, 255, 255, 0.12); + color: white; +} + +.image-viewer-stage { + display: grid; + place-items: center; + min-height: 0; + padding: 18px; +} + +.image-viewer-stage img { + display: block; + max-width: 100%; + max-height: calc(86vh - 96px); + object-fit: contain; + border-radius: 8px; + background: rgba(255, 255, 255, 0.04); +} + +/* ---------- MOBILE ---------- */ + +.mobile-nav-toggle { + display: none; + position: fixed; + top: 14px; + left: 14px; + z-index: 30; + width: 38px; + height: 38px; + border-radius: 10px; + border: 1px solid var(--line-strong); + background: var(--panel); + color: var(--text); + font-size: 22px; + line-height: 1; +} + +.mobile-nav-toggle .bars { + display: grid; + gap: 3px; +} + +.mobile-nav-toggle .bars i { + display: block; + width: 16px; + height: 2px; + background: currentColor; + border-radius: 2px; +} + +@media (max-width: 1180px) { + .shell { + grid-template-columns: 72px 240px minmax(0, 1fr); + } + .shell.sidebar-collapsed, + .shell.sidebar-collapsed.thread-open { + grid-template-columns: 72px 0 minmax(0, 1fr); + } + .thread { + position: fixed; + inset: 0 0 0 auto; + width: min(420px, 100vw); + box-shadow: var(--shadow); + transform: translateX(100%); + transition: transform 180ms ease; + z-index: 4; + border-left: 1px solid var(--line-strong); + } + .thread.open { + transform: translateX(0); + } +} + +@media (max-width: 820px) { + .mobile-nav-toggle { + display: grid; + place-items: center; + } + .shell { + grid-template-columns: 1fr; + } + .shell.thread-open, + .shell.sidebar-collapsed, + .shell.sidebar-collapsed.thread-open { + grid-template-columns: 1fr; + } + .sidebar-collapsed .sidebar { + opacity: 1; + pointer-events: auto; + transform: translateX(-100%); + } + .guild-rail, + .sidebar { + position: fixed; + inset: 0 auto 0 0; + z-index: 20; + transform: translateX(-100%); + transition: transform 180ms ease; + } + .guild-rail { + width: 72px; + } + .sidebar { + left: 72px; + width: 260px; + } + .nav-open .guild-rail, + .nav-open .sidebar { + transform: translateX(0); + } + .topbar { + padding-left: 64px; + } + .search { + width: 180px; + } +} + +@media (max-width: 520px) { + .search { + display: none; + } + .topbar-meta, + .topbar-divider { + display: none; + } +} + +/* Inline quote-reply */ +.message-row.highlight, +.thread-root.highlight, +.reply.highlight { + animation: quote-flash 1.4s ease-out; +} + +@keyframes quote-flash { + 0% { + background: rgba(99, 102, 241, 0.22); + } + 100% { + background: transparent; + } +} + +.quote-block { + display: inline-flex; + align-items: stretch; + gap: 0.5rem; + margin: 0 0 0.35rem; + padding: 0.25rem 0.5rem 0.25rem 0; + background: transparent; + border: 0; + border-radius: 6px; + color: inherit; + cursor: pointer; + text-align: left; + max-width: 100%; + font: inherit; +} + +.quote-block:hover:not(:disabled) { + background: rgba(99, 102, 241, 0.08); +} + +.quote-block:disabled { + cursor: default; + opacity: 0.75; +} + +.quote-block .quote-bar { + width: 3px; + align-self: stretch; + background: var(--accent, #6366f1); + border-radius: 2px; + flex: 0 0 3px; +} + +.quote-block .quote-content { + display: flex; + flex-direction: column; + gap: 0.1rem; + min-width: 0; +} + +.quote-block .quote-author { + font-size: 0.78rem; + font-weight: 600; + color: var(--accent, #6366f1); +} + +.quote-block .quote-snippet { + font-size: 0.85rem; + color: var(--text-muted, #6b7280); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 56ch; +} + +.quote-block .quote-snippet.muted { + font-style: italic; + opacity: 0.75; +} + +.quote-preview { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 6px 10px 6px 12px; + margin: 0; + background: color-mix(in srgb, var(--accent) 5%, transparent); + border: 0; + border-bottom: 1px solid var(--line); + border-radius: 0; + font-size: 12.5px; + color: var(--muted); +} + +.quote-preview .quote-bar { + display: none; +} + +.quote-preview-body { + display: flex; + align-items: baseline; + gap: 0.4rem; + flex: 1; + min-width: 0; + overflow: hidden; +} + +.quote-preview-label { + font-size: 12px; + color: color-mix(in srgb, var(--accent) 85%, var(--text)); + white-space: nowrap; +} + +.quote-preview-label strong { + color: var(--text-strong); + font-weight: 600; +} + +.quote-preview-snippet { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: var(--muted); + font-size: 12px; + flex: 1; + min-width: 0; +} + +.quote-preview-clear { + background: transparent; + border: 0; + color: var(--muted); + font-size: 16px; + line-height: 1; + cursor: pointer; + padding: 2px 6px; + border-radius: 6px; + transition: + background 100ms ease, + color 100ms ease; +} + +.quote-preview-clear:hover { + color: var(--text-strong); + background: var(--hover-strong); +} + +.reply-quote-btn { + position: relative; + margin-left: auto; + background: transparent; + border: 0; + color: var(--text-muted, #6b7280); + cursor: pointer; + font-size: 0.95rem; + padding: 0 0.3rem; + opacity: 0; + transition: opacity 0.15s; +} + +.reply:hover .reply-quote-btn, +.thread-root:hover .reply-quote-btn, +.reply-quote-btn:focus-visible { + opacity: 1; +} + +.reply-quote-btn:hover { + color: var(--accent, #6366f1); +} + +.tooltip { + position: relative; +} + +.tooltip::before, +.reply-quote-btn::before { + content: attr(data-tooltip); + position: absolute; + left: 50%; + bottom: calc(100% + 12px); + z-index: 20; + transform: translate(-50%, 4px) scale(0.96); + padding: 0.42rem 0.62rem; + border-radius: 9px; + background: #3a3a44; + color: #f4f4f7; + box-shadow: 0 10px 28px rgba(0, 0, 0, 0.28); + font-size: 0.78rem; + font-weight: 700; + line-height: 1; + white-space: nowrap; + opacity: 0; + pointer-events: none; + transition: + opacity 120ms ease, + transform 120ms ease; +} + +.tooltip::after, +.reply-quote-btn::after { + content: ""; + position: absolute; + left: 50%; + bottom: calc(100% + 5px); + z-index: 20; + width: 12px; + height: 12px; + border-radius: 2px; + background: #3a3a44; + transform: translate(-50%, 4px) rotate(45deg) scale(0.9); + opacity: 0; + pointer-events: none; + transition: + opacity 120ms ease, + transform 120ms ease; +} + +.tooltip:hover::before, +.tooltip:focus-visible::before, +.reply-quote-btn:hover::before, +.reply-quote-btn:focus-visible::before, +.tooltip:hover::after, +.tooltip:focus-visible::after, +.reply-quote-btn:hover::after, +.reply-quote-btn:focus-visible::after { + opacity: 1; + transform: translate(-50%, 0) scale(1); +} + +.tooltip:hover::after, +.tooltip:focus-visible::after, +.reply-quote-btn:hover::after, +.reply-quote-btn:focus-visible::after { + transform: translate(-50%, 0) rotate(45deg) scale(1); +} diff --git a/apps/web/src/styles/sidebar.css b/apps/web/src/styles/sidebar.css new file mode 100644 index 0000000..7e70af4 --- /dev/null +++ b/apps/web/src/styles/sidebar.css @@ -0,0 +1,476 @@ +/* ---------- GUILD RAIL (Discord style) ---------- */ + +.guild-rail { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 14px 0; + background: var(--rail); + border-right: 1px solid var(--line); + overflow-y: auto; + position: relative; +} + +.guild-rail .guild { + width: 48px; + height: 48px; + border-radius: 16px; + display: grid; + place-items: center; + background: var(--panel-2); + color: var(--text); + border: 0; + font-weight: 700; + font-size: 14px; + letter-spacing: -0.02em; + position: relative; + transition: + border-radius 140ms ease, + background 120ms ease, + transform 120ms ease; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.04) inset; +} + +.guild-rail .guild:hover { + border-radius: 12px; + background: var(--accent); + color: white; + box-shadow: 0 8px 24px -10px rgba(111, 126, 255, 0.6); +} + +.guild-rail .guild.home { + background: linear-gradient(135deg, var(--accent), #b46cff); + color: white; + font-weight: 800; +} + +.guild-rail .guild.home:hover { + border-radius: 12px; + filter: brightness(1.1); +} + +.guild-rail .guild.add { + background: transparent; + color: var(--success); + border: 1px dashed rgba(46, 204, 113, 0.4); +} + +.guild-rail .guild.add:hover { + background: rgba(46, 204, 113, 0.12); + color: white; + border-style: solid; + border-color: var(--success); +} + +.guild-divider { + width: 36px; + height: 1px; + background: var(--line-strong); + margin: 4px 0; +} + +.guild-list { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; +} + +.guild-wrap { + position: relative; +} + +.guild-wrap::before { + content: ""; + position: absolute; + left: -14px; + top: 50%; + transform: translate(0, -50%) scaleY(0.2); + width: 4px; + height: 28px; + border-radius: 0 4px 4px 0; + background: var(--text-strong); + opacity: 0; + transition: + opacity 140ms ease, + transform 140ms ease; +} + +.guild-wrap:hover::before { + opacity: 0.6; + transform: translate(0, -50%) scaleY(0.5); +} + +.guild-wrap.active::before { + opacity: 1; + transform: translate(0, -50%) scaleY(1); +} + +.guild-wrap.active .guild { + border-radius: 14px; + background: var(--accent); + color: white; +} + +.guild-create { + position: absolute; + left: 100%; + top: 14px; + margin-left: 8px; + background: var(--panel); + border: 1px solid var(--line-strong); + border-radius: var(--radius); + padding: 8px; + box-shadow: var(--shadow); + z-index: 20; +} + +.guild-create input { + height: 32px; + padding: 0 10px; + width: 200px; + border-radius: var(--radius-sm); + background: var(--panel-2); + color: var(--text); +} + +/* ---------- SIDEBAR (Slack style) ---------- */ + +.sidebar { + display: grid; + grid-template-rows: auto minmax(0, 1fr) auto; + background: var(--panel); + border-right: 1px solid var(--line); + overflow: hidden; + min-width: 0; + transition: + opacity 160ms ease, + transform 220ms cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.sidebar-collapsed .sidebar { + opacity: 0; + pointer-events: none; + transform: translateX(-14px); +} + +.workspace-header { + padding: 14px 16px; + border-bottom: 1px solid var(--line); + display: flex; + align-items: center; + justify-content: space-between; + min-height: 60px; +} + +.sidebar-collapse { + width: 30px; + height: 30px; + display: grid; + place-items: center; + border: 0; + border-radius: 8px; + background: var(--panel-2); + color: var(--muted); + transition: + color 120ms ease, + background 120ms ease, + transform 120ms ease; +} + +.sidebar-collapse:hover { + background: var(--panel-3); + color: var(--text-strong); + transform: translateX(-1px); +} + +.workspace-name { + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; +} + +.workspace-name strong { + color: var(--text-strong); + letter-spacing: -0.01em; + font-size: 15px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.workspace-name .presence { + display: inline-flex; + align-items: center; + gap: 6px; + color: var(--muted); + font-size: 11px; +} + +.workspace-name .presence::before { + content: ""; + width: 7px; + height: 7px; + border-radius: 50%; + background: var(--muted-2); +} + +.workspace-name .presence.online { + color: var(--success); +} + +.workspace-name .presence.online::before { + background: var(--success); + box-shadow: 0 0 0 3px rgba(46, 204, 113, 0.18); +} + +.sidebar-scroll { + overflow-y: auto; + padding: 12px 8px 16px; +} + +.nav-section + .nav-section { + margin-top: 12px; +} + +.section-title { + display: flex; + align-items: center; + gap: 6px; + width: 100%; + border: 0; + background: transparent; + color: var(--muted); + text-transform: uppercase; + font-size: 11px; + font-weight: 700; + letter-spacing: 0.04em; + padding: 6px 8px; + border-radius: var(--radius-sm); +} + +.section-title:hover { + color: var(--text); + background: var(--hover); +} + +.section-title .caret { + font-size: 10px; + opacity: 0.7; +} + +.section-title .label { + flex: 1; + text-align: left; +} + +.section-title .add-button { + width: 18px; + height: 18px; + border-radius: 4px; + display: grid; + place-items: center; + font-size: 14px; + font-weight: 700; + background: rgba(255, 255, 255, 0.06); + color: var(--text); +} + +.section-title:hover .add-button { + background: var(--accent); + color: white; +} + +.nav-list { + display: flex; + flex-direction: column; + gap: 1px; + margin-top: 4px; +} + +.nav-item { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + border: 0; + border-radius: var(--radius-sm); + background: transparent; + color: var(--muted); + text-align: left; + padding: 6px 10px; + min-height: 30px; + transition: + background 100ms ease, + color 100ms ease; +} + +.nav-item:hover { + background: var(--hover); + color: var(--text); +} + +.nav-item.active { + background: var(--accent-soft); + color: var(--text-strong); +} + +.nav-item .hash { + color: var(--muted); + font-weight: 600; + width: 14px; + text-align: center; +} + +.nav-item.active .hash { + color: var(--accent); +} + +.nav-label { + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 14px; +} + +.nav-empty { + margin: 4px 8px; + color: var(--muted-2); + font-size: 12px; +} + +.dm-avatar { + width: 22px; + height: 22px; + border-radius: 50%; + display: grid; + place-items: center; + font-size: 11px; + font-weight: 700; + color: white; + background: linear-gradient( + 135deg, + hsl(var(--hue, 220deg) 70% 55%), + hsl(calc(var(--hue, 220deg) + 40deg) 70% 45%) + ); + flex-shrink: 0; + overflow: hidden; +} + +.dm-avatar img, +.avatar img { + width: 100%; + height: 100%; + display: block; + object-fit: cover; +} + +.presence-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: var(--muted-2); + flex-shrink: 0; +} + +.presence-dot.active { + background: var(--success); + box-shadow: 0 0 0 2px var(--panel); +} + +.inline-create { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 6px; + margin: 6px 4px 2px; +} + +.inline-create input { + width: 100%; + min-width: 0; + height: 30px; + padding: 0 10px; + border-radius: var(--radius-sm); + background: var(--panel-2); + color: var(--text); + border: 1px solid var(--line); +} + +.inline-create input:focus { + border-color: var(--accent); + background: var(--panel-3); +} + +.inline-create button.ghost, +button.ghost { + width: 30px; + height: 30px; + border: 0; + border-radius: var(--radius-sm); + background: var(--panel-3); + color: var(--muted); + font-weight: 600; + padding: 0; + font-size: 14px; + display: grid; + place-items: center; +} + +.inline-create button.ghost:hover { + background: var(--accent); + color: white; +} + +.user-card { + display: flex; + align-items: center; + gap: 10px; + width: 100%; + padding: 10px 12px; + background: var(--panel-2); + border-top: 1px solid var(--line); + border-right: 0; + border-bottom: 0; + border-left: 0; + color: inherit; + text-align: left; + cursor: pointer; + transition: background 120ms ease; +} + +.user-card:hover { + background: var(--panel-3); +} + +.user-card .dm-avatar { + width: 28px; + height: 28px; + font-size: 12px; +} + +.user-card .user-meta { + flex: 1; + min-width: 0; +} + +.user-card .user-meta strong { + display: block; + color: var(--text-strong); + font-size: 13px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.user-card .user-meta span { + display: block; + color: var(--muted); + font-size: 11px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + diff --git a/apps/web/src/styles/thread.css b/apps/web/src/styles/thread.css new file mode 100644 index 0000000..eb0d3ce --- /dev/null +++ b/apps/web/src/styles/thread.css @@ -0,0 +1,326 @@ +/* ---------- THREAD ---------- */ + +.thread { + display: grid; + grid-template-rows: auto minmax(0, 1fr) auto; + background: var(--panel); + border-left: 1px solid var(--line); + min-width: 0; + overflow: hidden; + opacity: 0; + transform: translateX(28px); + pointer-events: none; + transition: + opacity 180ms ease, + transform 220ms cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.thread.open { + opacity: 1; + transform: translateX(0); + pointer-events: auto; +} + +.thread > header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 16px; + min-height: 60px; + border-bottom: 1px solid var(--line); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent), var(--panel); +} + +.thread > header p, +.thread > header strong { + margin: 0; +} + +.thread > header p { + color: var(--muted); + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.04em; + font-weight: 700; +} + +.thread > header strong { + display: block; + color: var(--text-strong); + font-size: 14px; +} + +.thread .close { + width: 28px; + height: 28px; + border: 0; + border-radius: 50%; + background: var(--panel-2); + color: var(--muted); + font-size: 18px; + line-height: 1; +} + +.thread .close:hover { + background: var(--panel-3); + color: var(--text-strong); +} + +.thread-scroll { + overflow-y: auto; + padding: 12px 16px; +} + +.thread-root { + display: grid; + grid-template-columns: 38px minmax(0, 1fr); + gap: 12px; + padding-bottom: 12px; + border-bottom: 1px solid var(--line); +} + +.thread-divider { + display: flex; + align-items: center; + gap: 10px; + margin: 14px 0 10px; +} + +.thread-divider::before, +.thread-divider::after { + content: ""; + flex: 1; + height: 1px; + background: var(--line); +} + +.thread-divider span { + font-size: 11px; + color: var(--muted); + text-transform: uppercase; + letter-spacing: 0.04em; + font-weight: 700; +} + +.reply-list { + display: flex; + flex-direction: column; + gap: 10px; +} + +.reply { + display: grid; + grid-template-columns: 30px minmax(0, 1fr); + gap: 10px; + padding: 6px; + border-radius: var(--radius-sm); +} + +.reply:hover { + background: var(--hover); +} + +.reply-composer { + padding: 10px 14px 14px; + background: var(--panel); + border-top: 1px solid var(--line); +} + +.reply-composer .composer-row { + border-radius: 0; +} + +.thread-empty { + display: grid; + place-items: center; + align-content: center; + gap: 8px; + padding: 32px 24px; + text-align: center; + grid-row: span 3; +} + +.thread-icon { + width: 56px; + height: 56px; + border-radius: 16px; + background: var(--panel-2); + color: var(--muted); + display: grid; + place-items: center; +} + +.thread-empty strong { + color: var(--text-strong); + font-size: 15px; +} + +.thread-empty span { + color: var(--muted); + font-size: 13px; + max-width: 260px; + line-height: 1.5; +} + +/* ---------- PROFILE PANE ---------- */ + +.profile-pane { + overflow-y: auto; +} + +.profile-hero { + min-height: 210px; + display: grid; + place-items: end center; + padding: 28px 20px; + background: + linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.24)), + linear-gradient( + 135deg, + hsl(var(--hue, 220deg) 76% 58%), + hsl(calc(var(--hue, 220deg) + 54deg) 74% 38%) + ); + border-bottom: 1px solid var(--line); +} + +.profile-avatar { + width: min(240px, 70%); + aspect-ratio: 1; + display: grid; + place-items: center; + overflow: hidden; + border-radius: 16px; + background: rgba(255, 255, 255, 0.18); + color: white; + font-size: clamp(48px, 12vw, 88px); + font-weight: 800; + box-shadow: 0 26px 60px -30px rgba(0, 0, 0, 0.9); +} + +.profile-avatar img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.profile-pane-body { + display: grid; + gap: 18px; + padding: 18px 16px 22px; +} + +.profile-pane-title { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; +} + +.profile-pane-title h2 { + margin: 0; + color: var(--text-strong); + font-size: 22px; + letter-spacing: 0; +} + +.profile-pane-title span { + display: block; + margin-top: 3px; + color: var(--muted); + font-size: 13px; +} + +.text-action { + border: 0; + border-radius: 6px; + background: transparent; + color: var(--accent); + font-size: 13px; + font-weight: 700; + padding: 4px 6px; +} + +.text-action:hover { + background: var(--accent-soft); +} + +.profile-presence { + display: inline-flex; + align-items: center; + gap: 8px; + color: var(--text); + font-size: 14px; +} + +.profile-actions-row { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + +.profile-actions-row .primary-action, +.profile-actions-row .ghost-action { + min-width: 110px; +} + +.profile-info { + display: grid; + gap: 12px; + padding-top: 18px; + border-top: 1px solid var(--line); +} + +.profile-info header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; +} + +.profile-info header strong { + color: var(--text-strong); + font-size: 14px; +} + +.profile-info-row { + display: grid; + grid-template-columns: 34px minmax(0, 1fr); + gap: 10px; + align-items: center; +} + +.info-icon { + width: 34px; + height: 34px; + display: grid; + place-items: center; + border-radius: 9px; + background: var(--panel-2); + color: var(--muted); + font-size: 11px; + font-weight: 800; +} + +.profile-info-row small, +.profile-info-row span { + display: block; +} + +.profile-info-row small { + color: var(--muted); + font-size: 11px; +} + +.profile-info-row span { + color: var(--text); + font-size: 13px; + overflow-wrap: anywhere; +} + +.profile-note { + margin: 0; + color: var(--muted); + line-height: 1.5; + font-size: 13px; +} +