function qa(t=globalThis.window){return t?.SECUREBIT_DEBUG===!0}function js({targetWindow:t=globalThis.window,webrtcManagerRef:e,onClearData:n,clearConsole:r=()=>{typeof console.clear=="function"&&console.clear()}}){return qa(t)?(t.forceCleanup=()=>{n(),e.current&&e.current.disconnect()},t.clearLogs=r,t.webrtcManagerRef=e,()=>{delete t.forceCleanup,delete t.clearLogs,delete t.webrtcManagerRef}):()=>{}}var Ya="securebit-net";var Zr="ice-device-key",ts="ice-settings";function ns(){return typeof indexedDB<"u"&&typeof crypto<"u"&&!!crypto.subtle}function rs(){return new Promise((t,e)=>{let n;try{n=indexedDB.open(Ya,1)}catch(r){e(r);return}n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains("kv")||r.createObjectStore("kv")},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}function es(t,e){return new Promise((n,r)=>{let c=t.transaction("kv","readonly").objectStore("kv").get(e);c.onsuccess=()=>n(c.result),c.onerror=()=>r(c.error)})}function $s(t,e,n){return new Promise((r,i)=>{let c=t.transaction("kv","readwrite");c.objectStore("kv").put(n,e),c.oncomplete=()=>r(),c.onerror=()=>i(c.error)})}function Ka(t,e){return new Promise((n,r)=>{let i=t.transaction("kv","readwrite");i.objectStore("kv").delete(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async function Qa(t){let e=await es(t,Zr);if(e instanceof CryptoKey)return e;let n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await $s(t,Zr,n),n}async function qs(t){if(!ns())throw new Error("Persistent storage is not available in this browser");let e=await rs(),n=await Qa(e),r=JSON.stringify({version:1,servers:Array.isArray(t?.servers)?t.servers:[],privacyMode:t?.privacyMode==="relay-only"?"relay-only":"standard"}),i=crypto.getRandomValues(new Uint8Array(12)),c=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},n,new TextEncoder().encode(r));await $s(e,ts,{iv:Array.from(i),data:Array.from(new Uint8Array(c))})}async function Ys(){if(!ns())return null;try{let t=await rs(),e=await es(t,ts);if(!e||!Array.isArray(e.iv)||!Array.isArray(e.data))return null;let n=await es(t,Zr);if(!(n instanceof CryptoKey))return null;let r=await crypto.subtle.decrypt({name:"AES-GCM",iv:new Uint8Array(e.iv)},n,new Uint8Array(e.data)),i=JSON.parse(new TextDecoder().decode(r));return{servers:Array.isArray(i.servers)?i.servers:[],privacyMode:i.privacyMode==="relay-only"?"relay-only":"standard"}}catch{return null}}async function ss(){if(ns())try{let t=await rs();await Ka(t,ts)}catch{}}var Xa="/api/turn-credentials",Xs=["turn.securebit.chat","144.172.96.126"];var Ks=[6e4,3e5,9e5];function Js(t){let e=/^turns?:([^:?\s]+)/i.exec(String(t||"").trim());return e?e[1].toLowerCase():null}function Ja(t){return!t||typeof t!="object"?!1:(Array.isArray(t.urls)?t.urls:[t.urls]).some(n=>Xs.includes(Js(n)))}function tr(t){if(typeof t!="string"||t.length===0||t.length>512)return!1;for(let e=0;etr(i)&&Xs.includes(Js(i)));r.length>0&&(t.push({urls:r,username:e.username,credential:e.credential}),n=!0)}return n}function eo(t,e){let n=t&&Array.isArray(t.iceServers)?t.iceServers[0]:null;if(!n||!tr(n.username)||!tr(n.credential))return null;let r=Number(String(n.username).split(":")[0]);if(!Number.isFinite(r)||r<=e)return null;let i=Number(t.ttl);return{urls:Array.isArray(n.urls)?n.urls.slice(0,8):[],username:n.username,credential:n.credential,expiry:r,ttl:Number.isFinite(i)&&i>0?i:r-e}}var Qs=!1;function Zs(t={}){if(Qs||typeof window>"u"||typeof fetch!="function")return;Qs=!0;let e=t.getList||(()=>window.SECUREBIT_ICE_SERVERS),n=0,r=0,i=null,c=0,d=m=>{i&&clearTimeout(i),i=setTimeout(h,m)};async function h(){i=null;try{let m=await fetch(Xa,{method:"POST",cache:"no-store",credentials:"omit"});if(!m.ok)throw new Error(`HTTP ${m.status}`);let v=eo(await m.json(),Date.now()/1e3);if(!v)throw new Error("unusable response");Za(e(),v),n=v.expiry,r=v.ttl,c=0,d(Math.max(60,r/2)*1e3)}catch{let v=Ks[Math.min(c,Ks.length-1)];c++,d(v)}}document.addEventListener("visibilitychange",()=>{if(document.visibilityState!=="visible")return;let m=Date.now()/1e3;(!n||n-md.toLowerCase()===n);if(r)return r;let i=n.split("-")[0],c=jn.find(d=>d.toLowerCase().split("-")[0]===i);if(c)return c}return null}function so({pathname:t="/",stored:e=null,languages:n=[]}={}){let r=is(t);return r||(io(t)?"en":e&&jn.includes(e)?e:ri(n)||"en")}function io(t){return t==="/"||t==="/index.html"}function si(t,e="/"){let n=is(e),i=(n?String(e).slice(n.length+1):String(e)).replace(/^\/+/,"");return t==="en"?`/${i}`:`/${t}/${i}`}function ii(t){try{localStorage.setItem(ni,t)}catch{}}function as(){try{return localStorage.getItem(ni)}catch{return null}}var kr=null;function Sr(){if(kr)return kr;let t=typeof window>"u"?null:window;return!t||!t.location?"en":(kr=so({pathname:t.location.pathname||"/",stored:as(),languages:t.navigator?.languages||[]}),kr)}function ao(t=Sr()){return wr[t]?.dir==="rtl"?"rtl":"ltr"}function oo(t=Sr()){return ao(t)==="rtl"}function ai(t=Sr()){return oo(t)?-1:1}var oi="securebit-locale-suggest-dismissed";function ci(){try{return localStorage.getItem(oi)==="1"}catch{return!1}}function os(){try{localStorage.setItem(oi,"1")}catch{}}function li({pathname:t="/",languages:e=[],stored:n=null}={}){let r=is(t)||"en",i=jn.includes(n)&&n||ri(e);return i&&i!==r?i:null}function a(t,e,n=Sr()){let r=ti(n)?.[t]??ei[n]?.[t]??ti("en")?.[t]??t;return e?String(r).replace(/\{(\w+)\}/g,(i,c)=>Object.prototype.hasOwnProperty.call(e,c)?String(e[c]):i):r}var J=Object.freeze({CREATE_SESSION:"CREATE_SESSION",REMOVE_SESSION:"REMOVE_SESSION",SET_ACTIVE:"SET_ACTIVE",SET_STATUS:"SET_STATUS",SET_FINGERPRINT:"SET_FINGERPRINT",SET_VERIFICATION:"SET_VERIFICATION",SET_SAS:"SET_SAS",ADD_MESSAGE:"ADD_MESSAGE",SET_MESSAGES:"SET_MESSAGES",UPDATE_MESSAGE_STATUS:"UPDATE_MESSAGE_STATUS",PATCH_MESSAGE:"PATCH_MESSAGE",DELETE_MESSAGE:"DELETE_MESSAGE",EXPIRE_MESSAGE:"EXPIRE_MESSAGE",INCREMENT_UNREAD:"INCREMENT_UNREAD",CLEAR_UNREAD:"CLEAR_UNREAD",SET_PENDING_FILES:"SET_PENDING_FILES",PATCH_SETUP:"PATCH_SETUP",RENAME:"RENAME",SET_PEER_PRESENCE:"SET_PEER_PRESENCE"}),cs={available:"var(--sb-green-solid)",away:"var(--sb-yellow-2-solid)",busy:"var(--sb-red-solid)",offline:"var(--sb-text-9)"},ls={available:a("presence.available"),away:a("presence.away"),busy:a("presence.busy"),offline:a("presence.offline")},Er=[{key:"available",word:a("presence.available"),desc:a("presence.availableDesc"),dot:"var(--sb-green-solid)"},{key:"away",word:a("presence.away"),desc:a("presence.awayDesc"),dot:"var(--sb-yellow-2-solid)"},{key:"busy",word:a("presence.busy"),desc:a("presence.busyDesc"),dot:"var(--sb-red-solid)"},{key:"invisible",word:a("presence.invisible"),desc:a("presence.invisibleDesc"),dot:"var(--sb-text-9)"}];function co(t){let e=String(t||"").replace(/[^a-z0-9]/gi,"");return a("chat.defaultLabel")+" "+(e.slice(0,4)||"0000").toUpperCase()}function Rr(t){let e=String(t||"").trim().split(/\s+/).filter(Boolean),n=e[0]?.[0]||"",r=e[1]?.[0]||e[0]?.[1]||"";return(n+r).toUpperCase()||"\xB7\xB7"}function di(t){switch(t){case"connected":case"verified":return a("conn.p2p");case"verifying":return a("conn.verifying");case"connecting":case"new":return a("conn.connecting");case"reconnecting":return a("conn.reconnecting");case"peer_disconnected":return a("conn.peerDisconnected");default:return a("conn.disconnected")}}function lo(){return{offerData:"",answerData:"",offerInput:"",answerInput:"",showOfferStep:!1,showAnswerStep:!1,showVerification:!1,showQRCode:!1,qrCodeUrl:"",isGeneratingKeys:!1,qrFramesTotal:0,qrFrameIndex:0,qrManualMode:!1}}function ds(t={}){let e=t.id||(typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():String(Date.now())+Math.random());return{id:e,peerLabel:t.peerLabel||co(e),labelIsCustom:!1,createdAt:t.createdAt||Date.now(),role:t.role||"offer",status:t.status||"new",keyFingerprint:"",verificationCode:"",sas:{localConfirmed:!1,remoteConfirmed:!1,bothConfirmed:!1,isVerified:!1},messages:[],unreadCount:0,pendingIncomingFiles:[],peerPresence:null,setup:lo()}}function pi(){return{sessions:{},order:[],activeSessionId:null}}function st(t,e,n){let r=t.sessions[e];return r?{...t,sessions:{...t.sessions,[e]:{...r,...n}}}:t}function ui(t,e){let n=J;switch(e.type){case n.CREATE_SESSION:{let r=e.entry||ds(e);return t.sessions[r.id]?t:{sessions:{...t.sessions,[r.id]:r},order:[...t.order,r.id],activeSessionId:e.activate===!1?t.activeSessionId:r.id}}case n.REMOVE_SESSION:{let{id:r}=e;if(!t.sessions[r])return t;let i={...t.sessions};delete i[r];let c=t.order.filter(h=>h!==r),d=t.activeSessionId;if(d===r){let h=t.order.indexOf(r);d=c[Math.max(0,h-1)]||c[0]||null}return{sessions:i,order:c,activeSessionId:d}}case n.SET_ACTIVE:return!t.sessions[e.id]||t.activeSessionId===e.id?t:{...t,activeSessionId:e.id};case n.SET_STATUS:{let r=t.sessions[e.id];if(!r||r.status===e.status)return t;let c=!(e.status==="connected"||e.status==="verified"||e.status==="reconnecting")&&r.peerPresence!==null?{status:e.status,peerPresence:null}:{status:e.status};return st(t,e.id,c)}case n.SET_FINGERPRINT:return st(t,e.id,{keyFingerprint:e.fingerprint});case n.SET_VERIFICATION:return st(t,e.id,{verificationCode:e.code});case n.SET_SAS:{let r=t.sessions[e.id];return r?st(t,e.id,{sas:{...r.sas,...e.sas}}):t}case n.ADD_MESSAGE:{let r=t.sessions[e.id];return r?st(t,e.id,{messages:[...r.messages,e.message]}):t}case n.SET_MESSAGES:{let r=t.sessions[e.id];if(!r)return t;let i=typeof e.updater=="function"?e.updater(r.messages):e.messages;return st(t,e.id,{messages:Array.isArray(i)?i:[]})}case n.UPDATE_MESSAGE_STATUS:{let r=t.sessions[e.id];if(!r)return t;let i=!1,c=r.messages.map(d=>String(d.mid)===String(e.mid)&&d.status!==e.status?(i=!0,{...d,status:e.status}):d);return i?st(t,e.id,{messages:c}):t}case n.PATCH_MESSAGE:{let r=t.sessions[e.id];if(!r)return t;let i=e.messageId!=null?String(e.messageId):null,c=e.mid!=null?String(e.mid):null,d=e.fileId!=null?String(e.fileId):null,h=!1,m=r.messages.map(v=>{if(!(i!=null&&String(v.id)===i||c!=null&&String(v.mid)===c||d!=null&&v.fileId!=null&&String(v.fileId)===d))return v;h=!0;let p=typeof e.patch=="function"?e.patch(v):e.patch;return{...v,...p}});return h?st(t,e.id,{messages:m}):t}case n.DELETE_MESSAGE:{let r=t.sessions[e.id];if(!r)return t;let i=r.messages.filter(c=>String(c.mid)!==String(e.mid));return i.length===r.messages.length?t:st(t,e.id,{messages:i})}case n.EXPIRE_MESSAGE:{let r=t.sessions[e.id];if(!r)return t;let i=!1,c=r.messages.map(d=>String(d.id)===String(e.messageId)&&!d.expired?(i=!0,{...d,expired:!0,message:"",expiresAt:void 0}):d);return i?st(t,e.id,{messages:c}):t}case n.INCREMENT_UNREAD:{let r=t.sessions[e.id];return r?st(t,e.id,{unreadCount:r.unreadCount+1}):t}case n.CLEAR_UNREAD:{let r=t.sessions[e.id];return!r||r.unreadCount===0?t:st(t,e.id,{unreadCount:0})}case n.SET_PENDING_FILES:{let r=t.sessions[e.id];if(!r)return t;let i=typeof e.updater=="function"?e.updater(r.pendingIncomingFiles):e.files;return st(t,e.id,{pendingIncomingFiles:Array.isArray(i)?i:[]})}case n.PATCH_SETUP:{let r=t.sessions[e.id];return r?st(t,e.id,{setup:{...r.setup,...e.patch}}):t}case n.RENAME:{let r=t.sessions[e.id];if(!r)return t;let i=String(e.label||"").trim()||r.peerLabel;return st(t,e.id,{peerLabel:i,labelIsCustom:!0})}case n.SET_PEER_PRESENCE:{let r=t.sessions[e.id];return!r||r.peerPresence===e.presence?t:st(t,e.id,{peerPresence:e.presence})}default:return t}}function po(t,e){let n=[...t.messages].reverse().find(v=>!v.expired&&v.type!=="system"&&(typeof v.message=="string"&&v.message.trim()||v.voice)),r=t.status,i=r==="connected"||r==="verified",c=r==="connecting"||r==="verifying"||r==="new"||r==="reconnecting",d,h;c?(d="var(--sb-yellow-2-solid)",h=di(r)):i?(d=t.peerPresence?cs[t.peerPresence]||"var(--sb-text-9)":"var(--sb-green-solid)",h=t.peerPresence?ls[t.peerPresence]||a("presence.online"):a("conn.p2p")):(d="var(--sb-red-solid)",h=di(r));let m=n?n.voice?"\u{1F399} Voice message":n.message:h;return{id:t.id,name:t.peerLabel,mono:Rr(t.peerLabel),dot:d,headerSub:h,status:t.status,peerPresence:t.peerPresence,preview:m,unread:t.unreadCount>0?t.unreadCount>99?"99+":String(t.unreadCount):null,verified:!!t.sas.isVerified,active:t.id===e,inactive:t.id!==e}}function fi(t){return t.order.map(e=>t.sessions[e]).filter(Boolean).map(e=>po(e,t.activeSessionId))}var F=Object.freeze({MAX_MEMBERS:8,MIN_MEMBERS:2,GROUP_ID_BYTES:16,NONCE_BYTES:32,COMMIT_BYTES:32,FINGERPRINT_BYTES:32,SAS_DIGITS:7,MAX_NAME_BYTES:128,MAX_EPOCH:4294967295,MAX_SPKI_BYTES:256,MIN_SPKI_BYTES:40,MAX_SIG_BYTES:160,MIN_SIG_BYTES:48,MAX_BODY_BYTES:1024,FRAME_BUDGET_CHARS:1800,MAX_DESCRIPTOR_CHARS:768,MESH_NONCE_BYTES:16,CALL_ID_BYTES:16}),Bt=Object.freeze({START:"start",JOIN:"join",LEAVE:"leave"}),En=Object.freeze({OFFER:"moffer",ANSWER:"manswer"}),Rn=Object.freeze({CREATE:"create",ADD:"add",REMOVE:"remove",RENAME:"rename"}),nr=new TextEncoder,ps=class extends Error{constructor(e,n="group_crypto"){super(e),this.name="GroupCryptoError",this.code=n}},ae=(t,e)=>{throw new ps(t,e)};function us(t){let e=t instanceof Uint8Array?t:new Uint8Array(t),n="";for(let r=0;rMath.ceil(e*4/3)+4&&ae("base64 payload exceeds its limit","bad_b64");let n;try{n=atob(t)}catch{ae("malformed base64","bad_b64")}let r=new Uint8Array(n.length);for(let i=0;iF.MAX_EPOCH)&&ae("value out of uint32 range","bad_u32");let e=new Uint8Array(4);return new DataView(e.buffer).setUint32(0,t),e}function gi(t,e){if(!(t instanceof Uint8Array)||!(e instanceof Uint8Array)||t.length!==e.length)return!1;let n=0;for(let r=0;rF.MAX_EPOCH)&&ae("epoch out of range","bad_epoch"),t}function _n(t){let e=typeof t=="string"?t:"";return nr.encode(e).length>F.MAX_NAME_BYTES&&ae("group name too long","bad_name"),e}function Cn(t){Array.isArray(t)||ae("member list is not an array","bad_members"),t.lengthF.MAX_MEMBERS&&ae(`a group is limited to ${F.MAX_MEMBERS} members`,"too_many_members");let e=new Set;for(let n of t)Ce(n),e.has(n)&&ae("duplicate member fingerprint","duplicate_member"),e.add(n);return[...t].sort()}async function mi(t){let e=await t.generateKey({name:"ECDSA",namedCurve:"P-384"},!1,["sign","verify"]),n=new Uint8Array(await t.exportKey("spki",e.publicKey)),r=await yi(t,n);return{keyPair:e,spki:n,fingerprint:r}}async function yi(t,e){return(!(e instanceof Uint8Array)||e.lengthF.MAX_SPKI_BYTES)&&ae("SPKI length out of range","bad_spki"),us(new Uint8Array(await t.digest("SHA-256",e)))}async function sr(t,e){let n=await yi(t,e),r;try{r=await t.importKey("spki",e,{name:"ECDSA",namedCurve:"P-384"},!1,["verify"])}catch{ae("member identity key is not a valid P-384 public key","bad_spki")}return{publicKey:r,fingerprint:n}}async function bi(t,{groupId:e,epoch:n,fingerprint:r,nonce:i}){Dt(e),Te(n),Ce(r),(!(i instanceof Uint8Array)||i.length!==F.NONCE_BYTES)&&ae("nonce must be 32 bytes","bad_nonce");let c=an("securebit/group/commit/v1",Qe(e),zt(n),Qe(r),i);return new Uint8Array(await t.digest("SHA-256",c))}async function uo(t,e,n){if(!(e instanceof Uint8Array)||e.length!==F.COMMIT_BYTES)return!1;let r;try{r=await bi(t,n)}catch{return!1}return gi(e,r)}async function fs(t,{groupId:e,epoch:n,contributions:r,digits:i=F.SAS_DIGITS}){Dt(e),Te(n),Array.isArray(r)||ae("contributions must be an array","bad_contributions"),(!Number.isInteger(i)||i<4||i>12)&&ae("digit count out of range","bad_digits"),Cn(r.map(S=>S&&S.fingerprint));let c=[...r].sort((S,p)=>S.fingerprint>>12);return String(k%10**i).padStart(i,"0")}finally{try{h.fill(0)}catch{}}}var _r=class{constructor({groupId:e,epoch:n,selfFingerprint:r,memberFingerprints:i}){this.groupId=Dt(e),this.epoch=Te(n),this.selfFingerprint=Ce(r),this.members=Cn(i),this.members.includes(this.selfFingerprint)||ae("the local member is not in the member set","not_a_member"),this.nonce=rr(F.NONCE_BYTES),this.commitments=new Map,this.nonces=new Map,this.revealed=!1,this.code=null}async ownCommitment(e){let n=await bi(e,{groupId:this.groupId,epoch:this.epoch,fingerprint:this.selfFingerprint,nonce:this.nonce});return this.commitments.set(this.selfFingerprint,n),n}acceptCommitment(e,n){Ce(e),this.members.includes(e)||ae("commitment from a non-member","not_a_member"),(!(n instanceof Uint8Array)||n.length!==F.COMMIT_BYTES)&&ae("malformed commitment","bad_commitment");let r=this.commitments.get(e);return r?(gi(r,n)||ae("member changed their commitment","commitment_changed"),!1):(this.commitments.set(e,n),!0)}get commitmentsComplete(){return this.members.every(e=>this.commitments.has(e))}reveal(){return this.commitmentsComplete||ae("cannot reveal before every member has committed","premature_reveal"),this.revealed=!0,this.nonces.set(this.selfFingerprint,this.nonce),this.nonce}async acceptReveal(e,n,r){Ce(n),this.members.includes(n)||ae("reveal from a non-member","not_a_member");let i=this.commitments.get(n);return i||ae("reveal arrived before the commitment","reveal_without_commitment"),await uo(e,i,{groupId:this.groupId,epoch:this.epoch,fingerprint:n,nonce:r})||ae("revealed nonce does not match the commitment","commitment_mismatch"),this.nonces.set(n,r),!0}get revealsComplete(){return this.members.every(e=>this.nonces.has(e))}async finish(e){return this.revealsComplete||ae("not every member has revealed","incomplete_reveal"),this.code=await fs(e,{groupId:this.groupId,epoch:this.epoch,contributions:this.members.map(n=>({fingerprint:n,nonce:this.nonces.get(n)}))}),this.code}destroy(){try{this.nonce.fill(0)}catch{}for(let e of this.nonces.values())try{e.fill(0)}catch{}this.nonces.clear(),this.commitments.clear()}};function xi({groupId:t,epoch:e,op:n,memberFps:r,name:i=""}){Dt(t),Te(e),Object.values(Rn).includes(n)||ae("unknown membership operation","bad_op");let c=Cn(r);return an("securebit/group/member-op/v1",Qe(t),zt(e),n,_n(i),...c.map(d=>Qe(d)))}async function vi(t,e,n){let r=await t.sign({name:"ECDSA",hash:"SHA-384"},e,xi(n));return new Uint8Array(r)}async function wi(t,e,n,r){if(!(r instanceof Uint8Array)||r.lengthF.MAX_SIG_BYTES)return!1;let i;try{i=xi(n)}catch{return!1}try{return await t.verify({name:"ECDSA",hash:"SHA-384"},e,r,i)}catch{return!1}}async function hs(t,e){let n=typeof e=="string"?nr.encode(e):e;return n instanceof Uint8Array||ae("message body must be a string or bytes","bad_body"),n.length>F.MAX_BODY_BYTES&&ae("message body exceeds the group limit","body_too_large"),new Uint8Array(await t.digest("SHA-256",n))}function ki({groupId:t,epoch:e,seq:n,senderFp:r,bodyHash:i}){return Dt(t),Te(e),Te(n),Ce(r),(!(i instanceof Uint8Array)||i.length!==32)&&ae("body hash must be 32 bytes","bad_body_hash"),an("securebit/group/message/v1",Qe(t),zt(e),zt(n),Qe(r),i)}async function Si(t,e,n){let r=await t.sign({name:"ECDSA",hash:"SHA-384"},e,ki(n));return new Uint8Array(r)}async function Ei(t,e,n,r){if(!(r instanceof Uint8Array)||r.lengthF.MAX_SIG_BYTES)return!1;let i;try{i=ki(n)}catch{return!1}try{return await t.verify({name:"ECDSA",hash:"SHA-384"},e,r,i)}catch{return!1}}function Ri({groupId:t,epoch:e,kind:n,fromFp:r,toFp:i,descriptor:c,nonce:d}){return Dt(t),Te(e),n!==En.OFFER&&n!==En.ANSWER&&ae("unknown mesh descriptor kind","bad_mesh_kind"),Ce(r),Ce(i),r===i&&ae("a member cannot dial itself","bad_mesh_peer"),(typeof c!="string"||c.length===0||c.length>F.MAX_DESCRIPTOR_CHARS)&&ae("mesh descriptor is missing or oversized","bad_descriptor"),(!(d instanceof Uint8Array)||d.length!==F.MESH_NONCE_BYTES)&&ae("mesh nonce must be 16 bytes","bad_mesh_nonce"),an("securebit/group/mesh-descriptor/v1",Qe(t),zt(e),n,Qe(r),Qe(i),c,d)}async function gs(t,e,n){let r=await t.sign({name:"ECDSA",hash:"SHA-384"},e,Ri(n));return new Uint8Array(r)}async function ms(t,e,n,r){if(!(r instanceof Uint8Array)||r.lengthF.MAX_SIG_BYTES)return!1;let i;try{i=Ri(n)}catch{return!1}try{return await t.verify({name:"ECDSA",hash:"SHA-384"},e,r,i)}catch{return!1}}function _i({groupId:t,epoch:e,fp:n,linkFp:r}){return Dt(t),Te(e),Ce(n),(typeof r!="string"||r.length===0||r.length>256)&&ae("link fingerprint is missing or oversized","bad_link_fp"),an("securebit/group/link-probe/v1",Qe(t),zt(e),Qe(n),r)}async function Ci(t,e,n){let r=await t.sign({name:"ECDSA",hash:"SHA-384"},e,_i(n));return new Uint8Array(r)}async function Ii(t,e,n,r){if(!(r instanceof Uint8Array)||r.lengthF.MAX_SIG_BYTES)return!1;let i;try{i=_i(n)}catch{return!1}try{return await t.verify({name:"ECDSA",hash:"SHA-384"},e,r,i)}catch{return!1}}function Ai({groupId:t,epoch:e,callId:n,action:r,fp:i,seq:c,withVideo:d}){return Dt(t),Te(e),ys(n),Te(c),Ce(i),r!==Bt.START&&r!==Bt.JOIN&&r!==Bt.LEAVE&&ae("unknown call action","bad_call_action"),an("securebit/group/call/v1",Qe(t),zt(e),Qe(n),r,Qe(i),zt(c),d===!0?"v":"a")}function ys(t){return(typeof t!="string"||t.length!==F.CALL_ID_BYTES*2||!/^[0-9a-f]+$/.test(t))&&ae("malformed call id","bad_call_id"),t}function Mi(){return us(rr(F.CALL_ID_BYTES))}async function Ti(t,e,n){let r=await t.sign({name:"ECDSA",hash:"SHA-384"},e,Ai(n));return new Uint8Array(r)}async function Ni(t,e,n,r){if(!(r instanceof Uint8Array)||r.lengthF.MAX_SIG_BYTES)return!1;let i;try{i=Ai(n)}catch{return!1}try{return await t.verify({name:"ECDSA",hash:"SHA-384"},e,r,i)}catch{return!1}}var be=Object.freeze({CREATE_GROUP:"CREATE_GROUP",REMOVE_GROUP:"REMOVE_GROUP",SET_ACTIVE_GROUP:"SET_ACTIVE_GROUP",SET_PHASE:"SET_PHASE",SET_MEMBERS:"SET_MEMBERS",PATCH_MEMBER:"PATCH_MEMBER",SET_SAS:"SET_SAS",CONFIRM_SAS:"CONFIRM_SAS",ADD_MESSAGE:"ADD_MESSAGE",SET_MESSAGES:"SET_MESSAGES",UPDATE_MESSAGE_STATUS:"UPDATE_MESSAGE_STATUS",INCREMENT_UNREAD:"INCREMENT_UNREAD",CLEAR_UNREAD:"CLEAR_UNREAD",RENAME:"RENAME",SET_ERROR:"SET_ERROR"}),Y=Object.freeze({FORMING:"forming",COMMITTING:"committing",REVEALING:"revealing",AWAITING_SAS:"awaiting_sas",READY:"ready",FAILED:"failed"}),de=Object.freeze({SELF:"self",LINKED:"linked",PENDING:"pending",LOST:"lost"}),fo={[Y.FORMING]:a("groupPhase.forming"),[Y.COMMITTING]:a("groupPhase.commitments"),[Y.REVEALING]:a("groupPhase.revealing"),[Y.AWAITING_SAS]:a("groupPhase.compare"),[Y.READY]:a("groupPhase.ready"),[Y.FAILED]:a("groupPhase.failed")};function bs(t){let e=String(t||"").trim().split(/\s+/).filter(Boolean),n=e[0]?.[0]||"",r=e[1]?.[0]||e[0]?.[1]||"";return(n+r).toUpperCase()||"##"}function Cr(t={}){return{id:t.id,name:t.name||"Group",createdAt:t.createdAt||Date.now(),adminFp:t.adminFp||"",selfFp:t.selfFp||"",isAdmin:!!t.isAdmin,epoch:Number.isInteger(t.epoch)?t.epoch:1,phase:t.phase||Y.FORMING,members:Array.isArray(t.members)?[...t.members].sort(Di):[],sasCode:"",sasConfirmed:!1,messages:[],unreadCount:0,error:null}}var ho=new TextEncoder;function go(t){let e=String(t);for(;ho.encode(e).length>F.MAX_NAME_BYTES;)e=e.slice(0,-1);return e}function Di(t,e){return t.fpe.fp?1:0}function Fi(){return{groups:{},order:[],activeGroupId:null}}function At(t,e,n){let r=t.groups[e];return r?{...t,groups:{...t.groups,[e]:{...r,...n}}}:t}function Oi(t,e){let n=be;switch(e.type){case n.CREATE_GROUP:{let r=e.entry||Cr(e);return!r.id||t.groups[r.id]?t:{groups:{...t.groups,[r.id]:r},order:[...t.order,r.id],activeGroupId:e.activate===!1?t.activeGroupId:r.id}}case n.REMOVE_GROUP:{let{id:r}=e;if(!t.groups[r])return t;let i={...t.groups};delete i[r];let c=t.order.filter(h=>h!==r),d=t.activeGroupId;if(d===r){let h=t.order.indexOf(r);d=c[Math.max(0,h-1)]||c[0]||null}return{groups:i,order:c,activeGroupId:d}}case n.SET_ACTIVE_GROUP:return e.id===null?t.activeGroupId===null?t:{...t,activeGroupId:null}:!t.groups[e.id]||t.activeGroupId===e.id?t:{...t,activeGroupId:e.id};case n.SET_PHASE:{let r=t.groups[e.id];if(!r||r.phase===e.phase)return t;let i={phase:e.phase};return e.phase!==Y.READY&&r.sasConfirmed&&(i.sasConfirmed=!1),e.phase!==Y.READY&&e.phase!==Y.AWAITING_SAS&&(i.sasCode=""),e.phase!==Y.FAILED&&(i.error=null),At(t,e.id,i)}case n.SET_MEMBERS:{let r=t.groups[e.id];if(!r)return t;let c={members:Array.isArray(e.members)?[...e.members].sort(Di):r.members};return Number.isInteger(e.epoch)&&(c.epoch=e.epoch),At(t,e.id,c)}case n.PATCH_MEMBER:{let r=t.groups[e.id];if(!r)return t;let i=!1,c=r.members.map(d=>{if(d.fp!==e.fp)return d;let h={...d,...e.patch};return Object.keys(e.patch).every(m=>d[m]===h[m])?d:(i=!0,h)});return i?At(t,e.id,{members:c}):t}case n.SET_SAS:{let r=t.groups[e.id];return!r||r.sasCode===e.code?t:At(t,e.id,{sasCode:e.code||"",sasConfirmed:!1})}case n.CONFIRM_SAS:{let r=t.groups[e.id];return!r||!r.sasCode||r.phase!==Y.AWAITING_SAS||r.sasConfirmed&&r.phase===Y.READY?t:At(t,e.id,{sasConfirmed:!0,phase:Y.READY,error:null})}case n.ADD_MESSAGE:{let r=t.groups[e.id];return r?At(t,e.id,{messages:[...r.messages,e.message]}):t}case n.SET_MESSAGES:{let r=t.groups[e.id];if(!r)return t;let i=typeof e.updater=="function"?e.updater(r.messages):e.messages;return At(t,e.id,{messages:Array.isArray(i)?i:[]})}case n.UPDATE_MESSAGE_STATUS:{let r=t.groups[e.id];if(!r)return t;let i=!1,c=r.messages.map(d=>String(d.mid)===String(e.mid)&&d.status!==e.status?(i=!0,{...d,status:e.status}):d);return i?At(t,e.id,{messages:c}):t}case n.INCREMENT_UNREAD:{let r=t.groups[e.id];return r?At(t,e.id,{unreadCount:r.unreadCount+1}):t}case n.CLEAR_UNREAD:{let r=t.groups[e.id];return!r||r.unreadCount===0?t:At(t,e.id,{unreadCount:0})}case n.RENAME:{let r=t.groups[e.id];if(!r)return t;let i=go(String(e.name||"").trim())||r.name;return At(t,e.id,{name:i})}case n.SET_ERROR:{if(!t.groups[e.id])return t;let i={error:e.error||null};return e.error&&(i.phase=Y.FAILED),At(t,e.id,i)}default:return t}}function xs(t){return t.members.filter(e=>e.state===de.SELF||e.state===de.LINKED).length}function mo(t){if(t.phase!==Y.READY)return fo[t.phase]||"Group";let e=t.members.length,n=xs(t);return n!i.expired&&typeof i.message=="string"&&i.message.trim()),r=mo(t);return{id:t.id,kind:"group",name:t.name,mono:bs(t.name),dot:yo(t),headerSub:r,phase:t.phase,memberCount:t.members.length,linkedCount:xs(t),preview:n?n.message:r,unread:t.unreadCount>0?t.unreadCount>99?"99+":String(t.unreadCount):null,verified:t.phase===Y.READY&&t.sasConfirmed,active:t.id===e,inactive:t.id!==e}}function Pi(t){return t.order.map(e=>t.groups[e]).filter(Boolean).map(e=>bo(e,t.activeGroupId))}var he=Object.freeze({INVITE:"g_invite",HELLO:"g_hello",MEMBER:"g_member",ROSTER:"g_roster",COMMIT:"g_commit",REVEAL:"g_reveal",MESSAGE:"g_msg",RELAY:"g_relay",LEAVE:"g_leave",MESH_OFFER:"g_moffer",MESH_ANSWER:"g_manswer",MESH_ABORT:"g_mabort",PROBE:"g_probe",CALL:"g_call"}),Ar="g_env",Mr=Object.freeze(new Set(Object.values(he)));function ir(t){return!t||typeof t!="object"?!1:t.type===Ar||Mr.has(t.type)}function Li(t){return!t||typeof t!="object"?null:t.type===Ar?typeof t.t=="string"?t.t:null:Mr.has(t.type)?t.type:null}function xo(t){let e=JSON.stringify(t),n=$e(new TextEncoder().encode(e));if(n.length>F.FRAME_BUDGET_CHARS)throw new K("group frame exceeds the transport budget","frame_too_large");return{type:Ar,gid:t.gid,t:t.type,d:n}}function Ir(t){if(!t||t.type!==Ar)return t;let e=String(t.d||"");if(e.length>F.FRAME_BUDGET_CHARS)throw new K("group frame exceeds the transport budget","frame_too_large");let n=it(e,{max:F.FRAME_BUDGET_CHARS}),r=JSON.parse(new TextDecoder().decode(n));if(!r||typeof r!="object"||!Mr.has(r.type))throw new K("envelope carried no recognisable frame","bad_envelope");if(t.gid&&r.gid!==t.gid)throw new K("envelope group id does not match its frame","bad_envelope");if(t.t&&r.type!==t.t)throw new K("envelope type does not match its frame","bad_envelope");return r}var In=Object.freeze({CEREMONY_MS:6e4,HELLO_MS:45e3,MESH_DIAL_MS:45e3,MESH_RETRY_MS:2e4}),vo=2,wo=3,K=class extends Error{constructor(e,n="group_session"){super(e),this.name="GroupSessionError",this.code=n}},$n=class{constructor({groupId:e,name:n,isAdmin:r,subtle:i,send:c,emit:d,mesh:h=null,log:m=()=>{}}){this.groupId=Dt(e),this.name=_n(n),this.isAdmin=!!r,this.subtle=i,this._send=c,this._emit=d,this._log=m,this._mesh=h,this.identity=null,this.epoch=1,this.adminFp="",this.phase=Y.FORMING,this.members=new Map,this.sessionToFp=new Map,this.ceremony=null,this.sasCode="",this.sasConfirmed=!1,this.seq=0,this.transcript=new Map,this._timers=new Set,this._destroyed=!1,this._awaitingHello=new Map,this._pendingCeremony=[],this._draining=!1,this._pendingKeys=new Map,this._pendingAdd=null,this._meshDials=new Map,this._meshFailures=new Map,this._meshSessions=new Set,this._probed=new Set,this._meshPass=null,this.call=null,this.callSeq=0,this._callSeen=new Map}static newId(){return hi()}async init(){return this.identity?this.identity:(this.identity=await mi(this.subtle),this.members.set(this.identity.fingerprint,{fp:this.identity.fingerprint,name:"You",spki:this.identity.spki,publicKey:null,sessionId:null,state:de.SELF}),this.isAdmin&&(this.adminFp=this.identity.fingerprint),this.identity)}get selfFp(){return this.identity?.fingerprint||""}destroy(){this._destroyed=!0;for(let e of this._timers)clearTimeout(e);this._timers.clear();try{this.ceremony?.destroy()}catch{}this.ceremony=null;for(let e of this._meshSessions)try{this._mesh?.close(e)}catch{}this._meshSessions.clear(),this._meshDials.clear(),this._meshFailures.clear(),this._probed.clear(),this.call=null,this._callSeen.clear(),this.members.clear(),this.sessionToFp.clear(),this.transcript.clear(),this._pendingCeremony=[],this._pendingKeys.clear(),this._pendingAdd=null,this.identity=null}_timer(e,n){let r=setTimeout(()=>{this._timers.delete(r),this._destroyed||e()},n);return this._timers.add(r),r}_fail(e){if(!this._destroyed){this._log("warn","group ceremony failed",{code:e}),this.phase=Y.FAILED;try{this.ceremony?.destroy()}catch{}this.ceremony=null,this._emit("error",{error:e})}}_setPhase(e){this.phase!==e&&(this.phase=e,e!==Y.READY&&(this.sasConfirmed=!1),e!==Y.READY&&e!==Y.AWAITING_SAS&&(this.sasCode=""),this._emit("phase",{phase:e}))}_memberSnapshot(){return[...this.members.values()].map(e=>({fp:e.fp,name:e.name,sessionId:e.sessionId,state:e.state}))}_emitMembers(){this._pruneCall(),this._emit("members",{members:this._memberSnapshot(),epoch:this.epoch})}_pruneCall(){if(!this.call)return;let e=!1;for(let n of[...this.call.participants])this.members.has(n)||(this.call.participants.delete(n),e=!0);this.call.participants.size===0&&(this.call=null,e=!0),e&&this._emit("call",{call:this.getCallSnapshot()})}_directPeers(){return[...this.members.values()].filter(e=>e.state===de.LINKED&&e.sessionId)}_relayFor(e){let n=this.members.get(this.adminFp);return n&&n.state===de.LINKED&&n.sessionId&&n.fp!==e?n:this._directPeers().find(r=>r.fp!==e)||null}async _wire(e,n){return this._send(e,xo(n))}async _sendTo(e,n){let r=this.members.get(e);if(!r||r.fp===this.selfFp)return!1;if(r.state===de.LINKED&&r.sessionId)return await this._wire(r.sessionId,n),!0;let i=this._relayFor(e);return i?(await this._wire(i.sessionId,{type:he.RELAY,gid:this.groupId,to:e,hopped:!1,inner:n}),r.state!==de.LOST):!1}async _broadcast(e,{exclude:n=[]}={}){let r=[...this.members.keys()].filter(h=>h!==this.selfFp&&!n.includes(h)),i=await Promise.allSettled(r.map(h=>this._sendTo(h,e))),c=[],d=0;return i.forEach((h,m)=>{if(h.status==="fulfilled"&&h.value===!0){d+=1;return}let v=this.members.get(r[m]);c.push({fp:r[m],name:v?.name||"A member"})}),{delivered:d,unreachable:c}}bindSession(e,n,r=de.LINKED){let i=this.members.get(e);return i?(i.sessionId&&i.sessionId!==n&&(this.sessionToFp.delete(i.sessionId),this._closeMeshSession(i.sessionId)),i.sessionId=n,i.state=r,n&&this.sessionToFp.set(n,e),this._emitMembers(),!0):!1}unbindSession(e){let n=this.members.get(e);if(!n||!n.sessionId)return!1;let r=n.sessionId;return this.sessionToFp.delete(r),n.sessionId=null,(n.state===de.LINKED||n.state===de.LOST)&&(n.state=de.PENDING),this._closeMeshSession(r),this._emitMembers(),this._scheduleMeshMaintain(),!0}setSessionState(e,n){let r=this.sessionToFp.get(e);if(!r)return;let i=this.members.get(r);if(!i||i.state===de.SELF)return;let c=n?de.LINKED:de.LOST;i.state!==c&&(i.state=c,this._emitMembers(),n&&this._settleDial(r),this._scheduleMeshMaintain())}_dialStillWanted(e,n){if(this._destroyed||this._meshDials.get(e)!==n||this.epoch!==n.epoch)return!1;let r=this.members.get(e);return!(!r||r.sessionId&&r.sessionId!==n.sessionId)}_abandonDial(e,n,r){this._meshDials.get(e)===n&&(n.timer&&(clearTimeout(n.timer),this._timers.delete(n.timer)),this._meshDials.delete(e)),this._meshSessions.delete(r);try{this._mesh?.close(r)}catch{}}_closeMeshSession(e){if(!(!e||!this._meshSessions.has(e))){this._meshSessions.delete(e);try{this._mesh?.close(e)}catch{}}}_settleDial(e){let n=this._meshDials.get(e);n&&(n.timer&&(clearTimeout(n.timer),this._timers.delete(n.timer)),this._meshDials.delete(e),this._meshFailures.delete(e))}_meshFail(e,n,{tellPeer:r=!0}={}){let i=this._meshDials.get(e);if(i){i.timer&&(clearTimeout(i.timer),this._timers.delete(i.timer)),this._meshDials.delete(e);let d=this.members.get(e);i.sessionId&&d&&d.sessionId===i.sessionId?this.unbindSession(e):this._closeMeshSession(i.sessionId)}let c=this._meshFailures.get(e)||{attempts:0,nextAt:0};c.attempts+=1,c.nextAt=Date.now()+In.MESH_RETRY_MS*2**(c.attempts-1),this._meshFailures.set(e,c),this._log("warn","mesh dial failed",{code:n,attempts:c.attempts}),r&&this.members.has(e)&&this._sendTo(e,{type:he.MESH_ABORT,gid:this.groupId,epoch:this.epoch,from:this.selfFp,to:e}).catch(()=>{}),this._scheduleMeshMaintain()}_meshReset(){for(let e of[...this._meshDials.keys()]){let n=this._meshDials.get(e);n?.timer&&(clearTimeout(n.timer),this._timers.delete(n.timer)),this._meshDials.delete(e);let r=this.members.get(e);n?.sessionId&&r&&r.sessionId===n.sessionId?this.unbindSession(e):this._closeMeshSession(n?.sessionId)}this._meshFailures.clear(),this._probed.clear()}_scheduleMeshMaintain(){this._destroyed||!this._mesh||this._meshPass||(this._meshPass=this._timer(()=>{this._meshPass=null,this._meshMaintain()},0))}_meshMaintain(){if(this._destroyed||!this._mesh||this.phase!==Y.READY||!this.sasConfirmed)return;let e=Date.now(),n=this._meshDials.size,r=1/0;for(let i of Cn([...this.members.keys()])){if(n>=vo)break;let c=this.members.get(i);if(!c||c.state===de.SELF||c.sessionId||this._meshDials.has(i)||!(this.selfFp=wo)continue;if(e{}))}r!==1/0&&!this._meshPass&&(this._meshPass=this._timer(()=>{this._meshPass=null,this._meshMaintain()},Math.max(0,r-e)+50))}async _meshDial(e){let n=this.members.get(e);if(!n||n.sessionId||this._meshDials.has(e))return;let r=this.epoch,i=rr(F.MESH_NONCE_BYTES),c={role:"offer",sessionId:null,nonce:i,epoch:r,timer:null};this._meshDials.set(e,c);try{let d=await this._mesh.createOffer(e),h=d&&d.sessionId,m=String(d&&d.descriptor||"");if(!h||!m)throw new K("mesh transport produced no descriptor","no_descriptor");if(!this._dialStillWanted(e,c))return this._abandonDial(e,c,h);c.sessionId=h,this._meshSessions.add(h),this.bindSession(e,h,de.PENDING);let v=await gs(this.subtle,this.identity.keyPair.privateKey,{groupId:this.groupId,epoch:r,kind:En.OFFER,fromFp:this.selfFp,toFp:e,descriptor:m,nonce:i});if(!await this._sendTo(e,{type:he.MESH_OFFER,gid:this.groupId,epoch:r,from:this.selfFp,to:e,d:m,n:$e(i),sig:$e(v)}))throw new K("no route to carry the dial","unreachable");c.timer=this._timer(()=>this._meshFail(e,"dial_timeout"),In.MESH_DIAL_MS)}catch(d){this._meshFail(e,d?.code||"dial_failed")}}async _onMeshOffer(e){if(!this._mesh||this._destroyed)return;let n=Ce(String(e.from||""));if(Ce(String(e.to||""))!==this.selfFp||Te(e.epoch)!==this.epoch||this.phase!==Y.READY||!this.sasConfirmed)return;let r=this.members.get(n);if(!r||!r.publicKey)throw new K("mesh dial from a non-member","not_a_member");if(r.sessionId||this._meshDials.has(n)||this.selfFpF.MAX_DESCRIPTOR_CHARS)throw new K("mesh descriptor is missing or oversized","bad_descriptor");let c=it(String(e.n||""),{max:F.MESH_NONCE_BYTES});if(!await ms(this.subtle,r.publicKey,{groupId:this.groupId,epoch:this.epoch,kind:En.OFFER,fromFp:n,toFp:this.selfFp,descriptor:i,nonce:c},it(String(e.sig||""),{max:F.MAX_SIG_BYTES})))throw new K("mesh dial signature did not verify","bad_signature");if(this._destroyed||r.sessionId||this._meshDials.has(n)||Te(e.epoch)!==this.epoch)return;let h=this.epoch,m={role:"answer",sessionId:null,nonce:c,epoch:h,timer:null};this._meshDials.set(n,m);try{let v=await this._mesh.createAnswer(n,i),S=v&&v.sessionId,p=String(v&&v.descriptor||"");if(!S||!p)throw new K("mesh transport produced no answer","no_descriptor");if(!this._dialStillWanted(n,m))return this._abandonDial(n,m,S);m.sessionId=S,this._meshSessions.add(S),this.bindSession(n,S,de.PENDING);let k=await gs(this.subtle,this.identity.keyPair.privateKey,{groupId:this.groupId,epoch:h,kind:En.ANSWER,fromFp:this.selfFp,toFp:n,descriptor:p,nonce:c});if(!await this._sendTo(n,{type:he.MESH_ANSWER,gid:this.groupId,epoch:h,from:this.selfFp,to:n,d:p,n:$e(c),sig:$e(k)}))throw new K("no route to carry the answer","unreachable");m.timer=this._timer(()=>this._meshFail(n,"answer_timeout"),In.MESH_DIAL_MS)}catch(v){this._meshFail(n,v?.code||"answer_failed")}}async _onMeshAnswer(e){if(!this._mesh||this._destroyed)return;let n=Ce(String(e.from||""));if(Ce(String(e.to||""))!==this.selfFp||Te(e.epoch)!==this.epoch)return;let r=this._meshDials.get(n);if(!r||r.role!=="offer"||!r.sessionId||r.epoch!==this.epoch)return;let i=this.members.get(n);if(!i||!i.publicKey)throw new K("mesh answer from a non-member","not_a_member");let c=String(e.d||"");if(!c||c.length>F.MAX_DESCRIPTOR_CHARS)throw new K("mesh descriptor is missing or oversized","bad_descriptor");let d=it(String(e.n||""),{max:F.MESH_NONCE_BYTES});if(d.length!==r.nonce.length||!d.every((m,v)=>m===r.nonce[v]))throw new K("mesh answer does not match the dial it claims","bad_mesh_nonce");if(!await ms(this.subtle,i.publicKey,{groupId:this.groupId,epoch:this.epoch,kind:En.ANSWER,fromFp:n,toFp:this.selfFp,descriptor:c,nonce:d},it(String(e.sig||""),{max:F.MAX_SIG_BYTES})))throw new K("mesh answer signature did not verify","bad_signature");try{await this._mesh.acceptAnswer(r.sessionId,c)}catch(m){this._meshFail(n,m?.code||"answer_rejected")}}_onMeshAbort(e){let n=Ce(String(e.from||""));Ce(String(e.to||""))===this.selfFp&&this._meshDials.has(n)&&this._meshFail(n,"peer_aborted",{tellPeer:!1})}async probeSession(e){return this._destroyed||!this._mesh||!e||this.phase!==Y.READY||!this.sasConfirmed||this.sessionToFp.has(e)?!1:this._sendProbe(e)}async _sendProbe(e){if(this._destroyed||this._probed.has(e))return!1;let n=this._linkFingerprint(e);if(!n)return!1;this._probed.add(e);let r=await Ci(this.subtle,this.identity.keyPair.privateKey,{groupId:this.groupId,epoch:this.epoch,fp:this.selfFp,linkFp:n});return await this._wire(e,{type:he.PROBE,gid:this.groupId,epoch:this.epoch,fp:this.selfFp,sig:$e(r)}),!0}_linkFingerprint(e){try{let n=this._mesh?.linkFingerprint?.(e);return typeof n=="string"&&n.length>0?n:""}catch{return""}}async _onProbe(e,n){if(this._destroyed||this.phase!==Y.READY||!this.sasConfirmed||Te(n.epoch)!==this.epoch)return;let r=Ce(String(n.fp||""));if(r===this.selfFp)return;let i=this.members.get(r);if(!i||!i.publicKey||this.sessionToFp.has(e)||i.sessionId&&(i.state===de.LINKED||!this._meshDials.has(r)))return;let c=this._linkFingerprint(e);if(!c)return;if(!await Ii(this.subtle,i.publicKey,{groupId:this.groupId,epoch:this.epoch,fp:r,linkFp:c},it(String(n.sig||""),{max:F.MAX_SIG_BYTES})))throw new K("link probe signature did not verify","bad_signature");this._settleDial(r),this.bindSession(r,e,de.LINKED),this._sendProbe(e).catch(()=>{}),this._scheduleMeshMaintain()}async invite(e){if(!this.isAdmin)throw new K("only the admin invites","not_admin");if(await this.init(),e.length+1>F.MAX_MEMBERS)throw new K(`a group is limited to ${F.MAX_MEMBERS} members`,"too_many_members");this._setPhase(Y.FORMING);for(let c of e)this._awaitingHello.set(c.sessionId,c.name||"Member");let n={type:he.INVITE,gid:this.groupId,epoch:this.epoch,name:this.name,adminSpki:$e(this.identity.spki)},r=await Promise.allSettled(e.map(c=>this._wire(c.sessionId,n))),i=r.filter(c=>c.status==="rejected");if(i.length===e.length)throw this._fail("invitations_could_not_be_sent"),new K("the invitation could not be sent \u2014 the chat with that peer is not connected","invitations_could_not_be_sent");if(i.length>0){let c=e.filter((d,h)=>r[h].status==="fulfilled");for(let d of e)c.includes(d)||this._awaitingHello.delete(d.sessionId);this._emit("partial_invite",{sent:c.length,total:e.length})}this._timer(()=>{this.phase===Y.FORMING&&this._fail("invitees_did_not_respond")},In.HELLO_MS)}async acceptInvite(e,n){let r=Ir(n);await this.init();let i=it(String(r.adminSpki||"")),{publicKey:c,fingerprint:d}=await sr(this.subtle,i);this.adminFp=d,this.epoch=Te(r.epoch),this.name=_n(r.name),this.members.set(d,{fp:d,name:"Admin",spki:i,publicKey:c,sessionId:e,state:de.LINKED}),this.sessionToFp.set(e,d),this._setPhase(Y.FORMING),this._emitMembers(),await this._wire(e,{type:he.HELLO,gid:this.groupId,epoch:this.epoch,spki:$e(this.identity.spki)}),this._timer(()=>{this.phase===Y.FORMING&&this._fail("roster_never_arrived")},In.HELLO_MS)}async _onHello(e,n){if(!this.isAdmin)return;if(!this._awaitingHello.has(e)){this._log("warn","dropped an unsolicited group hello",{groupId:this.groupId});return}let r=it(String(n.spki||"")),{publicKey:i,fingerprint:c}=await sr(this.subtle,r);if(!(this.members.has(c)&&c!==this.selfFp)){if(this.members.size>=F.MAX_MEMBERS)throw new K("group is full","too_many_members");if(this.members.set(c,{fp:c,name:this._awaitingHello.get(e)||"Member",spki:r,publicKey:i,sessionId:e,state:de.LINKED}),this.sessionToFp.set(e,c),this._awaitingHello.delete(e),this._emitMembers(),this._awaitingHello.size===0){if(this._pendingAdd)return this._finishAdd();await this.publishRoster(Rn.CREATE)}}}async publishRoster(e=Rn.ADD){if(!this.isAdmin)throw new K("only the admin publishes the roster","not_admin");let n=Cn([...this.members.keys()]),r={groupId:this.groupId,epoch:this.epoch,op:e,memberFps:n,name:this.name},i=await vi(this.subtle,this.identity.keyPair.privateKey,r);for(let c of n){let d=this.members.get(c);await this._broadcast({type:he.MEMBER,gid:this.groupId,epoch:this.epoch,fp:c,name:d.name==="You"?"Admin":d.name,spki:$e(d.spki)})}await this._broadcast({type:he.ROSTER,gid:this.groupId,epoch:this.epoch,op:e,name:this.name,adminSpki:$e(this.identity.spki),members:n,sig:$e(i)}),await this._startCeremony()}async _onMemberKey(e){if(Te(e.epoch)F.MAX_MEMBERS*2)return;let r=it(String(e.spki||"")),{publicKey:i,fingerprint:c}=await sr(this.subtle,r);if(Ce(String(e.fp||""))!==c)throw new K("member key does not match its fingerprint","fingerprint_mismatch");this._pendingKeys.set(c,{spki:r,publicKey:i,name:_n(e.name)})}async _onRoster(e,n){let r=Te(n.epoch);if(this.isAdmin)return;if(rF.MAX_MEMBERS)throw new K("roster exceeds the member limit","too_many_members");let h=Cn(n.members.map(p=>String(p||"")));if(!h.includes(this.selfFp))throw new K("roster does not include us","not_a_member");if(!h.includes(d))throw new K("roster does not include its author","bad_roster");let m=[];for(let p of h){if(p===this.selfFp){m.push({fp:p,name:"You",spki:this.identity.spki,publicKey:null});continue}let k=this._pendingKeys.get(p)||(p===d?{spki:i,publicKey:c,name:"Admin"}:null);if(!k)throw new K("roster names a member whose key never arrived","missing_member_key");m.push({fp:p,name:k.name,spki:k.spki,publicKey:k.publicKey})}if(!await wi(this.subtle,c,{groupId:this.groupId,epoch:r,op:String(n.op||""),memberFps:h,name:_n(n.name)},it(String(n.sig||""),{max:F.MAX_SIG_BYTES})))throw new K("roster signature did not verify","bad_signature");this.epoch=r,this.name=_n(n.name),this.adminFp=d;let S=this.members;this.members=new Map;for(let p of m){let k=S.get(p.fp);this.members.set(p.fp,{fp:p.fp,name:p.fp===this.selfFp?"You":p.name,spki:p.spki,publicKey:p.fp===this.selfFp?null:p.publicKey,sessionId:k?.sessionId||null,state:p.fp===this.selfFp?de.SELF:k?.state===de.LINKED?de.LINKED:de.PENDING})}for(let[p,k]of[...this.sessionToFp])this.members.has(k)||this.sessionToFp.delete(p);this._emit("roster",{name:this.name,epoch:this.epoch,adminFp:d}),this._emitMembers(),await this._startCeremony()}async _startCeremony(){try{this.ceremony?.destroy()}catch{}this._meshReset(),this.ceremony=new _r({groupId:this.groupId,epoch:this.epoch,selfFingerprint:this.selfFp,memberFingerprints:[...this.members.keys()]}),this._setPhase(Y.COMMITTING);let e=await this.ceremony.ownCommitment(this.subtle);await this._broadcast({type:he.COMMIT,gid:this.groupId,epoch:this.epoch,fp:this.selfFp,commit:$e(e)});let n=this.epoch;this._timer(()=>{this.epoch===n&&(this.phase===Y.COMMITTING||this.phase===Y.REVEALING)&&this._fail("ceremony_timed_out")},In.CEREMONY_MS),await this._drainPendingCeremony(),await this._maybeReveal()}_holdCeremonyFrame(e){this._pendingCeremony.length>=F.MAX_MEMBERS*2||this._pendingCeremony.push(e)}async _drainPendingCeremony(){if(!this._draining){this._draining=!0;try{let e=this._pendingCeremony;this._pendingCeremony=[];for(let n of e)try{n.type===he.COMMIT?await this._onCommit(n):n.type===he.REVEAL&&await this._onReveal(n)}catch(r){this._log("warn","held ceremony frame discarded",{code:r?.code})}}finally{this._draining=!1}}}async _onCommit(e){if(!this.ceremony)return this._holdCeremonyFrame(e);Te(e.epoch)===this.epoch&&(this.ceremony.acceptCommitment(Ce(String(e.fp||"")),it(String(e.commit||""),{max:F.COMMIT_BYTES})),await this._drainPendingCeremony(),await this._maybeReveal())}async _maybeReveal(){if(!this.ceremony||this.ceremony.revealed||!this.ceremony.commitmentsComplete)return;this._setPhase(Y.REVEALING);let e=this.ceremony.reveal();await this._broadcast({type:he.REVEAL,gid:this.groupId,epoch:this.epoch,fp:this.selfFp,nonce:$e(e)}),await this._maybeFinish()}async _onReveal(e){if(!this.ceremony)return this._holdCeremonyFrame(e);if(Te(e.epoch)===this.epoch){if(!this.ceremony.commitments.has(Ce(String(e.fp||""))))return this._holdCeremonyFrame(e);await this.ceremony.acceptReveal(this.subtle,Ce(String(e.fp||"")),it(String(e.nonce||""),{max:F.NONCE_BYTES})),await this._maybeFinish()}}async _maybeFinish(){if(!this.ceremony||!this.ceremony.revealsComplete||this.sasCode)return;let e=await this.ceremony.finish(this.subtle);this._setPhase(Y.AWAITING_SAS),this.sasCode=e,this._emit("sas",{code:e})}confirmSas(){if(this.phase!==Y.AWAITING_SAS||!this.sasCode)throw new K("there is no group code to confirm","no_code");this.sasConfirmed=!0,this.phase=Y.READY;try{this.ceremony?.destroy()}catch{}this.ceremony=null,this._emit("confirmed",{members:this._memberSnapshot()}),this._scheduleMeshMaintain()}async _recomputeSas(e){return fs(this.subtle,{groupId:this.groupId,epoch:this.epoch,contributions:e})}async sendText(e){if(this.phase!==Y.READY||!this.sasConfirmed)throw new K("the group code has not been confirmed","not_ready");let n=String(e??"");if(!n.trim())throw new K("empty message","empty");let r=++this.seq,i=await hs(this.subtle,n),c=await Si(this.subtle,this.identity.keyPair.privateKey,{groupId:this.groupId,epoch:this.epoch,seq:r,senderFp:this.selfFp,bodyHash:i}),d={type:he.MESSAGE,gid:this.groupId,epoch:this.epoch,seq:r,fp:this.selfFp,ts:Date.now(),body:n,sig:$e(c)},{delivered:h,unreachable:m}=await this._broadcast(d);return{seq:r,delivered:h,total:this.members.size-1,unreachable:m}}async _onMessage(e,{relayed:n=!1}={}){let r=Te(e.epoch),i=Te(e.seq),c=Ce(String(e.fp||""));if(c===this.selfFp)return;let d=this.members.get(c);if(!d||!d.publicKey)throw new K("message from a non-member","not_a_member");if(r!==this.epoch)throw new K("message from another epoch","stale_epoch");let h=String(e.body??""),m=await hs(this.subtle,h);if(!await Ei(this.subtle,d.publicKey,{groupId:this.groupId,epoch:r,seq:i,senderFp:c,bodyHash:m},it(String(e.sig||""),{max:F.MAX_SIG_BYTES})))throw new K("message signature did not verify","bad_signature");let S=this.transcript.get(c)||new Map,p=$e(m),k=S.get(i);if(k!==void 0){if(k===p)return;throw this._emit("inconsistency",{fp:c,seq:i,name:d.name}),new K("member sent conflicting messages under one sequence number","transcript_split")}S.set(i,p),S.size>512&&S.delete(S.keys().next().value),this.transcript.set(c,S),this._emit("message",{fp:c,name:d.name,body:h,seq:i,ts:Number.isFinite(e.ts)?e.ts:Date.now(),relayed:n})}getCallSnapshot(){if(!this.call)return null;let e=this.members.get(this.call.startedBy);return{callId:this.call.callId,startedBy:this.call.startedBy,startedByName:this.call.startedBy===this.selfFp?"You":e?.name||"A member",withVideo:this.call.withVideo,startedAt:this.call.startedAt,joined:this.call.joined,participants:[...this.call.participants].map(n=>{let r=this.members.get(n);return{fp:n,name:n===this.selfFp?"You":r?.name||"A member",self:n===this.selfFp,sessionId:r?.sessionId||null,state:r?.state||de.LOST}}).sort((n,r)=>n.fpr.fp?1:0)}}_emitCall(){this._emit("call",{call:this.getCallSnapshot()})}_requireReady(){if(this.phase!==Y.READY||!this.sasConfirmed)throw new K("the group code has not been confirmed","not_ready")}async _sendCallFrame(e,n,r){let i=++this.callSeq,c=await Ti(this.subtle,this.identity.keyPair.privateKey,{groupId:this.groupId,epoch:this.epoch,callId:n,action:e,fp:this.selfFp,seq:i,withVideo:r});return this._broadcast({type:he.CALL,gid:this.groupId,epoch:this.epoch,callId:n,action:e,fp:this.selfFp,seq:i,v:r===!0,ts:Date.now(),sig:$e(c)})}async startCall({withVideo:e=!1,prepare:n=null}={}){if(this._requireReady(),this.call)throw new K("a call is already running in this group","call_in_progress");let r=Mi();this.call={callId:r,startedBy:this.selfFp,withVideo:e===!0,startedAt:Date.now(),participants:new Set([this.selfFp]),joined:!0},this._emitCall(),this._scheduleMeshMaintain();try{typeof n=="function"&&await n(this.getCallSnapshot());let{unreachable:i}=await this._sendCallFrame(Bt.START,r,this.call.withVideo);return{callId:r,unreachable:i}}catch(i){throw this.call=null,this._emitCall(),i}}async joinCall(){if(this._requireReady(),!this.call)throw new K("there is no call to join","no_call");if(this.call.joined)return{callId:this.call.callId,unreachable:[]};this.call.joined=!0,this.call.participants.add(this.selfFp),this._emitCall(),this._scheduleMeshMaintain();let{unreachable:e}=await this._sendCallFrame(Bt.JOIN,this.call.callId,this.call.withVideo);return{callId:this.call.callId,unreachable:e}}async leaveCall(){if(!this.call)return;let e=this.call.callId,n=this.call.withVideo;this.call.joined=!1,this.call.participants.delete(this.selfFp),this.call.participants.size===0&&(this.call=null),this._emitCall();try{await this._sendCallFrame(Bt.LEAVE,e,n)}catch{}}_dropFromCall(e){!this.call||!this.call.participants.has(e)||(this.call.participants.delete(e),this.call.participants.size===0&&(this.call=null),this._emitCall())}async _onCall(e){let n=Te(e.epoch),r=Te(e.seq),i=Ce(String(e.fp||"")),c=ys(String(e.callId||"")),d=String(e.action||""),h=e.v===!0;if(i===this.selfFp)return;let m=this.members.get(i);if(!m||!m.publicKey)throw new K("call frame from a non-member","not_a_member");if(n!==this.epoch)throw new K("call frame from another epoch","stale_epoch");let v=this._callSeen.get(i);if(v!==void 0&&r<=v)return;if(!await Ni(this.subtle,m.publicKey,{groupId:this.groupId,epoch:n,callId:c,action:d,fp:i,seq:r,withVideo:h},it(String(e.sig||""),{max:F.MAX_SIG_BYTES})))throw new K("call frame signature did not verify","bad_signature");if(this._callSeen.set(i,r),!(this.phase!==Y.READY||!this.sasConfirmed))switch(d){case Bt.START:{if(this.call&&this.call.callId!==c){if(c>=this.call.callId)return;this.call=null}this.call?this.call.participants.add(i):this.call={callId:c,startedBy:i,withVideo:h,startedAt:Date.now(),participants:new Set([i]),joined:!1},this._emitCall(),this._scheduleMeshMaintain();return}case Bt.JOIN:{if(!this.call||this.call.callId!==c||this.call.participants.has(i))return;this.call.participants.add(i),h&&(this.call.withVideo=!0),this._emitCall(),this._scheduleMeshMaintain();return}case Bt.LEAVE:{if(!this.call||this.call.callId!==c)return;this._dropFromCall(i);return}default:return}}async handleFrame(e,n,{relayed:r=!1}={}){if(this._destroyed||!ir(n))return;let i=Ir(n);if(!(!i||!Mr.has(i.type))&&Dt(String(i.gid||""))===this.groupId)switch(i.type){case he.RELAY:return this._onRelay(e,i);case he.HELLO:return this._onHello(e,i);case he.MEMBER:return this._onMemberKey(i);case he.ROSTER:return this._onRoster(e,i);case he.COMMIT:return this._onCommit(i);case he.REVEAL:return this._onReveal(i);case he.MESSAGE:return this._onMessage(i,{relayed:r});case he.LEAVE:return this._onLeave(i);case he.MESH_OFFER:return this._onMeshOffer(i);case he.MESH_ANSWER:return this._onMeshAnswer(i);case he.MESH_ABORT:return this._onMeshAbort(i);case he.CALL:return this._onCall(i);case he.PROBE:return r?void 0:this._onProbe(e,i);case he.INVITE:return;default:return}}async _onRelay(e,n){let r=Ce(String(n.to||"")),i=n.inner;if(!ir(i)||i.type===he.RELAY)return;if(r===this.selfFp)return this.handleFrame(e,i,{relayed:!0});if(n.hopped===!0)return;let c=this.members.get(r);!c||c.state!==de.LINKED||!c.sessionId||await this._wire(c.sessionId,{...n,hopped:!0})}async _onLeave(e){let n=Ce(String(e.fp||"")),r=this.members.get(n);if(!(!r||n===this.selfFp)){if(this._emit("left",{fp:n,name:r.name}),this._dropFromCall(n),!this.isAdmin&&n===this.adminFp){this.members.delete(n);for(let[i,c]of[...this.sessionToFp])c===n&&this.sessionToFp.delete(i);this._emit("ended",{reason:"admin_left"});return}if(this.isAdmin){this.members.delete(n);for(let[i,c]of[...this.sessionToFp])c===n&&this.sessionToFp.delete(i);if(this._emitMembers(),this.members.sizeF.MAX_MEMBERS)throw new K(`a group is limited to ${F.MAX_MEMBERS} members`,"too_many_members");for(let d of e)if(this.sessionToFp.has(d.sessionId))throw new K("that chat is already a member of this group","already_a_member");this._pendingAdd={op:Rn.ADD,epoch:this.epoch+1,before:new Set(this.members.keys())};for(let d of e)this._awaitingHello.set(d.sessionId,d.name||"Member");let n={type:he.INVITE,gid:this.groupId,epoch:this._pendingAdd.epoch,name:this.name,adminSpki:$e(this.identity.spki)},r=this._pendingAdd,i=await Promise.allSettled(e.map(d=>this._wire(d.sessionId,n))),c=i.filter(d=>d.status==="fulfilled").length;if(c===0){for(let d of e)this._awaitingHello.delete(d.sessionId);throw this._pendingAdd===r&&(this._pendingAdd=null),new K("the invitation could not be sent \u2014 that chat is not connected","invitations_could_not_be_sent")}return e.forEach((d,h)=>{i[h].status==="rejected"&&this._awaitingHello.delete(d.sessionId)}),this._pendingAdd===r&&this._timer(()=>{this._pendingAdd===r&&this._finishAdd()},In.HELLO_MS),c}async _finishAdd(){let e=this._pendingAdd;return e?(this._pendingAdd=null,this._awaitingHello.clear(),[...this.members.keys()].filter(r=>!e.before.has(r)).length===0?(this._emit("add_failed",{reason:"nobody_joined"}),!1):(this.epoch=e.epoch,this._emitMembers(),await this.publishRoster(e.op),!0)):!1}async removeMember(e){if(!this.isAdmin)throw new K("only the admin removes members","not_admin");if(e===this.selfFp)throw new K("the admin cannot remove themselves","bad_target");if(!this.members.has(e))return!1;if(this.members.size-1/rate limit/i.test(t?.message||"");function Bi({getManager:t,gapMs:e=260,attempts:n=4,now:r=()=>Date.now(),sleep:i=c=>new Promise(d=>setTimeout(d,c))}={}){let c=new Map;return async function(h,m){let v=t(h);if(!v||typeof v.sendMessage!="function")throw new Error("no such link");if(typeof v.isConnected=="function"&&!v.isConnected())throw new Error("link is down");let S=c.get(h)||{chain:Promise.resolve(),lastAt:0},p=JSON.stringify(m),k=S.chain.then(async()=>{let y=e-(r()-S.lastAt);y>0&&await i(y);let I=null;for(let z=0;z{}),c.set(h,S),k}}var qn={move:{damping:1,response:.4},drawer:{damping:.8,response:.3},rotate:{damping:.8,response:.4}},So=1/480,Eo=.064;function ar(){try{return typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function Ro(t,e=.998){return t/1e3*e/(1-e)}function zi(t,e,n,r={}){let{flick:i=220,decelerationRate:c=.998}=r;if(!n||!n.length)return t;let d=t+Ro(e,c),h=n;if(Math.abs(e)>i){let m=n.filter(v=>e>0?v>=t:v<=t);m.length&&(h=m)}return h.reduce((m,v)=>Math.abs(v-d)2&&r-e[0].time>t;)e.shift()},get(n=performance.now()){if(e.length<2)return 0;let r=e[e.length-1];if(n-r.time>t)return 0;let i=e[0],c=(r.time-i.time)/1e3;return c<=0?0:(r.value-i.value)/c},reset(){e.length=0}}}function Gi(t){let{from:e,to:n,velocity:r=0,damping:i=qn.move.damping,response:c=qn.move.response,restDelta:d=.1,restSpeed:h=.5,respectReducedMotion:m=!0,onUpdate:v,onComplete:S}=t,p=e,k=r,y=n,I=0,z=0,N=!1,ce=2*Math.PI/c,ee=i,ge=()=>{N=!0,I=0,p=y,k=0,v&&v(p),S&&S()};if(m&&ar())return ge(),{get value(){return p},get velocity(){return 0},get done(){return!0},retarget(C){y=C,ge()},stop(){}};let we=C=>{I=0;let O=Math.min((C-z)/1e3,Eo);z=C;let j=O;for(;j>0;){let P=Math.min(So,j),U=-ce*ce*(p-y)-2*ee*ce*k;k+=U*P,p+=k*P,j-=P}if(Math.abs(p-y){let[t]=React.useState(()=>typeof window>"u"||!window.location||ci()?null:li({pathname:window.location.pathname||"/",languages:window.navigator?.languages||[],stored:as()})),[e,n]=React.useState(!1),[r,i]=React.useState(!1);if(React.useEffect(()=>{if(!t)return;let I=setTimeout(()=>i(!0),600);return()=>clearTimeout(I)},[t]),!t||e)return null;let c=wr[t]||{},d=c.dir==="rtl"?"rtl":"ltr",h=typeof window<"u"?window.location.pathname:"/",m=si(t,h),v=ar(),S=()=>{os(),n(!0)},p=React.createElement("div",{key:"line",lang:c.htmlLang||t,dir:d,style:{fontSize:"13px",lineHeight:1.45,color:"var(--sb-text-4)",textAlign:"start"}},a("language.suggest.text",null,t)),k=React.createElement("a",{key:"cta",href:m,hrefLang:c.htmlLang||t,lang:c.htmlLang||t,dir:d,onClick:()=>{ii(t),os()},style:{display:"inline-flex",alignItems:"center",gap:"6px",padding:"7px 12px",borderRadius:"9px",border:"1px solid rgba(var(--sb-orange-rgb), 0.30)",background:"rgba(var(--sb-orange-rgb), 0.12)",color:"var(--sb-orange)",fontSize:"12.5px",fontWeight:600,textDecoration:"none",whiteSpace:"nowrap"}},a("language.suggest.cta",null,t)),y=React.createElement("button",{key:"dismiss",type:"button",onClick:S,"aria-label":a("language.suggest.dismiss",null,t),style:{padding:"7px 10px",borderRadius:"9px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"rgba(var(--sb-ink), 0.02)",color:"var(--sb-text-7)",font:"inherit",fontSize:"12.5px",fontWeight:500,cursor:"pointer",whiteSpace:"nowrap"}},a("language.suggest.dismiss",null,t));return React.createElement("div",{role:"region","aria-label":a("language.label"),style:{position:"fixed",bottom:"24px",insetInlineStart:"24px",zIndex:50,maxWidth:"min(340px, calc(100vw - 48px))",display:"flex",flexDirection:"column",gap:"11px",padding:"14px 16px",borderRadius:"14px",border:"1px solid rgba(var(--sb-ink), 0.08)",background:"var(--sb-surface)",boxShadow:"0 16px 40px rgba(var(--sb-shadow-rgb), calc(0.5 * var(--sb-shadow-k)))",opacity:r?1:0,transform:r||v?"none":"translateY(10px)",transition:v?"opacity .2s linear":"opacity .3s ease, transform .3s cubic-bezier(.2,.7,.3,1)",pointerEvents:r?"auto":"none"}},[p,React.createElement("div",{key:"actions",style:{display:"flex",alignItems:"center",gap:"8px"}},[k,y])])};window.LanguageSuggestion=ws;var R=(...t)=>React.createElement(...t),_={bg:"var(--sb-bg-deep)",panel:"var(--sb-surface)",panel2:"var(--sb-surface-2)",line:"rgba(var(--sb-ink), 0.07)",line2:"rgba(var(--sb-ink), 0.13)",ink:"var(--sb-text-1)",ink2:"var(--sb-text-5b)",ink3:"var(--sb-text-9)",accent:"var(--sb-orange)",good:"var(--sb-green)",warn:"var(--sb-yellow-2)",bad:"var(--sb-red)",accentSolid:"var(--sb-orange-solid)",goodSolid:"var(--sb-green-solid)",warnSolid:"var(--sb-yellow-2-solid)",badSolid:"var(--sb-red-solid)",mono:"'JetBrains Mono', ui-monospace, monospace"},on={users:'',send:'',shield:'',x:'',plus:'',relay:'',phone:'',exit:'',video:''},cn=(t,e={})=>R("span",{style:{display:"grid",placeItems:"center",...e},dangerouslySetInnerHTML:{__html:t}}),ht=(t=!1)=>({display:"inline-flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"11px 18px",borderRadius:"10px",cursor:"pointer",fontFamily:"inherit",fontSize:"14px",fontWeight:700,border:t?"none":`1px solid ${_.line2}`,background:t?_.accentSolid:"transparent",color:t?"var(--sb-on-accent)":_.ink2}),or={position:"fixed",inset:0,zIndex:90,display:"grid",placeItems:"center",background:"rgba(var(--sb-scrim-rgb), 0.72)",backdropFilter:"blur(6px)",padding:"20px"},cr={width:"100%",maxWidth:"440px",background:_.panel,border:`1px solid ${_.line}`,borderRadius:"16px",padding:"24px",display:"flex",flexDirection:"column",gap:"18px",boxShadow:"0 24px 60px rgba(var(--sb-shadow-rgb), calc(0.5 * var(--sb-shadow-k)))"};function _o(t,e){let n=new TextEncoder,r=String(t);for(;n.encode(r).length>e;)r=r.slice(0,-1);return r}var An={fontFamily:_.mono,fontSize:"10px",fontWeight:700,letterSpacing:"1.3px",textTransform:"uppercase",color:_.ink3};function Co(t){switch(t.phase){case Y.FORMING:return a("group.waitingJoin");case Y.COMMITTING:return a("group.waitingCommit");case Y.REVEALING:return a("group.exchangingNonces");case Y.FAILED:return Io[t.error]||a("group.errNotFormed");default:return a("group.working")}}var Io={invitations_could_not_be_sent:a("group.errInviteFailed"),invitees_did_not_respond:a("group.errNobodyAccepted"),roster_never_arrived:a("group.errNoMemberList"),ceremony_timed_out:a("groupErr.timeout"),bad_signature:a("group.errUnsignedList"),wrong_admin:a("group.errNotOwner"),fingerprint_mismatch:a("groupErr.keyMismatch"),commitment_mismatch:a("groupErr.revealMismatch"),commitment_changed:a("groupErr.commitChanged"),missing_member_key:a("groupErr.missingKey"),not_a_member:a("groupErr.outsider"),bad_name:a("group.nameTooLong"),too_many_members:a("groupErr.limit"),frame_too_large:a("groupErr.tooLarge")};function Hi({group:t,onConfirm:e,onCancel:n}){if(!t)return null;let r=t.phase===Y.FAILED,i=t.phase!==Y.AWAITING_SAS||!t.sasCode;return R("div",{style:or,role:"dialog","aria-modal":"true"},R("div",{style:cr},[R("div",{key:"h",style:{display:"flex",flexDirection:"column",gap:"6px"}},[R("span",{key:"l",style:An},a("group.sasTitle")),R("h3",{key:"t",style:{margin:0,fontSize:"19px",fontWeight:700,color:_.ink}},t.name)]),i?R("div",{key:"wait",style:{padding:"28px 16px",textAlign:"center",borderRadius:"12px",background:_.panel2,border:`1px solid ${_.line}`,color:_.ink2,fontSize:"14px"}},[R("div",{key:"d",style:{fontFamily:_.mono,fontSize:"26px",letterSpacing:"6px",color:r?_.bad:_.ink3}},"\xB7\xB7\xB7\xB7\xB7\xB7\xB7"),R("div",{key:"s",style:{marginTop:"10px",color:r?_.bad:_.ink2}},Co(t)),r&&R("div",{key:"why",style:{marginTop:"6px",fontFamily:_.mono,fontSize:"11px",color:_.ink3}},t.error||"unknown")]):R("div",{key:"code",style:{padding:"22px 16px",textAlign:"center",borderRadius:"12px",background:"rgba(var(--sb-orange-rgb), 0.09)",border:"1px solid rgba(var(--sb-orange-rgb), 0.3)"}},R("span",{dir:"ltr",style:{fontFamily:_.mono,fontSize:"clamp(30px, 9vw, 42px)",fontWeight:700,letterSpacing:"9px",color:_.accentSolid,unicodeBidi:"isolate"}},t.sasCode)),R("p",{key:"why",style:{margin:0,fontSize:"13.5px",lineHeight:1.62,color:_.ink2}},[a("group.sasReadAloud"),R("b",{key:"b",style:{color:_.ink}},`all ${t.members.length-1} other members`)," \u2014 in person, or on a call where you recognise every voice. Everyone must see the same code."]),R("p",{key:"warn",style:{margin:0,padding:"11px 13px",borderRadius:"9px",fontSize:"12.5px",lineHeight:1.55,background:"rgba(var(--sb-red-rgb), 0.09)",border:"1px solid rgba(var(--sb-red-rgb), 0.26)",color:"var(--sb-red-soft)"}},r?a("group.errNothingSent"):a("group.sasWarning")),R("div",{key:"actions",style:{display:"flex",gap:"10px"}},[R("button",{key:"c",onClick:n,style:{...ht(r),flex:r?2:1}},r?a("group.close"):a("group.cancel")),!r&&R("button",{key:"ok",onClick:e,disabled:i,style:{...ht(!0),flex:2,opacity:i?.4:1,cursor:i?"not-allowed":"pointer"}},[cn(on.shield,{key:"i"}),a("group.sasEveryone")])])]))}function Wi({candidates:t,relayOnly:e,onCreate:n,onCancel:r}){let[i,c]=React.useState(""),[d,h]=React.useState([]),m=F.MAX_MEMBERS-1,v=p=>h(k=>k.includes(p)?k.filter(y=>y!==p):k.length>=m?k:[...k,p]),S=i.trim().length>0&&d.length>=1;return R("div",{style:or,role:"dialog","aria-modal":"true"},R("div",{style:{...cr,maxWidth:"470px"}},[R("div",{key:"h",style:{display:"flex",flexDirection:"column",gap:"6px"}},[R("span",{key:"l",style:An},a("group.new")),R("p",{key:"p",style:{margin:0,fontSize:"13.5px",lineHeight:1.6,color:_.ink2}},a("group.capacity",{max:F.MAX_MEMBERS}))]),R("input",{key:"name",value:i,onChange:p=>c(_o(p.target.value,F.MAX_NAME_BYTES)),placeholder:a("group.name"),style:{width:"100%",padding:"12px 14px",borderRadius:"10px",outline:"none",background:_.panel2,border:`1px solid ${_.line2}`,color:_.ink,fontFamily:"inherit",fontSize:"14.5px"}}),R("div",{key:"pick",style:{display:"flex",flexDirection:"column",gap:"9px"}},[R("div",{key:"l",style:{display:"flex",justifyContent:"space-between",alignItems:"baseline"}},[R("span",{key:"a",style:An},a("group.members")),R("span",{key:"b",style:{...An,color:d.length>=m?_.warn:_.ink3}},`${d.length} / ${m}`)]),t.length===0?R("div",{key:"empty",style:{padding:"18px 14px",borderRadius:"10px",textAlign:"center",background:_.panel2,border:`1px dashed ${_.line2}`,color:_.ink3,fontSize:"13px",lineHeight:1.55}},a("group.noVerified")):R("div",{key:"list",className:"msc-scroll",style:{display:"flex",flexDirection:"column",gap:"6px",maxHeight:"240px",overflowY:"auto"}},t.map(p=>{let k=d.includes(p.id),y=!k&&d.length>=m;return R("button",{key:p.id,onClick:()=>v(p.id),disabled:y,style:{display:"flex",alignItems:"center",gap:"11px",padding:"10px 12px",borderRadius:"10px",cursor:y?"not-allowed":"pointer",textAlign:"start",background:k?"rgba(var(--sb-orange-rgb), 0.1)":"transparent",border:`1px solid ${k?"rgba(var(--sb-orange-rgb), 0.32)":_.line}`,opacity:y?.4:1,fontFamily:"inherit"}},[R("span",{key:"av",style:{flex:"none",width:"32px",height:"32px",borderRadius:"9px",display:"grid",placeItems:"center",background:_.panel2,border:`1px solid ${_.line}`,fontFamily:_.mono,fontSize:"11px",fontWeight:700,color:_.ink2}},p.mono),R("span",{key:"n",style:{flex:1,minWidth:0,fontSize:"14px",color:_.ink,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},p.name),R("span",{key:"tick",style:{flex:"none",width:"18px",height:"18px",borderRadius:"5px",background:k?_.accentSolid:"transparent",border:`1px solid ${k?_.accentSolid:_.line2}`}})])}))]),!e&&R("p",{key:"ip",style:{margin:0,padding:"11px 13px",borderRadius:"9px",fontSize:"12.5px",lineHeight:1.55,background:"rgba(var(--sb-yellow-2-rgb), 0.08)",border:"1px solid rgba(var(--sb-yellow-2-rgb), 0.26)",color:"var(--sb-yellow-2)"}},a("group.relayOnlyOff")),R("div",{key:"actions",style:{display:"flex",gap:"10px"}},[R("button",{key:"c",onClick:r,style:{...ht(!1),flex:1}},a("group.cancelBtn")),R("button",{key:"ok",onClick:()=>S&&n({name:i.trim(),sessionIds:d}),disabled:!S,style:{...ht(!0),flex:2,opacity:S?1:.4,cursor:S?"pointer":"not-allowed"}},a("group.create"))])]))}function Vi({message:t,onDismiss:e}){return t?R("div",{style:or,role:"alertdialog","aria-modal":"true"},R("div",{style:{...cr,maxWidth:"400px"}},[R("span",{key:"l",style:An},a("group.errNotCreated")),R("p",{key:"m",style:{margin:0,fontSize:"14px",lineHeight:1.6,color:_.ink2}},t),R("button",{key:"ok",onClick:e,style:ht(!0)},a("group.close"))])):null}function ji({candidates:t,remaining:e,onAdd:n,onCancel:r}){let[i,c]=React.useState([]),d=h=>c(m=>m.includes(h)?m.filter(v=>v!==h):m.length>=e?m:[...m,h]);return R("div",{style:or,role:"dialog","aria-modal":"true"},R("div",{style:{...cr,maxWidth:"440px"}},[R("div",{key:"h",style:{display:"flex",flexDirection:"column",gap:"6px"}},[R("span",{key:"l",style:An},a("group.addMembers")),R("p",{key:"p",style:{margin:0,fontSize:"13.5px",lineHeight:1.6,color:_.ink2}},e>0?a("group.roomFor",{remaining:e}):a("group.errFull"))]),t.length===0?R("div",{key:"empty",style:{padding:"18px 14px",borderRadius:"10px",textAlign:"center",background:_.panel2,border:`1px dashed ${_.line2}`,color:_.ink3,fontSize:"13px",lineHeight:1.55}},a("group.noMoreToAdd")):R("div",{key:"list",className:"msc-scroll",style:{display:"flex",flexDirection:"column",gap:"6px",maxHeight:"260px",overflowY:"auto"}},t.map(h=>{let m=i.includes(h.id),v=!m&&i.length>=e;return R("button",{key:h.id,onClick:()=>d(h.id),disabled:v,style:{display:"flex",alignItems:"center",gap:"11px",padding:"10px 12px",borderRadius:"10px",cursor:v?"not-allowed":"pointer",textAlign:"start",background:m?"rgba(var(--sb-orange-rgb), 0.1)":"transparent",border:`1px solid ${m?"rgba(var(--sb-orange-rgb), 0.32)":_.line}`,opacity:v?.4:1,fontFamily:"inherit"}},[R("span",{key:"av",style:{flex:"none",width:"32px",height:"32px",borderRadius:"9px",display:"grid",placeItems:"center",background:_.panel2,border:`1px solid ${_.line}`,fontFamily:_.mono,fontSize:"11px",fontWeight:700,color:_.ink2}},h.mono),R("span",{key:"n",style:{flex:1,minWidth:0,fontSize:"14px",color:_.ink,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},h.name),R("span",{key:"tick",style:{flex:"none",width:"18px",height:"18px",borderRadius:"5px",background:m?_.accentSolid:"transparent",border:`1px solid ${m?_.accentSolid:_.line2}`}})])})),R("p",{key:"note",style:{margin:0,padding:"11px 13px",borderRadius:"9px",fontSize:"12.5px",lineHeight:1.55,background:_.panel2,border:`1px solid ${_.line}`,color:_.ink3}},a("group.inviteSentNote")),R("div",{key:"actions",style:{display:"flex",gap:"10px"}},[R("button",{key:"c",onClick:r,style:{...ht(!1),flex:1}},a("group.cancelBtn")),R("button",{key:"ok",onClick:()=>i.length&&n(i),disabled:i.length===0,style:{...ht(!0),flex:2,opacity:i.length?1:.4,cursor:i.length?"pointer":"not-allowed"}},i.length>1?a("group.invitePeople",{count:i.length}):a("group.invite"))])]))}function $i({invite:t,onAccept:e,onDecline:n}){return t?R("div",{style:or,role:"dialog","aria-modal":"true"},R("div",{style:cr},[R("div",{key:"h",style:{display:"flex",flexDirection:"column",gap:"6px"}},[R("span",{key:"l",style:An},a("group.invitation")),R("h3",{key:"t",style:{margin:0,fontSize:"19px",fontWeight:700,color:_.ink}},t.name)]),R("p",{key:"p",style:{margin:0,fontSize:"13.5px",lineHeight:1.62,color:_.ink2}},[R("b",{key:"b",style:{color:_.ink}},t.fromLabel)," invited you to a peer-to-peer group. You will compare one safety code with every member before anything is sent."]),R("p",{key:"note",style:{margin:0,padding:"11px 13px",borderRadius:"9px",fontSize:"12.5px",lineHeight:1.55,background:_.panel2,border:`1px solid ${_.line}`,color:_.ink3}},a("group.joinNote")),R("div",{key:"actions",style:{display:"flex",gap:"10px"}},[R("button",{key:"d",onClick:n,style:{...ht(!1),flex:1}},a("group.decline")),R("button",{key:"a",onClick:e,style:{...ht(!0),flex:2}},a("group.join"))])])):null}function Ao({group:t,onRemove:e,isAdmin:n}){return R("div",{className:"msc-scroll",style:{display:"flex",gap:"7px",padding:"9px 16px",overflowX:"auto",borderBottom:`1px solid ${_.line}`,flex:"none"}},t.members.map(r=>{let i=r.state===de.SELF,c=r.state===de.LOST,d=i||r.state===de.LINKED?_.goodSolid:r.state===de.PENDING?_.warnSolid:_.badSolid,h=r.state===de.PENDING;return R("span",{key:r.fp,title:i?"You":r.state===de.LINKED?a("group.directLink"):r.state===de.PENDING?a("group.noDirectLink"):a("group.memberOffline",{name:r.name}),style:{flex:"none",display:"inline-flex",alignItems:"center",gap:"6px",padding:"5px 10px",borderRadius:"20px",background:c?"transparent":_.panel2,border:`1px solid ${c?"rgba(var(--sb-red-rgb), 0.3)":_.line}`,fontSize:"12.5px",color:i?_.ink:c?_.ink3:_.ink2,opacity:c?.75:1}},[R("span",{key:"d",style:{width:"7px",height:"7px",borderRadius:"50%",background:d}}),R("span",{key:"n",style:c?{textDecoration:"line-through"}:void 0},i?"You":r.name),c&&R("span",{key:"off",style:{fontFamily:_.mono,fontSize:"10px",color:_.bad,letterSpacing:"0.04em"}},"offline"),h&&cn(on.relay,{key:"r",color:_.warn}),n&&!i&&e&&R("button",{key:"x",onClick:()=>e(r.fp),title:a("group.remove",{name:r.name}),style:{border:"none",background:"transparent",color:_.ink3,cursor:"pointer",display:"grid",padding:0},dangerouslySetInnerHTML:{__html:''}})])}))}function Mo({msg:t}){let e=t.type==="sent";return t.type==="system"?R("div",{style:{alignSelf:"center",maxWidth:"80%",textAlign:"center",padding:"6px 12px",borderRadius:"9px",background:_.panel2,border:`1px solid ${_.line}`,fontSize:"12px",color:_.ink3,lineHeight:1.5}},t.message):R("div",{style:{alignSelf:e?"flex-end":"flex-start",maxWidth:"min(74%, 560px)",display:"flex",flexDirection:"column",gap:"3px"}},[!e&&R("span",{key:"who",style:{fontSize:"11.5px",fontWeight:600,color:_.accent,paddingInlineStart:"3px"}},t.senderName||a("group.member")),R("div",{key:"b",style:{padding:"9px 13px",borderRadius:e?"13px 13px 4px 13px":"13px 13px 13px 4px",background:e?"rgba(var(--sb-orange-rgb), 0.14)":_.panel2,border:`1px solid ${e?"rgba(var(--sb-orange-rgb), 0.26)":_.line}`,color:_.ink,fontSize:"14.5px",lineHeight:1.5,wordBreak:"break-word",whiteSpace:"pre-wrap"}},t.message),R("span",{key:"t",style:{fontFamily:_.mono,fontSize:"10px",color:_.ink3,alignSelf:e?"flex-end":"flex-start",padding:"0 3px"}},[new Date(t.timestamp||Date.now()).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),t.relayed?" \xB7 relayed":""].join(""))])}function qi({group:t,input:e,setInput:n,onSend:r,onLeave:i,onRemoveMember:c,onAddMembers:d,isAdmin:h,scrollRef:m,onStartCall:v,callActive:S,callOverlay:p}){let k=t.phase===Y.READY&&t.sasConfirmed,y=t.members.some(z=>z.state===de.PENDING),I=z=>{z.preventDefault(),!(!k||!e.trim())&&r(e)};return R("div",{style:{position:"relative",display:"flex",flexDirection:"column",height:"100%",minHeight:0,background:_.bg}},[R("style",{key:"head-css",dangerouslySetInnerHTML:{__html:"@media (max-width:1023px){.sb-group-header{padding-inline-start:58px !important;gap:9px !important;}}@media (max-width:600px){.sb-group-header .sb-gh-label{display:none !important;}.sb-group-header .sb-gh-btn{padding:8px 10px !important;}}"}}),R("div",{key:"head",className:"sb-group-header",style:{flex:"none",display:"flex",alignItems:"center",gap:"12px",padding:"var(--sb-safe-top, 0px) 16px 0",minHeight:"calc(64px + var(--sb-safe-top, 0px))",borderBottom:`1px solid ${_.line}`}},[R("span",{key:"av",style:{flex:"none",width:"38px",height:"38px",borderRadius:"11px",display:"grid",placeItems:"center",background:"rgba(var(--sb-orange-rgb), 0.12)",border:"1px solid rgba(var(--sb-orange-rgb), 0.24)",color:_.accent,fontFamily:_.mono,fontSize:"12px",fontWeight:700}},bs(t.name)),R("div",{key:"meta",style:{flex:1,minWidth:0}},[R("div",{key:"n",style:{fontSize:"15px",fontWeight:700,color:_.ink,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},t.name),R("div",{key:"s",style:{fontSize:"11.5px",color:y?_.warn:_.ink3,display:"flex",alignItems:"center",gap:"5px"}},[cn(on.users,{key:"i",width:"13px",height:"13px"}),a("group.membersCount",{count:t.members.length}),k&&t.sasCode?R("span",{key:"code",dir:"ltr",style:{unicodeBidi:"isolate"}},a("group.codeSuffix",{code:t.sasCode})):""])]),k&&v&&R("button",{key:"callvoice",className:"sb-gh-btn",onClick:()=>v(!1),disabled:S,title:a("groupCall.startVoice"),"aria-label":a("groupCall.startVoice"),style:{...ht(!1),flex:"none",padding:"8px 10px",opacity:S?.4:1,cursor:S?"default":"pointer"}},cn(on.phone,{key:"i"})),k&&v&&R("button",{key:"callvideo",className:"sb-gh-btn",onClick:()=>v(!0),disabled:S,title:a("groupCall.startVideo"),"aria-label":a("groupCall.startVideo"),style:{...ht(!1),flex:"none",padding:"8px 10px",opacity:S?.4:1,cursor:S?"default":"pointer"}},cn(on.video,{key:"i"})),h&&d&&t.members.lengthR(Mo,{key:z.id,msg:z}))),R("form",{key:"composer",onSubmit:I,style:{flex:"none",display:"flex",gap:"9px",padding:"12px 16px",borderTop:`1px solid ${_.line}`,alignItems:"flex-end"}},[R("input",{key:"in",value:e,onChange:z=>n(z.target.value),placeholder:k?a("group.message",{name:t.name}):a("group.confirmFirst"),disabled:!k,maxLength:F.MAX_BODY_BYTES,style:{flex:1,minWidth:0,padding:"12px 14px",borderRadius:"11px",outline:"none",background:_.panel2,border:`1px solid ${_.line2}`,color:_.ink,fontFamily:"inherit",fontSize:"14.5px",opacity:k?1:.5}}),R("button",{key:"send",type:"submit",disabled:!k||!e.trim(),title:a("group.send"),style:{...ht(!0),flex:"none",width:"44px",height:"44px",padding:0,borderRadius:"11px",opacity:!k||!e.trim()?.4:1}},cn(on.send))]),p])}var Ue=Object.freeze({UNREACHABLE:"unreachable",CONNECTING:"connecting",ACTIVE:"active",FAILED:"failed"}),To={idle:Ue.CONNECTING,outgoing:Ue.CONNECTING,incoming:Ue.CONNECTING,connecting:Ue.CONNECTING,active:Ue.ACTIVE,ended:Ue.FAILED},Tr=Object.freeze({ON:.05,OFF:.025,HOLD_MS:600,SAMPLE_MS:120}),No=8e3;function Do(t,e){if(!t||!e)return null;let n;try{n=t.createMediaStreamSource(e)}catch{return null}let r=t.createAnalyser();r.fftSize=512,r.smoothingTimeConstant=.2,n.connect(r);let i=new Uint8Array(r.fftSize);return{read(){r.getByteTimeDomainData(i);let c=0;for(let d=0;d{},log:d=()=>{}}){this._getManager=e,this._getUserMedia=n||(h=>navigator.mediaDevices.getUserMedia(h)),this._createAudioSink=r||(()=>typeof Audio=="function"?new Audio:null),this._createLevelMeter=i||(h=>Do(this._audioContext(),h)),this._onChange=c,this._log=d,this.callId=null,this.selfFp="",this.withVideo=!1,this.micEnabled=!0,this.cameraEnabled=!1,this.facingMode="user",this.error=null,this.localStream=null,this._legs=new Map,this._peers=[],this._busy=!1,this._ctx=null,this._selfMeter=null,this.selfSpeaking=!1,this._selfQuietSince=0,this._levelTimer=null}_audioContext(){if(this._ctx)return this._ctx;let e=typeof AudioContext<"u"?AudioContext:typeof webkitAudioContext<"u"?webkitAudioContext:null;if(!e)return null;try{this._ctx=new e,this._ctx.state==="suspended"&&this._ctx.resume().catch(()=>{})}catch{this._ctx=null}return this._ctx}get active(){return this.callId!==null}async join({callId:e,selfFp:n,withVideo:r=!1,peers:i=[]}){if(this.callId===e){this.setPeers(i);return}this.callId&&await this.leave(),this.callId=e,this.selfFp=n,this.withVideo=r===!0,this.micEnabled=!0,this.cameraEnabled=this.withVideo,this.error=null,this._changed();try{this.localStream=await this._getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},video:this.withVideo?{facingMode:this.facingMode,width:{ideal:1280},height:{ideal:720}}:!1})}catch(c){throw this.callId=null,this.error=lr(c),this._changed(),c}this._selfMeter=this._createLevelMeter(this.localStream),this._startLevelPolling(),this.setPeers(i)}setPeers(e){if(this._peers=Array.isArray(e)?e:[],!this.active)return;let n=new Map;for(let r of this._peers)!r||!r.fp||r.fp===this.selfFp||n.set(r.fp,r);for(let[r,i]of[...this._legs]){let c=n.get(r);(!c||c.sessionId!==i.sessionId)&&this._detach(r)}for(let[r,i]of n){let c=this._legs.get(r);if(c){c.state===Ue.FAILED&&this._weDial(r)&&this._dial(c);continue}i.sessionId&&this._attach(r,i)}this._changed()}async leave(){if(this._stopLevelPolling(),this._selfMeter){try{this._selfMeter.close?.()}catch{}this._selfMeter=null}this.selfSpeaking=!1;for(let e of[...this._legs.keys()])this._detach(e);if(this._ctx){try{this._ctx.close?.()}catch{}this._ctx=null}if(this.localStream)for(let e of this.localStream.getTracks())try{e.stop()}catch{}this.localStream=null,this.callId=null,this.selfFp="",this.withVideo=!1,this.cameraEnabled=!1,this.micEnabled=!0,this._peers=[],this._changed()}_weDial(e){return this.selfFpthis._onLegState(e,c))),this._onLegState(e,r.getCallState?.()||{}),this._weDial(e)){this._dial(i);return}i.fallback=setTimeout(()=>this._dialFallback(e),No)}_dialFallback(e){let n=this._legs.get(e);!n||!this.active||(n.fallback=null,(n.manager.getCallState?.().phase||"idle")!=="idle")||(this._log("info","group call leg was never dialled by the peer; dialling it",{}),Promise.resolve().then(()=>n.manager.startCall(this.withVideo)).catch(()=>{let i=this._legs.get(e);i===n&&(i.state=Ue.FAILED,this._changed())}))}_dial(e){(e.manager.getCallState?.().phase||"idle")==="idle"&&(e.state=Ue.CONNECTING,Promise.resolve().then(()=>e.manager.startCall(this.withVideo)).catch(r=>{this._log("warn","group call leg could not be placed",{errorType:r?.constructor?.name});let i=this._legs.get(e.fp);i===e&&(i.state=Ue.FAILED,this._changed())}))}_detach(e){let n=this._legs.get(e);if(n){this._legs.delete(e),n.fallback&&(clearTimeout(n.fallback),n.fallback=null);try{n.unsubscribe?.()}catch{}if(n.sink){try{n.sink.pause?.()}catch{}try{n.sink.srcObject=null}catch{}}if(n.meter){try{n.meter.close?.()}catch{}n.meter=null}try{n.manager.endCall?.()}catch{}try{n.manager.setExternalMediaStream?.(null)}catch{}try{n.manager.setCallGroupContext?.(null)}catch{}}}_onLegState(e,n){let r=this._legs.get(e);if(!r)return;let i=n?.phase||"idle";r.fallback&&i!=="idle"&&(clearTimeout(r.fallback),r.fallback=null),r.state=To[i]||Ue.CONNECTING,r.quality=n?.quality||null,r.hasVideo=n?.remoteHasVideo===!0,this._pumpAudio(r),this._changed()}_pumpAudio(e){if(!e.sink)return;let n=null;try{n=e.manager.getRemoteMediaStream?.()||null}catch{return}if(!(!n||e.sink.srcObject===n)){try{e.sink.srcObject=n;let r=e.sink.play?.();r&&r.catch&&r.catch(()=>{})}catch{}if(e.meter)try{e.meter.close?.()}catch{}e.meter=this._createLevelMeter(n),e.speaking=!1}}_startLevelPolling(){this._levelTimer||typeof setInterval!="function"||(this._levelTimer=setInterval(()=>this._sampleLevels(),Tr.SAMPLE_MS))}_stopLevelPolling(){this._levelTimer&&(clearInterval(this._levelTimer),this._levelTimer=null)}_applyLevel(e,n,r,i,c){let d=e[n]===!0;return i>=Tr.ON?(e[r]=0,d?!1:(e[n]=!0,!0)):d?i>Tr.OFF?(e[r]=0,!1):e[r]?c-e[r]>=Tr.HOLD_MS?(e[n]=!1,!0):!1:(e[r]=c,!1):!1}_sampleLevels(){if(!this.active)return;let e=Date.now(),n=!1,r=this.micEnabled&&this._selfMeter?Yi(this._selfMeter):0;this._applyLevel(this,"selfSpeaking","_selfQuietSince",r,e)&&(n=!0);for(let i of this._legs.values()){let c=i.meter?Yi(i.meter):0;this._applyLevel(i,"speaking","quietSince",c,e)&&(n=!0)}n&&this._changed()}setMic(e){if(this.micEnabled=e!==!1,this.localStream)for(let n of this.localStream.getAudioTracks())n.enabled=this.micEnabled;this.micEnabled||(this.selfSpeaking=!1,this._selfQuietSince=0);for(let n of this._legs.values())try{n.manager.setMicEnabled?.(this.micEnabled)}catch{}this._changed()}toggleMic(){this.setMic(!this.micEnabled)}async setCamera(e){if(!this.active||this._busy)return;if(e===!1){if(this.cameraEnabled=!1,this.localStream)for(let r of this.localStream.getVideoTracks())r.enabled=!1;for(let r of this._legs.values())try{r.manager.setCameraEnabled?.(!1)}catch{}this._changed();return}let n=this.localStream?.getVideoTracks?.()||[];if(n.length){for(let r of n)r.enabled=!0;this.cameraEnabled=!0,this.withVideo=!0,this._changed();return}this._busy=!0;try{let i=(await this._getUserMedia({video:{facingMode:this.facingMode,width:{ideal:1280},height:{ideal:720}}})).getVideoTracks()[0];if(!i)return;this.localStream.addTrack(i),this.cameraEnabled=!0,this.withVideo=!0,await Promise.allSettled([...this._legs.values()].map(c=>Promise.resolve().then(()=>c.manager.addVideoTrack?.(i))))}catch(r){this.error=lr(r),this.cameraEnabled=!1}finally{this._busy=!1,this._changed()}}async toggleCamera(){await this.setCamera(!this.cameraEnabled)}async flipCamera(){if(!this.active||this._busy||!this.localStream)return;let e=this.localStream.getVideoTracks()[0];if(!e)return;this._busy=!0;let n=this.facingMode;this.facingMode=this.facingMode==="user"?"environment":"user";try{let i=(await this._getUserMedia({video:{facingMode:this.facingMode}})).getVideoTracks()[0];if(!i){this.facingMode=n;return}i.enabled=this.cameraEnabled,this.localStream.removeTrack(e);try{e.stop()}catch{}this.localStream.addTrack(i),await Promise.allSettled([...this._legs.values()].map(c=>Promise.resolve().then(()=>c.manager.replaceVideoTrack?.(i))))}catch(r){this.facingMode=n,this._log("warn","group call camera flip failed",{errorType:r?.constructor?.name})}finally{this._busy=!1,this._changed()}}getLocalStream(){return this.localStream}getRemoteStream(e){let n=this._legs.get(e);if(!n)return null;try{return n.manager.getRemoteMediaStream?.()||null}catch{return null}}snapshot(){let e=this._peers.filter(n=>n&&n.fp!==this.selfFp).map(n=>{let r=this._legs.get(n.fp);return{fp:n.fp,name:n.name||"Member",state:r?r.state:Ue.UNREACHABLE,quality:r?r.quality:null,hasVideo:r?r.hasVideo:!1,speaking:r?r.speaking===!0:!1}}).sort((n,r)=>n.fpr.fp?1:0);return{active:this.active,callId:this.callId,withVideo:this.withVideo,micEnabled:this.micEnabled,cameraEnabled:this.cameraEnabled,facingMode:this.facingMode,error:this.error,selfSpeaking:this.selfSpeaking,peers:e,connected:e.filter(n=>n.state===Ue.ACTIVE).length}}_changed(){try{this._onChange(this.snapshot())}catch{}}};function Yi(t){try{return t.read()}catch{return 0}}function lr(t){let e=t?.name||"";return e==="NotAllowedError"||e==="SecurityError"?"permission_denied":e==="NotFoundError"||e==="OverconstrainedError"?"device_not_found":e==="NotReadableError"||e==="AbortError"?"device_busy":"media_failed"}var Ki=1.7777777777777777,Fo=150;function Qi(t,e,n,{gap:r=10,aspect:i=Ki,minWidth:c=Fo}={}){if(t<=0)return{cols:0,rows:0,tileW:0,tileH:0};if(!(e>0)||!(n>0)){let h=Math.min(t,t<=2?t:Math.ceil(Math.sqrt(t)));return{cols:h,rows:Math.ceil(t/h),tileW:0,tileH:0}}let d={cols:1,rows:t,tileW:0,tileH:0};for(let h=1;h<=t;h++){let m=Math.ceil(t/h),v=(e-r*(h-1))/h,S=(n-r*(m-1))/m;if(v<=0||S<=0)continue;let p=Math.min(v,S*i);p>d.tileW&&(d={cols:h,rows:m,tileW:p,tileH:p/i})}return d.tileW0)||!(n>0))return{main:{w:0,h:0},stripH:0,thumbW:0};if(t<=0){let p=Math.min(e,n*i);return{main:{w:p,h:p/i},stripH:0,thumbW:0}}let h=Math.max(c,Math.min(d,Math.round(n*.2*i))),m=h/i,v=n-m-r,S=Math.min(e,v*i);return v<=0||SReact.createElement(...t),Mn="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",Xe={lock:'',minimize:'',expand:'',users:'',micOn:'',micOff:'',camOn:'',camOff:'',grid:'',flip:'',phone:'',phoneHangup:''},ut=(t,e,n)=>W("span",{style:{display:"grid",placeItems:"center",width:e+"px",height:e+"px"},dangerouslySetInnerHTML:{__html:`${t}`}}),Fr={width:"56px",height:"56px",borderRadius:"50%",display:"grid",placeItems:"center",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"rgba(var(--sb-ink), 0.05)",color:"var(--sb-text-4)",cursor:"pointer",transition:"all .15s"},Ji={...Fr,background:"var(--sb-red-strong-solid)",color:"#fff",border:"1px solid transparent"},Zi={width:"56px",height:"56px",borderRadius:"50%",display:"grid",placeItems:"center",border:"none",background:"var(--sb-red-strong-solid)",color:"#fff",cursor:"pointer",boxShadow:"0 8px 24px rgba(var(--sb-red-strong-rgb), 0.35)",transition:"transform .15s"},Oo={width:"36px",height:"36px",borderRadius:"9px",display:"grid",placeItems:"center",border:"1px solid rgba(var(--sb-ink), 0.15)",background:"rgba(0,0,0,0.35)",color:"#fff",cursor:"pointer",transition:"all .15s"},Po={excellent:{bars:4,color:"var(--sb-green)",solid:"var(--sb-green-solid)"},good:{bars:3,color:"var(--sb-green)",solid:"var(--sb-green-solid)"},fair:{bars:2,color:"var(--sb-yellow)",solid:"var(--sb-yellow-solid)"},poor:{bars:1,color:"var(--sb-red)",solid:"var(--sb-red-solid)"}};function Lo(t){let e=Po[t];return e?W("span",{key:"q",style:{display:"inline-flex",alignItems:"flex-end",gap:"2px",height:"12px"}},[0,1,2,3].map(n=>W("span",{key:n,style:{width:"2.5px",height:4+n*2.6+"px",borderRadius:"1px",background:n`${String(Math.floor(t/60)).padStart(2,"0")}:${String(t%60).padStart(2,"0")}`;function zo(){let[t,e]=React.useState({w:0,h:0}),[n,r]=React.useState(null);return React.useLayoutEffect(()=>{if(!n)return;let i=()=>e(d=>d.w===n.clientWidth&&d.h===n.clientHeight?d:{w:n.clientWidth,h:n.clientHeight});if(i(),typeof ResizeObserver>"u")return window.addEventListener("resize",i),()=>window.removeEventListener("resize",i);let c=new ResizeObserver(i);return c.observe(n),()=>c.disconnect()},[n]),[r,t]}function Uo({peer:t,stream:e,self:n,localStream:r,cameraEnabled:i,speaking:c,tileW:d,tileH:h,onSelect:m,pinned:v,compact:S}){let p=React.useRef(null),k=n?r:e,y=n?i:t.hasVideo;React.useEffect(()=>{let N=p.current;if(!N||!k)return;N.srcObject!==k&&(N.muted=!0,N.srcObject=k);let ce=N.play&&N.play();ce&&ce.catch&&ce.catch(()=>{})});let I=n||t.state===Ue.ACTIVE?null:t.state===Ue.UNREACHABLE?a("groupCall.waitingLink"):t.state===Ue.FAILED?a("groupCall.legFailed"):a("groupCall.connecting"),z=Math.max(44,Math.min(148,Math.round((h||180)*.42)));return W("div",{role:m?"button":void 0,tabIndex:m?0:void 0,onClick:m,onKeyDown:m?N=>{(N.key==="Enter"||N.key===" ")&&(N.preventDefault(),m())}:void 0,title:v?a("groupCall.unpin",{name:t.name}):m?a("groupCall.pin",{name:t.name}):c?a("groupCall.speaking",{name:t.name}):t.name,style:{cursor:m?"pointer":"default",position:"relative",borderRadius:"14px",overflow:"hidden",background:"var(--sb-surface)",border:c?"2px solid var(--sb-green-solid)":"2px solid rgba(var(--sb-ink), 0.08)",boxShadow:c?"0 0 0 3px rgba(var(--sb-green-rgb), 0.16)":"none",transition:"border-color .12s ease, box-shadow .12s ease",flex:d?"0 0 auto":"1 1 260px",minWidth:d?void 0:"200px",width:d?d+"px":"auto",height:h?h+"px":"auto",aspectRatio:h?void 0:"16 / 9",display:"grid",placeItems:"center"}},[y?W("video",{key:"v",ref:p,autoPlay:!0,muted:!0,playsInline:!0,style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",transform:n?"scaleX(-1)":"none",background:"var(--sb-bg)"}}):W("div",{key:"av",style:{width:z+"px",height:z+"px",borderRadius:"50%",display:"grid",placeItems:"center",background:"radial-gradient(circle at 35% 30%, var(--sb-surface-4), var(--sb-surface))",border:c?"1.5px solid rgba(var(--sb-green-rgb), 0.65)":"1px solid rgba(var(--sb-ink), 0.1)",color:c?"var(--sb-green)":"var(--sb-text-4)",fontFamily:Mn,fontSize:Math.round(z*.3)+"px",fontWeight:700,transition:"color .12s ease, border-color .12s ease"}},Bo(t.name)),W("div",{key:"label",style:{position:"absolute",insetInline:0,bottom:0,display:"flex",alignItems:"center",gap:S?"4px":"7px",padding:S?"4px 6px":"8px 10px",background:"linear-gradient(0deg, rgba(0,0,0,0.7), transparent)"}},[W("span",{key:"n",style:{flex:1,minWidth:0,fontSize:S?"10.5px":"12.5px",fontWeight:700,color:"var(--sb-text-1)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},t.name),c&&W("span",{key:"sp",style:{flex:"none",color:"var(--sb-green)",display:"grid",placeItems:"center"}},ut(Xe.micOn,S?11:13,2)),I&&!S&&W("span",{key:"s",style:{flex:"none",fontFamily:Mn,fontSize:"10.5px",color:t.state===Ue.FAILED?"var(--sb-red)":"var(--sb-text-6)"}},I),!n&&!S&&Lo(t.quality)])])}function ks({call:t,media:e,groupName:n,localStream:r,getRemoteStream:i,onJoin:c,onDismiss:d,onLeave:h,onToggleMic:m,onToggleCamera:v,onFlipCamera:S}){let[p,k]=React.useState(!1),[y,I]=React.useState(0),[z,N]=React.useState(null),[ce,ee]=zo(),ge=!!t?.joined;React.useEffect(()=>{if(!ge){I(0);return}let B=Date.now(),$=setInterval(()=>I(Math.floor((Date.now()-B)/1e3)),1e3);return()=>clearInterval($)},[ge,t?.callId]),React.useEffect(()=>{t||k(!1)},[!t]);let we=React.useMemo(()=>new Set(["self",...(e?.peers||[]).map(B=>B.fp)]),[e]);if(React.useEffect(()=>{z&&!we.has(z)&&N(null)},[z,we]),!t)return null;let C=W("span",{key:"enc",style:{display:"inline-flex",alignItems:"center",gap:"5px",fontSize:"11.5px",fontWeight:600,color:"var(--sb-green)"}},[ut(Xe.lock,12,2),a("call.encryptedShort")]);if(!ge)return W("div",{style:{position:"absolute",inset:0,zIndex:40,display:"flex",flexDirection:"column",background:"radial-gradient(680px 460px at 50% 36%, rgba(var(--sb-orange-rgb), 0.08), transparent 70%), var(--sb-bg-deep)",animation:"sbExpand .2s ease"}},[W("div",{key:"top",style:{flex:"none",padding:"16px 18px"}},W("span",{style:{display:"inline-flex",alignItems:"center",gap:"7px",fontSize:"12px",fontWeight:600,color:"var(--sb-green)"}},[ut(Xe.lock,13,2),a("call.encrypted")])),W("div",{key:"mid",style:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"0 24px",textAlign:"center"}},[W("div",{key:"av",style:{position:"relative",width:"112px",height:"112px",marginBottom:"26px",display:"grid",placeItems:"center"}},[W("span",{key:"p1",style:{position:"absolute",inset:0,borderRadius:"50%",border:"1.5px solid rgba(var(--sb-orange-rgb), 0.5)",animation:"sbCallPulse 2s ease-out infinite"}}),W("span",{key:"p2",style:{position:"absolute",inset:0,borderRadius:"50%",border:"1.5px solid rgba(var(--sb-orange-rgb), 0.4)",animation:"sbCallPulse 2s ease-out infinite",animationDelay:"1s"}}),W("div",{key:"c",style:{width:"96px",height:"96px",borderRadius:"50%",display:"grid",placeItems:"center",background:"radial-gradient(circle at 35% 30%, var(--sb-surface-4), var(--sb-surface))",border:"1px solid rgba(var(--sb-ink), 0.1)",color:"var(--sb-text-7)"}},ut(Xe.users,42,1.6))]),W("div",{key:"n",style:{fontSize:"22px",fontWeight:800,letterSpacing:"-0.4px",color:"var(--sb-text-1)"}},n),W("div",{key:"s",style:{fontFamily:Mn,fontSize:"13.5px",color:"var(--sb-text-6)",marginTop:"8px"}},t.withVideo?a("groupCall.startedVideo",{name:t.startedByName}):a("groupCall.startedVoice",{name:t.startedByName})),W("div",{key:"p",style:{fontSize:"12.5px",color:"var(--sb-text-9)",marginTop:"6px"}},a("groupCall.inCall",{count:t.participants.length}))]),W("div",{key:"ctrls",style:{flex:"none",display:"flex",justifyContent:"center",gap:"48px",padding:"24px 24px 40px"}},[W("div",{key:"dec",style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"8px"}},[W("button",{key:"b",onClick:d,title:a("groupCall.dismiss"),style:{...Zi,width:"62px",height:"62px"}},ut(Xe.phoneHangup,24,1.9)),W("span",{key:"l",style:{fontFamily:Mn,fontSize:"10.5px",color:"var(--sb-text-7)"}},a("groupCall.dismiss"))]),W("div",{key:"acc",style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"8px"}},[W("button",{key:"b",onClick:c,title:a("groupCall.join"),style:{width:"62px",height:"62px",borderRadius:"50%",display:"grid",placeItems:"center",border:"none",background:"var(--sb-green-solid)",color:"var(--sb-on-green)",cursor:"pointer",boxShadow:"0 8px 24px rgba(var(--sb-green-rgb), 0.35)"}},ut(Xe.phone,24,1.9)),W("span",{key:"l",style:{fontFamily:Mn,fontSize:"10.5px",color:"var(--sb-text-7)"}},a("groupCall.join"))])])]);let O=e?.peers||[],j={fp:"self",name:a("groupCall.you"),state:Ue.ACTIVE,hasVideo:e?.cameraEnabled,quality:null,speaking:e?.selfSpeaking===!0};if(p){let B=O.filter(ne=>ne.speaking).map(ne=>ne.name),$=B.length===1?B[0]:B.length>1?B.slice(0,2).join(", "):e?.selfSpeaking?a("groupCall.you"):null;return W("div",{style:{position:"absolute",bottom:"18px",insetInlineEnd:"18px",zIndex:40,width:"244px",borderRadius:"14px",overflow:"hidden",background:"var(--sb-surface)",border:"1px solid rgba(var(--sb-ink), 0.1)",boxShadow:"0 18px 44px rgba(var(--sb-shadow-rgb), calc(0.55 * var(--sb-shadow-k)))",animation:"sbExpand .18s ease"}},[W("div",{key:"bar",style:{display:"flex",alignItems:"center",gap:"11px",padding:"11px 12px"}},[W("span",{key:"ic",style:{flex:"none",width:"34px",height:"34px",borderRadius:"9px",display:"grid",placeItems:"center",background:"rgba(var(--sb-green-rgb), 0.1)",border:"1px solid rgba(var(--sb-green-rgb), 0.25)",color:"var(--sb-green)"}},ut(Xe.users,16,1.9)),W("div",{key:"tx",style:{flex:1,minWidth:0}},[W("div",{key:"n",style:{fontSize:"13px",fontWeight:700,color:"var(--sb-text-1)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},n),W("div",{key:"s",style:{fontFamily:Mn,fontSize:"11px",color:$?"var(--sb-green)":"var(--sb-text-6)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},$?a("groupCall.speaking",{name:$}):`${a("groupCall.inCall",{count:t.participants.length})} \xB7 ${ea(y)}`)]),W("button",{key:"exp",onClick:()=>k(!1),title:a("call.expand"),style:{flex:"none",width:"32px",height:"32px",borderRadius:"8px",display:"grid",placeItems:"center",border:"none",background:"rgba(var(--sb-ink), 0.05)",color:"var(--sb-text-4)",cursor:"pointer"}},ut(Xe.expand,15,2)),W("button",{key:"end",onClick:h,title:a("groupCall.leave"),style:{flex:"none",width:"32px",height:"32px",borderRadius:"8px",display:"grid",placeItems:"center",border:"none",background:"var(--sb-red-strong-solid)",color:"#fff",cursor:"pointer"}},ut(Xe.phoneHangup,15,2))])])}let P=[j,...O],Q=z?(B=>P.find($=>$.fp===B)||null)(z):null,X=Q?P.filter(B=>B.fp!==Q.fp):[],V=Q?Xi(X.length,ee.w,ee.h):null,re=Q&&V&&V.main.w>0,oe=Qi(P.length,ee.w,ee.h),me=(B,$={})=>W(Uo,{key:B.fp,peer:B,self:B.fp==="self",speaking:B.speaking===!0,localStream:r,cameraEnabled:e?.cameraEnabled,stream:B.fp==="self"?null:i(B.fp),...$});return W("div",{style:{position:"absolute",inset:0,zIndex:40,display:"flex",flexDirection:"column",background:"var(--sb-bg-deepest)",animation:"sbExpand .2s ease"}},[W("div",{key:"top",style:{flex:"none",display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"14px",padding:"16px 18px 10px"}},[W("div",{key:"l",style:{minWidth:0}},[W("div",{key:"n",style:{fontSize:"17px",fontWeight:800,letterSpacing:"-0.3px",color:"#fff",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},n),W("div",{key:"s",style:{display:"inline-flex",alignItems:"center",gap:"9px",marginTop:"4px"}},[W("span",{key:"d",style:{fontFamily:Mn,fontSize:"12.5px",color:"var(--sb-text-2)"}},ea(y)),C,W("span",{key:"c",style:{fontSize:"11.5px",color:"var(--sb-text-7)"}},a("groupCall.inCall",{count:t.participants.length}))])]),W("div",{key:"r",style:{flex:"none",display:"flex",alignItems:"center",gap:"8px"}},[re&&W("button",{key:"grid",onClick:()=>N(null),title:a("groupCall.showEveryone"),style:{height:"36px",padding:"0 12px",borderRadius:"9px",display:"inline-flex",alignItems:"center",gap:"7px",border:"1px solid rgba(var(--sb-ink), 0.15)",background:"rgba(0,0,0,0.35)",color:"#fff",cursor:"pointer",fontFamily:"inherit",fontSize:"12.5px",fontWeight:600}},[ut(Xe.grid,14,2),a("groupCall.showEveryone")]),W("button",{key:"min",onClick:()=>k(!0),title:a("call.minimize"),style:Oo},ut(Xe.minimize,16,2))])]),e?.error&&W("div",{key:"err",style:{flex:"none",margin:"0 18px 10px",padding:"9px 12px",borderRadius:"10px",background:"rgba(var(--sb-red-rgb), 0.1)",border:"1px solid rgba(var(--sb-red-rgb), 0.28)",color:"var(--sb-red)",fontSize:"12.5px",lineHeight:1.5}},a(`groupCall.err.${e.error}`)),W("div",{key:"stage",ref:ce,className:"msc-scroll",style:{flex:1,minHeight:0,minWidth:0,overflow:"auto",margin:"0 14px 6px",display:"flex",alignItems:"safe center",justifyContent:"safe center"}},re?W("div",{style:{display:"flex",flexDirection:"column",gap:10+"px",width:"100%",height:ee.h+"px",minHeight:0}},[W("div",{key:"main",style:{flex:"none",display:"flex",justifyContent:"center",minHeight:0}},me(Q,{tileW:V.main.w,tileH:V.main.h,pinned:!0,onSelect:()=>N(null)})),X.length>0&&W("div",{key:"strip",className:"msc-scroll",style:{flex:"none",height:V.stripH+"px",display:"flex",gap:10+"px",justifyContent:X.length>4?"flex-start":"center",overflowX:"auto",overflowY:"hidden"}},X.map(B=>me(B,{tileW:V.thumbW,tileH:V.stripH,compact:!0,onSelect:()=>N(B.fp)})))]):W("div",{style:{display:"flex",flexWrap:"wrap",gap:10+"px",justifyContent:"center",alignContent:"center",width:oe.tileW?oe.cols*oe.tileW+(oe.cols-1)*10+"px":"100%"}},P.map(B=>me(B,{tileW:oe.tileW,tileH:oe.tileH,onSelect:()=>N(B.fp)})))),W("div",{key:"ctrls",style:{flex:"none",display:"flex",alignItems:"center",justifyContent:"center",gap:"16px",padding:"16px 20px calc(22px + var(--sb-safe-bottom, env(safe-area-inset-bottom, 0px)))",background:"linear-gradient(0deg, rgba(0,0,0,0.6), transparent)"}},[W("button",{key:"mic",onClick:m,title:a("call.mute"),style:e?.micEnabled?Fr:Ji},ut(e?.micEnabled?Xe.micOn:Xe.micOff,21,1.9)),W("button",{key:"cam",onClick:v,title:a("call.camera"),style:e?.cameraEnabled?Fr:Ji},ut(e?.cameraEnabled?Xe.camOn:Xe.camOff,21,1.8)),e?.cameraEnabled&&W("button",{key:"flip",onClick:S,title:a("call.flipCamera"),style:Fr},ut(Xe.flip,21,1.8)),W("button",{key:"end",onClick:h,title:a("groupCall.leave"),style:Zi},ut(Xe.phoneHangup,22,1.9))])])}typeof window<"u"&&(window.GroupCallUI=ks);var dr=ai(),Or=()=>ar()?"auto":"smooth",ta=()=>{window.__sbScrollToDonate=Date.now(),document.dispatchEvent(new CustomEvent("securebit:scroll-to-donate"))},Rs=async(t,e=0)=>{let n=!1;try{await navigator.clipboard.writeText(t),n=!0}catch{try{let i=document.createElement("textarea");i.value=t,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select(),n=document.execCommand("copy"),document.body.removeChild(i)}catch{n=!1}}return n&&e>0&&navigator.clipboard&&navigator.clipboard.writeText&&setTimeout(async()=>{let r=null,i=!0;try{r=await navigator.clipboard.readText()}catch{i=!1}if(!i||r===t)try{await navigator.clipboard.writeText("")}catch{}},e),n},Go=t=>{if(typeof t!="string"||t.indexOf("```")===-1)return null;let e=[],n=/```([a-zA-Z0-9_+#.-]*)\n?([\s\S]*?)```/g,r=0,i;for(;(i=n.exec(t))!==null;)i.index>r&&e.push({kind:"text",content:t.slice(r,i.index)}),e.push({kind:"code",lang:(i[1]||"").toLowerCase(),content:i[2].replace(/\n$/,"")}),r=n.lastIndex;return rc.kind==="code")?e:null},Ho=new Set(["const","let","var","function","return","if","else","for","while","do","switch","case","break","continue","class","extends","new","this","super","import","export","from","as","default","async","await","try","catch","finally","throw","typeof","instanceof","delete","yield","in","of","def","elif","lambda","pass","with","global","public","private","protected","static","final","void","int","long","float","double","char","bool","boolean","string","struct","enum","interface","package","func","fn","type","where","select","update","insert","delete","where","and","or","not","end","then","fi","done","echo","use","mut","impl","trait","match","module","require"]),Wo=new Set(["true","false","null","undefined","None","True","False","nil","NaN","Infinity"]),Vo=t=>{let e=/(\/\/[^\n]*|#[^\n]*|\/\*[\s\S]*?\*\/|--[^\n]*)|(`(?:\\.|[^`\\])*`|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|(\b\d[\d_.]*(?:[eE][+-]?\d+)?\b|\b0[xX][0-9a-fA-F]+\b)|([A-Za-z_$][A-Za-z0-9_$]*)/g,n=[],r="",i=0,c=0,d=()=>{r&&(n.push(r),r="")},h;for(;(h=e.exec(t))!==null;){h.index>i&&(r+=t.slice(i,h.index)),i=e.lastIndex;let m=null;h[1]?m="text-gray-500 italic":h[2]?m="text-amber-300":h[3]?m="text-sky-300":h[4]&&(Ho.has(h[4])?m="text-purple-300":Wo.has(h[4])&&(m="text-sky-300")),m?(d(),n.push(React.createElement("span",{key:`h${c++}`,className:m},h[0]))):r+=h[0]}return i{let[n,r]=React.useState(!1),i=async()=>{await Rs(t,3e4)&&(r(!0),setTimeout(()=>r(!1),2e3))},c=jo[(e||"").toLowerCase()]||(e||"").toLowerCase(),d=typeof window<"u"?window.Prism:null,h=d&&d.languages?d.languages[c]:null,m=!!(d&&h&&typeof d.highlight=="function"),v=null;if(m)try{v=d.highlight(t,h,c)}catch{v=null}let S=m?c:e||"code",p=m&&v!=null?React.createElement("code",{className:"language-"+c,dangerouslySetInnerHTML:{__html:v}}):React.createElement("code",null,Vo(t));return React.createElement("div",{className:"my-1 rounded-lg overflow-hidden",style:{backgroundColor:"var(--sb-legacy-1)",border:"0 solid var(--sb-text-3)"}},[React.createElement("div",{key:"hdr",className:"flex items-center justify-between px-3 py-1.5",style:{backgroundColor:"var(--sb-legacy-2)",border:"0 solid var(--sb-text-3)"}},[React.createElement("span",{key:"lang",className:"text-[11px] uppercase tracking-wide text-gray-500 font-mono"},S),React.createElement("button",{key:"copy",onClick:i,title:"Copy \u2014 clipboard auto-clears in 30s",className:"flex items-center text-[11px] text-gray-400 hover:text-green-400 transition-colors"},[React.createElement("i",{key:"ic",className:`${n?"fas fa-check text-green-400":"far fa-copy"} me-1`}),n?a("action.copied"):a("action.copy")])]),React.createElement("pre",{key:"pre",className:"px-3 py-2 overflow-x-auto text-xs leading-relaxed text-gray-200 custom-scrollbar",style:{whiteSpace:"pre",fontFamily:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",margin:0}},p)])},qo=({text:t})=>{let e=Go(t);return e?React.createElement("div",{className:"text-sm"},e.map((n,r)=>n.kind==="code"?React.createElement($o,{key:r,code:n.content,lang:n.lang}):n.content.trim()?React.createElement("div",{key:r,className:"break-words",style:{whiteSpace:"pre-wrap",wordBreak:"break-word"}},n.content):null)):React.createElement("div",{className:"text-sm break-words",style:{whiteSpace:"pre-wrap",wordBreak:"break-word"}},t)};var Ss=7;var Yo=`url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%3E%3Cfilter%20id='n'%3E%3CfeTurbulence%20type='fractalNoise'%20baseFrequency='0.9'%20numOctaves='2'%20stitchTiles='stitch'/%3E%3C/filter%3E%3Crect%20width='100%25'%20height='100%25'%20filter='url(%23n)'/%3E%3C/svg%3E")`,Yn="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",Ko=(t,e)=>{let n=[],r=t||1;for(let i=0;i{t=Math.max(0,Math.round(t));let e=Math.floor(t/60),n=t%60;return e+":"+String(n).padStart(2,"0")},Qo=({voice:t,isMe:e})=>{let n=React.createElement,[r,i]=React.useState(!1),[c,d]=React.useState(0),[h,m]=React.useState(!1),v=React.useRef(null),S=React.useRef(null),p=t||{},k=Number.isFinite(p.dur)&&p.dur>0?p.dur:8,y=Array.isArray(p.bars)&&p.bars.length?p.bars:Ko(k*37+11,34),I=p.url||null,z=p.transfer||null,N=!!z&&!I,ce=!!p.error||h,ee=z?z.dir:null,ge=z?Math.max(0,Math.min(100,z.pct||0)):100;React.useEffect(()=>()=>{if(S.current&&cancelAnimationFrame(S.current),v.current){try{v.current.pause()}catch{}v.current=null}},[]),React.useEffect(()=>{if(!I&&v.current){try{v.current.pause()}catch{}v.current=null,i(!1),d(0)}},[I]);let we=()=>{if(v.current)try{v.current.pause()}catch{}S.current&&cancelAnimationFrame(S.current),i(!1)},C=()=>{if(!I)return;if(m(!1),!v.current){let ne=new Audio;ne.preload="auto",ne.addEventListener("timeupdate",()=>{let Ie=ne.duration&&isFinite(ne.duration)?ne.duration:k;Ie&&d(Math.min(1,ne.currentTime/Ie))}),ne.addEventListener("ended",()=>{i(!1),d(0)}),ne.addEventListener("error",()=>{i(!1),m(!0)}),ne.src=I,v.current=ne}let $=v.current.play();$&&typeof $.then=="function"?$.then(()=>i(!0)).catch(ne=>{console.warn("Voice playback failed:",ne&&ne.name,ne&&ne.message),m(!0),i(!1)}):i(!0)},O=()=>{N||ce||!I||(r?we():C())},j=$=>{if(N||ce||!I)return;let ne=$.currentTarget.getBoundingClientRect(),Ie=Math.max(0,Math.min(1,($.clientX-ne.left)/ne.width));v.current&&v.current.duration&&(v.current.currentTime=Ie*v.current.duration),d(Ie)},P=c*k,U=2*Math.PI*23,Q=e?"var(--sb-orange-solid)":"rgba(var(--sb-orange-rgb), 0.14)",X=e?"var(--sb-on-accent)":"var(--sb-orange)",V=y.map(($,ne)=>{let Ie=(ne+.5)/y.length<=c,q;return N?q=e?"rgba(var(--sb-ink), 0.13)":"rgba(var(--sb-ink), 0.1)":q=Ie?"var(--sb-orange-solid)":e?"rgba(var(--sb-ink), 0.22)":"rgba(var(--sb-ink), 0.16)",n("span",{key:ne,style:{flex:"1 1 0",minWidth:0,width:"3px",height:Math.round(6+$*22)+"px",borderRadius:"2px",background:q,transition:"background .12s"}})}),re=N&&n("svg",{key:"ring",width:50,height:50,viewBox:"0 0 50 50",style:{position:"absolute",inset:0,transform:"rotate(-90deg)"}},[n("circle",{key:"bg",cx:25,cy:25,r:23,fill:"none",stroke:"rgba(var(--sb-orange-rgb), 0.2)",strokeWidth:2.5}),n("circle",{key:"fg",cx:25,cy:25,r:23,fill:"none",stroke:"var(--sb-orange-solid)",strokeWidth:2.5,strokeLinecap:"round",strokeDasharray:U.toFixed(1),strokeDashoffset:(U*(1-ge/100)).toFixed(1),style:{transition:"stroke-dashoffset .12s linear"}})]),oe=ce?n("i",{className:"fas fa-triangle-exclamation",style:{fontSize:"14px"}}):N?n("svg",{width:15,height:15,viewBox:"0 0 24 24",fill:"currentColor",style:{opacity:.5}},n("path",{d:"M8 5.2v13.6l11-6.8z"})):r?n("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:"currentColor"},[n("rect",{key:"a",x:6,y:5,width:4,height:14,rx:1.2}),n("rect",{key:"b",x:14,y:5,width:4,height:14,rx:1.2})]):n("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:"currentColor"},n("path",{d:"M8 5.2v13.6l11-6.8z"})),me=ce?a("msg.failed"):N?ee==="up"?a("chat.uploading"):a("chat.downloading"):a("msg.voice"),B=N?ge+"%":sa(r||c>0?P:k);return n("div",{style:{display:"flex",alignItems:"center",gap:"13px",padding:"13px 15px 12px"}},[n("div",{key:"pw",style:{position:"relative",flex:"none",width:"50px",height:"50px",display:"grid",placeItems:"center"}},[re,n("button",{key:"pb",onClick:O,title:N?a("chat.transferring"):r?a("msg.pause"):a("msg.play"),style:{width:"42px",height:"42px",borderRadius:"50%",display:"grid",placeItems:"center",border:"none",background:ce?"rgba(var(--sb-red-rgb), 0.15)":Q,color:ce?"var(--sb-red)":X,cursor:N||ce||!I?"default":"pointer",transition:"transform .15s cubic-bezier(.2,.7,.3,1)"}},oe)]),n("div",{key:"body",style:{flex:1,minWidth:0}},[n("div",{key:"wave",onClick:j,style:{display:"flex",alignItems:"center",gap:"2px",height:"30px",cursor:N||ce||!I?"default":"pointer"}},V),n("div",{key:"meta",style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:"6px"}},[n("span",{key:"t",style:{fontFamily:Yn,fontSize:"10.5px",fontWeight:500,color:N?"var(--sb-orange-3)":"var(--sb-text-6)"}},B),n("span",{key:"l",style:{fontFamily:Yn,fontSize:"9.5px",fontWeight:600,color:ce?"var(--sb-red)":N?"var(--sb-orange)":"var(--sb-text-faint)",textTransform:"uppercase",letterSpacing:"0.8px"}},me)])])])},Xo=({onSend:t,onCancel:e})=>{let n=React.createElement,r=300,i=40,[c,d]=React.useState(0),[h,m]=React.useState(()=>new Array(i).fill(.06)),[v,S]=React.useState(!1),p=React.useRef({}).current,k=()=>{try{p.node&&(p.node.disconnect(),p.node.port&&(p.node.port.onmessage=null),p.node.onaudioprocess=null)}catch{}try{p.srcNode&&p.srcNode.disconnect()}catch{}try{p.sink&&p.sink.disconnect()}catch{}p.node=p.srcNode=p.sink=null},y=()=>{p.timer&&clearInterval(p.timer),p.timer=null,k();try{p.stream&&p.stream.getTracks().forEach(C=>C.stop())}catch{}try{p.ac&&p.ac.close()}catch{}if(p.wurl){try{URL.revokeObjectURL(p.wurl)}catch{}p.wurl=null}p.stream=p.ac=null},I=C=>{p.peaks=p.peaks||[],p.peaks.push(C);let O=performance.now();(!p.lastDraw||O-p.lastDraw>55)&&(p.lastDraw=O,m(j=>{let P=j.slice(1);return P.push(Math.max(.08,C)),P}))},z=(C,O)=>{if(!C||!C.length)return new Array(O).fill(.3);let j=[],P=C.length/O;for(let U=0;U{if(!C||!C.length||j>=O)return C||new Float32Array(0);let P=O/j,U=Math.floor(C.length/P),Q=new Float32Array(U);for(let X=0;X{let j=new ArrayBuffer(44+C.length*2),P=new DataView(j),U=(X,V)=>{for(let re=0;re{if(!C||!C.length)return;p.pcm.push(C),p.sampleCount=(p.sampleCount||0)+C.length;let O=0;for(let j=0;j{if(p.finished)return;p.finished=!0,p.timer&&clearInterval(p.timer),p.timer=null;let O=(p.peaks||[]).slice(),j=p.ac&&p.ac.sampleRate||48e3;k();let P=null,U=1,Q=p.sampleCount||0;if(C&&p.pcm&&p.pcm.length&&Q>j*.2){let X=new Float32Array(Q),V=0;for(let me of p.pcm)X.set(me,V),V+=me.length;let re=24e3,oe=N(X,j,re);U=Math.max(1,Math.round(oe.length/re)),P=ce(oe,re)}try{p.stream&&p.stream.getTracks().forEach(X=>X.stop())}catch{}try{p.ac&&p.ac.close()}catch{}if(p.wurl){try{URL.revokeObjectURL(p.wurl)}catch{}p.wurl=null}p.stream=p.ac=null,p.pcm=[],C&&P&&P.size>44?t(P,U,z(O,34)):C?(S(!0),p.finished=!1):e()};if(React.useEffect(()=>{let C=!1;return p.finished=!1,p.peaks=[],p.pcm=[],p.sampleCount=0,p.t0=performance.now(),p.timer=setInterval(()=>{let O=(performance.now()-p.t0)/1e3;d(O),O>=r&&ge(!0)},200),(async()=>{let O=null;try{navigator.mediaDevices&&navigator.mediaDevices.getUserMedia&&(O=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,noiseSuppression:!0}}))}catch{O=null}if(C){O&&O.getTracks().forEach(j=>j.stop());return}if(!O){S(!0),p.timer&&clearInterval(p.timer);return}p.stream=O;try{let j=window.AudioContext||window.webkitAudioContext;if(p.ac=new j,p.ac.state==="suspended")try{await p.ac.resume()}catch{}p.srcNode=p.ac.createMediaStreamSource(O),p.sink=p.ac.createGain(),p.sink.gain.value=0;let P=!1;if(p.ac.audioWorklet&&typeof p.ac.audioWorklet.addModule=="function"&&window.AudioWorkletNode)try{let U='class P extends AudioWorkletProcessor{process(i){const c=i[0]&&i[0][0];if(c){this.port.postMessage(c.slice(0));}return true;}}registerProcessor("sb-pcm",P);';if(p.wurl=URL.createObjectURL(new Blob([U],{type:"application/javascript"})),await p.ac.audioWorklet.addModule(p.wurl),C)return;p.node=new AudioWorkletNode(p.ac,"sb-pcm"),p.node.port.onmessage=Q=>ee(Q.data),p.srcNode.connect(p.node),p.node.connect(p.sink),p.sink.connect(p.ac.destination),P=!0}catch{P=!1}P||(p.node=p.ac.createScriptProcessor(4096,1,1),p.node.onaudioprocess=Q=>{let X=Q.inputBuffer.getChannelData(0);ee(new Float32Array(X))},p.srcNode.connect(p.node),p.node.connect(p.sink),p.sink.connect(p.ac.destination))}catch{S(!0),p.timer&&clearInterval(p.timer)}})(),()=>{C=!0,y()}},[]),v)return n("div",{style:{display:"flex",alignItems:"center",gap:"12px"}},[n("div",{key:"msg",style:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:"9px",height:"46px",padding:"0 16px",borderRadius:"13px",background:"rgba(var(--sb-red-strong-rgb), 0.06)",border:"1px solid rgba(var(--sb-red-strong-rgb), 0.22)",color:"var(--sb-red)",fontSize:"13.5px"}},[n("i",{key:"i",className:"fas fa-microphone-slash",style:{fontSize:"14px"}}),a("err.noAudio")]),n("button",{key:"x",onClick:e,title:a("chatHdr.close"),style:{flex:"none",width:"46px",height:"46px",borderRadius:"50%",display:"grid",placeItems:"center",border:"none",background:"rgba(var(--sb-ink), 0.05)",color:"var(--sb-text-6)",cursor:"pointer"}},n("i",{className:"fas fa-xmark",style:{fontSize:"16px"}}))]);let we=h.map((C,O)=>n("span",{key:O,style:{flex:"none",width:"3px",height:Math.round(4+C*24)+"px",borderRadius:"2px",background:"var(--sb-red-solid)",opacity:.45+C*.55}}));return n("div",{style:{display:"flex",alignItems:"center",gap:"12px"}},[n("button",{key:"cancel",onClick:()=>ge(!1),title:a("chat.discard"),style:{flex:"none",width:"42px",height:"42px",borderRadius:"12px",display:"grid",placeItems:"center",border:"none",background:"rgba(var(--sb-ink), 0.04)",color:"var(--sb-text-6)",cursor:"pointer"}},n("i",{className:"fas fa-trash-can",style:{fontSize:"15px"}})),n("div",{key:"bar",style:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:"11px",height:"46px",padding:"0 16px",borderRadius:"13px",background:"rgba(var(--sb-red-strong-rgb), 0.06)",border:"1px solid rgba(var(--sb-red-strong-rgb), 0.22)"}},[n("span",{key:"dot",style:{position:"relative",flex:"none",width:"9px",height:"9px"}},n("span",{style:{position:"absolute",inset:0,borderRadius:"50%",background:"var(--sb-red-solid)",animation:"vmRec 1.3s ease-in-out infinite"}})),n("span",{key:"time",style:{flex:"none",fontFamily:Yn,fontSize:"13px",fontWeight:600,color:"var(--sb-text-1)",minWidth:"42px"}},sa(c)),n("div",{key:"wave",style:{flex:1,minWidth:0,display:"flex",alignItems:"center",justifyContent:"flex-end",gap:"2px",height:"30px",overflow:"hidden"}},we)]),n("button",{key:"send",onClick:()=>ge(!0),title:a("chat.sendVoice"),style:{flex:"none",width:"46px",height:"46px",borderRadius:"50%",display:"grid",placeItems:"center",border:"none",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",cursor:"pointer",boxShadow:"0 8px 22px rgba(var(--sb-orange-rgb), 0.3)",transition:"transform .15s cubic-bezier(.2,.7,.3,1)"}},n("svg",{width:20,height:20,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},[n("path",{key:"a",d:"M22 2L11 13"}),n("path",{key:"b",d:"M22 2l-7 20-4-9-9-4 20-7z"})]))])},Jo=({message:t,type:e,timestamp:n,mid:r,status:i,viewOnce:c,viewOnceTtl:d,expiresAt:h,expired:m,nowTick:v,canUnsend:S,onUnsend:p,onExpire:k,voice:y})=>{let[I,z]=React.useState(!1),N=React.useRef(null),ce=B=>new Date(B).toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit"});if(React.useEffect(()=>()=>{N.current&&clearTimeout(N.current)},[]),e==="system"||e==="notice"){let B=e==="notice";return React.createElement("div",{className:"message-slide",style:{display:"flex",justifyContent:"center",margin:"4px 0"}},React.createElement("div",{style:{maxWidth:"80%",padding:"8px 14px",borderRadius:"10px",border:"1px solid "+(B?"rgba(var(--sb-green-rgb), 0.25)":"rgba(var(--sb-orange-rgb), 0.22)"),background:B?"rgba(var(--sb-green-rgb), 0.08)":"rgba(var(--sb-orange-rgb), 0.08)",color:B?"var(--sb-green-soft)":"var(--sb-orange-4)",fontSize:"12.5px",textAlign:"center",lineHeight:1.5}},t))}let ee=e==="sent",ge=ee,we=e==="received"&&c===!0,C=typeof h=="number"?Math.max(0,Math.ceil((h-(v||Date.now()))/1e3)):null,O=B=>{if(B==null)return"";let $=Math.floor(B/3600),ne=Math.floor(B%3600/60),Ie=B%60,q=xe=>String(xe).padStart(2,"0");return $>0?$+":"+q(ne)+":"+q(Ie):ne+":"+q(Ie)},j=()=>{if(I)return;z(!0);let B=Math.max(1,typeof d=="number"?d:15)*1e3;N.current=setTimeout(()=>{k&&k()},B)},P=ee?"14px 14px 4px 14px":"14px 14px 14px 4px",U=ee?"1px solid rgba(var(--sb-ink), 0.10)":"1px solid rgba(var(--sb-ink), 0.06)",Q=ee?"var(--sb-surface-3)":"var(--sb-surface)";if(m===!0||typeof h=="number"&&(v||Date.now())>=h)return React.createElement("div",{className:"message-slide",style:{display:"flex",width:"100%",justifyContent:ee?"flex-end":"flex-start"}},React.createElement("div",{style:{maxWidth:"74%",minWidth:"170px"}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:"9px",padding:"12px 15px",borderRadius:P,border:"1px dashed rgba(var(--sb-ink), 0.1)",background:"rgba(var(--sb-ink), 0.018)"}},[React.createElement("i",{key:"i",className:"fas fa-clock",style:{color:"var(--sb-text-9)",fontSize:"13px"}}),React.createElement("span",{key:"t",style:{fontSize:"13px",color:"var(--sb-text-9)",fontStyle:"italic"}},a("chat.expired"))])));let V;y?V=React.createElement(Qo,{key:"voice",voice:y,isMe:ee}):we&&!I?V=React.createElement("div",{key:"cover",onClick:j,style:{position:"relative",cursor:"pointer",padding:"12px 15px 10px",overflow:"hidden"}},[React.createElement("div",{key:"blur",style:{fontSize:"14.5px",lineHeight:1.55,color:"var(--sb-text-5)",filter:"blur(7px)",userSelect:"none",pointerEvents:"none",wordBreak:"break-word",minHeight:"22px"}},t),React.createElement("div",{key:"grain",style:{position:"absolute",inset:0,backgroundImage:Yo,backgroundSize:"90px",opacity:.18,mixBlendMode:"screen",pointerEvents:"none"}}),React.createElement("div",{key:"lbl",style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",gap:"7px",pointerEvents:"none"}},[React.createElement("i",{key:"i",className:"fas fa-eye-slash",style:{color:"var(--sb-text-2)",fontSize:"13px"}}),React.createElement("span",{key:"t",style:{fontSize:"12px",fontWeight:600,color:"var(--sb-text-2)",textShadow:"0 1px 5px rgba(0,0,0,0.75)"}},a("chat.viewOnceTap"))])]):V=React.createElement("div",{key:"body",style:{padding:"12px 15px 10px",color:"var(--sb-text-2)"}},React.createElement(qo,{text:t}));let re=[React.createElement("span",{key:"time",style:{fontFamily:Yn,fontSize:"10.5px",color:"var(--sb-text-9)"}},ce(n))];if(ee){let B={sending:{icon:"fa-clock",color:"var(--sb-text-9)",label:a("chat.sending")},sent:{icon:"fa-check",color:"var(--sb-text-7)",label:a("msg.sent")},delivered:{icon:"fa-check-double",color:"var(--sb-text-7)",label:a("chat.delivered")},read:{icon:"fa-check-double",color:"var(--sb-green)",label:a("msg.read")},failed:{icon:"fa-triangle-exclamation",color:"var(--sb-red)",label:a("chat.notSent")}}[i||"sent"]||{icon:"fa-check",color:"var(--sb-text-7)",label:a("msg.sent")};re.push(React.createElement("span",{key:"dlv",title:B.label,style:{display:"inline-flex",alignItems:"center",color:B.color}},React.createElement("i",{className:"fas "+B.icon,style:{fontSize:"10.5px"}})))}we&&I?re.push(React.createElement("span",{key:"vo",style:{display:"inline-flex",alignItems:"center",gap:"4px",fontSize:"10px",fontWeight:600,color:"var(--sb-text-7)"}},[React.createElement("span",{key:"d",style:{width:"4px",height:"4px",borderRadius:"50%",background:"var(--sb-text-7)"}}),a("chat.viewedOnce")])):C!==null&&re.push(React.createElement("span",{key:"ttl",style:{display:"inline-flex",alignItems:"center",gap:"4px",fontFamily:Yn,fontSize:"10.5px",fontWeight:500,color:"var(--sb-orange)"}},[React.createElement("i",{key:"i",className:"fas fa-clock",style:{fontSize:"10px"}}),O(C)]));let oe=[];oe.push(React.createElement("span",{key:"status",style:{display:"inline-flex",alignItems:"center",gap:"5px",fontSize:"10.5px",fontWeight:600,color:"var(--sb-green)",flex:"none"}},[React.createElement("i",{key:"i",className:ge?"fas fa-lock":"fas fa-lock-open",style:{fontSize:"10px"}}),ge?a("chat.encrypted"):a("chat.decrypted")])),S&&ee&&r&&oe.push(React.createElement("button",{key:"unsend",onClick:()=>p&&p(r),title:a("chat.deleteForEveryone"),className:"sb-unsend",style:{background:"none",border:"none",cursor:"pointer",color:"var(--sb-text-faint)",fontSize:"11px",padding:0,lineHeight:1}},React.createElement("i",{className:"fas fa-trash-can"})));let me=React.createElement("div",{key:"meta",style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"14px",padding:"0 15px 10px"}},[React.createElement("div",{key:"l",style:{display:"flex",alignItems:"center",gap:"9px",minWidth:0}},re),React.createElement("div",{key:"r",style:{display:"flex",alignItems:"center",gap:"9px",flex:"none"}},oe)]);return React.createElement("div",{className:"message-slide",style:{display:"flex",width:"100%",justifyContent:ee?"flex-end":"flex-start"}},[React.createElement("div",{key:"wrap",style:{maxWidth:"74%",minWidth:"170px"}},React.createElement("div",{style:{borderRadius:P,border:U,background:Q,overflow:"hidden"}},[V,me]))])},Zo=({messages:t,onCreateOffer:e,onCreateAnswer:n,onConnect:r,onClearData:i,onVerifyConnection:c,connectionStatus:d,offerData:h,answerData:m,offerInput:v,setOfferInput:S,answerInput:p,setAnswerInput:k,showOfferStep:y,showAnswerStep:I,verificationCode:z,showVerification:N,showQRCode:ce,qrCodeUrl:ee,showQRScanner:ge,setShowQRCode:we,setShowQRScanner:C,setShowQRScannerModal:O,offerPassword:j,answerPassword:P,localVerificationConfirmed:U,remoteVerificationConfirmed:Q,bothVerificationsConfirmed:X,qrFramesTotal:V,qrFrameIndex:re,qrManualMode:oe,toggleQrManualMode:me,nextQrFrame:B,prevQrFrame:$,markAnswerCreated:ne,notificationIntegrationRef:Ie,isGeneratingKeys:q,setIsGeneratingKeys:xe,handleCreateOffer:Le,relayOnlyMode:at,setRelayOnlyMode:Ee,webrtcManagerRef:Je,showIceSettings:ot,setShowIceSettings:vt,iceServersText:Yt,iceSettingsPersisted:wt,customIceServers:Re,handleApplyIceSettings:gt,handleForgetIceSettings:te,compact:Ne=!1})=>{let[kt,mt]=React.useState("create"),[Ut,St]=React.useState(!1),[Gt,yt]=React.useState(!1),[Ht,Kt]=React.useState(!1),[b,Z]=React.useState(""),[Ae,qe]=React.useState(""),[Ze,Ge]=React.useState(!1),[dn,ct]=React.useState(0),[He,Tn]=React.useState(!1),[Mt,pn]=React.useState(!1),[Qt,Tt]=React.useState(0),et=1800*1e3,Ye=h&&typeof h=="object"&&Number(h.ts||h.timestamp)||null,[Ke,lt]=React.useState(()=>Date.now());React.useEffect(()=>{if(!y||!Ye)return;lt(Date.now());let D=setInterval(()=>lt(Date.now()),1e3);return()=>clearInterval(D)},[y,Ye]),React.useEffect(()=>{Z(""),qe("")},[z]),React.useEffect(()=>{(N||!y&&!I)&&yt(!1),pn(!1)},[y,I,N]),React.useEffect(()=>{if(!(q&&!y&&!I&&!N)){Tt(0);return}Tt(0);let L=0,pe=setInterval(()=>{L+=1,Tt(L),L>=3&&clearInterval(pe)},520);return()=>clearInterval(pe)},[q,y,I,N]),React.useEffect(()=>{if(!He)return;let D=()=>Tn(!1),L=setTimeout(()=>document.addEventListener("click",D),0);return()=>{clearTimeout(L),document.removeEventListener("click",D)}},[He]);let Xt=()=>{xe(!1),yt(!1),i()},pr=D=>c(D),un=()=>{c(null,!1)},fn=async()=>{if(!Ut)try{if(!("Notification"in window)||!window.isSecureContext&&window.location.protocol!=="https:"&&window.location.hostname!=="localhost")return;let D=typeof Notification<"u"&&Notification?Notification.permission:"denied";if(D==="default"&&typeof Notification<"u"&&Notification){if(await Notification.requestPermission()==="granted"){try{if(window.NotificationIntegration&&Je.current){let pe=new window.NotificationIntegration(Je.current);await pe.init(),Ie.current=pe}}catch{}setTimeout(()=>{try{let pe=new Notification("SecureBit Chat",{body:a("notify.enabledBody"),icon:"/logo/icon-192x192.png",tag:"welcome-notification"});pe.onclick=()=>{pe.close()},setTimeout(()=>{pe.close()},5e3)}catch{}},1e3)}}else if(D==="granted"){try{if(window.NotificationIntegration&&Je.current&&!Ie.current){let L=new window.NotificationIntegration(Je.current);await L.init(),Ie.current=L}}catch{}setTimeout(()=>{try{let L=new Notification("SecureBit Chat",{body:a("notify.workingBody"),icon:"/logo/icon-192x192.png",tag:"test-notification"});L.onclick=()=>{L.close()},setTimeout(()=>{L.close()},5e3)}catch{}},1e3)}St(!0)}catch{}},f=React.createElement,Nn="var(--sb-orange)",E="var(--sb-green)",se="var(--sb-orange-solid)",ue="var(--sb-green-solid)",Me=Yn,Nt=D=>{try{let L=typeof D=="object"?JSON.stringify(D):D||"";return L?typeof window.encodeBinaryToPrefixed=="function"?window.encodeBinaryToPrefixed(L):typeof window.compressToPrefixedGzip=="function"?window.compressToPrefixedGzip(L):L:""}catch{return typeof D=="object"?JSON.stringify(D):D||""}},ie=kt==="create",hn=q&&!y&&!I&&!N,Wt=ie&&y&&!N,Dn=!ie&&I&&!N,Ft=!N&&!hn&&!Wt&&!Dn,Pr=N?a("step.verification"):Wt||Dn?a("step.exchange"):a("step.open"),Fn=Nt(ie?h:m),Kn=(v||"").trim().length>0,Et=(p||"").trim().length>0,On=async()=>{try{typeof Rs=="function"?await Rs(Fn):await navigator.clipboard.writeText(Fn)}catch{}Kt(!0),setTimeout(()=>Kt(!1),1600)},Vt=(z||"").replace(/[-\s]/g,"").length,Pn=b.replace(/[-\s]/g,"").length,Ln=!U&&Vt>0&&Pn===Vt,ur=async()=>{try{qe(""),await c(b)}catch(D){Z(""),qe(D?.message==="SAS_MAX_ATTEMPTS"?a("sas.tooManyAttempts"):a("sas.incorrect"))}},Rt={"fa-user":{sw:1.9,e:[["circle",{cx:12,cy:8,r:3.6}],["path",{d:"M5 20c0-3.5 3-5.5 7-5.5s7 2 7 5.5"}]]},"fa-lock":{sw:2,e:[["path",{d:"M7 11V7a5 5 0 0 1 10 0v4"}],["rect",{x:4.5,y:11,width:15,height:9,rx:2.2}]]},"fa-plus":{sw:2.1,e:[["path",{d:"M12 5v14M5 12h14"}]]},"fa-link":{sw:2,e:[["path",{d:"M9.5 14.5l5-5M8 11l-2.2 2.2a3.5 3.5 0 0 0 4.95 4.95L13 16M16 13l2.2-2.2a3.5 3.5 0 0 0-4.95-4.95L11 8"}]]},"fa-bolt":{sw:2.1,e:[["path",{d:"M13 2L4.5 13H11l-1 9 8.5-11H12l1-9z"}]]},"fa-camera":{sw:1.8,e:[["path",{d:"M2 8.5V6.5A2.5 2.5 0 0 1 4.5 4h2M17.5 4h2A2.5 2.5 0 0 1 22 6.5v2M22 15.5v2a2.5 2.5 0 0 1-2.5 2.5h-2M6.5 20h-2A2.5 2.5 0 0 1 2 17.5v-2"}],["circle",{cx:12,cy:12,r:3.2}]]},"fa-qrcode":{sw:1.9,e:[["rect",{x:3,y:3,width:7,height:7,rx:1.3}],["rect",{x:14,y:3,width:7,height:7,rx:1.3}],["rect",{x:3,y:14,width:7,height:7,rx:1.3}],["path",{d:"M14 14h3v3M21 14v.01M14 21h.01M21 21v-4M17.5 21H21"}]]},"fa-chevron-right":{sw:2,e:[["path",{d:"M9 6l6 6-6 6"}]]},"fa-chevron-left":{sw:2,e:[["path",{d:"M15 6l-6 6 6 6"}]]},"fa-chevron-down":{sw:2,e:[["path",{d:"M6 9l6 6 6-6"}]]},"fa-circle-notch":{sw:2,e:[["path",{d:"M21 12a9 9 0 1 1-6.2-8.6"}]]},"fa-check":{sw:2.4,e:[["path",{d:"M20 6L9 17l-5-5"}]]},"fa-check-circle":{sw:2,e:[["circle",{cx:12,cy:12,r:9}],["path",{d:"M8.5 12.4l2.4 2.4 4.6-5"}]]},"fa-shield-alt":{sw:1.9,e:[["path",{d:"M12 2.6l7 3v5.1c0 4.5-3 8.3-7 10.2-4-1.9-7-5.7-7-10.2V5.6l7-3z"}],["path",{d:"M9 12l2 2 4-4.1"}]]},"fa-download":{sw:2,e:[["path",{d:"M12 3v12M12 15l-4.5-4.5M12 15l4.5-4.5"}],["path",{d:"M4 20h16"}]]},"fa-clock":{sw:1.8,e:[["circle",{cx:12,cy:13,r:8}],["path",{d:"M12 9v4l2.5 2M9 2h6"}]]},"fa-times":{sw:2.2,e:[["path",{d:"M18 6L6 18M6 6l12 12"}]]},"fa-eye":{sw:1.9,e:[["path",{d:"M2 12s3.6-7 10-7 10 7 10 7-3.6 7-10 7-10-7-10-7z"}],["circle",{cx:12,cy:12,r:3}]]}},Fe=(D,L)=>{L=L||{};let pe=Rt[D];if(!pe){let tt={};return L.color&&(tt.color=L.color),L.fontSize&&(tt.fontSize=L.fontSize),L.animation&&(tt.animation=L.animation),L.style&&Object.assign(tt,L.style),f("i",{key:L.key,className:`fas ${D}`,style:tt})}let De=L.fontSize?parseFloat(L.fontSize):16,Oe={};return L.animation&&(Oe.animation=L.animation,Oe.transformOrigin="center",Oe.transformBox="fill-box"),L.style&&Object.assign(Oe,L.style),f("svg",{key:L.key,className:D,width:De,height:De,viewBox:"0 0 24 24",fill:"none",stroke:L.color||"currentColor",strokeWidth:pe.sw||2,strokeLinecap:"round",strokeLinejoin:"round",style:Oe},pe.e.map((tt,Un)=>f(tt[0],Object.assign({key:Un},tt[1]))))},fr=f("div",{key:"left",className:"sb-start-left",style:{flex:"1.05 1 380px",position:"relative",overflow:"hidden",minHeight:"100vh",boxSizing:"border-box",padding:"46px",display:"flex",flexDirection:"column",justifyContent:"space-between",gap:"36px",borderInlineEnd:"1px solid rgba(var(--sb-ink), 0.06)",background:"radial-gradient(900px 600px at 25% 18%, rgba(var(--sb-orange-rgb), 0.07), transparent 62%), radial-gradient(800px 700px at 80% 92%, rgba(var(--sb-green-rgb), 0.06), transparent 60%), var(--sb-bg-deep)"}},[f("div",{key:"herowrap",style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",position:"relative",zIndex:2}},f("div",{key:"hero",style:{maxWidth:"560px"}},[f("h1",{key:"h1",style:{margin:"0 0 14px",fontSize:"34px",fontWeight:800,letterSpacing:"-1.1px",lineHeight:1.1,color:"var(--sb-text-1)"}},[a("hero.headlineTop"),f("br",{key:"br"}),a("hero.headlineBottom")]),f("p",{key:"p",style:{margin:"0 0 38px",fontSize:"14.5px",lineHeight:1.6,color:"var(--sb-text-7)",maxWidth:"390px"}},a("hero.subheading")),f("div",{key:"channel",style:{display:"flex",alignItems:"center",gap:"32px",flexWrap:"wrap"}},[f("svg",{key:"svg",viewBox:"0 0 380 200",role:"img","aria-label":a("hero.diagramAlt"),style:{display:"block",width:"100%",maxWidth:"380px",height:"auto",overflow:"visible"}},[f("line",{key:"l0",x1:30,y1:100,x2:330,y2:100,stroke:se,strokeWidth:1.5,strokeOpacity:.75}),f("circle",{key:"p0",r:3.6,fill:"var(--sb-orange-2)",style:{offsetPath:"path('M30,100 L330,100')",animation:"sbTrav 2.8s linear infinite"}}),f("g",{key:"g1",style:{animation:"sbIn1 14s linear infinite"}},[f("line",{key:"a",x1:30,y1:100,x2:250,y2:26,stroke:se,strokeWidth:1.4,strokeOpacity:.7}),f("line",{key:"b",x1:250,y1:26,x2:330,y2:100,stroke:ue,strokeWidth:1.2,strokeOpacity:.3}),f("circle",{key:"p",r:3.2,fill:"var(--sb-orange-2)",style:{offsetPath:"path('M30,100 L250,26')",animation:"sbTrav 3s linear .6s infinite"}}),f("circle",{key:"n",cx:250,cy:26,r:5,fill:"var(--sb-bg-deep)",stroke:"var(--sb-diag-stroke)",strokeWidth:1.2}),f("text",{key:"t",x:250,y:8,textAnchor:"middle",fontFamily:Me,fontSize:12,fill:"var(--sb-diag-label)"},"mara")]),f("circle",{key:"r1",cx:250,cy:26,r:5,fill:"none",stroke:se,strokeOpacity:.6,style:{animation:"sbRing1 14s linear infinite"}}),f("g",{key:"g2",style:{animation:"sbIn2 14s linear infinite"}},[f("line",{key:"a",x1:30,y1:100,x2:250,y2:174,stroke:se,strokeWidth:1.4,strokeOpacity:.7}),f("line",{key:"b",x1:250,y1:174,x2:330,y2:100,stroke:ue,strokeWidth:1.2,strokeOpacity:.3}),f("line",{key:"c",x1:250,y1:26,x2:250,y2:174,stroke:ue,strokeWidth:1.2,strokeOpacity:.3}),f("circle",{key:"p",r:3.2,fill:"var(--sb-orange-2)",style:{offsetPath:"path('M30,100 L250,174')",animation:"sbTrav 3s linear .3s infinite"}}),f("circle",{key:"q",r:2.8,fill:ue,style:{offsetPath:"path('M250,26 L250,174')",animation:"sbTrav 3.4s linear 1.2s infinite"}}),f("circle",{key:"n",cx:250,cy:174,r:5,fill:"var(--sb-bg-deep)",stroke:"var(--sb-diag-stroke)",strokeWidth:1.2}),f("text",{key:"t",x:250,y:194,textAnchor:"middle",fontFamily:Me,fontSize:12,fill:"var(--sb-diag-label)"},"tobi")]),f("circle",{key:"r2",cx:250,cy:174,r:5,fill:"none",stroke:se,strokeOpacity:.6,style:{animation:"sbRing2 14s linear infinite"}}),f("circle",{key:"pe",cx:330,cy:100,r:5,fill:"var(--sb-bg-deep)",stroke:"var(--sb-diag-stroke)",strokeWidth:1.2}),f("text",{key:"pt",x:346,y:104,fontFamily:Me,fontSize:12,fill:"var(--sb-diag-label)"},"peer"),f("circle",{key:"yh",cx:30,cy:100,r:15,fill:se,fillOpacity:.09}),f("circle",{key:"yc",cx:30,cy:100,r:6,fill:se}),f("text",{key:"yt",x:30,y:126,textAnchor:"middle",fontFamily:Me,fontSize:12,fill:"var(--sb-diag-text)"},a("mesh.you"))]),f("div",{key:"log",style:{display:"flex",flexDirection:"column",gap:"12px",fontFamily:Me,fontSize:"12px",color:"var(--sb-diag-dim)"}},[f("div",{key:"r0",style:{animation:"sbRow0 14s linear infinite"}},a("mesh.peer")),f("div",{key:"r1",style:{animation:"sbRow1 14s linear infinite"}},a("mesh.joined2")),f("div",{key:"r2",style:{animation:"sbRow2 14s linear infinite"}},a("mesh.joined3"))])])])),f("div",{key:"badges",style:{position:"relative",zIndex:2,display:"flex",flexWrap:"wrap",gap:"8px"}},["ECDH P-384","AES-256-GCM",a("sec.pfsShort")].map(D=>f("span",{key:D,style:{display:"inline-flex",alignItems:"center",gap:"6px",padding:"6px 11px",borderRadius:"8px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"rgba(var(--sb-ink), 0.025)",fontFamily:Me,fontSize:"11px",fontWeight:500,color:"var(--sb-text-6)"}},[f("span",{key:"dot",style:{width:"5px",height:"5px",borderRadius:"50%",background:ue}}),D])))]),Lr=Ft&&f("div",{key:"seg",style:{position:"relative",display:"flex",padding:"4px",borderRadius:"12px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"var(--sb-surface)",marginBottom:"26px"}},[f("div",{key:"ind",style:{position:"absolute",top:"4px",bottom:"4px",insetInlineStart:"4px",width:"calc(50% - 4px)",borderRadius:"9px",background:"rgba(var(--sb-ink), 0.07)",border:"1px solid rgba(var(--sb-ink), 0.08)",transform:ie?"translateX(0%)":`translateX(${100*dr}%)`,transition:"transform .26s cubic-bezier(.3,.8,.3,1)"}}),f("button",{key:"c",className:"sb-seg-btn",onClick:()=>mt("create"),style:{position:"relative",zIndex:1,flex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"11px",border:"none",background:"transparent",color:ie?"var(--sb-text-1)":"var(--sb-text-8)",fontFamily:"inherit",fontSize:"14px",fontWeight:700,cursor:"pointer"}},[Fe("fa-plus",{key:"i"}),a("action.create")]),f("button",{key:"j",className:"sb-seg-btn",onClick:()=>mt("join"),style:{position:"relative",zIndex:1,flex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"11px",border:"none",background:"transparent",color:ie?"var(--sb-text-8)":"var(--sb-text-1)",fontFamily:"inherit",fontSize:"14px",fontWeight:700,cursor:"pointer"}},[Fe("fa-link",{key:"i"}),a("action.join")])]),jt=D=>f("button",{key:D||"back",className:"sb-soft-btn",onClick:Xt,style:{display:"inline-flex",alignItems:"center",gap:"6px",marginBottom:"14px",paddingBlock:"6px",paddingInlineStart:"8px",paddingInlineEnd:"11px",borderRadius:"8px",border:"1px solid rgba(var(--sb-ink), 0.08)",background:"transparent",color:"var(--sb-text-6)",fontFamily:"inherit",fontSize:"12.5px",fontWeight:600,cursor:"pointer"}},[Fe("fa-chevron-left",{key:"i"}),a("action.back")]),Jt=ie&&Ye?Math.max(0,Math.ceil((Ye+et-Ke)/1e3)):null,Qn=Jt===null?null:`${Math.floor(Jt/60)}:${String(Jt%60).padStart(2,"0")}`,Ot=f("div",{key:"card",style:{borderRadius:"16px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"var(--sb-surface)",overflow:"hidden",marginBottom:ie?"26px":"16px"}},[ee&&f("button",{key:"showqr",className:"sb-qr-row",onClick:()=>yt(!0),style:{width:"100%",display:"flex",alignItems:"center",gap:"14px",padding:"14px 16px",border:"none",background:"transparent",color:"inherit",fontFamily:"inherit",cursor:"pointer",textAlign:"start",transition:"background .15s"}},[f("span",{key:"ic",style:{flex:"none",width:"48px",height:"48px",padding:"5px",borderRadius:"9px",background:"#fff"}},f("img",{src:ee,alt:"",style:{width:"100%",height:"100%",objectFit:"contain",display:"block",imageRendering:"pixelated"}})),f("span",{key:"tx",style:{flex:1,minWidth:0}},[f("span",{key:"t",style:{display:"block",fontSize:"15px",fontWeight:700,color:"var(--sb-text-1)"}},a("qr.showTitle")),f("span",{key:"s",style:{display:"block",fontSize:"12.5px",color:"var(--sb-text-7)",marginTop:"2px"}},(V||0)>1?a("qr.showSubtitleFrames",{frames:V}):a("qr.showSubtitle"))]),Fe("fa-chevron-right",{color:"var(--sb-text-9)"})]),ee&&f("div",{key:"div",style:{height:"1px",background:"rgba(var(--sb-ink), 0.06)"}}),f("div",{key:"code",style:{padding:"12px 16px 16px"}},[f("div",{key:"bar",style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"10px",marginBottom:"10px"}},[f("span",{key:"l",style:{fontSize:"12.5px",fontWeight:600,color:"var(--sb-text-6)"}},a("cred.orCopy")),f("span",{key:"r",style:{display:"flex",alignItems:"center",gap:"12px"}},[Qn&&f("span",{key:"exp",dir:"ltr",style:{fontFamily:Me,fontSize:"11px",color:Jt<60?"var(--sb-red)":"var(--sb-text-9)"}},Qn),f("button",{key:"copy",className:"sb-soft-btn",onClick:On,style:{display:"inline-flex",alignItems:"center",gap:"6px",padding:"6px 11px",borderRadius:"8px",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"rgba(var(--sb-ink), 0.03)",color:"var(--sb-text-2)",fontFamily:"inherit",fontSize:"12.5px",fontWeight:700,cursor:"pointer"}},[Ht&&Fe("fa-check",{key:"i",color:ue}),Ht?a("action.copied"):a("action.copy")])])]),f("div",{key:"codewrap",onClick:()=>pn(D=>!D),style:{position:"relative",borderRadius:"11px",border:"1px solid rgba(var(--sb-ink), 0.05)",background:"var(--sb-bg)",overflow:"hidden",cursor:"pointer"}},[f("div",{key:"code",dir:"ltr",className:"sb-sc",style:{fontFamily:Me,fontSize:"11.5px",lineHeight:1.6,color:"var(--sb-text-code)",wordBreak:"break-all",padding:"11px 13px",maxHeight:"78px",overflowY:Mt?"auto":"hidden",filter:Mt?"none":"blur(5px)",userSelect:Mt?"text":"none",transition:"filter .25s"}},Fn),!Mt&&f("span",{key:"reveal",style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"0 12px",textAlign:"center",color:"var(--sb-text-3)",fontSize:"12.5px",fontWeight:600}},[Fe("fa-eye",{key:"i"}),a("cred.reveal")])])])]),Pt;if(N){let D=X,L=(z||"").replace(/[-\s]/g,""),pe=L.length,De=b.replace(/[-\s]/g,""),Oe=pe>0&&De.length===pe,tt=Oe&&De===L,Un=Oe&&!tt,xt=U,en=Q,Ct=xt&&!en,yn=Math.min(3,pe),bn=Ln&&tt,Hr=Pe=>f("svg",{key:Pe,width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"var(--sb-on-green-2)",strokeWidth:3.2,strokeLinecap:"round",strokeLinejoin:"round"},f("path",{d:"M5 12.5l4.2 4.2L19 7",strokeDasharray:24,style:{animation:"svDraw .35s ease-out .1s both"}})),tn=(Pe,Be)=>({position:"relative",width:"22px",height:"22px",flex:"none",borderRadius:"50%",display:"grid",placeItems:"center",transition:"all .3s",border:`1.5px solid ${Pe?ue:Be?"rgba(var(--sb-green-rgb), 0.5)":"rgba(var(--sb-ink), 0.18)"}`,background:Pe?ue:"transparent"}),Zn=(Pe,Be)=>f("span",{key:Pe,style:{fontSize:"13px",fontWeight:600,color:"var(--sb-text-4)"}},Be),$t=L.split("").map((Pe,Be)=>{let xn=De[Be]||"",Gn=Ze&&!xt&&Be===De.length&&!Oe,vn="rgba(var(--sb-ink), 0.09)",Hn="var(--sb-text-1)",wn="none";return xn&&(vn="rgba(var(--sb-ink), 0.2)",wn="otpPop .28s cubic-bezier(.2,.8,.3,1.2) both"),Gn&&(vn="rgba(var(--sb-orange-rgb), 0.65)"),Un&&(vn="rgba(var(--sb-red-rgb), 0.6)",Hn="var(--sb-red)"),tt&&(wn=`otpOk .45s cubic-bezier(.2,.8,.3,1) ${Be*55}ms both`),f("span",{key:Be,style:{position:"relative",flex:1,minWidth:0,height:"56px",display:"grid",placeItems:"center",borderRadius:"12px",border:`1px solid ${vn}`,background:"var(--sb-surface)",fontFamily:Me,fontSize:"22px",fontWeight:600,color:Hn,transition:"border-color .15s, color .15s, box-shadow .15s",animation:wn,marginInlineStart:Be===yn&&pe>yn?"10px":0,boxShadow:Gn?"0 0 0 3px rgba(var(--sb-orange-rgb), 0.12)":"none"}},[xn,Gn&&f("span",{key:"caret",style:{position:"absolute",left:"50%",top:"50%",width:"2px",height:"22px",margin:"-11px 0 0 -1px",borderRadius:"1px",background:se,animation:"otpCaret 1s steps(1) infinite"}})])});Pt=f("div",{key:"verify",style:{animation:"sbUp .3s ease"}},[!D&&jt("vback"),f("h2",{key:"t",style:{margin:"0 0 8px",fontSize:"22px",fontWeight:800,letterSpacing:"-0.5px",color:"var(--sb-text-1)"}},D?a("sasv.titleDone"):a("sasv.title")),f("p",{key:"sub",style:{margin:"0 0 24px",fontSize:"13.5px",lineHeight:1.55,color:"var(--sb-text-7)",textWrap:"pretty"}},D?a("sasv.descDone"):a("sasv.desc")),f("div",{key:"code",style:{padding:"20px 0 22px",borderTop:"1px solid rgba(var(--sb-ink), 0.06)",borderBottom:"1px solid rgba(var(--sb-ink), 0.06)",marginBottom:"22px",textAlign:"center"}},f("div",{dir:"ltr",style:{display:"inline-flex",alignItems:"center",gap:"18px",fontFamily:Me,fontSize:"34px",fontWeight:600,letterSpacing:"8px",lineHeight:1,color:D?E:"var(--sb-text-1)",transition:"color .4s"}},pe?[f("span",{key:"a"},L.slice(0,yn)),f("span",{key:"b"},L.slice(yn))]:f("span",{style:{fontSize:"14px",letterSpacing:0,color:"var(--sb-text-8)"}},a("verify.waiting")))),!D&&f("div",{key:"form"},[f("div",{key:"lbl",style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"10px"}},[f("span",{key:"l",style:{fontSize:"12.5px",fontWeight:600,color:"var(--sb-text-6)"}},a("sasv.enter")),f("span",{key:"h",style:{fontFamily:Me,fontSize:"11px",transition:"color .2s",color:Oe?tt?E:"var(--sb-red)":"var(--sb-text-faint)"}},Oe?tt?a("sasv.match"):a("sasv.noMatch"):`${De.length} / ${pe||Ss}`)]),f("label",{key:"cells",dir:"ltr",style:{position:"relative",display:"flex",gap:"6px",marginBottom:Ae?"8px":"18px",cursor:"text",animation:Un?`otpShake .4s ease ${dn%2?"0s":"0.001s"}`:"none"}},[...$t,f("input",{key:"in",dir:"ltr",value:b,disabled:xt||!pe,autoFocus:!0,autoComplete:"one-time-code",spellCheck:!1,type:"text",inputMode:"numeric",pattern:"[0-9]*",maxLength:pe||Ss,"aria-label":a("sasv.enter"),onChange:Pe=>{let Be=Pe.target.value.replace(/\D/g,"").slice(0,pe||Ss);pe&&Be.length===pe&&Be!==L&&ct(xn=>xn+1),Z(Be),Ae&&qe("")},onFocus:()=>Ge(!0),onBlur:()=>Ge(!1),style:{position:"absolute",inset:0,width:"100%",height:"100%",opacity:0,border:"none",outline:"none",background:"transparent",color:"transparent",caretColor:"transparent",fontSize:"16px"}})]),Ae&&f("p",{key:"err",style:{color:"var(--sb-red)",fontSize:"12.5px",margin:"0 0 16px"}},Ae)]),f("div",{key:"link",style:{display:"flex",alignItems:"center",gap:"12px",marginBottom:"20px"}},[f("div",{key:"you",style:{display:"flex",alignItems:"center",gap:"9px",flex:"none"}},[f("span",{key:"r",style:tn(xt,!1)},xt&&Hr("c")),Zn("l",a("sasv.you"))]),f("div",{key:"bar",style:{position:"relative",flex:1,height:"2px",borderRadius:"2px",background:"rgba(var(--sb-ink), 0.08)",overflow:"hidden"}},[f("div",{key:"fill",style:{position:"absolute",insetInlineStart:0,top:0,bottom:0,width:en?"100%":xt?"50%":"0%",background:ue,transition:"width .6s cubic-bezier(.4,0,.2,1)"}}),Ct&&f("div",{key:"scan",style:{position:"absolute",top:0,bottom:0,width:"30%",background:"linear-gradient(90deg, transparent, rgba(var(--sb-green-rgb), 0.9), transparent)",animation:"svScan 1.1s ease-in-out infinite"}})]),f("div",{key:"peer",style:{display:"flex",alignItems:"center",gap:"9px",flex:"none"}},[Zn("l",a("sasv.peer")),f("span",{key:"r",style:tn(en,xt)},en&&Hr("c"))])]),D?f("div",{key:"opening",style:{animation:"svFade .35s ease .3s both"}},f("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:"10px",padding:"14px 0 4px",fontSize:"13.5px",fontWeight:600,color:"var(--sb-text-4)"}},[a("sasv.opening"),f("span",{key:"d",style:{display:"inline-flex",gap:"4px"}},[0,.15,.3].map((Pe,Be)=>f("span",{key:Be,style:{width:"4px",height:"4px",borderRadius:"50%",background:ue,animation:`svDot 1.2s ease-in-out ${Pe}s infinite`}})))])):f("div",{key:"btns"},[f("button",{key:"ok",onClick:ur,disabled:!bn,style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"14px",borderRadius:"13px",border:"none",fontFamily:"inherit",fontSize:"14.5px",fontWeight:700,transition:"background .25s, color .25s",background:xt?"rgba(var(--sb-green-rgb), 0.12)":bn?ue:"rgba(var(--sb-ink), 0.05)",color:xt?E:bn?"var(--sb-on-green-2)":"var(--sb-text-faint)",cursor:bn?"pointer":"default"}},xt?a("sasv.waitingPeer"):a("verify.confirm")),f("button",{key:"no",onClick:un,className:"sb-sas-mismatch",style:{display:"flex",alignItems:"center",justifyContent:"center",width:"100%",marginTop:"10px",padding:"8px",border:"none",background:"transparent",color:"var(--sb-text-7)",fontFamily:"inherit",fontSize:"13px",fontWeight:600,cursor:"pointer",transition:"color .15s"},onMouseEnter:Pe=>{Pe.currentTarget.style.color="var(--sb-red)"},onMouseLeave:Pe=>{Pe.currentTarget.style.color="var(--sb-text-7)"}},a("sasv.codesDiffer"))])])}else if(hn){let D=[a("handshake.step1"),a("handshake.step2"),a("handshake.step3")];Pt=f("div",{key:"gen",style:{animation:"sbUp .28s ease"}},[f("div",{key:"head",style:{display:"flex",alignItems:"center",gap:"13px",marginBottom:"22px"}},[f("div",{key:"sp",style:{width:"44px",height:"44px",flex:"none",display:"grid",placeItems:"center"}},Fe("fa-circle-notch",{color:se,fontSize:"32px",animation:"sbSpin 1s linear infinite"})),f("div",{key:"tx"},[f("h2",{key:"t",style:{margin:0,fontSize:"20px",fontWeight:800,letterSpacing:"-0.4px",color:"var(--sb-text-1)"}},ie?a("handshake.securingTitle"):a("handshake.answerTitle")),f("p",{key:"s",style:{margin:"3px 0 0",fontSize:"13px",color:"var(--sb-text-7)"}},a("handshake.securingDesc"))])]),f("div",{key:"steps",style:{display:"flex",flexDirection:"column",borderRadius:"13px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"var(--sb-surface)",overflow:"hidden"}},D.map((L,pe)=>{let De=Qt>pe,Oe=Qt===pe;return f("div",{key:pe,style:{display:"flex",alignItems:"center",gap:"12px",padding:"13px 15px",borderTop:pe?"1px solid rgba(var(--sb-ink), 0.05)":"none",transition:"background .3s",background:De?"rgba(var(--sb-green-rgb), 0.04)":"transparent"}},[f("div",{key:"d",style:{flex:"none",width:"20px",height:"20px",borderRadius:"50%",display:"grid",placeItems:"center",background:De?"rgba(var(--sb-green-rgb), 0.12)":Oe?"rgba(var(--sb-orange-rgb), 0.12)":"rgba(var(--sb-ink), 0.04)",border:`1px solid ${De?"rgba(var(--sb-green-rgb), 0.3)":Oe?"rgba(var(--sb-orange-rgb), 0.3)":"rgba(var(--sb-ink), 0.1)"}`,transition:"all .3s"}},De?Fe("fa-check",{color:ue,fontSize:"11px"}):f("span",{style:{width:"6px",height:"6px",borderRadius:"50%",background:Oe?se:"var(--sb-text-faint)",animation:Oe?"sbBlink 1s ease-in-out infinite":"none"}})),f("span",{key:"l",style:{fontSize:"13.5px",color:De?"var(--sb-text-4)":Oe?"var(--sb-text-2)":"var(--sb-text-9)",transition:"color .3s"}},L)])}))])}else if(Wt||Dn)Pt=f("div",{key:"cred",style:{animation:"sbUp .3s ease"}},[jt("cback"),f("h2",{key:"h",style:{margin:"0 0 8px",fontSize:"26px",fontWeight:800,letterSpacing:"-0.7px",color:"var(--sb-text-1)"}},ie?a("handshake.shareTitle"):a("handshake.sendAnswerTitle")),f("p",{key:"p",style:{margin:"0 0 24px",fontSize:"14px",lineHeight:1.55,color:"var(--sb-text-7)"}},ie?a("handshake.shareDesc"):a("handshake.sendAnswerDesc")),Ot,Wt&&f("div",{key:"offerextra"},[f("div",{key:"lbl",style:{fontSize:"13.5px",fontWeight:600,color:"var(--sb-text-3)",marginBottom:"10px"}},a("handshake.thenReceive")),f("textarea",{key:"ta",dir:"ltr",value:p,onChange:D=>{k(D.target.value),D.target.value.trim().length>0&&typeof ne=="function"&&ne()},rows:3,placeholder:a("handshake.pasteAnswerPlaceholder"),style:{display:"block",width:"100%",resize:"none",borderRadius:"14px",border:`1px solid ${Et?"rgba(var(--sb-orange-rgb), 0.45)":"rgba(var(--sb-ink), 0.08)"}`,background:"var(--sb-surface)",outline:"none",color:"var(--sb-text-2)",fontFamily:Me,fontSize:"12.5px",lineHeight:1.5,padding:"13px 15px",marginBottom:"12px",transition:"border-color .15s"}}),f("div",{key:"btns",style:{display:"flex",gap:"10px"}},[f("button",{key:"scan",className:"sb-scan-btn",onClick:()=>O(!0),style:{flex:"none",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"0 18px",height:"50px",borderRadius:"13px",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"transparent",color:"var(--sb-text-2)",fontFamily:"inherit",fontSize:"14px",fontWeight:700,cursor:"pointer"}},[f("svg",{key:"i",width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0},f("path",{d:"M4 8V5a1 1 0 0 1 1-1h3M16 4h3a1 1 0 0 1 1 1v3M20 16v3a1 1 0 0 1-1 1h-3M8 20H5a1 1 0 0 1-1-1v-3M7 12h10"})),a("action.scan")]),f("button",{key:"est",onClick:r,disabled:!Et,style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:"9px",height:"50px",borderRadius:"13px",border:"none",background:Et?se:"rgba(var(--sb-ink), 0.05)",color:Et?"var(--sb-on-accent)":"var(--sb-text-faint)",fontFamily:"inherit",fontSize:"14.5px",fontWeight:700,cursor:Et?"pointer":"not-allowed",transition:"background .2s, color .2s"}},a("handshake.establish"))])]),Dn&&f("div",{key:"answerextra",style:{display:"flex",alignItems:"center",gap:"12px",padding:"4px 2px"}},[f("span",{key:"i",style:{flex:"none",width:"16px",height:"16px",borderRadius:"50%",border:"2px solid rgba(var(--sb-ink), 0.1)",borderTopColor:se,animation:"sbSpin .9s linear infinite"}}),f("span",{key:"t",style:{fontSize:"13px",lineHeight:1.5,color:"var(--sb-text-7)"}},a("handshake.answerSentNote"))])]);else if(ie)Pt=f("div",{key:"introC",style:{animation:"sbUp .28s ease"}},[f("h2",{key:"h",style:{margin:"0 0 6px",fontSize:"23px",fontWeight:800,letterSpacing:"-0.5px",color:"var(--sb-text-1)"}},a("intro.createTitle")),f("p",{key:"p",style:{margin:"0 0 22px",fontSize:"14px",lineHeight:1.55,color:"var(--sb-text-7)"}},a("intro.createDesc")),f("button",{key:"gen",className:"sb-gen-btn",onClick:()=>{fn(),Je.current&&Le()},style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:"9px",padding:"15px",borderRadius:"13px",border:"none",background:se,color:"var(--sb-on-accent)",fontFamily:"inherit",fontSize:"15px",fontWeight:700,cursor:"pointer",boxShadow:"0 8px 24px rgba(var(--sb-orange-rgb), 0.28)"}},[Fe("fa-bolt",{key:"i"}),a("intro.createCta")])]);else{let D=Kn&&d!=="connecting";Pt=f("div",{key:"introJ",style:{animation:"sbUp .28s ease"}},[f("h2",{key:"h",style:{margin:"0 0 8px",fontSize:"26px",fontWeight:800,letterSpacing:"-0.7px",color:"var(--sb-text-1)"}},a("intro.joinTitle")),f("p",{key:"p",style:{margin:"0 0 24px",fontSize:"14px",lineHeight:1.55,color:"var(--sb-text-7)"}},a("intro.joinDesc")),f("div",{key:"card",style:{borderRadius:"16px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"var(--sb-surface)",overflow:"hidden",marginBottom:"12px"}},[f("button",{key:"scan",className:"sb-qr-row",onClick:()=>{fn(),O(!0)},style:{width:"100%",display:"flex",alignItems:"center",gap:"14px",padding:"14px 16px",border:"none",background:"transparent",color:"inherit",fontFamily:"inherit",cursor:"pointer",textAlign:"start",transition:"background .15s"}},[f("span",{key:"ic",style:{flex:"none",width:"48px",height:"48px",borderRadius:"9px",display:"grid",placeItems:"center",background:"rgba(var(--sb-ink), 0.05)",border:"1px solid rgba(var(--sb-ink), 0.08)",color:"var(--sb-text-2)"}},f("svg",{width:22,height:22,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0},f("path",{d:"M4 8V5a1 1 0 0 1 1-1h3M16 4h3a1 1 0 0 1 1 1v3M20 16v3a1 1 0 0 1-1 1h-3M8 20H5a1 1 0 0 1-1-1v-3M7 12h10"}))),f("span",{key:"tx",style:{flex:1,minWidth:0}},[f("span",{key:"t",style:{display:"block",fontSize:"15px",fontWeight:700,color:"var(--sb-text-1)"}},a("intro.scanTitle")),f("span",{key:"s",style:{display:"block",fontSize:"12.5px",color:"var(--sb-text-7)",marginTop:"2px"}},a("intro.scanSubtitle"))]),Fe("fa-chevron-right",{color:"var(--sb-text-9)"})]),f("div",{key:"div",style:{height:"1px",background:"rgba(var(--sb-ink), 0.06)"}}),f("div",{key:"paste",style:{padding:"12px 16px 16px"}},[f("div",{key:"l",style:{fontSize:"12.5px",fontWeight:600,color:"var(--sb-text-6)",marginBottom:"10px"}},a("intro.orPasteCode")),f("textarea",{key:"ta",dir:"ltr",value:v,onChange:L=>{S(L.target.value),L.target.value.trim().length>0&&typeof ne=="function"&&ne()},rows:3,placeholder:a("intro.pastePlaceholder"),style:{display:"block",width:"100%",resize:"none",borderRadius:"11px",border:`1px solid ${Kn?"rgba(var(--sb-orange-rgb), 0.45)":"rgba(var(--sb-ink), 0.05)"}`,background:"var(--sb-bg)",outline:"none",color:"var(--sb-text-2)",fontFamily:Me,fontSize:"12.5px",lineHeight:1.5,padding:"11px 13px",transition:"border-color .15s"}})])]),f("button",{key:"connect",onClick:()=>{fn(),n()},disabled:!D,style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:"9px",height:"50px",borderRadius:"13px",border:"none",background:D?se:"rgba(var(--sb-ink), 0.05)",color:D?"var(--sb-on-accent)":"var(--sb-text-faint)",fontFamily:"inherit",fontSize:"14.5px",fontWeight:700,cursor:D?"pointer":"not-allowed",transition:"background .2s, color .2s"}},d==="connecting"?a("intro.connecting"):a("intro.connect"))])}let bt="1.0.6",gn=`https://github.com/SecureBitChat/securebit-desktop/releases/download/v${bt}`,_t={android:{name:"Android",format:".apk \xB7 Android 8.0+",icon:"fab fa-android",url:"/downloads/SecureBit-0.8.1.apk"},mac:{name:"macOS",format:".dmg \xB7 Apple Silicon & Intel",icon:"fab fa-apple",url:`${gn}/SecureBit.Chat_${bt}_x64.dmg`},win:{name:"Windows",format:".exe \xB7 64-bit installer",icon:"fab fa-windows",url:`${gn}/SecureBit.Chat_${bt}_x64-setup.exe`},linux:{name:"Linux",format:".AppImage",icon:"fab fa-linux",url:`${gn}/SecureBit.Chat_${bt}_amd64.AppImage`}},Lt=(()=>{let D=(navigator.userAgent||"")+" "+(navigator.platform||"");return/Android/i.test(D)?"android":/Mac|iPhone|iPad|iPod/i.test(D)?"mac":/Win/i.test(D)?"win":/Linux/i.test(D)&&!/Android/i.test(D)?"linux":"win"})(),Br=["mac","win","linux","android"].filter(D=>D!==Lt),Bn=D=>{try{if(D.startsWith("/")){let L=document.createElement("a");L.href=D,L.download="",document.body.appendChild(L),L.click(),L.remove();return}window.open(D,"_blank","noopener")}catch{}},zr=He&&f("div",{key:"platmenu",className:"sb-platforms-menu",style:{position:"absolute",insetInlineStart:0,bottom:"calc(100% + 10px)",width:"344px",maxWidth:"100%",borderRadius:"16px",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"var(--sb-surface)",boxShadow:"0 24px 60px rgba(var(--sb-shadow-rgb), calc(0.55 * var(--sb-shadow-k)))",overflow:"hidden",zIndex:25,animation:"sbUp .2s ease"}},[f("div",{key:"mh",style:{display:"flex",alignItems:"center",gap:"10px",padding:"14px 16px",borderBottom:"1px solid rgba(var(--sb-ink), 0.06)"}},[f("div",{key:"t",style:{flex:1,lineHeight:1.2}},[f("div",{key:"a",style:{fontSize:"14px",fontWeight:800,color:"var(--sb-text-1)"}},a("dl.title")),f("div",{key:"b",style:{fontSize:"11.5px",color:"var(--sb-text-8)"}},a("dl.free"))])]),f("div",{key:"rec",style:{padding:"12px 12px 6px"}},f("button",{key:"b",onClick:()=>Bn(_t[Lt].url),style:{width:"100%",display:"flex",alignItems:"center",gap:"12px",padding:"13px 14px",borderRadius:"12px",border:"1px solid rgba(var(--sb-orange-rgb), 0.4)",background:"rgba(var(--sb-orange-rgb), 0.08)",color:"inherit",fontFamily:"inherit",cursor:"pointer",textAlign:"start"}},[f("span",{key:"ic",style:{flex:"none",display:"grid",placeItems:"center",width:"38px",height:"38px",borderRadius:"11px",background:"rgba(var(--sb-orange-rgb), 0.14)",border:"1px solid rgba(var(--sb-orange-rgb), 0.3)",color:Nn}},f("i",{className:_t[Lt].icon,style:{fontSize:"17px"}})),f("span",{key:"tx",style:{flex:1,minWidth:0}},[f("span",{key:"n",style:{display:"block",fontSize:"13.5px",fontWeight:700,color:"var(--sb-text-1)"}},_t[Lt].name),f("span",{key:"f",style:{display:"block",fontSize:"11px",color:"var(--sb-orange-3)",marginTop:"1px"}},`Recommended for this device \xB7 ${_t[Lt].format}`)]),Fe("fa-download",{color:se})])),f("div",{key:"others",style:{padding:"0 12px 8px",display:"flex",flexDirection:"column",gap:"2px"}},Br.map(D=>f("button",{key:D,onClick:()=>Bn(_t[D].url),style:{width:"100%",display:"flex",alignItems:"center",gap:"12px",padding:"11px 14px",borderRadius:"11px",border:"none",background:"transparent",color:"inherit",fontFamily:"inherit",cursor:"pointer",textAlign:"start"}},[f("span",{key:"ic",style:{flex:"none",display:"grid",placeItems:"center",width:"34px",height:"34px",borderRadius:"10px",background:"rgba(var(--sb-ink), 0.04)",border:"1px solid rgba(var(--sb-ink), 0.08)",color:"var(--sb-text-4)"}},f("i",{className:_t[D].icon,style:{fontSize:"15px"}})),f("span",{key:"tx",style:{flex:1,minWidth:0}},[f("span",{key:"n",style:{display:"block",fontSize:"13px",fontWeight:600,color:"var(--sb-text-2)"}},_t[D].name),f("span",{key:"f",style:{display:"block",fontSize:"11px",color:"var(--sb-text-8)",marginTop:"1px"}},_t[D].format)]),Fe("fa-download",{color:"var(--sb-text-7)"})]))),f("div",{key:"soon",style:{display:"flex",alignItems:"center",gap:"9px",padding:"12px 16px",borderTop:"1px solid rgba(var(--sb-ink), 0.06)",background:"rgba(var(--sb-ink), 0.015)"}},[Fe("fa-clock",{key:"i",color:"var(--sb-text-9)"}),f("span",{key:"t",style:{fontSize:"11.5px",lineHeight:1.45,color:"var(--sb-text-8)"}},a("dl.soon"))])]),Ur=f("div",{key:"footer",className:"sb-conn-footer",style:{position:"relative",marginTop:"30px",paddingTop:"18px",borderTop:"1px solid rgba(var(--sb-ink), 0.06)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"12px",flexWrap:"wrap"}},[f("button",{key:"dl",onClick:()=>Tn(D=>!D),style:{display:"inline-flex",alignItems:"center",gap:"9px",paddingBlock:"8px",paddingInlineStart:"9px",paddingInlineEnd:"13px",borderRadius:"10px",border:`1px solid ${He?"rgba(var(--sb-orange-rgb), 0.4)":"rgba(var(--sb-ink), 0.08)"}`,background:He?"rgba(var(--sb-orange-rgb), 0.06)":"rgba(var(--sb-ink), 0.02)",color:"inherit",fontFamily:"inherit",cursor:"pointer",transition:"all .15s"}},[Fe("fa-download",{key:"i",color:se}),f("span",{key:"t",style:{fontSize:"12.5px",fontWeight:700,color:"var(--sb-text-2)"}},a("action.downloadDesktop")),Fe("fa-chevron-down",{key:"c",color:"var(--sb-text-9)",style:{fontSize:"11px",transform:He?"rotate(180deg)":"rotate(0deg)",transition:"transform .2s"}})]),f("button",{key:"settings",className:"sb-link",onClick:()=>vt&&vt(!0),style:{display:"inline-flex",alignItems:"center",gap:"7px",background:"none",border:"none",color:"var(--sb-text-7)",fontFamily:"inherit",fontSize:"12.5px",fontWeight:600,cursor:"pointer"}},[Fe("fa-sliders-h",{key:"i"}),a("action.advancedSettings")]),zr]),zn=ot&&typeof window<"u"&&window.IceServerSettings?f(window.IceServerSettings,{key:"ice-settings",isOpen:!0,embedded:!0,onClose:()=>vt(!1),initial:{useCustom:Array.isArray(Re)&&Re.length>0,serversText:Yt,privacyMode:at?"relay-only":"standard",persisted:wt},hasSaved:wt,onApply:gt,onForget:te}):null,Zt=f("div",{key:"right",style:Ne?{flex:1,minWidth:0,width:"100%",position:"relative",overflow:"hidden",display:"flex",flexDirection:"column",height:"100%"}:{flex:"0.95 1 460px",minWidth:"min(100%, 320px)",position:"relative",overflow:"hidden",display:"flex",flexDirection:"column",height:"100vh"}},[f("div",{key:"scroll",className:"custom-scrollbar",style:{flex:1,overflowY:"auto",display:"flex",flexDirection:"column",padding:"42px 44px"}},f("div",{style:{maxWidth:"430px",width:"100%",margin:"auto"}},[f("div",{key:"kicker",style:{fontFamily:Me,fontSize:"11px",fontWeight:600,color:"var(--sb-text-9)",textTransform:"uppercase",letterSpacing:"1px",marginBottom:"10px"}},Pr),Lr,Pt,Ur])),zn]),gr=Gt&&ee&&f("div",{key:"qrmodal",onClick:()=>yt(!1),style:{position:"fixed",inset:0,zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",padding:"32px",background:"rgba(var(--sb-scrim-rgb), 0.82)",backdropFilter:"blur(10px)",animation:"sbUp .2s ease"}},f("div",{onClick:D=>D.stopPropagation(),style:{width:"100%",maxWidth:"460px",borderRadius:"22px",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"var(--sb-bg)",boxShadow:"0 30px 90px rgba(var(--sb-shadow-rgb), calc(0.6 * var(--sb-shadow-k)))",overflow:"hidden"}},[f("div",{key:"head",style:{display:"flex",alignItems:"center",gap:"11px",padding:"18px 20px",borderBottom:"1px solid rgba(var(--sb-ink), 0.06)"}},[f("div",{key:"tx",style:{flex:1,lineHeight:1.2}},[f("div",{key:"t",style:{fontSize:"15.5px",fontWeight:800,color:"var(--sb-text-1)"}},ie?a("handshake.shareTitle"):a("handshake.sendAnswerTitle")),f("div",{key:"s",style:{fontSize:"12px",color:"var(--sb-text-8)"}},`${ie?"offer":"answer"} \xB7 one-time`)]),f("button",{key:"x",onClick:()=>yt(!1),style:{width:"32px",height:"32px",display:"grid",placeItems:"center",borderRadius:"9px",border:"none",background:"rgba(var(--sb-ink), 0.05)",color:"var(--sb-text-6)",cursor:"pointer"}},Fe("fa-times"))]),f("div",{key:"body",style:{padding:"22px 24px 24px"}},[f("div",{key:"qr",style:{position:"relative",width:"100%",aspectRatio:"1",borderRadius:"18px",overflow:"hidden",background:"#fff",padding:"18px",display:"grid",placeItems:"center"}},f("img",{src:ee,alt:a("chatHdr.qrCode"),style:{width:"100%",height:"100%",objectFit:"contain",display:"block"}})),f("div",{key:"ctrls",style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"12px",marginTop:"18px"}},[(V||0)>=1&&f("div",{key:"frame",style:{display:"flex",alignItems:"center",gap:"9px"}},[f("span",{key:"l",style:{fontFamily:Me,fontSize:"12px",fontWeight:600,color:"var(--sb-text-6)"}},`Frame ${Math.max(1,re||1)} / ${V||1}`)]),(V||0)>1&&f("div",{key:"nav",style:{display:"flex",alignItems:"center",gap:"6px"}},[f("button",{key:"prev",onClick:$,style:{width:"40px",height:"36px",display:"grid",placeItems:"center",borderRadius:"10px",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"rgba(var(--sb-ink), 0.04)",color:"var(--sb-text-4)",cursor:"pointer"}},Fe("fa-chevron-left")),f("button",{key:"auto",onClick:me,style:{display:"inline-flex",alignItems:"center",gap:"7px",padding:"9px 18px",borderRadius:"10px",border:`1px solid ${oe?"rgba(var(--sb-ink), 0.1)":"rgba(var(--sb-orange-rgb), 0.45)"}`,background:oe?"rgba(var(--sb-ink), 0.04)":"rgba(var(--sb-orange-rgb), 0.08)",color:oe?"var(--sb-text-6)":Nn,fontFamily:"inherit",fontSize:"13px",fontWeight:600,cursor:"pointer"}},oe?"Manual":"Auto"),f("button",{key:"next",onClick:B,style:{width:"40px",height:"36px",display:"grid",placeItems:"center",borderRadius:"10px",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"rgba(var(--sb-ink), 0.04)",color:"var(--sb-text-4)",cursor:"pointer"}},Fe("fa-chevron-right"))]),f("p",{key:"hint",style:{margin:"2px 0 0",textAlign:"center",fontSize:"12px",lineHeight:1.5,color:"var(--sb-text-9)"}},(V||0)>1?a("handshake.qrHintFrames",{frames:V}):a("handshake.qrHint"))])])])),mr=f("div",{key:"hero",style:{display:"flex",flexWrap:"wrap",minHeight:"100vh",width:"100%",background:"var(--sb-bg)",color:"var(--sb-text-2)"}},[fr,Zt]),Xn=Ft&&f(UniqueFeatureSlider,{key:"unique-features-slider"}),Ve=Ft&&f(BecomePartner,{key:"become-partner"}),Jn=Ft&&f(Roadmap,{key:"roadmap"}),yr=Ft&&f(DonateCrypto,{key:"donate-crypto"}),Gr=Ft&&f(CommunityCTA,{key:"community-cta"}),mn=f("style",{key:"kf",dangerouslySetInnerHTML:{__html:'@keyframes sbFlowR{0%{left:4%;opacity:0}12%{opacity:1}88%{opacity:1}100%{left:96%;opacity:0}}@keyframes sbFlowL{0%{left:96%;opacity:0}12%{opacity:1}88%{opacity:1}100%{left:4%;opacity:0}}@keyframes sbPulse{0%,100%{transform:translate(-50%,-50%) scale(1);opacity:.5}50%{transform:translate(-50%,-50%) scale(1.5);opacity:0}}@keyframes sbSpin{to{transform:rotate(360deg)}}@keyframes sbUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes sbNode{0%,100%{box-shadow:0 0 0 0 rgba(var(--sb-green-rgb), 0)}50%{box-shadow:0 0 0 6px rgba(var(--sb-green-rgb), .06)}}@keyframes sbScan{0%{top:8%}100%{top:88%}}@keyframes sbBlink{0%,100%{opacity:1}50%{opacity:.35}}@keyframes otpPop{0%{transform:translateY(6px) scale(.9);opacity:0}60%{transform:translateY(-1px) scale(1.04);opacity:1}100%{transform:none;opacity:1}}@keyframes otpOk{0%{transform:none}45%{transform:translateY(-4px)}100%{transform:none;background:rgba(var(--sb-green-rgb),.07);border-color:rgba(var(--sb-green-rgb),.55);color:var(--sb-green)}}@keyframes otpShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(2px)}}@keyframes otpCaret{0%,100%{opacity:1}50%{opacity:0}}@keyframes svDot{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}@keyframes svDraw{from{stroke-dashoffset:24}to{stroke-dashoffset:0}}@keyframes svScan{from{left:-30%}to{left:100%}}@keyframes svFade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes sbTrav{0%{offset-distance:0%;opacity:0}15%{opacity:1}80%{opacity:1}100%{offset-distance:100%;opacity:0}}@keyframes sbRing1{0%,24%{r:5;opacity:0}26%{opacity:.8}34%{r:22;opacity:0}100%{r:22;opacity:0}}@keyframes sbRing2{0%,54%{r:5;opacity:0}56%{opacity:.8}64%{r:22;opacity:0}100%{r:22;opacity:0}}@keyframes sbIn1{0%,24%{opacity:0}27%{opacity:1}100%{opacity:1}}@keyframes sbIn2{0%,54%{opacity:0}57%{opacity:1}100%{opacity:1}}@keyframes sbRow0{0%,4%{opacity:0;transform:translateY(4px)}8%{opacity:1;transform:none}100%{opacity:1;transform:none}}@keyframes sbRow1{0%,25%{opacity:0;transform:translateY(4px)}29%{opacity:1;transform:none}100%{opacity:1;transform:none}}@keyframes sbRow2{0%,55%{opacity:0;transform:translateY(4px)}59%{opacity:1;transform:none}100%{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.sb-start [style*="sbTrav"],.sb-start [style*="sbRing"]{animation:none!important;opacity:0!important}.sb-start [style*="sbIn1"],.sb-start [style*="sbIn2"],.sb-start [style*="sbRow0"],.sb-start [style*="sbRow1"],.sb-start [style*="sbRow2"]{animation:none!important;opacity:1!important;transform:none!important}}'}});return Ne?f("div",{className:"sb-start",style:{flex:1,minHeight:0,width:"100%",display:"flex",flexDirection:"column",background:"var(--sb-bg)",color:"var(--sb-text-2)"}},[mn,Zt,gr]):f("div",{className:"sb-start",style:{width:"100%"}},[mn,mr,Xn,Ve,Jn,yr,Gr,gr])};function ec(t){let e=!1;try{e=new URLSearchParams(window.location.search).get("vvdebug")==="1"}catch{return null}if(!e)return null;let n=document.createElement("div");n.setAttribute("data-sb-vvdebug",""),n.style.cssText="position:fixed;top:0;left:0;z-index:2147483647;max-width:100vw;padding:6px 8px;font:600 10.5px/1.45 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre;color:#fff;background:#000;pointer-events:none;",document.body.appendChild(n);let r=(()=>{let d=document.querySelector('script[src*="dist/app.js"]');return d&&String(d.getAttribute("src")||"").split("?v=")[1]||"?"})(),i=()=>{let d=document.querySelector(".sb-app-shell"),h=d?getComputedStyle(d):null,m=d?d.getBoundingClientRect():null,v=getComputedStyle(document.documentElement);n.textContent=["build "+r,"innerH "+window.innerHeight+" scrollY "+Math.round(window.scrollY),"vv h "+(t?Math.round(t.height):"\u2014")+" top "+(t?Math.round(t.offsetTop):"\u2014")+" scale "+(t?t.scale.toFixed(2):"\u2014"),"var vh "+v.getPropertyValue("--sb-vh").trim()+" vvtop "+v.getPropertyValue("--sb-vv-top").trim(),"shell "+(d?h.position+" h"+Math.round(m.height)+" y"+Math.round(m.top):"ABSENT")].join(` `),n.style.transform="translate3d(0,"+(t?Math.round(t.offsetTop):0)+"px,0)"};i();let c=setInterval(i,200);return()=>{clearInterval(c),n.remove()}}var tc=t=>()=>{if(t&&t.current){let e=()=>{t.current&&t.current.scrollTo({top:t.current.scrollHeight,behavior:Or()})};e(),setTimeout(e,50),setTimeout(e,150),setTimeout(e,300),requestAnimationFrame(()=>{setTimeout(e,100)})}},ia=async t=>{let e=null;try{t&&window.EnhancedSecureCryptoUtils&&(e=await window.EnhancedSecureCryptoUtils.calculateSecurityLevel(t))}catch{}if(!e){alert(`Security verification in progress\u2026 Please wait for real-time cryptographic verification to complete.`);return}let n="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",r=U=>String(U).replace(/[&<>"]/g,Q=>({"&":"&","<":"<",">":">",'"':"""})[Q]),i=e.color==="orange"?"var(--sb-orange-solid)":e.color==="yellow"?"var(--sb-yellow-solid)":e.color==="red"?"var(--sb-red-solid)":"var(--sb-green-solid)",c=e.color==="orange"?"var(--sb-orange)":e.color==="yellow"?"var(--sb-yellow)":e.color==="red"?"var(--sb-red)":"var(--sb-green)",d=e.color==="orange"?"var(--sb-orange-rgb)":e.color==="yellow"?"var(--sb-yellow-rgb)":e.color==="red"?"var(--sb-red-rgb)":"var(--sb-green-rgb)",h=Math.max(0,Math.min(100,Math.round(e.score||0))),m=2*Math.PI*56,v=`${(m*Math.min(1,h/100)).toFixed(1)} ${m.toFixed(1)}`,S=String(e.level||"SECURE").toUpperCase(),p=e.isRealData!==!1,k=e.verificationResults?Object.entries(e.verificationResults):[],y=Number.isFinite(e.passedChecks)?e.passedChecks:k.filter(([,U])=>U&&U.passed).length,I=Number.isFinite(e.totalChecks)?e.totalChecks:k.length,z=new Date(e.timestamp||Date.now()).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}),N=U=>{let Q=a(`secTest.${U}`);return Q===`secTest.${U}`?ce(U):Q},ce=U=>{let Q=String(U).replace(/^verify/i,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").trim();return Q=Q.replace(/\b(ecdh|ecdsa|aes|gcm|hmac|pfs|sas|mitm|asn|dtls|hkdf|spki|oid|p384)\b/gi,X=>X.toUpperCase()),Q.charAt(0).toUpperCase()+Q.slice(1)},ee='',ge='',we=k.map(([U,Q],X)=>{let V=!!(Q&&Q.passed),re=Q&&Q.details||(V?a("sec.testPassed"):a("sec.testFailed")),oe=a(`secDetail.${re}`),me=oe===`secDetail.${re}`?re:oe,B=V?"var(--sb-surface)":"var(--sb-bg)",$=V?"rgba(var(--sb-green-rgb), 0.16)":"rgba(var(--sb-red-rgb), 0.18)",ne=V?"rgba(var(--sb-green-rgb), 0.12)":"rgba(var(--sb-red-rgb), 0.1)",Ie=V?"rgba(var(--sb-green-rgb), 0.26)":"rgba(var(--sb-red-rgb), 0.24)",q=V?"var(--sb-text-1)":"var(--sb-text-4)";return`
${V?ee:ge}
${r(N(U))}
${r(me)}
`}).join(""),C=document.createElement("div");C.id="sb-security-report",C.style.cssText="position:fixed; inset:0; z-index:10000; display:flex; align-items:center; justify-content:center; padding:24px; background:rgba(var(--sb-scrim-rgb), 0.62); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px); font-family:'Manrope',system-ui,-apple-system,sans-serif; overflow:auto;",C.innerHTML=`
${h} / 100 pts
${a("report.title")}

Security level: ${r(S)}

${a("report.active")}
${a("report.testsPassed")}
${y} / ${I}
${a("report.verifiedAt")}
${r(z)}
${a("report.source")}
${p?a("sec.realTests"):a("sec.simulatedData")}
${we}
${p?a("sec.realTimeNote"):a("sec.simulatedWarning")}
`;let O=U=>{U.key==="Escape"&&j()},j=()=>{C.parentNode&&C.remove(),document.removeEventListener("keydown",O)};C.querySelector(".sv-close").addEventListener("click",j),C.addEventListener("click",U=>{U.target===C&&j()}),document.addEventListener("keydown",O);let P=C.querySelector(".sv-rerun");P.addEventListener("mouseenter",()=>{P.style.borderColor="rgba(var(--sb-orange-rgb), 0.45)",P.style.color="var(--sb-orange)"}),P.addEventListener("mouseleave",()=>{P.style.borderColor="rgba(var(--sb-ink), 0.1)",P.style.color="var(--sb-text-4)"}),P.addEventListener("click",()=>{j(),ia(t)}),document.body.appendChild(C)},nc=({status:t,onDisconnect:e,webrtcManager:n,title:r,isOffline:i,peerPresence:c,onRenameTitle:d})=>{let h="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",[m,v]=React.useState(!1),[S,p]=React.useState(null),[k,y]=React.useState(!1),[I,z]=React.useState("");React.useEffect(()=>{let q=!0,xe=async()=>{try{if(!n)return;let Ee=null;typeof n.getRealSecurityLevel=="function"?Ee=await n.getRealSecurityLevel():typeof n.calculateAndReportSecurityLevel=="function"?Ee=await n.calculateAndReportSecurityLevel():window.EnhancedSecureCryptoUtils&&(Ee=await window.EnhancedSecureCryptoUtils.calculateSecurityLevel(n)),q&&Ee&&Ee.isRealData!==!1&&p(Ee)}catch{}};xe();let Le=Ee=>{q&&Ee.detail&&Ee.detail.securityData&&p(Ee.detail.securityData)};document.addEventListener("real-security-calculated",Le);let at=setInterval(xe,15e3);return()=>{q=!1,clearInterval(at),document.removeEventListener("real-security-calculated",Le)}},[n]);let N=t==="connected"||t==="verified",ce=t==="disconnected"||t==="peer_disconnected",ee=N&&!i,ge=i||ce?"var(--sb-red-solid)":N?"var(--sb-green-solid)":"var(--sb-yellow-solid)",we=i?a("chat.offline"):N?a("status.connected"):t==="peer_disconnected"?a("status.peerDisconnected"):t==="disconnected"?a("chat.disconnected"):a("status.connecting"),C=i||ce?"0 0 0 3px rgba(var(--sb-red-rgb), 0.16)":N?"0 0 0 3px rgba(var(--sb-green-rgb), 0.16)":"0 0 0 3px rgba(var(--sb-yellow-rgb), 0.16)",O=N&&!i?cs[c]||"var(--sb-green-solid)":ge,j=N&&!i&&c&&ls[c]||null,P=()=>{z(r||""),y(!0)},U=()=>{typeof d=="function"&&d(I),y(!1)},Q=q=>{q.key==="Enter"?(q.preventDefault(),U()):q.key==="Escape"&&y(!1)},X=S&&Number.isFinite(S.passedChecks)?S.passedChecks:null,V=S&&Number.isFinite(S.totalChecks)?S.totalChecks:null,re=q=>{if(!q)return q;let xe=a(`secLevel.${q}`);return xe===`secLevel.${q}`?q:xe},oe=X!=null&&V?X+"/"+V:S?S.score+"%":"\u2014",me=S?S.color==="green"?"var(--sb-green)":S.color==="orange"?"var(--sb-orange)":S.color==="yellow"?"var(--sb-yellow)":"var(--sb-red)":"var(--sb-green)",B=React.createElement("div",{key:"sec",title:a("sas.runVerification"),onClick:()=>ia(n),className:"sb-secpill",style:{display:"flex",alignItems:"center",gap:"9px",padding:"7px 13px",borderRadius:"9px",border:"1px solid "+(m?"rgba(var(--sb-ink), 0.16)":"rgba(var(--sb-ink), 0.07)"),background:m?"rgba(var(--sb-ink), 0.05)":"rgba(var(--sb-ink), 0.02)",cursor:"pointer",fontFamily:"inherit",transition:"all .15s"}},[React.createElement("i",{key:"i",className:"fas fa-shield-halved",style:{color:me,fontSize:"13px"}}),React.createElement("span",{key:"l",className:"sb-sec-label",style:{fontSize:"13px",fontWeight:600,color:"var(--sb-text-2)"}},S?re(S.level)||a("chatHdr.secure"):a("chatHdr.secure")),React.createElement("span",{key:"d",className:"sb-sec-div",style:{width:"1px",height:"13px",background:"rgba(var(--sb-ink), 0.12)"}}),React.createElement("span",{key:"s",className:"sb-sec-score",style:{fontFamily:h,fontSize:"11.5px",fontWeight:500,color:"var(--sb-text-7)"}},oe),React.createElement("button",{key:"c",type:"button",title:a("sec.panelTitle"),onClick:q=>{q.stopPropagation(),v(xe=>!xe)},style:{background:"none",border:"none",padding:0,margin:0,cursor:"pointer",display:"grid",placeItems:"center"}},React.createElement("i",{className:"fas fa-chevron-down",style:{color:"var(--sb-text-9)",fontSize:"11px",transform:m?"rotate(180deg)":"rotate(0deg)",transition:"transform .2s"}}))]),$=React.createElement("style",{key:"hdr-css",dangerouslySetInnerHTML:{__html:".sb-call-btn:not(.sb-call-off):hover{border-color:rgba(var(--sb-green-rgb), 0.45) !important;color:var(--sb-green) !important;background:rgba(var(--sb-green-rgb), 0.07) !important;}@media (max-width:768px){.sb-chat-header{padding-inline-start:58px !important;gap:8px !important;}.sb-chat-header .sb-secpill{display:none !important;}.sb-chat-header .sb-conn-text{display:none !important;}.sb-chat-header .sb-conn{padding:9px !important;}.sb-chat-header .sb-hdr-sub{display:none !important;}.sb-chat-header .sb-disconnect{width:40px !important;height:40px !important;padding:0 !important;gap:0 !important;justify-content:center !important;border-radius:9px !important;color:var(--sb-red) !important;border-color:rgba(var(--sb-red-rgb), 0.28) !important;}.sb-chat-header .sb-disconnect .sb-hide-sm{display:none !important;}}@media (max-width:600px){.sb-chips{flex-wrap:nowrap !important;justify-content:flex-start !important;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;}.sb-chips::-webkit-scrollbar{display:none;}.sb-chips>*{flex:0 0 auto !important;}.sb-chips .sb-chips-right{flex-wrap:nowrap !important;}.sb-chips .sb-chip{white-space:nowrap;}}@media (max-width:480px){.sb-chat-header{padding-inline-end:12px !important;}}"}}),ne=React.createElement("header",{key:"hdr",className:"sb-chat-header",style:{flex:"none",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"24px",padding:"var(--sb-safe-top, 0px) 20px var(--sb-bar-extra, 0px)",minHeight:"calc(var(--sb-bar-h, 64px) + var(--sb-safe-top, 0px) + var(--sb-bar-extra, 0px))",boxSizing:"border-box",borderBottom:"1px solid rgba(var(--sb-ink), 0.06)",background:"rgba(var(--sb-bg-rgb), 0.72)",backdropFilter:"blur(14px)",WebkitBackdropFilter:"blur(14px)"}},[$,React.createElement("div",{key:"left",style:{display:"flex",alignItems:"center",gap:"12px",minWidth:0}},[React.createElement("div",{key:"avatar",style:{position:"relative",flex:"none",width:"36px",height:"36px",borderRadius:"10px",display:"grid",placeItems:"center",background:"rgba(var(--sb-ink), 0.05)",border:"1px solid rgba(var(--sb-ink), 0.09)",fontSize:"13px",fontWeight:700,letterSpacing:"-0.3px",color:"var(--sb-text-2)"}},[Rr(r||a("chatHdr.chat")),React.createElement("span",{key:"dot",style:{position:"absolute",insetInlineEnd:"-2px",bottom:"-2px",width:"11px",height:"11px",borderRadius:"50%",background:O,border:"2px solid var(--sb-bg)"}})]),k?React.createElement("div",{key:"edit",style:{display:"flex",flexDirection:"column",gap:"4px",minWidth:0}},[React.createElement("div",{key:"row",style:{display:"flex",alignItems:"center",gap:"6px"}},[React.createElement("input",{key:"in",autoFocus:!0,value:I,maxLength:32,placeholder:a("chat.nameThis"),onChange:q=>z(q.target.value),onKeyDown:Q,onBlur:U,style:{width:"210px",padding:"5px 10px",borderRadius:"8px",border:"1px solid rgba(var(--sb-orange-rgb), 0.55)",background:"var(--sb-bg)",color:"var(--sb-text-1)",fontFamily:"inherit",fontSize:"14px",fontWeight:700,outline:"none"}}),React.createElement("button",{key:"ok",onMouseDown:q=>q.preventDefault(),onClick:U,title:a("chatHdr.save"),style:{flex:"none",width:"28px",height:"28px",borderRadius:"8px",display:"grid",placeItems:"center",border:"none",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",cursor:"pointer"}},React.createElement("i",{className:"fas fa-check",style:{fontSize:"12px"}}))]),React.createElement("div",{key:"hint",style:{fontSize:"11px",color:"var(--sb-text-faint)"}},a("chat.localLabel"))]):React.createElement("div",{key:"txt",style:{lineHeight:1.2,minWidth:0}},[React.createElement("div",{key:"r1",style:{display:"flex",alignItems:"center",gap:"7px"}},[React.createElement("span",{key:"n",style:{fontSize:"15px",fontWeight:800,letterSpacing:"-0.3px",color:"var(--sb-text-1)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},r||a("chat.secureChat")),React.createElement("button",{key:"edit",className:"sb-rename-btn",onClick:P,title:a("chat.rename"),style:{flex:"none",width:"24px",height:"24px",borderRadius:"7px",display:"grid",placeItems:"center",border:"none",background:"transparent",color:"var(--sb-text-faint)",cursor:"pointer"}},React.createElement("i",{className:"fas fa-pen",style:{fontSize:"11px"}}))]),React.createElement("div",{key:"r2",className:"sb-hdr-sub",style:{fontSize:"11px",color:"var(--sb-text-9)",fontWeight:500,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},i?a("chat.noNetwork"):t==="reconnecting"?a("flow.restoring"):j||(N?a("chatHdr.p2pSub"):t==="peer_disconnected"?a("status.peerDisconnected"):t==="disconnected"?a("chat.disconnected"):a("status.connecting")))])]),B,React.createElement("div",{key:"right",className:"sb-hdr-right",style:{display:"flex",alignItems:"center",gap:"9px"}},[...(()=>{let q=ee&&n&&n.isVerified===!0,xe=Je=>{if(!(!q||!n))try{let ot=n.startCall(Je);ot&&ot.catch&&ot.catch(()=>{})}catch{}},Le={width:"40px",height:"40px",borderRadius:"9px",display:"grid",placeItems:"center",border:"1px solid rgba(var(--sb-ink), 0.08)",background:"rgba(var(--sb-ink), 0.02)",color:q?"var(--sb-text-6)":"var(--sb-surface-5)",cursor:q?"pointer":"not-allowed",transition:"all .15s"};return[React.createElement("button",{key:"call-audio",className:q?"sb-call-btn":"sb-call-btn sb-call-off",disabled:!q,onClick:()=>xe(!1),title:q?a("chat.startVoiceCall"):a("chat.verifyForCalls"),style:Le,dangerouslySetInnerHTML:{__html:''}}),React.createElement("button",{key:"call-video",className:q?"sb-call-btn":"sb-call-btn sb-call-off",disabled:!q,onClick:()=>xe(!0),title:q?a("chat.startVideoCall"):a("chat.verifyForCalls"),style:Le,dangerouslySetInnerHTML:{__html:''}})]})(),React.createElement("div",{key:"conn",className:"sb-conn",style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px 13px",borderRadius:"9px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"rgba(var(--sb-ink), 0.02)"}},[React.createElement("span",{key:"dot",style:{flex:"none",width:"7px",height:"7px",borderRadius:"50%",background:ge,boxShadow:C}}),React.createElement("span",{key:"t",className:"sb-conn-text",style:{fontSize:"13px",fontWeight:600,color:"var(--sb-text-4)"}},we)]),React.createElement("button",{key:"dc",onClick:e,className:"sb-disconnect",style:{display:"flex",alignItems:"center",gap:"7px",padding:"8px 14px",borderRadius:"9px",border:"1px solid rgba(var(--sb-ink), 0.08)",background:"transparent",color:"var(--sb-text-6)",fontFamily:"inherit",fontSize:"13px",fontWeight:600,cursor:"pointer",transition:"all .15s"}},[React.createElement("i",{key:"i",className:"fas fa-power-off",style:{fontSize:"12px"}}),React.createElement("span",{key:"t",className:"sb-hide-sm"},a("hdr.disconnect"))])])]),Ie=m&&React.createElement("div",{key:"net",style:{flex:"none",padding:"13px 20px",borderBottom:"1px solid rgba(var(--sb-ink), 0.06)",background:"rgba(var(--sb-bg-rgb), 0.72)",backdropFilter:"blur(14px)",WebkitBackdropFilter:"blur(14px)"}},React.createElement("div",{style:{maxWidth:"1000px",margin:"0 auto",display:"grid",gridTemplateColumns:"repeat(auto-fit,minmax(140px,1fr))",gap:"14px",fontFamily:h}},[[a("sec.transport"),"WebRTC \xB7 DTLS"],[a("sec.cipher"),"AES-256-GCM"],[a("sec.keyExchange"),"ECDH P-384"],[a("sec.security"),oe+(S?" \xB7 "+S.score+"%":"")]].map(([q,xe],Le)=>React.createElement("div",{key:"nf"+Le},[React.createElement("div",{key:"k",style:{fontSize:"10px",color:"var(--sb-text-9)",textTransform:"uppercase",letterSpacing:"0.6px",marginBottom:"4px"}},q),React.createElement("div",{key:"v",style:{fontSize:"12.5px",color:Le===3?me:"var(--sb-text-4)",fontWeight:500}},xe)]))));return React.createElement("div",{style:{flex:"none"}},[ne,Ie])},na=({title:t,isOffline:e,peerPresence:n,onRenameTitle:r,messages:i,messageInput:c,setMessageInput:d,onSendMessage:h,onSendVoice:m,onDisconnect:v,keyFingerprint:S,isVerified:p,chatMessagesRef:k,scrollToBottom:y,webrtcManager:I,status:z,pendingIncomingFiles:N=[],onIncomingDecision:ce,codeMode:ee,setCodeMode:ge,viewOnceMode:we,setViewOnceMode:C,viewOnceTtl:O,setViewOnceTtl:j,disappearTtl:P,setDisappearTtl:U,nowTick:Q,onUnsendMessage:X,onMessageExpire:V})=>{let[re,oe]=React.useState(!1),[me,B]=React.useState(!1),[$,ne]=React.useState(!1),[Ie,q]=React.useState(!1),[xe,Le]=React.useState(!1),[at,Ee]=React.useState(!1),[Je,ot]=React.useState(!1),[vt,Yt]=React.useState(()=>typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(min-width:1024px)").matches);React.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;let E=window.matchMedia("(min-width:1024px)"),se=()=>Yt(E.matches);try{E.addEventListener("change",se)}catch{E.addListener(se)}return()=>{try{E.removeEventListener("change",se)}catch{E.removeListener(se)}}},[]);let wt=React.useRef(null);React.useEffect(()=>{let E=wt.current;!E||ee||(E.style.height="auto",E.style.height=Math.min(E.scrollHeight,240)+"px")},[c,ee]),React.useEffect(()=>{N.length>0&&B(!0)},[N.length]);let Re=React.useRef(!0);React.useEffect(()=>{let E=typeof window<"u"?window.visualViewport:null;if(!E)return;let se=()=>{if(!Re.current)return;let Me=k.current;Me&&(Me.scrollTop=Me.scrollHeight)},ue=()=>{requestAnimationFrame(se),setTimeout(se,300)};return E.addEventListener("resize",ue),()=>E.removeEventListener("resize",ue)},[k]),React.useEffect(()=>{if(k.current&&i.length>0){let{scrollTop:E,scrollHeight:se,clientHeight:ue}=k.current;if(se-E-ue<100){let Nt=()=>{k.current&&k.current.scrollTo({top:k.current.scrollHeight,behavior:Or()})};Nt(),setTimeout(Nt,50),setTimeout(Nt,150)}}},[i,k]);let gt=()=>{if(k.current){let{scrollTop:E,scrollHeight:se,clientHeight:ue}=k.current,Me=se-E-ue<100;Re.current=Me,oe(!Me)}},te=()=>{Re.current=!0,typeof y=="function"?(y(),oe(!1)):k.current&&(k.current.scrollTo({top:k.current.scrollHeight,behavior:Or()}),oe(!1))},Ne=E=>{E.key==="Enter"&&(ee?(E.metaKey||E.ctrlKey)&&(E.preventDefault(),h()):E.shiftKey||(E.preventDefault(),h()))},kt=()=>{if(!I)return!1;let E=I.isConnected?I.isConnected():!1,se=I.isVerified||!1,ue=I.dataChannel&&I.dataChannel.readyState==="open";return E&&se&&ue},mt="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",Ut=E=>E?E>=86400&&E%86400===0?E/86400+"d":E>=3600&&E%3600===0?E/3600+"h":E>=60?Math.round(E/60)+"m":E+"s":"",St=E=>({display:"flex",alignItems:"center",gap:"6px",padding:"7px 11px",borderRadius:"8px",border:"1px solid "+(E?"rgba(var(--sb-ink), 0.18)":"rgba(var(--sb-ink), 0.07)"),background:E?"rgba(var(--sb-ink), 0.06)":"transparent",color:E?"#fff":"var(--sb-text-6)",fontFamily:"inherit",fontSize:"12.5px",fontWeight:600,cursor:"pointer",transition:"all .15s"}),Gt=E=>({padding:"6px 12px",borderRadius:"8px",border:"1px solid "+(E?"rgba(var(--sb-ink), 0.22)":"rgba(var(--sb-ink), 0.07)"),background:E?"rgba(var(--sb-ink), 0.07)":"transparent",color:E?"#fff":"var(--sb-text-7)",fontFamily:mt,fontSize:"12px",fontWeight:500,cursor:"pointer",transition:"all .14s"}),yt=[{label:a("msg.off"),v:0},{label:"5s",v:5},{label:"30s",v:30},{label:"1m",v:60},{label:"1h",v:3600},{label:"24h",v:86400}],Ht=[{label:a("msg.off"),v:0},{label:"5s",v:5},{label:"10s",v:10},{label:"30s",v:30},{label:"1m",v:60}],Kt=we?O:0,b=E=>{U(E),q(!1)},Z=E=>{E===0?C(!1):(j(E),C(!0)),Le(!1)},Ae=!!(c&&c.trim()),qe=typeof m=="function"&&!e&&kt()&&typeof navigator<"u"&&navigator.mediaDevices&&typeof navigator.mediaDevices.getUserMedia=="function",Ze=E=>{try{return new Date(E).toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return""}},Ge=i.filter(E=>E.type==="system"&&typeof E.message=="string"&&E.message.trim()),dn=i.filter(E=>E.type!=="system"),ct=(p||Ge.length>0)&&React.createElement("div",{key:"handshake",style:{border:"1px solid rgba(var(--sb-ink), 0.07)",borderRadius:"12px",background:"var(--sb-surface)",overflow:"hidden"}},[React.createElement("button",{key:"hs-btn",onClick:()=>Ee(E=>!E),style:{width:"100%",display:"flex",alignItems:"center",gap:"13px",padding:"14px 16px",background:"transparent",border:"none",color:"inherit",cursor:"pointer",textAlign:"start",fontFamily:"inherit"}},[React.createElement("div",{key:"ic",style:{flex:"none",width:"30px",height:"30px",display:"grid",placeItems:"center"}},React.createElement("i",{className:"fas fa-check",style:{color:"var(--sb-green)",fontSize:"16px"}})),React.createElement("div",{key:"tx",style:{flex:1,minWidth:0}},[React.createElement("div",{key:"t1",style:{fontSize:"13.5px",fontWeight:600,color:"var(--sb-text-2)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},a("flow.channelEstablished")),React.createElement("div",{key:"t2",style:{fontSize:"12px",color:"var(--sb-text-8)",marginTop:"1px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},a("sas.verified")+(Ge.length?" \xB7 "+Ge.length+(Ge.length===1?" event":" events"):""))]),React.createElement("i",{key:"chev",className:"fas fa-chevron-down",style:{flex:"none",color:"var(--sb-text-9)",fontSize:"13px",transform:at?"rotate(180deg)":"rotate(0deg)",transition:"transform .2s"}})]),at&&React.createElement("div",{key:"hs-body",style:{paddingTop:"2px",paddingBottom:"14px",paddingInlineStart:"59px",paddingInlineEnd:"16px"}},[Ge.length>0&&React.createElement("div",{key:"steps",className:"sb-scroll",style:{marginBottom:"12px",maxHeight:"220px",overflowY:"auto",paddingInlineEnd:"6px"}},Ge.map((E,se)=>React.createElement("div",{key:"s"+se,style:{display:"flex",gap:"11px",padding:"6px 0",borderTop:se===0?"none":"1px solid rgba(var(--sb-ink), 0.04)"}},[React.createElement("span",{key:"d",style:{flex:"none",width:"5px",height:"5px",borderRadius:"50%",background:"var(--sb-green-solid)",marginTop:"7px",opacity:.6}}),React.createElement("span",{key:"t",style:{flex:1,fontSize:"12.5px",color:"var(--sb-text-6)",lineHeight:1.5,wordBreak:"break-word"}},String(E.message||"").trim()),React.createElement("span",{key:"tm",style:{flex:"none",fontFamily:mt,fontSize:"10.5px",color:"var(--sb-text-faint)"}},Ze(E.timestamp))]))),S&&React.createElement("div",{key:"sn",style:{display:"flex",alignItems:"center",gap:"9px",padding:"10px 12px",borderRadius:"9px",background:"rgba(var(--sb-ink), 0.025)",border:"1px solid rgba(var(--sb-ink), 0.06)"}},[React.createElement("i",{key:"i",className:"fas fa-lock",style:{color:"var(--sb-text-7)",fontSize:"12px"}}),React.createElement("span",{key:"l",style:{fontSize:"11.5px",color:"var(--sb-text-7)"}},a("sas.safetyNumber")),React.createElement("span",{key:"v",style:{fontFamily:mt,fontSize:"12px",color:"var(--sb-text-4)",letterSpacing:"0.8px",fontWeight:500,wordBreak:"break-all"}},S)])])]),He=React.createElement("div",{key:"empty",style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1,minHeight:"40vh"}},React.createElement("div",{style:{textAlign:"center",maxWidth:"420px"}},[React.createElement("img",{key:"ic",src:"/logo/securebit-mark.svg",alt:"SecureBit",style:{width:"60px",height:"60px",objectFit:"contain",display:"block",margin:"0 auto 16px"}}),React.createElement("h3",{key:"t",style:{fontSize:"17px",fontWeight:700,color:"var(--sb-text-2)",margin:"0 0 6px"}},a("flow.channelReady")),React.createElement("p",{key:"p",style:{fontSize:"13px",color:"var(--sb-text-8)",margin:0}},a("chat.e2eeNote"))])),Tn=React.createElement("main",{key:"main",ref:k,onScroll:gt,className:"sb-scroll",style:{flex:1,overflowY:"auto",padding:"20px 20px 22px"}},React.createElement("div",{style:{width:"100%",maxWidth:"1000px",margin:"0 auto",display:"flex",flexDirection:"column",gap:"16px",minHeight:"100%"}},dn.length===0?[ct,He]:[ct].concat(dn.map(E=>React.createElement(Jo,{key:E.id,message:E.message,type:E.type,timestamp:E.timestamp,mid:E.mid,status:E.status,viewOnce:E.viewOnce,viewOnceTtl:E.viewOnceTtl,expiresAt:E.expiresAt,expired:E.expired,nowTick:Q,canUnsend:typeof X=="function",onUnsend:X,onExpire:()=>V&&V(E.id),voice:E.voice}))))),Mt=Ie&&React.createElement("div",{key:"timer-row",style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"8px",padding:"10px 12px",marginBottom:"10px",borderRadius:"11px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"var(--sb-surface)"}},[React.createElement("span",{key:"lbl",style:{fontSize:"12px",color:"var(--sb-text-7)",fontWeight:600,marginInlineEnd:"4px"}},a("chat.disappearAfter"))].concat(yt.map(E=>React.createElement("button",{key:"td"+E.v,onClick:()=>b(E.v),style:Gt(P===E.v)},E.label)))),pn=xe&&React.createElement("div",{key:"once-row",style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"8px",padding:"10px 12px",marginBottom:"10px",borderRadius:"11px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"var(--sb-surface)"}},[React.createElement("span",{key:"lbl",style:{fontSize:"12px",color:"var(--sb-text-7)",fontWeight:600,marginInlineEnd:"4px"}},a("chat.visibleFor"))].concat(Ht.map(E=>React.createElement("button",{key:"od"+E.v,onClick:()=>Z(E.v),style:Gt(Kt===E.v)},E.label)))),Qt=me&&React.createElement("div",{key:"file-panel",style:{marginBottom:"10px"}},React.createElement(window.FileTransferComponent||(()=>React.createElement("div",{style:{padding:"16px",textAlign:"center",color:"var(--sb-red)"}},"FileTransferComponent not loaded")),{webrtcManager:I,isConnected:kt(),pendingIncomingFiles:N,onIncomingDecision:ce,showDropzone:$})),Tt=React.createElement("div",{key:"chips",className:"sb-chips",style:{display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:"8px",marginBottom:"10px"}},[React.createElement("button",{key:"files",onClick:()=>{me&&$?(B(!1),ne(!1)):(B(!0),ne(!0))},className:"sb-chip",style:St(me&&$)},[React.createElement("i",{key:"i",className:"fas fa-paperclip",style:{fontSize:"13px"}}),me&&$?a("chat.hideFiles"):a("chat.sendFiles")]),React.createElement("div",{key:"right",className:"sb-chips-right",style:{display:"flex",alignItems:"center",gap:"6px",flexWrap:"wrap"}},[React.createElement("button",{key:"code",onClick:()=>ge(E=>!E),className:"sb-chip",style:St(ee)},[React.createElement("i",{key:"i",className:"fas fa-code",style:{fontSize:"13px"}}),a("msg.code")]),React.createElement("button",{key:"once",onClick:()=>{Le(E=>!E),q(!1)},className:"sb-chip",style:St(xe||we)},[React.createElement("i",{key:"i",className:"fas fa-eye-slash",style:{fontSize:"13px"}}),we?a("chat.viewOncePrefix")+Ut(O):a("chat.viewOnce")]),React.createElement("button",{key:"timer",onClick:()=>{q(E=>!E),Le(!1)},className:"sb-chip",style:St(Ie||P>0)},[React.createElement("i",{key:"i",className:"fas fa-stopwatch",style:{fontSize:"13px"}}),P>0?a("chat.timerPrefix")+Ut(P):a("msg.timer")])])]),et=ee&&React.createElement("div",{key:"code-strip",style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px 14px",border:"1px solid rgba(var(--sb-ink), 0.08)",borderBottom:"none",borderRadius:"14px 14px 0 0",background:"var(--sb-surface)"}},[React.createElement("i",{key:"i",className:"fas fa-code",style:{color:"var(--sb-text-7)",fontSize:"12px"}}),React.createElement("span",{key:"s",style:{fontSize:"11.5px",fontWeight:600,color:"var(--sb-text-7)"}},a("chat.codeHint")),React.createElement("button",{key:"c",onClick:()=>ge(!1),className:"sb-link",style:{marginInlineStart:"auto",background:"none",border:"none",color:"var(--sb-text-9)",cursor:"pointer",fontSize:"11.5px",fontFamily:"inherit",fontWeight:600}},a("chat.close"))]),Ye=React.createElement("button",{key:"send",onClick:h,disabled:!Ae,title:a("chat.send"),className:"sb-send",style:{flex:"none",width:"44px",height:"44px",borderRadius:"11px",border:"none",display:"grid",placeItems:"center",cursor:Ae?"pointer":"default",background:Ae?"var(--sb-orange-solid)":"rgba(var(--sb-ink), 0.05)",color:Ae?"var(--sb-on-accent)":"var(--sb-text-faint)",transition:"all .15s"}},React.createElement("i",{className:"fas fa-paper-plane sb-mirror-rtl",style:{fontSize:"15px"}})),Ke=React.createElement("button",{key:"mic",onClick:()=>ot(!0),title:a("chat.recordVoice"),className:"sb-send",style:{flex:"none",width:"44px",height:"44px",borderRadius:"50%",border:"none",display:"grid",placeItems:"center",cursor:"pointer",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",boxShadow:"0 8px 22px rgba(var(--sb-orange-rgb), 0.3)",transition:"transform .15s cubic-bezier(.2,.7,.3,1)"}},React.createElement("svg",{width:19,height:19,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.9,strokeLinecap:"round",strokeLinejoin:"round"},[React.createElement("rect",{key:"a",x:9,y:3,width:6,height:11,rx:3}),React.createElement("path",{key:"b",d:"M5 11a7 7 0 0 0 14 0"}),React.createElement("path",{key:"c",d:"M12 18v3"})])),lt=qe?vt?[Ke,Ye]:Ae?[Ye]:[Ke]:[Ye],Xt=React.createElement("div",{key:"input",style:{display:"flex",alignItems:"flex-end",gap:"11px",paddingBlock:"11px",paddingInlineStart:"16px",paddingInlineEnd:"11px",border:"1px solid "+(Ae?"rgba(var(--sb-ink), 0.18)":"rgba(var(--sb-ink), 0.08)"),background:"var(--sb-surface)",borderRadius:ee?"0 0 14px 14px":"14px",transition:"border .15s"}},[React.createElement("div",{key:"ta-wrap",style:{flex:1,minWidth:0}},[React.createElement("textarea",{key:"ta",value:c,ref:wt,onChange:E=>d(E.target.value),onKeyDown:Ne,rows:1,maxLength:2e3,placeholder:ee?a("flow.pasteOrWrite"):a("chat.placeholder"),className:"sb-textarea",style:{width:"100%",minHeight:ee?"120px":"22px",maxHeight:"240px",resize:"none",border:"none",outline:"none",background:"transparent",color:"var(--sb-text-2)",fontFamily:ee?mt:"inherit",fontSize:ee?"13px":"14.5px",lineHeight:1.55,padding:"6px 0"}}),React.createElement("div",{key:"foot",style:{display:"flex",alignItems:"center",gap:"12px",marginTop:"3px"}},[React.createElement("span",{key:"enc",style:{display:"inline-flex",alignItems:"center",gap:"5px",fontSize:"11px",color:"var(--sb-text-faint)"}},[React.createElement("i",{key:"i",className:"fas fa-lock",style:{color:"var(--sb-green)",fontSize:"10px"}}),a("chat.encryptedOnDevice")]),React.createElement("span",{key:"cnt",style:{fontFamily:mt,fontSize:"10.5px",color:"var(--sb-text-faint)",marginInlineStart:"auto"}},(c?c.length:0)+"/2000")])])].concat(lt)),pr=React.createElement("div",{key:"recbar"},React.createElement(Xo,{onCancel:()=>ot(!1),onSend:(E,se,ue)=>{ot(!1),typeof m=="function"&&m(E,se,ue)}})),un=React.createElement("footer",{key:"composer",style:{flex:"none",padding:"12px 20px calc(18px + var(--sb-safe-bottom, env(safe-area-inset-bottom, 0px)))",background:"var(--sb-bg)",borderTop:"1px solid rgba(var(--sb-ink), 0.05)"}},React.createElement("div",{style:{maxWidth:"1000px",margin:"0 auto"}},Je?[pr]:[Mt,pn,Qt,Tt,et,Xt])),fn=re&&React.createElement("button",{key:"scrollbtn",onClick:te,style:{position:"fixed",insetInlineEnd:"24px",bottom:"150px",width:"44px",height:"44px",borderRadius:"50%",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"var(--sb-surface-3)",color:"var(--sb-text-4)",display:"grid",placeItems:"center",cursor:"pointer",zIndex:50,boxShadow:"0 6px 20px rgba(var(--sb-shadow-rgb), calc(0.4 * var(--sb-shadow-k)))"}},React.createElement("i",{className:"fas fa-arrow-down",style:{fontSize:"15px"}})),f=React.createElement(nc,{key:"chat-header",status:z,onDisconnect:v,webrtcManager:I,title:t,isOffline:e,peerPresence:n,onRenameTitle:r}),Nn=window.CallUIComponent&&React.createElement(window.CallUIComponent,{key:"call-overlay",webrtcManager:I,peerTitle:t});return React.createElement("div",{className:"chat-container",style:{position:"relative",display:"flex",flexDirection:"column",height:"100vh",background:"var(--sb-bg)",color:"var(--sb-text-2)"}},[f,Tn,fn,un,Nn])},Es=(t,e,n={})=>({message:t,type:e,id:Date.now()+Math.random(),timestamp:typeof n.timestamp=="number"?n.timestamp:Date.now(),mid:n.mid,status:n.status,viewOnce:n.viewOnce===!0,viewOnceTtl:typeof n.viewOnceTtl=="number"?n.viewOnceTtl:15,expiresAt:typeof n.expiresAt=="number"?n.expiresAt:void 0,voice:n.voice||void 0,fileId:n.fileId||void 0}),ln={chevL:'',chevR:'',plus:'',users:'',burger:''},ra=({chats:t,groups:e=[],collapsed:n,drawerOpen:r,onToggleCollapse:i,onSelect:c,onSelectGroup:d,onNewChat:h,onNewGroup:m,onRename:v,onCloseDrawer:S,myStatus:p,onSetStatus:k})=>{let y=React.createElement,[I,z]=React.useState(null),[N,ce]=React.useState(""),[ee,ge]=React.useState(!1),we=React.useRef(null),C=React.useRef(null),O=React.useRef(null),j=React.useRef(null),P=React.useRef(0),U=React.useRef(!1),Q=React.useRef(!1),[X,V]=React.useState(!!r),re=10,oe=220,me=()=>C.current&&C.current.offsetWidth||292,B=b=>{P.current=b;let Z=me(),Ae=Math.min(1,Math.max(0,1+b/Z));if(C.current&&(C.current.style.transform="translate3d("+(b*dr).toFixed(2)+"px,0,0)"),we.current){we.current.style.opacity=Ae.toFixed(3);let qe="blur("+(5*Ae).toFixed(2)+"px)";we.current.style.backdropFilter=qe,we.current.style.webkitBackdropFilter=qe}},$=(b,Z)=>{O.current&&O.current.stop(),O.current=Gi({from:P.current,to:b,velocity:Z,damping:Math.abs(Z)>60?qn.drawer.damping:qn.move.damping,response:qn.drawer.response,restDelta:.5,restSpeed:8,onUpdate:B,onComplete:()=>{B(b),O.current=null,b!==0&&V(!1)}})};React.useLayoutEffect(()=>{if(r&&!X){V(!0);return}if(!X||r===U.current)return;let b=me();r&&!O.current&&!j.current&&B(-b),U.current=r,$(r?0:-b,O.current?O.current.velocity:0)},[r,X]),React.useEffect(()=>()=>{O.current&&O.current.stop()},[]);let ne=b=>{b.pointerType==="mouse"&&b.button!==0||j.current||(Q.current=!1,j.current={id:b.pointerId,x0:b.clientX,y0:b.clientY,base:P.current,axis:null,vel:Ui()},j.current.vel.add(b.clientX*dr,b.timeStamp||performance.now()))},Ie=b=>{let Z=j.current;if(!Z||b.pointerId!==Z.id)return;let Ae=b.clientX-Z.x0,qe=b.clientY-Z.y0;if(!Z.axis){if(Math.abs(Ae)=Math.abs(Ae)){j.current=null;return}Z.axis="x",O.current&&(Z.base=P.current,Z.x0=b.clientX,O.current.stop(),O.current=null);try{b.currentTarget.setPointerCapture(Z.id)}catch{}}Z.vel.add(b.clientX*dr,b.timeStamp||performance.now());let Ze=me(),Ge=Z.base+(b.clientX-Z.x0)*dr;Ge>0?Ge=vs(Ge,Ze):Ge<-Ze&&(Ge=-Ze+vs(Ge+Ze,Ze)),B(Ge)},q=b=>{let Z=j.current;if(!Z||b.pointerId!==void 0&&b.pointerId!==Z.id||(j.current=null,Z.axis!=="x"))return;Q.current=!0;let Ae=me(),qe=Z.vel.get(b.timeStamp||performance.now()),Ze=zi(P.current,qe,[-Ae,0],{flick:oe})===0;U.current=Ze,$(Ze?0:-Ae,qe),Ze||S()},xe=()=>{if(Q.current){Q.current=!1;return}S()},Le=b=>Z=>{Z.stopPropagation(),z(b.id),ce(b.name)},at=()=>{I&&(v(I,N),z(null))},Ee=b=>{b.key==="Enter"?(b.preventDefault(),at()):b.key==="Escape"&&z(null)},Je=(b={})=>y("input",{autoFocus:!0,value:N,onChange:Z=>ce(Z.target.value),onKeyDown:Ee,onBlur:at,onClick:Z=>Z.stopPropagation(),style:Object.assign({width:"100%",background:"rgba(var(--sb-ink), 0.06)",border:"1px solid rgba(var(--sb-orange-rgb), 0.5)",borderRadius:"6px",color:"var(--sb-text-1)",fontFamily:"inherit",fontSize:"14px",fontWeight:700,padding:"2px 6px",outline:"none"},b)}),ot=(b,Z)=>y("span",{style:Object.assign({display:"grid",placeItems:"center"},Z||{}),dangerouslySetInnerHTML:{__html:b}}),vt=(b,Z,Ae)=>y("div",{style:{position:"relative",flex:"none",width:Z+"px",height:Z+"px",borderRadius:(Z>=44?12:11)+"px",display:"grid",placeItems:"center",background:b.active?"rgba(var(--sb-ink), 0.06)":"rgba(var(--sb-ink), 0.035)",border:"1px solid rgba(var(--sb-ink), "+(b.active?"0.14":"0.07")+")",fontSize:"13px",fontWeight:700,letterSpacing:"-0.3px",color:b.active?"var(--sb-text-1)":"var(--sb-text-6)"}},[b.mono,y("span",{key:"dot",style:{position:"absolute",insetInlineEnd:"-2px",bottom:"-2px",width:"11px",height:"11px",borderRadius:"50%",background:b.dot,border:"2px solid "+Ae}})]),Yt=b=>y("div",{key:b.id,onClick:()=>c(b.id),style:{position:"relative",display:"flex",alignItems:"center",gap:"12px",padding:"11px 12px",marginBottom:"4px",borderRadius:"11px",background:b.active?"var(--sb-surface)":"transparent",border:"1px solid "+(b.active?"rgba(var(--sb-ink), 0.08)":"transparent"),cursor:"pointer"}},[b.active&&y("span",{key:"bar",style:{position:"absolute",insetInlineStart:0,top:"12px",bottom:"12px",width:"3px",borderStartEndRadius:"3px",borderEndEndRadius:"3px",background:"var(--sb-orange-solid)"}}),vt(b,38,b.active?"var(--sb-surface)":"var(--sb-bg-deep)"),y("div",{key:"body",style:{flex:1,minWidth:0}},[y("div",{key:"top",style:{display:"flex",alignItems:"center",gap:"7px"}},[I===b.id?Je():y("span",{key:"name",onDoubleClick:Le(b),title:a("chat.renameHint"),style:{flex:1,minWidth:0,fontSize:"14px",fontWeight:b.active?700:600,letterSpacing:"-0.2px",color:b.active?"var(--sb-text-1)":"var(--sb-text-4)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},b.name),b.unread&&I!==b.id&&y("span",{key:"u",style:{flex:"none",minWidth:"18px",height:"18px",padding:"0 5px",borderRadius:"9px",display:"grid",placeItems:"center",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",fontFamily:"'JetBrains Mono',monospace",fontSize:"10px",fontWeight:700}},b.unread)]),y("div",{key:"prev",style:{fontSize:"12px",color:b.active?"var(--sb-text-7)":"var(--sb-text-9)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},b.preview)])]),wt=b=>y("div",{key:b.id,style:{position:"relative"}},[b.active&&y("span",{key:"bar",style:{position:"absolute",insetInlineStart:"-13px",top:"9px",bottom:"9px",width:"3px",borderStartEndRadius:"3px",borderEndEndRadius:"3px",background:"var(--sb-orange-solid)"}}),y("div",{key:"tile",onClick:()=>c(b.id),title:b.name,style:{position:"relative",width:"44px",height:"44px",borderRadius:"12px",display:"grid",placeItems:"center",cursor:"pointer",background:b.active?"rgba(var(--sb-ink), 0.06)":"rgba(var(--sb-ink), 0.03)",border:"1px solid rgba(var(--sb-ink), "+(b.active?"0.14":"0.07")+")",fontSize:"13px",fontWeight:700,letterSpacing:"-0.3px",color:b.active?"var(--sb-text-1)":"var(--sb-text-6)"}},[b.mono,y("span",{key:"dot",style:{position:"absolute",insetInlineEnd:"-2px",bottom:"-2px",width:"11px",height:"11px",borderRadius:"50%",background:b.dot,border:"2.5px solid var(--sb-bg-deep)"}}),b.unread&&y("span",{key:"u",style:{position:"absolute",insetInlineStart:"-5px",top:"-5px",minWidth:"17px",height:"17px",padding:"0 4px",borderRadius:"9px",display:"grid",placeItems:"center",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",fontFamily:"'JetBrains Mono',monospace",fontSize:"9.5px",fontWeight:700,border:"2px solid var(--sb-bg-deep)"}},b.unread)])]),Re=b=>y("div",{style:{width:b+"px",height:b+"px",flex:"none",display:"grid",placeItems:"center"}},y("img",{src:"/logo/securebit-mark.svg",alt:"SecureBit",style:{width:"100%",height:"100%",objectFit:"contain",display:"block"}})),gt=(b,Z)=>y("button",{className:"sb-collapse-btn",onClick:i,title:Z,style:{width:"30px",height:"30px",borderRadius:"8px",display:"grid",placeItems:"center",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"transparent",color:"var(--sb-text-7)",cursor:"pointer"},dangerouslySetInnerHTML:{__html:b}}),te=Er.find(b=>b.key===p)||Er[0],Ne={user:'',check:'',chevUp:'',lock:''},kt=b=>ee?y("div",{key:"pmenu",style:Object.assign({position:"absolute",zIndex:30,borderRadius:"14px",background:"var(--sb-surface)",border:"1px solid rgba(var(--sb-ink), 0.1)",boxShadow:"0 16px 40px rgba(var(--sb-shadow-rgb), calc(0.55 * var(--sb-shadow-k)))",padding:"6px"},b)},[y("div",{key:"h",style:{padding:"9px 10px 7px",fontFamily:"'JetBrains Mono',monospace",fontSize:"10px",fontWeight:600,color:"var(--sb-text-faint)",textTransform:"uppercase",letterSpacing:"1.2px"}},a("chat.setStatus")),...Er.map(Z=>y("button",{key:Z.key,onClick:()=>{k(Z.key),ge(!1)},style:{width:"100%",display:"flex",alignItems:"center",gap:"11px",padding:"9px 10px",borderRadius:"9px",border:"none",background:"transparent",cursor:"pointer",textAlign:"start"}},[y("span",{key:"d",style:{flex:"none",width:"10px",height:"10px",borderRadius:"50%",background:Z.dot}}),y("span",{key:"t",style:{flex:1,minWidth:0}},[y("span",{key:"w",style:{display:"block",fontSize:"13.5px",fontWeight:600,color:"var(--sb-text-2)"}},Z.word),y("span",{key:"de",style:{display:"block",fontSize:"11.5px",color:"var(--sb-text-9)"}},Z.desc)]),Z.key===p&&y("span",{key:"c",style:{flex:"none",display:"grid",placeItems:"center"},dangerouslySetInnerHTML:{__html:Ne.check}})])),y("div",{key:"note",style:{display:"flex",alignItems:"flex-start",gap:"8px",margin:"6px 6px 4px",padding:"9px 10px",borderRadius:"9px",background:"rgba(var(--sb-green-rgb), 0.06)",border:"1px solid rgba(var(--sb-green-rgb), 0.16)"}},[y("span",{key:"i",style:{flex:"none",marginTop:"1px",display:"grid"},dangerouslySetInnerHTML:{__html:Ne.lock}}),y("span",{key:"t",style:{fontSize:"11px",lineHeight:1.45,color:"var(--sb-text-7)"}},a("chat.peersOnly"))])]):null,mt=y("div",{key:"you",style:{flex:"none",position:"relative",marginTop:"10px",borderTop:"1px solid rgba(var(--sb-ink), 0.06)",padding:"10px 12px 12px"}},[kt({left:"12px",right:"12px",bottom:"64px"}),y("button",{key:"btn",onClick:()=>ge(b=>!b),style:{width:"100%",display:"flex",alignItems:"center",gap:"11px",padding:"7px 8px",borderRadius:"11px",border:"1px solid rgba(var(--sb-ink), 0.06)",background:"rgba(var(--sb-ink), 0.02)",cursor:"pointer"}},[y("div",{key:"av",style:{position:"relative",flex:"none",width:"36px",height:"36px",borderRadius:"10px",display:"grid",placeItems:"center",background:"rgba(var(--sb-orange-rgb), 0.12)",border:"1px solid rgba(var(--sb-orange-rgb), 0.24)",color:"var(--sb-orange)"}},[y("span",{key:"i",style:{display:"grid"},dangerouslySetInnerHTML:{__html:Ne.user}}),y("span",{key:"dot",style:{position:"absolute",insetInlineEnd:"-2px",bottom:"-2px",width:"11px",height:"11px",borderRadius:"50%",background:te.dot,border:"2px solid var(--sb-bg-deep)"}})]),y("div",{key:"tx",style:{flex:1,minWidth:0,textAlign:"start"}},[y("div",{key:"y",style:{fontSize:"13.5px",fontWeight:700,color:"var(--sb-text-1)"}},a("chatHdr.you")),y("div",{key:"w",style:{fontSize:"12px",color:"var(--sb-text-7)"}},te.word)]),y("span",{key:"ch",style:{display:"grid",placeItems:"center"},dangerouslySetInnerHTML:{__html:Ne.chevUp}})])]),Ut=y("div",{key:"you",style:{flex:"none",position:"relative",display:"flex",flexDirection:"column",alignItems:"center",padding:"0 0 13px"}},[kt({insetInlineStart:"60px",bottom:"8px",width:"248px"}),y("button",{key:"btn",onClick:()=>ge(b=>!b),title:a("chat.yourStatusPrefix")+te.word,style:{position:"relative",width:"44px",height:"44px",borderRadius:"12px",display:"grid",placeItems:"center",cursor:"pointer",background:"rgba(var(--sb-orange-rgb), 0.12)",border:"1px solid rgba(var(--sb-orange-rgb), 0.24)",color:"var(--sb-orange)"}},[y("span",{key:"i",style:{display:"grid"},dangerouslySetInnerHTML:{__html:Ne.user}}),y("span",{key:"dot",style:{position:"absolute",insetInlineEnd:"-2px",bottom:"-2px",width:"12px",height:"12px",borderRadius:"50%",background:te.dot,border:"2.5px solid var(--sb-bg-deep)"}})])]),St=[y("div",{key:"head",style:{flex:"none",display:"flex",alignItems:"center",justifyContent:"space-between",paddingBlock:0,paddingInlineStart:"16px",paddingInlineEnd:"12px",height:"var(--sb-bar-h, 64px)",borderBottom:"1px solid rgba(var(--sb-ink), 0.06)"}},[y("div",{key:"brand",style:{display:"flex",alignItems:"center",gap:"10px"}},[Re(30),y("span",{key:"t",style:{fontSize:"15px",fontWeight:800,letterSpacing:"-0.3px",color:"var(--sb-text-1)"}},"SecureBit")]),gt(ln.chevL,a("chat.collapse"))]),y("div",{key:"label",style:{flex:"none",display:"flex",alignItems:"center",justifyContent:"space-between",padding:"16px 16px 9px"}},[y("span",{key:"l",style:{fontFamily:"'JetBrains Mono',monospace",fontSize:"10px",fontWeight:600,color:"var(--sb-text-faint)",textTransform:"uppercase",letterSpacing:"1.3px"}},a("chatHdr.chats")),y("span",{key:"c",style:{fontFamily:"'JetBrains Mono',monospace",fontSize:"10px",fontWeight:600,color:"var(--sb-text-9)"}},String(t.length))]),y("div",{key:"list",className:"msc-scroll",style:{flex:1,overflowY:"auto",padding:"0 10px"}},[...t.map(Yt),y("div",{key:"gh",style:{marginTop:"14px",padding:"0 2px 6px",display:"flex",alignItems:"baseline",justifyContent:"space-between"}},[y("span",{key:"l",style:{fontFamily:"'JetBrains Mono',monospace",fontSize:"10px",fontWeight:600,color:"var(--sb-text-faint)",textTransform:"uppercase",letterSpacing:"1.3px"}},a("chat.groupChats")),y("button",{key:"add",onClick:m,title:a("chat.newGroup"),style:{border:"none",background:"transparent",color:"var(--sb-orange)",cursor:"pointer",fontFamily:"'JetBrains Mono',monospace",fontSize:"10px",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.9px",padding:0}},a("chatHdr.newChat"))]),...e.length===0?[y("div",{key:"gph",onClick:m,title:a("chat.createGroup"),style:{display:"flex",alignItems:"center",gap:"12px",padding:"11px 12px",borderRadius:"11px",background:"transparent",border:"1px dashed rgba(var(--sb-ink), 0.09)",cursor:"pointer"}},[y("div",{key:"i",style:{flex:"none",width:"38px",height:"38px",borderRadius:"11px",display:"grid",placeItems:"center",background:"rgba(var(--sb-ink), 0.025)",border:"1px solid rgba(var(--sb-ink), 0.06)",color:"var(--sb-text-faint)"},dangerouslySetInnerHTML:{__html:ln.users}}),y("div",{key:"b",style:{flex:1,minWidth:0}},[y("div",{key:"t",style:{fontSize:"14px",fontWeight:600,color:"var(--sb-text-7)"}},a("chat.newGroup")),y("div",{key:"s",style:{fontSize:"11.5px",color:"var(--sb-text-faint)"}},a("chat.meshHint"))])])]:e.map(b=>y("div",{key:b.id,onClick:()=>d(b.id),style:{position:"relative",display:"flex",alignItems:"center",gap:"12px",padding:"11px 12px",marginBottom:"4px",borderRadius:"11px",background:b.active?"var(--sb-surface)":"transparent",border:"1px solid "+(b.active?"rgba(var(--sb-ink), 0.08)":"transparent"),cursor:"pointer"}},[b.active&&y("span",{key:"bar",style:{position:"absolute",insetInlineStart:0,top:"12px",bottom:"12px",width:"3px",borderStartEndRadius:"3px",borderEndEndRadius:"3px",background:"var(--sb-orange-solid)"}}),vt(b,38,b.active?"var(--sb-surface)":"var(--sb-bg-deep)"),y("div",{key:"body",style:{flex:1,minWidth:0}},[y("div",{key:"top",style:{display:"flex",alignItems:"center",gap:"7px"}},[y("span",{key:"n",style:{flex:1,minWidth:0,fontSize:"14px",fontWeight:b.active?700:600,letterSpacing:"-0.2px",color:b.active?"var(--sb-text-1)":"var(--sb-text-4)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},b.name),b.unread&&y("span",{key:"u",style:{flex:"none",minWidth:"18px",height:"18px",padding:"0 5px",borderRadius:"9px",display:"grid",placeItems:"center",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",fontFamily:"'JetBrains Mono',monospace",fontSize:"10px",fontWeight:700}},b.unread)]),y("div",{key:"prev",style:{fontSize:"12px",color:b.active?"var(--sb-text-7)":"var(--sb-text-9)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},b.preview)])]))]),y("div",{key:"new",style:{flex:"none",padding:"12px"}},y("button",{onClick:h,style:{width:"100%",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:"9px",padding:"12px",borderRadius:"11px",border:"none",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",fontFamily:"inherit",fontSize:"14px",fontWeight:700,cursor:"pointer",boxShadow:"0 8px 24px rgba(var(--sb-orange-rgb), 0.28)"}},[ot(ln.plus,{key:"p"}),a("chat.newChat")])),mt],Gt=[y("div",{key:"head",style:{flex:"none",display:"flex",flexDirection:"column",alignItems:"center",gap:"10px",padding:"13px 0",width:"100%",borderBottom:"1px solid rgba(var(--sb-ink), 0.06)"}},[Re(32),gt(ln.chevR,a("chatHdr.expand"))]),y("div",{key:"list",className:"msc-scroll",style:{flex:1,overflowY:"auto",display:"flex",flexDirection:"column",alignItems:"center",gap:"10px",padding:"14px 0",width:"100%"}},[...t.map(wt),y("div",{key:"sep",style:{width:"30px",height:"1px",background:"rgba(var(--sb-ink), 0.07)",margin:"2px 0"}}),...e.map(b=>y("div",{key:b.id,style:{position:"relative"}},[b.active&&y("span",{key:"bar",style:{position:"absolute",insetInlineStart:"-13px",top:"9px",bottom:"9px",width:"3px",borderStartEndRadius:"3px",borderEndEndRadius:"3px",background:"var(--sb-orange-solid)"}}),y("div",{key:"tile",onClick:()=>d(b.id),title:b.name+" \u2014 "+b.headerSub,style:{position:"relative",width:"44px",height:"44px",borderRadius:"12px",display:"grid",placeItems:"center",cursor:"pointer",background:b.active?"rgba(var(--sb-ink), 0.06)":"rgba(var(--sb-ink), 0.03)",border:"1px solid rgba(var(--sb-ink), "+(b.active?"0.14":"0.07")+")",fontSize:"13px",fontWeight:700,letterSpacing:"-0.3px",color:b.active?"var(--sb-text-1)":"var(--sb-text-6)"}},[b.mono,y("span",{key:"dot",style:{position:"absolute",insetInlineEnd:"-2px",bottom:"-2px",width:"11px",height:"11px",borderRadius:"50%",background:b.dot,border:"2.5px solid var(--sb-bg-deep)"}}),b.unread&&y("span",{key:"u",style:{position:"absolute",insetInlineStart:"-5px",top:"-5px",minWidth:"17px",height:"17px",padding:"0 4px",borderRadius:"9px",display:"grid",placeItems:"center",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",fontFamily:"'JetBrains Mono',monospace",fontSize:"9.5px",fontWeight:700,border:"2px solid var(--sb-bg-deep)"}},b.unread)])])),y("div",{key:"gph",onClick:m,title:a("chat.newGroup"),style:{position:"relative",width:"44px",height:"44px",borderRadius:"12px",display:"grid",placeItems:"center",cursor:"pointer",background:"transparent",border:"1px dashed rgba(var(--sb-ink), 0.1)",color:"var(--sb-text-faint)"},dangerouslySetInnerHTML:{__html:ln.users}})]),y("div",{key:"new",style:{flex:"none",padding:"13px 0"}},y("button",{onClick:h,title:a("chat.newChat"),style:{width:"44px",height:"44px",borderRadius:"12px",display:"grid",placeItems:"center",border:"none",background:"var(--sb-orange-solid)",color:"var(--sb-on-accent)",cursor:"pointer",boxShadow:"0 8px 24px rgba(var(--sb-orange-rgb), 0.28)"},dangerouslySetInnerHTML:{__html:ln.plus}})),Ut],Ht={flex:"none",width:n?"72px":"292px",display:"flex",flexDirection:"column",alignItems:n?"center":"stretch",paddingTop:"var(--sb-safe-top, 0px)",background:"var(--sb-bg-deep)",borderInlineEnd:"1px solid rgba(var(--sb-ink), 0.06)"},Kt=n?Gt:St;return y(React.Fragment,null,[y("style",{key:"css",dangerouslySetInnerHTML:{__html:"@media (max-width:1023px){.sb-rail{display:none !important;}.sb-burger{display:grid !important;}}@media (min-width:1024px){.sb-drawer-overlay{display:none !important;}}.sb-mobile-drawer .sb-collapse-btn{display:none !important;}html,body{background:var(--sb-bg) !important;overscroll-behavior:none;}.sb-app-shell{height:var(--sb-vh,100dvh) !important;min-height:0 !important;overflow:hidden;position:fixed;top:0;inset-inline:0;transform:translate3d(0,var(--sb-vv-top, 0px),0);}.sb-chat-header{position:sticky;top:0;z-index:20;}.sb-app-col{height:100% !important;min-height:0 !important;}.chat-container{height:100% !important;min-height:0 !important;}.sb-scroll{min-height:0 !important;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;}@media (max-width:768px){textarea,input,select{font-size:16px !important;}}@media (max-width:768px){.sb-rename-btn{display:none !important;}}"}}),y("aside",{key:"rail",className:"sb-rail",style:Ht},Kt),y("div",{key:"drawer",className:"sb-drawer-overlay",ref:we,onClick:xe,onPointerDown:ne,onPointerMove:Ie,onPointerUp:q,onPointerCancel:q,style:{position:"fixed",inset:0,zIndex:60,background:"rgba(var(--sb-scrim-rgb), 0.6)",backdropFilter:"blur(0px)",WebkitBackdropFilter:"blur(0px)",opacity:0,display:X?"block":"none",touchAction:"pan-y",willChange:"opacity"}},y("aside",{className:"sb-mobile-drawer",ref:C,onClick:b=>b.stopPropagation(),style:{position:"absolute",insetInlineStart:0,top:0,bottom:0,width:"min(292px, 86vw)",display:"flex",flexDirection:"column",paddingTop:"var(--sb-safe-top, 0px)",background:"var(--sb-bg-deep)",borderInlineEnd:"1px solid rgba(var(--sb-ink), 0.06)",boxShadow:"0 0 60px rgba(var(--sb-shadow-rgb), calc(0.6 * var(--sb-shadow-k)))",touchAction:"pan-y",willChange:"transform"}},[y("button",{key:"x",onClick:S,title:a("chat.closeMenu"),"aria-label":a("chat.closeMenu"),style:{position:"absolute",top:"calc(15px + var(--sb-safe-top, 0px))",insetInlineEnd:"13px",zIndex:2,width:"34px",height:"34px",borderRadius:"9px",display:"grid",placeItems:"center",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"rgba(var(--sb-ink), 0.05)",color:"var(--sb-text-4)",cursor:"pointer"}},y("i",{className:"fas fa-xmark",style:{fontSize:"16px"}})),St]))])},_s=()=>{let[t,e]=React.useReducer(ui,void 0,pi),n=t.activeSessionId,r=React.useRef(null);r.current=n;let i=n?t.sessions[n]:null,c=React.useRef([]).current,d=React.useRef(new Map),h=React.useRef(new Map),m=React.useRef(new Map),v=React.useRef(new Map),[S,p]=React.useReducer(Oi,void 0,Fi),k=React.useRef(new Map),y=S.activeGroupId,I=y?S.groups[y]:null,z=React.useRef(null);z.current=y;let[N,ce]=React.useState(""),[ee,ge]=React.useState(!1),[we,C]=React.useState(!1),[O,j]=React.useState(null),[P,U]=React.useState(null),[Q,X]=React.useState(!1),V=React.useRef(null),[re,oe]=React.useState({}),[me,B]=React.useState({}),$=React.useRef(new Map),[ne,Ie]=React.useState({}),q=React.useRef(new Set),xe=React.useRef(new Map),Le=React.useRef(new Map),at=React.useMemo(()=>Bi({getManager:s=>d.current.get(s)||xe.current.get(s)?.manager||null}),[]),Ee=(s,o,l={})=>({id:Date.now()+Math.random(),message:s,type:o,timestamp:Date.now(),...l}),Je=React.useCallback(s=>(o,l={})=>{switch(o){case"phase":p({type:be.SET_PHASE,id:s,phase:l.phase});break;case"members":p({type:be.SET_MEMBERS,id:s,members:l.members,epoch:l.epoch}),qr.current(s,null);break;case"roster":p({type:be.RENAME,id:s,name:l.name});break;case"sas":p({type:be.SET_SAS,id:s,code:l.code}),p({type:be.SET_ACTIVE_GROUP,id:s}),C(!0);break;case"confirmed":p({type:be.CONFIRM_SAS,id:s});break;case"call":if(oe(u=>({...u,[s]:l.call})),qr.current(s,l.call),l.call&&!l.call.joined&&s!==z.current){let u=`${s}:${l.call.callId}`;q.current.has(u)||(q.current.add(u),p({type:be.INCREMENT_UNREAD,id:s}))}break;case"message":p({type:be.ADD_MESSAGE,id:s,message:Ee(l.body,"received",{senderName:l.name,senderFp:l.fp,timestamp:l.ts,relayed:l.relayed===!0})}),s!==z.current&&p({type:be.INCREMENT_UNREAD,id:s});break;case"ended":Fs.current(s,{announce:!1});break;case"add_failed":p({type:be.ADD_MESSAGE,id:s,message:Ee(a("err.nobodyAccepted"),"system")});break;case"left":p({type:be.ADD_MESSAGE,id:s,message:Ee(`${l.name} left the group.`,"system")});break;case"inconsistency":p({type:be.ADD_MESSAGE,id:s,message:Ee(`${l.name} sent conflicting messages to different members. That message was discarded.`,"system")});break;case"error":p({type:be.SET_ERROR,id:s,error:l.error});break;default:break}},[]),ot=React.useCallback((s,o)=>{let l=k.current.get(o.gid);if(!l){if(Li(o)===he.INVITE){let u=null;try{u=Ir(o)}catch{return}j(g=>g||{gid:u.gid,name:String(u.name||"Group").slice(0,F.MAX_NAME_BYTES),frame:u,sessionId:s})}return}l.handleFrame(s,o).catch(u=>{let g=u?.code||(u?.message?`frame_rejected: ${String(u.message).slice(0,120)}`:"frame_rejected");p({type:be.SET_ERROR,id:o.gid,error:g})})},[]),vt=React.useRef(ot);vt.current=ot;let Yt=React.useCallback((s,o)=>{for(let l of k.current.values())try{l.setSessionState(s,o)}catch{}},[]),wt=React.useRef(Yt);wt.current=Yt;let Re=React.useCallback(s=>{let o=r.current;o&&e(s(o))},[]),gt=i?i.messages:c,te=React.useCallback(s=>{let o=r.current;o&&e(typeof s=="function"?{type:J.SET_MESSAGES,id:o,updater:s}:{type:J.SET_MESSAGES,id:o,messages:s})},[]),Ne=i?i.status:"disconnected",kt=React.useCallback(s=>Re(o=>({type:J.SET_STATUS,id:o,status:s})),[Re]),mt=i?i.keyFingerprint:"",Ut=React.useCallback(s=>Re(o=>({type:J.SET_FINGERPRINT,id:o,fingerprint:s})),[Re]),St=i?i.verificationCode:"",Gt=React.useCallback(s=>Re(o=>({type:J.SET_VERIFICATION,id:o,code:s})),[Re]),yt=i?i.sas.isVerified:!1,Ht=React.useCallback(s=>Re(o=>({type:J.SET_SAS,id:o,sas:{isVerified:!!s}})),[Re]),Kt=i?i.sas.localConfirmed:!1,b=React.useCallback(s=>Re(o=>({type:J.SET_SAS,id:o,sas:{localConfirmed:!!s}})),[Re]),Z=i?i.sas.remoteConfirmed:!1,Ae=React.useCallback(s=>Re(o=>({type:J.SET_SAS,id:o,sas:{remoteConfirmed:!!s}})),[Re]),qe=i?i.sas.bothConfirmed:!1,Ze=React.useCallback(s=>Re(o=>({type:J.SET_SAS,id:o,sas:{bothConfirmed:!!s}})),[Re]),Ge=i?i.pendingIncomingFiles:c,dn=React.useCallback(s=>{let o=r.current;o&&e(typeof s=="function"?{type:J.SET_PENDING_FILES,id:o,updater:s}:{type:J.SET_PENDING_FILES,id:o,files:s})},[]),ct=(s,o)=>i?i.setup[s]:o,He=s=>React.useCallback(o=>Re(l=>({type:J.PATCH_SETUP,id:l,patch:{[s]:o}})),[Re]),Tn=ct("offerData",""),Mt=He("offerData"),pn=ct("answerData",""),Qt=He("answerData"),Tt=ct("offerInput",""),et=He("offerInput"),Ye=ct("answerInput",""),Ke=He("answerInput"),lt=ct("showOfferStep",!1),Xt=He("showOfferStep"),pr=ct("showAnswerStep",!1),un=He("showAnswerStep"),fn=ct("showVerification",!1),f=He("showVerification"),Nn=ct("showQRCode",!1),E=He("showQRCode"),se=ct("qrCodeUrl",""),ue=He("qrCodeUrl"),Me=ct("isGeneratingKeys",!1),Nt=He("isGeneratingKeys"),ie=React.useMemo(()=>({get current(){return d.current.get(r.current)||null},set current(s){let o=r.current;o&&(s?d.current.set(o,s):d.current.delete(o))}}),[]),hn=React.useMemo(()=>({get current(){return h.current.get(r.current)||null},set current(s){let o=r.current;o&&(s?h.current.set(o,s):h.current.delete(o))}}),[]),[Wt,Dn]=React.useState(()=>{try{return localStorage.getItem("securebit_my_status")||"available"}catch{return"available"}}),Ft=React.useRef(Wt);Ft.current=Wt;let Pr=s=>s==="invisible"?"offline":s,Fn=React.useCallback((s,o)=>{if(!(!s||typeof s.sendMessage!="function"))try{if(s.isConnected&&s.isConnected()){let l=s.sendMessage(JSON.stringify({type:"presence",status:Pr(o)}));l&&typeof l.catch=="function"&&l.catch(()=>{})}}catch{}},[]),Kn=React.useCallback(s=>{Dn(s);try{localStorage.setItem("securebit_my_status",s)}catch{}for(let o of d.current.values())Fn(o,s)},[Fn]),[Et,On]=React.useState(!1),[Vt,Pn]=React.useState(!1),[Ln,ur]=React.useState(15),[Rt,Fe]=React.useState(0),[fr,Lr]=React.useState(()=>Date.now()),[jt,Jt]=React.useState(typeof navigator<"u"&&navigator.onLine===!1),Qn=React.useRef(jt);React.useEffect(()=>{Qn.current=jt},[jt]),React.useEffect(()=>{let s=()=>Jt(!0),o=()=>Jt(!1),l=()=>{document.visibilityState==="visible"&&Jt(navigator.onLine===!1)};return window.addEventListener("offline",s),window.addEventListener("online",o),document.addEventListener("visibilitychange",l),()=>{window.removeEventListener("offline",s),window.removeEventListener("online",o),document.removeEventListener("visibilitychange",l)}},[]),React.useEffect(()=>{let s=typeof window<"u"?window.visualViewport:null,o=document.documentElement,l=-1,u="",g=-1,w=0,A=()=>{let dt=Math.round(s?s.height:window.innerHeight||0);dt&&dt!==l&&(l=dt,o.style.setProperty("--sb-vh",dt+"px"))},M=()=>!!s&&window.innerHeight-s.height>120,G=()=>{let rt=M()?"0px":"env(safe-area-inset-bottom, 0px)";rt!==u&&(u=rt,o.style.setProperty("--sb-safe-bottom",rt))},ve=()=>{let dt=!!s&&s.scale>1.01,rt=s&&!dt?Math.max(0,Math.round(s.offsetTop)):0;rt!==g&&(g=rt,o.style.setProperty("--sb-vv-top",rt+"px"))},Se=()=>{A(),G(),ve()},le=()=>{w||(w=requestAnimationFrame(()=>{w=0,ve()}))},fe=[],nt=()=>{ve(),[60,180,360,600].forEach(dt=>fe.push(setTimeout(()=>{A(),G(),ve()},dt)))};Se(),s&&(s.addEventListener("resize",Se),s.addEventListener("scroll",le)),window.addEventListener("resize",Se),window.addEventListener("orientationchange",Se),window.addEventListener("scroll",le,{passive:!0}),document.addEventListener("focusin",nt),document.addEventListener("focusout",nt);let We=ec(s);return()=>{w&&cancelAnimationFrame(w),fe.forEach(clearTimeout),s&&(s.removeEventListener("resize",Se),s.removeEventListener("scroll",le)),window.removeEventListener("resize",Se),window.removeEventListener("orientationchange",Se),window.removeEventListener("scroll",le),document.removeEventListener("focusin",nt),document.removeEventListener("focusout",nt),We&&We()}},[]);let[Ot,Pt]=React.useState(()=>{try{return localStorage.getItem("securebit_relay_only_mode")==="true"}catch{return!1}}),[bt,gn]=React.useState(null),[Cs,_t]=React.useState(""),[hr,Lt]=React.useState(!1),[Br,Bn]=React.useState(!1);React.useEffect(()=>{let s=!1;return Ys().then(o=>{s||!o||(Array.isArray(o.servers)&&o.servers.length>0&&(gn(o.servers),_t(JSON.stringify(o.servers,null,2))),o.privacyMode==="relay-only"&&Pt(!0),Lt(!0))}).catch(()=>{}),()=>{s=!0}},[]),React.useEffect(()=>{let s=()=>Bn(!0);return window.addEventListener("securebit:open-network-settings",s),()=>window.removeEventListener("securebit:open-network-settings",s)},[]);let zr=React.useCallback((s,o)=>{let l=s.useCustom&&Array.isArray(s.servers)?s.servers:null;gn(l&&l.length?l:null),_t(s.serversText||""),Pt(s.privacyMode==="relay-only"),Bn(!1),o?(Lt(!0),qs({servers:l||[],privacyMode:s.privacyMode}).catch(()=>{})):hr&&(Lt(!1),ss().catch(()=>{}))},[hr]),Ur=React.useCallback(async()=>{await ss().catch(()=>{}),Lt(!1),gn(null),_t("")},[]),[zn,Zt]=React.useState(""),[gr,mr]=React.useState(!1),[Xn,Ve]=React.useState(!1),[Jn,yr]=React.useState(()=>typeof window<"u"&&!!window.Html5Qrcode);React.useEffect(()=>{if(Jn)return;let s=()=>yr(!0);return window.addEventListener("securebit:qr-ready",s),window.Html5Qrcode&&yr(!0),()=>window.removeEventListener("securebit:qr-ready",s)},[Jn]);let[Gr,mn]=React.useState(null),[D,L]=React.useState(0),[pe,De]=React.useState(null),[Oe,tt]=React.useState({status:"disconnected",hasActiveAnswer:!1,answerCreatedAt:null,isUserInitiatedDisconnect:!1}),Un=(s,o={})=>{let{preserveAnswer:l=!1,isUserAction:u=!1}=o;tt(g=>({...g,...s,isUserInitiatedDisconnect:u,hasActiveAnswer:l?g.hasActiveAnswer:!1,answerCreatedAt:l?g.answerCreatedAt:null}))},xt=()=>{let s=!!pn||Ye&&typeof Ye=="string"&&Ye.trim().length>0,o=se&&typeof se=="string"&&se.trim().length>0;return Oe.hasActiveAnswer&&!Oe.isUserInitiatedDisconnect||s&&!Oe.isUserInitiatedDisconnect||o&&!Oe.isUserInitiatedDisconnect},en=()=>{Un({hasActiveAnswer:!0,answerCreatedAt:Date.now()})};React.useEffect(()=>js({targetWindow:window,webrtcManagerRef:ie,onClearData:zs}),[]),React.useEffect(()=>{Zs()},[]);let Ct=React.useCallback((s,o,l={})=>{let u=Date.now()+Math.random(),g={message:s,type:o,id:u,timestamp:typeof l.timestamp=="number"?l.timestamp:Date.now(),mid:l.mid,status:l.status,viewOnce:l.viewOnce===!0,viewOnceTtl:typeof l.viewOnceTtl=="number"?l.viewOnceTtl:15,expiresAt:typeof l.expiresAt=="number"?l.expiresAt:void 0,voice:l.voice||void 0,fileId:l.fileId||void 0};return te(w=>{let A=[...w,g];return setTimeout(()=>{if(Pe?.current){let M=Pe.current;try{let{scrollTop:G,scrollHeight:ve,clientHeight:Se}=M;(ve-G-Se<100||w.length===0)&&requestAnimationFrame(()=>{M&&M.scrollTo&&M.scrollTo({top:M.scrollHeight,behavior:Or()})})}catch(G){console.warn("Scroll error:",G),M.scrollTop=M.scrollHeight}}},50),A}),u},[]),yn=React.useCallback((s,o)=>{s&&te(l=>l.map(u=>String(u.mid)===String(s)&&u.type==="sent"?{...u,status:o}:u))},[]),bn=React.useCallback((s,o)=>{s!=null&&te(l=>l.map(u=>String(u.id)===String(s)?{...u,...typeof o=="function"?o(u):o}:u))},[]),Hr=React.useCallback((s,o)=>{s&&te(l=>l.map(u=>u.fileId&&String(u.fileId)===String(s)?{...u,...typeof o=="function"?o(u):o}:u))},[]),tn=React.useCallback(s=>{let o=m.current.get(s);if(!o)return;let l=d.current.get(s),u=o.outgoing;o.outgoing=[];let g=[];for(let M of u){if(!l||l.isConnected?.()!==!0){g.push(M);continue}try{let G=l.sendMessage?.(M.outText,M.meta);G&&typeof G.then=="function"&&G.then(()=>e({type:J.UPDATE_MESSAGE_STATUS,id:s,mid:M.mid,status:"delivered"})).catch(()=>e({type:J.UPDATE_MESSAGE_STATUS,id:s,mid:M.mid,status:"failed"}))}catch{g.push(M)}}g.length&&(o.outgoing=g.concat(o.outgoing));let w=o.incoming;o.incoming=[],w.length>0&&e({type:J.ADD_MESSAGE,id:s,message:Es(`Connection restored \u2014 ${w.length} message${w.length===1?"":"s"} received while you were offline.`,"notice")});let A=s===r.current&&(typeof document>"u"||document.visibilityState==="visible");for(let M of w)if(e({type:J.ADD_MESSAGE,id:s,message:Es(M.message,M.type,M.opts)}),M.opts&&M.opts.mid&&M.type==="received")if(A)try{l?.sendDeliveryReceipt?.(M.opts.mid)}catch{}else o.pendingReadAcks&&o.pendingReadAcks.push(M.opts.mid)},[]),Zn=React.useCallback(()=>{for(let s of m.current.keys())tn(s)},[tn]);React.useEffect(()=>{jt||Zn()},[jt,Zn]),React.useEffect(()=>{let s=setInterval(()=>{for(let[o,l]of m.current.entries()){if(!l.outgoing.length&&!l.incoming.length)continue;let u=d.current.get(o);u?.isConnected?.()===!0&&u?.isReconnecting?.()!==!0&&tn(o)}},2e3);return()=>clearInterval(s)},[tn]);let $t=React.useCallback(async()=>{if(!window.isUpdatingSecurity){window.isUpdatingSecurity=!0;try{if(ie.current&&(mn({level:"MAXIMUM",score:100,color:"green",details:a("sec.allEnabled"),passedChecks:10,totalChecks:10,isRealData:!0}),window.DEBUG_MODE)){let s=ie.current.ecdhKeyPair&&ie.current.ecdsaKeyPair?await ie.current.calculateSecurityLevel():{level:"MAXIMUM",score:100,sessionType:"premium",passedChecks:10,totalChecks:10}}}catch(s){console.error("Failed to update security level:",s),mn({level:"ERROR",score:0,color:"red",details:a("sas.verificationFailed")})}finally{setTimeout(()=>{window.isUpdatingSecurity=!1},2e3)}}},[]),Pe=React.useRef(null),Be=tc(Pe);React.useEffect(()=>{try{localStorage.setItem("securebit_relay_only_mode",String(Ot))}catch{}ie.current?._config?.webrtc&&ie.current._setRelayOnlyMode(Ot)},[Ot]),React.useEffect(()=>{gt.length>0&&Pe.current&&(Be(),setTimeout(Be,50),setTimeout(Be,150))},[gt]);let xn=t.order.some(s=>(t.sessions[s]?.messages||[]).some(o=>typeof o.expiresAt=="number")),Gn=React.useRef(t);Gn.current=t,React.useEffect(()=>{if(!xn)return;let s=l=>{let u=Date.now(),g=!1,w=l.map(A=>typeof A.expiresAt=="number"&&A.expiresAt<=u&&!A.expired?(g=!0,{...A,expired:!0,message:"",expiresAt:void 0}):A);return g?w:l},o=setInterval(()=>{let l=Date.now();Lr(l);let u=Gn.current;for(let g of u.order)(u.sessions[g]?.messages||[]).some(A=>typeof A.expiresAt=="number"&&A.expiresAt<=l&&!A.expired)&&e({type:J.SET_MESSAGES,id:g,updater:s})},1e3);return()=>clearInterval(o)},[xn]);let vn=(s={})=>{let o=s.role||"offer",l=ds({role:o}),u=l.id;e({type:J.CREATE_SESSION,entry:l,activate:s.activate!==!1}),m.current.set(u,{incoming:[],outgoing:[],pendingReadAcks:[]});let g=x=>{e(typeof x=="function"?{type:J.SET_MESSAGES,id:u,updater:x}:{type:J.SET_MESSAGES,id:u,messages:x})},w=(x,ye,ke={})=>{e({type:J.ADD_MESSAGE,id:u,message:Es(x,ye,ke)}),ye==="received"&&u!==r.current&&e({type:J.INCREMENT_UNREAD,id:u})},A=(x,ye)=>{x&&e({type:J.UPDATE_MESSAGE_STATUS,id:u,mid:x,status:ye})},M=(x,ye)=>{x!=null&&e({type:J.PATCH_MESSAGE,id:u,messageId:x,patch:ye})},G=(x,ye)=>{x&&e({type:J.PATCH_MESSAGE,id:u,fileId:x,patch:ye})},ve=x=>e({type:J.SET_STATUS,id:u,status:x}),Se=x=>e({type:J.SET_FINGERPRINT,id:u,fingerprint:x}),le=x=>e({type:J.SET_VERIFICATION,id:u,code:x}),fe=x=>e({type:J.SET_SAS,id:u,sas:{isVerified:!!x}}),nt=x=>e({type:J.SET_SAS,id:u,sas:{localConfirmed:!!x}}),We=x=>e({type:J.SET_SAS,id:u,sas:{remoteConfirmed:!!x}}),dt=x=>e({type:J.SET_SAS,id:u,sas:{bothConfirmed:!!x}}),rt=x=>e({type:J.PATCH_SETUP,id:u,patch:{showVerification:!!x}}),dc=x=>e({type:J.PATCH_SETUP,id:u,patch:{showOfferStep:!!x}}),pc=x=>e({type:J.PATCH_SETUP,id:u,patch:{showAnswerStep:!!x}}),uc=x=>e({type:J.PATCH_SETUP,id:u,patch:{showQRCode:!!x}}),fc=x=>e({type:J.PATCH_SETUP,id:u,patch:{qrCodeUrl:x}}),hc=x=>e({type:J.PATCH_SETUP,id:u,patch:{offerData:x}}),gc=x=>e({type:J.PATCH_SETUP,id:u,patch:{answerData:x}}),mc=x=>e({type:J.PATCH_SETUP,id:u,patch:{offerInput:x}}),yc=x=>e({type:J.PATCH_SETUP,id:u,patch:{answerInput:x}}),Ga=x=>{e(typeof x=="function"?{type:J.SET_PENDING_FILES,id:u,updater:x}:{type:J.SET_PENDING_FILES,id:u,files:x})},Hs=()=>m.current.get(u)||{incoming:[],outgoing:[]},Ws=(x,ye,ke)=>{if(typeof x=="string"&&x.trim().startsWith("{"))try{let _e=JSON.parse(x);if(_e.type==="presence"){let Vs=_e.data&&_e.data.status||_e.status;Vs&&e({type:J.SET_PEER_PRESENCE,id:u,presence:Vs});return}if(ir(_e)){vt.current(u,_e);return}let pt=["file_transfer_start","file_transfer_response","file_chunk","chunk_confirmation","file_transfer_complete","file_transfer_error","heartbeat","verification","verification_response","verification_confirmed","verification_both_confirmed","peer_disconnect","key_rotation_signal","key_rotation_ready","security_upgrade","message_delete","message_receipt"];if(_e.type&&pt.includes(_e.type)){console.log(`Blocked system/file message from chat: ${_e.type}`);return}_e.type==="message"&&typeof _e.data=="string"&&(x=_e.data,_e.meta&&typeof _e.meta=="object"&&(ke=_e.meta))}catch{}let ze={};if(ke&&typeof ke=="object"&&(typeof ke.mid=="string"&&(ze.mid=ke.mid),ke.once===!0&&(ze.viewOnce=!0,ze.viewOnceTtl=Number.isFinite(ke.onceTtl)?ke.onceTtl:15),Number.isFinite(ke.ttl)&&ke.ttl>0&&(ze.expiresAt=Date.now()+ke.ttl*1e3),Number.isFinite(ke.ts)&&(ze.timestamp=ke.ts)),Qn.current&&ye==="received"){Hs().incoming.push({message:x,type:ye,opts:ze});return}if(w(x,ye,ze),ze.mid&&ye==="received")if(u===r.current&&(typeof document>"u"||document.visibilityState==="visible"))try{sn?.sendDeliveryReceipt?.(ze.mid)}catch{}else{let pt=Hs();pt.pendingReadAcks&&pt.pendingReadAcks.push(ze.mid)}},Ha=x=>{let ye=v.current.get(u);if(v.current.set(u,x),ve(x),wt.current(u,x==="connected"||x==="verified"),x!=="reconnecting"){if(x==="connected"&&ye==="reconnecting"&&tn(u),x==="recovery_failed"){ve("disconnected"),u===r.current&&(document.dispatchEvent(new CustomEvent("peer-disconnect")),document.dispatchEvent(new CustomEvent("disconnected"))),setTimeout(()=>{Wr.current(u)||Vr(u)},2500);return}if(x==="connected")document.dispatchEvent(new CustomEvent("new-connection")),window.isUpdatingSecurity||$t().catch(console.error);else if(x==="verifying")rt(!0),window.isUpdatingSecurity||$t().catch(console.error);else if(x==="verified"){fe(!0),rt(!1),dt(!0),ve("connected"),setTimeout(()=>{fe(!0)},0);try{let ke=Ft.current==="invisible"?"offline":Ft.current;setTimeout(()=>{try{let ze=sn.sendMessage?.(JSON.stringify({type:"presence",status:ke}));ze&&typeof ze.catch=="function"&&ze.catch(()=>{})}catch{}},400)}catch{}window.isUpdatingSecurity||$t().catch(console.error)}else x==="connecting"?window.isUpdatingSecurity||$t().catch(console.error):x==="disconnected"?(ve("disconnected"),fe(!1),rt(!1),nt(!1),We(!1),dt(!1),u===r.current&&document.dispatchEvent(new CustomEvent("disconnected"))):x==="peer_disconnected"&&(u===r.current&&(L(0),document.dispatchEvent(new CustomEvent("peer-disconnect"))),ve("peer_disconnected"),fe(!1),rt(!1),nt(!1),We(!1),dt(!1),setTimeout(()=>{Wr.current(u)||Vr(u)},2500))}},Wa=x=>{Se(x===""?"":x)},Va=x=>{x===""?(le(""),rt(!1)):(le(x),rt(!0))},ja=x=>{nt(x.localConfirmed),We(x.remoteConfirmed),dt(x.bothConfirmed)},$a=(x,ye)=>{x==="replay_attack"?(L(0),De(null),w("\u{1F4A1} Data is outdated. Please create a new invitation or use a current response code.","system"),typeof console.clear=="function"&&console.clear()):x==="security_violation"&&(L(0),De(null),w(` Security breach: ${ye}`,"system"),typeof console.clear=="function"&&console.clear())};typeof console.clear=="function"&&console.clear();let sn=new EnhancedSecureWebRTCManager(Ws,Ha,Wa,Va,$a,ja,{webrtc:{relayOnly:Ot,iceServers:Array.isArray(bt)&&bt.length?bt:Array.isArray(window.SECUREBIT_ICE_SERVERS)?window.SECUREBIT_ICE_SERVERS:void 0}});if(d.current.set(u,sn),sn.onMessageDelete=x=>{x&&g(ye=>ye.filter(ke=>String(ke.mid)!==String(x)))},sn.onMessageDelivered=x=>{A(x,"read")},typeof Notification<"u"&&Notification&&Notification.permission==="granted"&&window.NotificationIntegration&&!h.current.get(u))try{let x=new window.NotificationIntegration(sn);x.init().then(()=>{h.current.set(u,x)}).catch(ye=>{})}catch{}return Ws(" SecureBit.chat Enhanced Security Edition v5.6.0 - ECDH + DTLS + SAS initialized. Ready to establish a secure connection with ECDH key exchange, DTLS fingerprint verification, and SAS authentication to prevent MITM attacks.","system"),sn.setFileTransferCallbacks(x=>{if(x&&x.isVoice){let ye=Math.max(0,Math.min(100,x.progress||0)),ke=ze=>ze.voice?x.direction==="up"&&ye>=100?{voice:{...ze.voice,transfer:null}}:{voice:{...ze.voice,transfer:{dir:x.direction,pct:ye}}}:{};x.direction==="up"&&x.uiId!=null?M(x.uiId,ke):x.fileId&&G(x.fileId,ke);return}console.log("File progress:",x)},x=>{if(!!x.isVoice||typeof x.mimeType=="string"&&x.mimeType.startsWith("audio/")){x.getObjectURL().then(_e=>{G(x.fileId,pt=>({voice:{...pt.voice||{},url:_e,transfer:null}}))}).catch(_e=>{console.error("Voice decode failed:",_e),G(x.fileId,pt=>({voice:{...pt.voice||{},transfer:null,error:!0}}))});return}let ke=Math.max(1,Math.round((x.fileSize||0)/(1024*1024)));(async()=>{let _e=await x.getObjectURL(),pt=document.createElement("a");pt.href=_e,pt.download=x.fileName||"file",document.body.appendChild(pt),pt.click(),pt.remove(),setTimeout(()=>x.revokeObjectURL(_e),15e3)})().then(()=>{w(`File received & saved: ${x.fileName} (${ke} MB)`,"system")}).catch(_e=>{console.error("Auto-save failed:",_e),w(`File received: ${x.fileName} (${ke} MB). Open the file panel to download it.`,"system")})},x=>{console.error("File transfer error:",x),x.includes(a("err.notReady"))?w(" File transfer error: connection not ready. Try again later.","system"):x.includes(a("err.fileTooLarge"))?w(" File is too big. Maximum size: 100 MB","system"):w(` File transfer error: ${x}`,"system")},x=>{if(x&&x.isVoice){let ye=x.voice||{};w("","received",{voice:{dur:Number.isFinite(ye.dur)?ye.dur:0,bars:Array.isArray(ye.bars)?ye.bars:null,transfer:{dir:"down",pct:0},url:null},fileId:x.fileId});try{sn.acceptIncomingFile(x.fileId)}catch{}return}Ga(ye=>ye.some(ke=>ke.fileId===x.fileId)?ye:[...ye,x])}),u},Hn=React.useRef(vn);Hn.current=vn;let wn=React.useRef(new Set),Is=React.useCallback(s=>{for(let o of k.current.values())if(o.sessionToFp&&o.sessionToFp.has(s))return!0;return!1},[]),Wr=React.useRef(Is);Wr.current=Is;let Vr=React.useCallback(s=>{if(!(!s||wn.current.has(s))){wn.current.add(s);try{let o=d.current.get(s);if(o){try{o.disconnect()}catch{}d.current.delete(s)}let l=h.current.get(s);if(l){try{l.cleanup?.()}catch{}h.current.delete(s)}m.current.delete(s),v.current.delete(s),e({type:J.REMOVE_SESSION,id:s})}finally{wn.current.delete(s)}}},[]);React.useEffect(()=>{t.order.length===0&&Hn.current({role:"offer"})},[t.order.length]);let[br,As]=React.useState(()=>{try{return localStorage.getItem("securebit_sidebar_collapsed")==="true"}catch{return!1}});React.useEffect(()=>{try{localStorage.setItem("securebit_sidebar_collapsed",String(br))}catch{}},[br]);let[Ms,nn]=React.useState(!1),aa=React.useCallback(s=>{e({type:J.SET_ACTIVE,id:s}),e({type:J.CLEAR_UNREAD,id:s}),nn(!1)},[]),oa=React.useCallback(()=>{p({type:be.SET_ACTIVE_GROUP,id:null}),Hn.current({role:"offer"}),nn(!1)},[]),ca=React.useCallback((s,o)=>{e({type:J.RENAME,id:s,label:o})},[]),Ts=React.useCallback(s=>{let o=xe.current.get(s);if(o){xe.current.delete(s);try{o.manager.disconnect()}catch{}}},[]),kn=React.useRef(Ts);kn.current=Ts;let Ns=React.useCallback((s,o)=>{let l="mesh:"+Array.from(crypto.getRandomValues(new Uint8Array(8))).map(G=>G.toString(16).padStart(2,"0")).join(""),u={manager:null,gid:s,fp:o,sessionId:l},g=G=>{if(typeof G!="string"||!G.trim().startsWith("{"))return;let ve;try{ve=JSON.parse(G)}catch{return}ir(ve)&&vt.current(l,ve)},w=G=>{let ve=G==="disconnected"||G==="failed"||G==="peer_disconnected"||G==="recovery_failed";if(wt.current(l,!ve&&u.manager?.isVerified===!0),G==="recovery_failed"||G==="failed"){let Se=k.current.get(s);try{Se?.unbindSession(o)}catch{}kn.current(l)}},A=G=>{if(!(!G||!u.manager))try{u.manager.markGroupLinkVerified(`group:${s}`)}catch{kn.current(l),wt.current(l,!1)}},M=new EnhancedSecureWebRTCManager(g,w,()=>{},A,()=>{},()=>{},{emitGlobalEvents:!1,webrtc:{relayOnly:Ot,iceServers:Array.isArray(bt)&&bt.length?bt:Array.isArray(window.SECUREBIT_ICE_SERVERS)?window.SECUREBIT_ICE_SERVERS:void 0}});return u.manager=M,xe.current.set(l,u),u},[Ot,bt]),jr=React.useRef(Ns);jr.current=Ns;let Ds=React.useCallback(s=>({createOffer:async o=>{let l=jr.current(s,o);try{let u=await l.manager.createSecureOffer();if(!u||typeof u.sbq2!="string")throw new Error("mesh dial needs a compact descriptor");return{sessionId:l.sessionId,descriptor:u.sbq2}}catch(u){throw kn.current(l.sessionId),u}},createAnswer:async(o,l)=>{let u=jr.current(s,o);try{let g=await u.manager.createSecureAnswer({t:"offer",sbq2:l});if(!g||typeof g.sbq2!="string")throw new Error("mesh answer needs a compact descriptor");return{sessionId:u.sessionId,descriptor:g.sbq2}}catch(g){throw kn.current(u.sessionId),g}},acceptAnswer:async(o,l)=>{let u=xe.current.get(o);if(!u)throw new Error("that mesh dial is no longer open");await u.manager.handleSecureAnswer({t:"answer",sbq2:l})},close:o=>kn.current(o),linkFingerprint:o=>{let l=d.current.get(o)||xe.current.get(o)?.manager||null;return!l||l.isVerified!==!0?"":typeof l.keyFingerprint=="string"?l.keyFingerprint:""}}),[]);React.useEffect(()=>{for(let[s,o]of k.current){let l=S.groups[s];if(!(!l||l.phase!==Y.READY||!l.sasConfirmed))for(let u of t.order){let g=t.sessions[u];!g||!g.sas.isVerified||o.probeSession(u).catch(()=>{})}}},[S,t]);let $r=React.useMemo(()=>t.order.map(s=>t.sessions[s]).filter(s=>s&&s.sas&&s.sas.isVerified).map(s=>({id:s.id,name:s.peerLabel,mono:Rr(s.peerLabel)})),[t]),la=React.useCallback(s=>{p({type:be.SET_ACTIVE_GROUP,id:s}),p({type:be.CLEAR_UNREAD,id:s}),nn(!1)},[]),da=React.useCallback(async({name:s,sessionIds:o})=>{ge(!1);let l=$n.newId(),u=new $n({groupId:l,name:s,isAdmin:!0,subtle:crypto.subtle,send:at,emit:Je(l),mesh:Ds(l)});k.current.set(l,u);try{await u.init(),p({type:be.CREATE_GROUP,entry:Cr({id:l,name:s,selfFp:u.selfFp,adminFp:u.selfFp,isAdmin:!0,members:u._memberSnapshot()})}),await u.invite(o.map(g=>({sessionId:g,name:t.sessions[g]?.peerLabel||"Member"})))}catch(g){k.current.delete(l);try{u.destroy()}catch{}p({type:be.REMOVE_GROUP,id:l}),U(g?.code==="invitations_could_not_be_sent"?a("err.inviteNotConnectedRetry"):`The group could not be created (${g?.code||"unknown error"}).`)}},[at,Je,t]),pa=React.useCallback(async()=>{let s=O;if(!s)return;j(null);let o=new $n({groupId:s.gid,name:s.name,isAdmin:!1,subtle:crypto.subtle,send:at,emit:Je(s.gid),mesh:Ds(s.gid)});k.current.set(s.gid,o);try{await o.init(),p({type:be.CREATE_GROUP,entry:Cr({id:s.gid,name:s.name,selfFp:o.selfFp})}),await o.acceptInvite(s.sessionId,s.frame)}catch(l){k.current.delete(s.gid);try{o.destroy()}catch{}p({type:be.SET_ERROR,id:s.gid,error:l?.code||"join_failed"})}},[O,at,Je]),ua=React.useCallback(()=>{let s=z.current,o=s&&k.current.get(s);if(o)try{o.confirmSas(),C(!1)}catch(l){p({type:be.SET_ERROR,id:s,error:l?.code||"confirm_failed"})}},[]),xr=React.useCallback((s,{announce:o=!0}={})=>{let l=k.current.get(s),u=$.current.get(s);u&&($.current.delete(s),u.leave().catch(()=>{})),oe(g=>{let w={...g};return delete w[s],w}),B(g=>{let w={...g};return delete w[s],w}),k.current.delete(s),Le.current.delete(s),p({type:be.REMOVE_GROUP,id:s}),C(!1),l&&(o?Promise.resolve().then(()=>l.leave()).catch(()=>{}):Promise.resolve()).then(()=>{try{l.destroy()}catch{}})},[]),Fs=React.useRef(xr);Fs.current=xr;let fa=React.useCallback(async s=>{let o=z.current,l=o&&k.current.get(o);if(!l)return;let u=String(s||"").trim();if(u){ce("");try{let{unreachable:g}=await l.sendText(u);p({type:be.ADD_MESSAGE,id:o,message:Ee(u,"sent")});let w=g.map(A=>A.fp).sort().join(",");if(w!==(Le.current.get(o)||"")&&(Le.current.set(o,w),g.length>0)){let A=g.map(G=>G.name),M=A.length===1?`${A[0]} is`:`${A.slice(0,-1).join(", ")} and ${A[A.length-1]} are`;p({type:be.ADD_MESSAGE,id:o,message:Ee(`${M} offline and will not receive messages until they reconnect.`,"system")})}}catch(g){p({type:be.ADD_MESSAGE,id:o,message:Ee(`Could not send: ${g?.message||"unknown error"}`,"system")})}}},[]),ha=React.useMemo(()=>{if(!I)return[];let s=new Set(I.members.map(o=>o.sessionId).filter(Boolean));return $r.filter(o=>!s.has(o.id))},[I,$r]),ga=React.useCallback(async s=>{X(!1);let o=z.current,l=o&&k.current.get(o);if(l)try{await l.addMembers(s.map(u=>({sessionId:u,name:t.sessions[u]?.peerLabel||"Member"})))}catch(u){U(u?.code==="invitations_could_not_be_sent"?a("err.inviteNotConnected"):u?.code==="too_many_members"?`A group is limited to ${F.MAX_MEMBERS} members.`:`Could not invite (${u?.code||"unknown error"}).`)}},[t]),ma=React.useCallback(async s=>{let o=z.current,l=o&&k.current.get(o);if(l)try{await l.removeMember(s)}catch(u){p({type:be.SET_ERROR,id:o,error:u?.code||"remove_failed"})}},[]),Os=React.useCallback((s,o)=>{let l=$.current.get(s);if(!l)return;let u=k.current.get(s),g=o!==null?o:u?.getCallSnapshot?.()||null;if(!g||!g.joined||g.callId!==l.callId){$.current.delete(s),l.leave().catch(()=>{}),B(w=>{let A={...w};return delete A[s],A});return}l.setPeers(g.participants)},[]),qr=React.useRef(Os);qr.current=Os;let vr=React.useCallback(async(s,o)=>{let l=$.current.get(s);if(l&&l.callId===o.callId)return l.setPeers(o.participants),l;l&&($.current.delete(s),await l.leave().catch(()=>{}));let u=new Nr({getManager:g=>d.current.get(g)||xe.current.get(g)?.manager||null,onChange:g=>{B(w=>({...w,[s]:g}))}});return $.current.set(s,u),await u.join({callId:o.callId,selfFp:S.groups[s]?.selfFp||k.current.get(s)?.selfFp||"",withVideo:o.withVideo,peers:[]}),u},[S]),ya=React.useCallback(async s=>{let o=z.current,l=o&&k.current.get(o);if(l)try{await l.startCall({withVideo:s,prepare:u=>vr(o,u)})}catch(u){let g=$.current.get(o);g&&($.current.delete(o),g.leave().catch(()=>{}));let w=u?.code||"media_failed";p({type:be.ADD_MESSAGE,id:o,message:Ee(w==="call_in_progress"?a("groupCall.err.call_in_progress"):w==="not_ready"?a("groupCall.err.not_ready"):a(`groupCall.err.${lr(u)}`),"system")})}},[vr]),ba=React.useCallback(async()=>{let s=z.current,o=s&&k.current.get(s),l=o?.getCallSnapshot?.();if(!(!o||!l))try{let u=await vr(s,{...l,joined:!0});await o.joinCall(),u.setPeers(o.getCallSnapshot()?.participants||[])}catch(u){let g=$.current.get(s);g&&($.current.delete(s),g.leave().catch(()=>{})),p({type:be.ADD_MESSAGE,id:s,message:Ee(a(`groupCall.err.${lr(u)}`),"system")})}},[vr]),xa=React.useCallback(()=>{let s=z.current,o=s&&k.current.get(s)?.getCallSnapshot?.();o&&Ie(l=>({...l,[s]:o.callId}))},[]),va=React.useCallback(async()=>{let s=z.current;if(!s)return;let o=$.current.get(s);o&&($.current.delete(s),B(l=>{let u={...l};return delete u[s],u}),await o.leave().catch(()=>{}));try{await k.current.get(s)?.leaveCall()}catch{}},[]),Wn=React.useCallback(()=>z.current?$.current.get(z.current):null,[]),wa=React.useCallback(()=>{Wn()?.toggleMic()},[Wn]),ka=React.useCallback(()=>{Wn()?.toggleCamera()},[Wn]),Sa=React.useCallback(()=>{Wn()?.flipCamera()},[Wn]);React.useEffect(()=>{y&&p({type:be.CLEAR_UNREAD,id:y})},[y]),React.useEffect(()=>{let s=V.current;s&&(s.scrollTop=s.scrollHeight)},[I&&I.messages.length]),React.useEffect(()=>()=>{for(let s of $.current.values())s.leave().catch(()=>{});$.current.clear();for(let s of k.current.values())try{s.destroy()}catch{}k.current.clear();for(let s of[...xe.current.keys()])kn.current(s)},[]);let Yr=React.useCallback(s=>{if(!s)return;let o=m.current.get(s),l=d.current.get(s);if(!o||!l||!o.pendingReadAcks||o.pendingReadAcks.length===0)return;let u=o.pendingReadAcks;o.pendingReadAcks=[];for(let g of u)try{l.sendDeliveryReceipt?.(g)}catch{}},[]);React.useEffect(()=>{n&&(e({type:J.CLEAR_UNREAD,id:n}),(typeof document>"u"||document.visibilityState==="visible")&&Yr(n))},[n,Yr]);let Ps=React.useRef(!1);React.useEffect(()=>{if(Ps.current)return;Ps.current=!0;let s=!1,o=null,l=g=>{if(g.type==="beforeunload"&&!s)for(let w of d.current.values())try{if(w.isConnected&&w.isConnected()){try{w.sendSystemMessage({type:"peer_disconnect",reason:"user_disconnect",timestamp:Date.now()})}catch{}setTimeout(()=>{try{w.disconnect()}catch{}},100)}else w.disconnect()}catch{}else s&&(g.preventDefault(),g.returnValue="")},u=()=>{document.visibilityState==="hidden"?(s=!0,o&&clearTimeout(o),o=setTimeout(()=>{s=!1},5e3)):document.visibilityState==="visible"&&(s=!1,o&&(clearTimeout(o),o=null),Yr(r.current))};return window.addEventListener("beforeunload",l),document.addEventListener("visibilitychange",u),()=>{window.removeEventListener("beforeunload",l),document.removeEventListener("visibilitychange",u),o&&(clearTimeout(o),o=null);for(let g of d.current.values())try{g.disconnect()}catch{}d.current.clear();for(let g of h.current.values())try{g.cleanup?.()}catch{}h.current.clear(),m.current.clear(),v.current.clear()}},[]);let ic=s=>{try{let o=typeof s=="string"?JSON.parse(s):s,l={type:o.type,version:o.version,timestamp:o.timestamp,sessionId:o.sessionId,connectionId:o.connectionId,verificationCode:o.verificationCode,salt:o.salt,keyFingerprints:o.keyFingerprints,fullDataAvailable:!0,compressionLevel:"minimal"};return JSON.stringify(l)}catch(o){return console.error("Error compressing offer data:",o),s}},ac=s=>({type:"enhanced_secure_offer_template",version:"4.0",sessionId:s.sessionId,connectionId:s.connectionId,verificationCode:s.verificationCode,timestamp:s.timestamp,keyFingerprints:s.keyFingerprints,authChallenge:s?.authChallenge?.challenge,capabilities:Array.isArray(s.capabilities)&&s.capabilities.length<=5?s.capabilities:void 0}),Ea=800,oc=400,[Kr,ft]=React.useState(0),[Ra,je]=React.useState(0),[er,rn]=React.useState(!1),T=React.useRef({timer:null,chunks:[],idx:0,active:!1});React.useEffect(()=>()=>{try{T.current&&T.current.timer&&(clearInterval(T.current.timer),T.current.timer=null)}catch{}},[n]);let cc=()=>{try{T.current.timer&&clearInterval(T.current.timer)}catch{}T.current={timer:null,chunks:[],idx:0,active:!1},je(0),ft(0),rn(!1)},Qr=async()=>{let{chunks:s,idx:o}=T.current||{};if(!s||!s.length)return;let l=s[o%s.length];try{let g=typeof window<"u"&&(window.innerWidth||0)>=1024?720:512,w=await(window.generateQRCode?window.generateQRCode(l,{errorCorrectionLevel:"M",margin:2,size:g}):Promise.resolve(""));w&&ue(w)}catch(u){console.warn("Animated QR render error (current):",u)}je((T.current?.idx||0)%(T.current?.chunks?.length||1)+1)},Vn=async()=>{await Qr();let s=T.current?.chunks?.length||0;if(s>0){let o=((T.current?.idx||0)+1)%s;T.current.idx=o,je(o+1)}},_a=()=>{let s=!er;rn(s),s?(T.current.timer&&(clearInterval(T.current.timer),T.current.timer=null),console.log("QR Manual mode enabled - auto-scroll stopped")):(T.current.chunks.length>1&&(T.current.active=!0,clearInterval(T.current.timer),T.current.timer=setInterval(Vn,3e3)),console.log("QR Manual mode disabled - auto-scroll resumed"))},Ca=async()=>{if(console.log("\u{1F3AE} nextQrFrame called, qrFramesTotal:",Kr,"qrAnimationRef.current:",T.current),T.current.chunks.length>1){let s=(T.current.idx+1)%T.current.chunks.length;T.current.idx=s,je(s+1),console.log("\u{1F3AE} Next frame index:",s+1);try{clearInterval(T.current.timer)}catch{}T.current.timer=null,await Qr(),!er&&T.current.chunks.length>1?(T.current.active=!0,T.current.timer=setInterval(Vn,3e3)):T.current.active=!1}else console.log("\u{1F3AE} No multiple frames to navigate")},Ia=async()=>{if(console.log("\u{1F3AE} prevQrFrame called, qrFramesTotal:",Kr,"qrAnimationRef.current:",T.current),T.current.chunks.length>1){let s=(T.current.idx-1+T.current.chunks.length)%T.current.chunks.length;T.current.idx=s,je(s+1),console.log("\u{1F3AE} Previous frame index:",s+1);try{clearInterval(T.current.timer)}catch{}T.current.timer=null,await Qr(),!er&&T.current.chunks.length>1?(T.current.active=!0,T.current.timer=setInterval(Vn,3e3)):T.current.active=!1}else console.log("\u{1F3AE} No multiple frames to navigate")},H=React.useRef({id:null,total:0,seen:new Set,items:[]}),Ls=async s=>{try{let o=typeof s=="string"?s.length:JSON.stringify(s).length,u=typeof window<"u"&&(window.innerWidth||0)>=1024?720:512;if(typeof window.generateBinaryQRCodeFromObject=="function")try{let le=typeof s=="string"?JSON.parse(s):s,fe=await window.generateBinaryQRCodeFromObject(le,{errorCorrectionLevel:"M",size:u,margin:2});if(fe){try{T.current&&T.current.timer&&clearInterval(T.current.timer)}catch{}T.current={timer:null,chunks:[],idx:0,active:!1},je(0),ft(0),rn(!1),ue(fe),ft(1),je(1);return}}catch(le){console.warn("Binary QR generation failed, falling back to compressed:",le?.message||le)}if(typeof window.generateCompressedQRCode=="function")try{let le=typeof s=="string"?s:JSON.stringify(s),fe=await window.generateCompressedQRCode(le,{errorCorrectionLevel:"M",size:u,margin:2});if(fe){try{T.current&&T.current.timer&&clearInterval(T.current.timer)}catch{}T.current={timer:null,chunks:[],idx:0,active:!1},je(0),ft(0),rn(!1),ue(fe),ft(1),je(1);return}}catch(le){console.warn("Compressed QR generation failed, falling back to plain:",le?.message||le)}let g=typeof s=="string"?s:JSON.stringify(s);if(g.length<=Ea){if(!window.generateQRCode)throw new Error("QR code generator unavailable");try{T.current&&T.current.timer&&clearInterval(T.current.timer)}catch{}T.current={timer:null,chunks:[],idx:0,active:!1},je(0),ft(0),rn(!1);let le=await window.generateQRCode(g,{errorCorrectionLevel:"M",size:u,margin:2});ue(le),ft(1),je(1);return}try{T.current&&T.current.timer&&clearInterval(T.current.timer)}catch{}T.current={timer:null,chunks:[],idx:0,active:!1},je(0),ft(0),rn(!1);let w=`raw_${Date.now()}_${Math.random().toString(36).slice(2)}`,M=Math.max(200,Math.floor(g.length/10)),G=Math.ceil(g.length/M),ve=[];for(let le=0;le[...l,{message:` QR code generation failed: ${o.message}`,type:"error"}])}},Aa=s=>({type:"enhanced_secure_offer",version:s.version,timestamp:s.timestamp,sessionId:s.sessionId,connectionId:s.connectionId,verificationCode:s.verificationCode,salt:s.salt,sdp:s.sdp,keyFingerprints:s.keyFingerprints,capabilities:s.capabilities,ecdhPublicKey:{keyType:"ECDH",keyData:s.ecdhKeyData,timestamp:s.timestamp-1e3,version:s.version,signature:s.ecdhSignature},ecdsaPublicKey:{keyType:"ECDSA",keyData:s.ecdsaKeyData,timestamp:s.timestamp-999,version:s.version,signature:s.ecdsaSignature},authChallenge:{challenge:s.authChallenge,timestamp:s.timestamp,nonce:s.authNonce,version:s.version},securityLevel:{level:"CRITICAL",score:20,color:"red",verificationResults:{encryption:{passed:!1,details:"Encryption not working",points:0},keyExchange:{passed:!0,details:"Simple key exchange verified",points:15},messageIntegrity:{passed:!1,details:"Message integrity failed",points:0},rateLimiting:{passed:!0,details:"Rate limiting active",points:5},ecdsa:{passed:!1,details:"Enhanced session required - feature not available",points:0},metadataProtection:{passed:!1,details:"Enhanced session required - feature not available",points:0},pfs:{passed:!1,details:"Enhanced session required - feature not available",points:0},nestedEncryption:{passed:!1,details:"Enhanced session required - feature not available",points:0},packetPadding:{passed:!1,details:"Enhanced session required - feature not available",points:0},advancedFeatures:{passed:!1,details:"Premium session required - feature not available",points:0}},timestamp:s.timestamp,details:"Real verification: 20/100 security checks passed (2/4 available)",isRealData:!0,passedChecks:2,totalChecks:4,sessionType:"demo",maxPossibleScore:50}}),Ma=async s=>{try{if(console.log("QR Code scanned:",s.substring(0,100)+"..."),console.log("Current buffer state:",H.current),s.startsWith("SB2:")||s.charCodeAt(0)===2)return H.current={id:null,total:0,seen:new Set,items:[]},lt?Ke(s):et(s),te(l=>[...l,{message:a("flow.invitationCaptured"),type:"success"}]),Ve(!1),Promise.resolve(!0);if(s.startsWith("SB1:bin:")||H.current&&H.current.id){console.log("Binary chunk detected:",s.substring(0,50)+"..."),H.current.id||(console.log("Initializing buffer for binary chunks"),H.current={id:`bin_${Date.now()}`,total:4,seen:new Set,items:[],lastUpdateMs:Date.now()});let l=s.substring(0,50);if(H.current.seen.has(l))return console.log("Chunk already scanned, ignoring..."),Promise.resolve(!1);H.current.seen.add(l),H.current.items.push(s),H.current.lastUpdateMs=Date.now();try{let g=H.current.seen.size;document.dispatchEvent(new CustomEvent("qr-scan-progress",{detail:{id:H.current.id,seq:g,total:H.current.total}})),ft(H.current.total),je(g)}catch{}let u=H.current.seen.size>=H.current.total;if(console.log(`Chunks collected: ${H.current.seen.size}/${H.current.total}, complete: ${u}`),!u)return console.log(`Scanned chunk ${H.current.seen.size}/${H.current.total}, waiting for more...`),Promise.resolve(!1);try{let g=H.current.items.join("");return lt?Ke(g):et(g),te(w=>[...w,{message:"All binary chunks captured. Payload reconstructed.",type:"success"}]),H.current={id:null,total:0,seen:new Set,items:[]},Ve(!1),Promise.resolve(!0)}catch(g){return console.warn("Binary chunks reconstruction failed:",g),Promise.resolve(!1)}}if(s.length>100&&!s.startsWith("{")&&!s.startsWith("[")){console.log("Detected potential binary chunk (long non-JSON string):",s.substring(0,50)+"..."),H.current.id||(console.log("Initializing buffer for potential binary chunks"),H.current={id:`bin_${Date.now()}`,total:4,seen:new Set,items:[],lastUpdateMs:Date.now()});let l=s.substring(0,50);if(H.current.seen.has(l))return console.log("Chunk already scanned, ignoring..."),Promise.resolve(!1);H.current.seen.add(l),H.current.items.push(s),H.current.lastUpdateMs=Date.now();try{let g=H.current.seen.size;document.dispatchEvent(new CustomEvent("qr-scan-progress",{detail:{id:H.current.id,seq:g,total:H.current.total}})),ft(H.current.total),je(g)}catch{}let u=H.current.seen.size>=H.current.total;if(console.log(`Chunks collected: ${H.current.seen.size}/${H.current.total}, complete: ${u}`),!u)return console.log(`Scanned chunk ${H.current.seen.size}/${H.current.total}, waiting for more...`),Promise.resolve(!1);try{let g=H.current.items.join("");return lt?Ke(g):et(g),te(w=>[...w,{message:"All binary chunks captured. Payload reconstructed.",type:"success"}]),H.current={id:null,total:0,seen:new Set,items:[]},Ve(!1),Promise.resolve(!0)}catch(g){return console.warn("Binary chunks reconstruction failed:",g),Promise.resolve(!1)}}let o;if(typeof window.decodeAnyPayload=="function"){let l=window.decodeAnyPayload(s);typeof l=="string"?o=JSON.parse(l):o=l}else{let l=typeof window.decompressIfNeeded=="function"?window.decompressIfNeeded(s):s;o=JSON.parse(l)}if(console.log("Decoded data:",o),o.hdr&&o.body){let{hdr:l}=o;if(!H.current.id||H.current.id!==l.id){H.current={id:l.id,total:l.total||1,seen:new Set,items:[],lastUpdateMs:Date.now()};try{document.dispatchEvent(new CustomEvent("qr-scan-progress",{detail:{id:l.id,seq:0,total:l.total||1}}))}catch{}}H.current.seen.has(l.seq)||(H.current.seen.add(l.seq),H.current.items.push(s),H.current.lastUpdateMs=Date.now());try{let g=H.current.seen.size;document.dispatchEvent(new CustomEvent("qr-scan-progress",{detail:{id:l.id,seq:g,total:H.current.total||l.total||0}}))}catch{}if(!(H.current.seen.size>=(H.current.total||1)))return Promise.resolve(!1);if(l.rt==="raw")try{let w=H.current.items.map(M=>JSON.parse(M)).sort((M,G)=>(M.hdr.seq||0)-(G.hdr.seq||0)).map(M=>M.body||"").join(""),A=JSON.parse(w);lt?Ke(JSON.stringify(A,null,2)):et(JSON.stringify(A,null,2)),te(M=>[...M,{message:"All frames captured. RAW payload reconstructed.",type:"success"}]);try{document.dispatchEvent(new CustomEvent("qr-scan-complete",{detail:{id:l.id}}))}catch{}return H.current={id:null,total:0,seen:new Set,items:[]},Ve(!1),Promise.resolve(!0)}catch(g){return console.warn("RAW multi-frame reconstruction failed:",g),Promise.resolve(!1)}else if(l.rt==="bin")try{let w=H.current.items.map(M=>JSON.parse(M)).sort((M,G)=>(M.hdr.seq||0)-(G.hdr.seq||0)).map(M=>M.body||"").join(""),A;if(typeof window.decodeAnyPayload=="function"){let M=window.decodeAnyPayload(w);A=typeof M=="string"?JSON.parse(M):M}else A=JSON.parse(w);lt?Ke(JSON.stringify(A,null,2)):et(JSON.stringify(A,null,2)),te(M=>[...M,{message:"All frames captured. BIN payload reconstructed.",type:"success"}]);try{document.dispatchEvent(new CustomEvent("qr-scan-complete",{detail:{id:l.id}}))}catch{}return H.current={id:null,total:0,seen:new Set,items:[]},Ve(!1),Promise.resolve(!0)}catch(g){return console.warn("BIN multi-frame reconstruction failed:",g),Promise.resolve(!1)}else if(window.receiveAndProcess){try{let g=await window.receiveAndProcess(H.current.items);if(g.length>0){let{payloadObj:w}=g[0];lt?Ke(JSON.stringify(w,null,2)):et(JSON.stringify(w,null,2)),te(A=>[...A,{message:"All frames captured. COSE payload reconstructed.",type:"success"}]);try{document.dispatchEvent(new CustomEvent("qr-scan-complete",{detail:{id:l.id}}))}catch{}return H.current={id:null,total:0,seen:new Set,items:[]},Ve(!1),Promise.resolve(!0)}}catch(g){console.warn("COSE multi-chunk processing failed:",g)}return Promise.resolve(!1)}else return Promise.resolve(!1)}if(o.type==="enhanced_secure_offer_template"){console.log("QR scan: Template-based offer detected, reconstructing...");let l=Aa(o);return lt?(Ke(JSON.stringify(l,null,2)),console.log("\u{1F4F1} Template data populated to answerInput (waiting for response mode)")):(et(JSON.stringify(l,null,2)),console.log("\u{1F4F1} Template data populated to offerInput (paste invitation mode)")),te(u=>[...u,{message:"\u{1F4F1} QR code scanned successfully! Full offer reconstructed from template.",type:"success"}]),Ve(!1),!0}else return o.type==="secure_offer_reference"?(te(l=>[...l,{message:a("err.retiredQr"),type:"error"}]),!1):(!o.sdp&&o.type==="enhanced_secure_offer"&&te(l=>[...l,{message:a("err.compressedQrNote"),type:"warning"}]),lt?(console.log("QR scan: Populating answerInput with:",o),Ke(JSON.stringify(o,null,2))):(console.log("QR scan: Populating offerInput with:",o),et(JSON.stringify(o,null,2))),te(l=>[...l,{message:"\u{1F4F1} QR code scanned successfully!",type:"success"}]),Ve(!1),!0)}catch{return lt?Ke(s):et(s),te(l=>[...l,{message:"\u{1F4F1} QR code scanned successfully!",type:"success"}]),Ve(!1),!0}},Bs=async()=>{try{Nt(!0),Mt(""),Xt(!1),E(!1),ue("");let s=await ie.current.createSecureOffer();Mt(s),Xt(!0);let o=typeof s=="object"?JSON.stringify(s):s;try{if(typeof window.encodeBinaryToPrefixed=="function"){let u=window.encodeBinaryToPrefixed(o),g=4,w=g,A=Math.max(200,Math.ceil(u.length/g));A<=0&&(A=200),u.length<=A?(w=1,A=u.length):(A=Math.ceil(u.length/g),w=g);let M=`bin_${Date.now()}_${Math.random().toString(36).slice(2)}`,G=[];for(let fe=0;fe=1024?720:512;if(window.generateQRCode&&G.length>0){let fe=await window.generateQRCode(G[0],{errorCorrectionLevel:"M",size:Se,margin:2});fe&&ue(fe)}try{T.current&&T.current.timer&&clearInterval(T.current.timer)}catch{}T.current={timer:null,chunks:G,idx:0,active:!0},ft(G.length),je(1),rn(!1);let le=3e3;T.current.timer=setInterval(Vn,le);try{E(!0)}catch{}}else{await Ls(s);try{E(!0)}catch{}}}catch(u){console.warn("Offer QR generation failed:",u)}gt.filter(u=>u.type==="system"&&(u.message.includes(a("flow.invitationCreated"))||u.message.includes(a("flow.sendEncryptedCode")))).length===0&&(te(u=>[...u,{message:a("flow.invitationCreatedBang"),type:"system",id:Date.now(),timestamp:Date.now()}]),te(u=>[...u,{message:a("flow.sendInvitation"),type:"system",id:Date.now(),timestamp:Date.now()}])),window.isUpdatingSecurity||$t().catch(console.error)}catch(s){te(o=>[...o,{message:`Error creating invitation: ${s.message}`,type:"system",id:Date.now(),timestamp:Date.now()}])}finally{Nt(!1)}},Ta=async()=>{try{if(!Tt.trim()){te(s=>[...s,{message:a("err.needInvitation"),type:"system",id:Date.now(),timestamp:Date.now()}]);return}try{te(w=>[...w,{message:a("flow.processingInvitation"),type:"system",id:Date.now(),timestamp:Date.now()}]);let s;try{if(typeof window.decodeAnyPayload=="function"){let w=window.decodeAnyPayload(Tt.trim());s=typeof w=="string"?JSON.parse(w):w}else{let w=typeof window.decompressIfNeeded=="function"?window.decompressIfNeeded(Tt.trim()):Tt.trim();s=JSON.parse(w)}}catch(w){throw new Error(`Invalid invitation format: ${w.message}`)}if(!s||typeof s!="object")throw new Error("The invitation must be an object");if(!(s.t==="offer"||s.type==="enhanced_secure_offer"))throw new Error("Invalid invitation type. Expected offer or enhanced_secure_offer");let l=await ie.current.createSecureAnswer(s);Qt(l),un(!0);let u=typeof l=="object"?JSON.stringify(l):l;try{if(typeof window.encodeBinaryToPrefixed=="function"){let w=window.encodeBinaryToPrefixed(u),A=4,M=A,G=Math.max(200,Math.ceil(w.length/A));G<=0&&(G=200),w.length<=G?(M=1,G=w.length):(G=Math.ceil(w.length/A),M=A);let ve=`ans_${Date.now()}_${Math.random().toString(36).slice(2)}`,Se=[];for(let We=0;We=1024?720:512;if(window.generateQRCode&&Se.length>0){let We=await window.generateQRCode(Se[0],{errorCorrectionLevel:"M",size:fe,margin:2});We&&ue(We)}try{T.current&&T.current.timer&&clearInterval(T.current.timer)}catch{}T.current={timer:null,chunks:Se,idx:0,active:!0},ft(Se.length),je(1),rn(!1);let nt=3e3;T.current.timer=setInterval(Vn,nt);try{E(!0)}catch{}}else{await Ls(l);try{E(!0)}catch{}}}catch(w){console.warn("Answer QR generation failed:",w)}typeof en=="function"&&en(),gt.filter(w=>w.type==="system"&&(w.message.includes(a("flow.responseCreated"))||w.message.includes(a("flow.sendTheResponse")))).length===0&&(te(w=>[...w,{message:a("flow.responseCreatedBang"),type:"system",id:Date.now(),timestamp:Date.now()}]),te(w=>[...w,{message:a("flow.sendResponse"),type:"system",id:Date.now(),timestamp:Date.now()}])),window.isUpdatingSecurity||$t().catch(console.error)}catch(s){console.error("Error in handleCreateAnswer:",s),te(o=>[...o,{message:`Error processing the invitation: ${s.message}`,type:"system",id:Date.now(),timestamp:Date.now()}])}}catch(s){console.error("Error in handleCreateAnswer:",s),te(o=>[...o,{message:`Invitation processing error: ${s.message}`,type:"system",id:Date.now(),timestamp:Date.now()}])}},Na=async()=>{try{if(!Ye.trim()){te(s=>[...s,{message:a("err.needResponse"),type:"system",id:Date.now(),timestamp:Date.now()}]);return}try{te(l=>[...l,{message:a("flow.processingResponse"),type:"system",id:Date.now(),timestamp:Date.now()}]);let s;try{if(typeof window.decodeAnyPayload=="function"){let l=window.decodeAnyPayload(Ye.trim());s=typeof l=="string"?JSON.parse(l):l}else{let l=typeof window.decompressIfNeeded=="function"?window.decompressIfNeeded(Ye.trim()):Ye.trim();s=JSON.parse(l)}}catch(l){throw new Error(`Invalid response format: ${l.message}`)}if(!s||typeof s!="object")throw new Error("The response must be an object");let o=s.t||s.type;if(!o||o!=="answer"&&o!=="enhanced_secure_answer")throw new Error("Invalid response type. Expected answer or enhanced_secure_answer");await ie.current.handleSecureAnswer(s),pe&&(De(null),te(l=>[...l,{message:"All security features enabled by default",type:"system",id:Date.now(),timestamp:Date.now()}])),te(l=>[...l,{message:a("flow.finalizing"),type:"system",id:Date.now(),timestamp:Date.now()}]),window.isUpdatingSecurity||$t().catch(console.error)}catch(s){console.error("Error in handleConnect inner try:",s);let o=a("err.setupError");s.message.includes("CRITICAL SECURITY FAILURE")?s.message.includes("ECDH public key structure")?o=a("err.responseNoKey"):s.message.includes("ECDSA public key structure")?o=a("err.responseNoSignKey"):o=a("err.securityValidation"):s.message.includes("too old")||s.message.includes("replay")?o=a("err.responseOutdated"):s.message.includes("MITM")||s.message.includes("signature")?o=a("err.securityBreach"):s.message.includes("Invalid")||s.message.includes("format")?o=a("err.responseFormat"):o=` ${s.message}`,te(l=>[...l,{message:o,type:"system",id:Date.now(),timestamp:Date.now(),showRetryButton:!0}]),!s.message.includes("too old")&&!s.message.includes("replay")&&(De(null),L(0)),kt("failed")}}catch(s){console.error("Error in handleConnect outer try:",s);let o=a("err.setupError");s.message.includes("CRITICAL SECURITY FAILURE")?s.message.includes("ECDH public key structure")?o=a("err.responseNoKey"):s.message.includes("ECDSA public key structure")?o=a("err.responseNoSignKey"):o=a("err.securityValidation"):s.message.includes("too old")||s.message.includes("replay")?o=a("err.responseOutdated"):s.message.includes("MITM")||s.message.includes("signature")?o=a("err.securityBreach"):s.message.includes("Invalid")||s.message.includes("format")?o=a("err.responseFormat"):o=`${s.message}`,te(l=>[...l,{message:o,type:"system",id:Date.now(),timestamp:Date.now(),showRetryButton:!0}]),!s.message.includes("too old")&&!s.message.includes("replay")&&(De(null),L(0)),kt("failed")}},Da=async(s,o=!0)=>{if(o){ie.current.confirmVerification(s),b(!0);try{if(window.NotificationIntegration&&ie.current&&!hn.current){let l=new window.NotificationIntegration(ie.current);await l.init(),hn.current=l,l.getStatus().permission==="granted"?te(g=>[...g,{message:"\u2713 Notifications enabled - you will receive alerts when the tab is inactive",type:"system",id:Date.now(),timestamp:Date.now()}]):te(g=>[...g,{message:"\u2139 Notifications disabled - you can enable them using the button on the main page",type:"system",id:Date.now(),timestamp:Date.now()}])}else hn.current}catch(l){console.warn("Failed to initialize notifications:",l)}}else te(l=>[...l,{message:" Verification rejected. The connection is unsafe! Session reset..",type:"system",id:Date.now(),timestamp:Date.now()}]),b(!1),Ae(!1),Ze(!1),f(!1),Gt(""),kt("disconnected"),Mt(""),Qt(""),et(""),Ke(""),Xt(!1),un(!1),Ut(""),mn(null),Ht(!1),te([]),L(0),De(null),document.dispatchEvent(new CustomEvent("disconnected")),Xr()},Fa=async()=>{if(!zn.trim()||!ie.current)return;let s=zn.trim(),o=`m_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,l=ie.current,u=l?.isConnected?.()===!0&&l?.isReconnecting?.()!==!0;if(!u&&l?.isConnected){let g=Et?"```\n"+s+"\n```":s,w=Date.now(),A={mid:o,ts:w};Vt&&(A.once=!0,A.onceTtl=Ln),Rt>0&&(A.ttl=Rt);let M={mid:o,status:"sent",timestamp:w};Rt>0&&(M.expiresAt=w+Rt*1e3),Ct(g,"sent",M);let G=m.current.get(r.current);G&&G.outgoing.push({outText:g,meta:A,mid:o}),Zt(""),Et&&On(!1),Vt&&Pn(!1);return}if(!u){Ct(a("chat.notSentReason"),"system");return}try{let g=s,w=Et?"```\n"+g+"\n```":g,A=o,M={mid:A,ts:Date.now()};Vt&&(M.once=!0,M.onceTtl=Ln),Rt>0&&(M.ttl=Rt);let G={mid:A,status:"sending"};Rt>0&&(G.expiresAt=Date.now()+Rt*1e3),Ct(w,"sent",G);try{await ie.current.sendMessage(w,M),yn(A,"delivered")}catch(ve){throw yn(A,"failed"),ve}Zt(""),Et&&On(!1),Vt&&Pn(!1)}catch(g){let w=String(g?.message||g);/queued for sending|Data channel not ready/i.test(w)||Ct(`Sending error: ${w}`,"system")}},Oa=async(s,o,l)=>{if(!s||!ie.current)return;let u=String(s.type||"").toLowerCase(),g="audio/wav";u.startsWith("audio/webm")?g="audio/webm":u.startsWith("audio/mp4")||u.startsWith("audio/x-m4a")?g="audio/mp4":u.startsWith("audio/ogg")&&(g="audio/ogg");let w=g==="audio/mp4"?"m4a":g==="audio/ogg"?"ogg":g==="audio/webm"?"webm":"wav",A=new File([s],`voice-message.${w}`,{type:g}),M=null;try{M=URL.createObjectURL(s)}catch{}let G=ie.current?.isReconnecting?.()===!0;if(G||ie.current?.isConnected?.()!==!0){if(M)try{URL.revokeObjectURL(M)}catch{}Ct(G?a("err.voiceRestoring"):a("err.voiceNeedsConnection"),"system");return}let Se={dur:Math.max(1,Math.round(o||0)),bars:Array.isArray(l)?l.map(fe=>Math.round(fe*1e3)/1e3):[]},le=Ct("","sent",{voice:{dur:Se.dur,bars:Se.bars,url:M,transfer:{dir:"up",pct:0}}});try{await ie.current.sendFile(A,{voice:Se,uiId:le}),bn(le,fe=>({voice:{...fe.voice||{},transfer:null}}))}catch(fe){bn(le,We=>({voice:{...We.voice||{},transfer:null,error:!0}}));let nt=String(fe?.message||fe);/queued for sending|Data channel not ready/i.test(nt)||Ct(`Voice message failed: ${nt}`,"system")}},Pa=React.useCallback(s=>{if(s){te(o=>o.filter(l=>String(l.mid)!==String(s)));try{ie.current?.sendMessageDelete?.(String(s))}catch{}}},[]),La=React.useCallback(s=>{te(o=>o.map(l=>l.id===s?{...l,expired:!0,message:"",expiresAt:void 0}:l))},[]),zs=()=>{Mt(""),Qt(""),et(""),Ke(""),Xt(!1),Nt(!1),xt()||un(!1),f(!1),E(!1),mr(!1),Ve(!1),H.current={id:null,total:0,seen:new Set,items:[]},xt()||ue(""),Gt(""),Ht(!1),Ut(""),mn(null),kt("disconnected"),te([]),Zt(""),b(!1),Ae(!1),Ze(!1),typeof console.clear=="function"&&console.clear(),L(0),De(null),document.dispatchEvent(new CustomEvent("peer-disconnect"))},Ba=React.useCallback(async(s,o)=>{try{o?await ie.current?.acceptIncomingFile(s):await ie.current?.rejectIncomingFile(s)}finally{dn(l=>l.filter(u=>u.fileId!==s))}},[]),Xr=()=>{try{let s=r.current;ta(),L(0),document.dispatchEvent(new CustomEvent("peer-disconnect")),document.dispatchEvent(new CustomEvent("disconnected")),document.dispatchEvent(new CustomEvent("session-cleanup",{detail:{timestamp:Date.now(),reason:"manual_disconnect"}})),Vr(s),typeof console.clear=="function"&&console.clear()}catch(s){console.error("Error during disconnect:",s)}},lc=s=>{let o;s.type==="demo"?o=" Demo session activated for 6 minutes. You can create invitations!":o=" All security features enabled by default. You can create invitations!",Ct(o,"system")},Us=React.useRef(Ne);React.useEffect(()=>{let s=Us.current==="reconnecting";Us.current=Ne,Ne==="connected"&&yt&&!s&&Ct(" Secure connection successfully established and verified! You can now communicate safely with full protection against MITM attacks and Perfect Forward Secrecy..","system")},[Ne,yt]);let Jr=React.useMemo(()=>{try{return new URLSearchParams(window.location.search).get("preview")==="chat"}catch{return!1}},[]),It=(Ne==="connected"||Ne==="verified"||Ne==="reconnecting")&&yt,Gs=React.useRef({id:n,live:It});React.useEffect(()=>{let s=Gs.current;Gs.current={id:n,live:It},s.live&&!It&&s.id===n&&ta()},[It,n]),React.useEffect(()=>(document.body.classList.toggle("sb-in-chat",It||Jr),()=>document.body.classList.remove("sb-in-chat")),[It,Jr]),React.useEffect(()=>{It&&pe&&Ne!=="failed"&&(De(null),L(0),Ct(" All security features enabled by default","system"))},[It,pe,Ne]),React.useEffect(()=>{if(Xn&&window.Html5Qrcode){let s=new window.Html5Qrcode("qr-reader"),o={fps:10},l=!0;return s.start({facingMode:"environment"},o,(u,g)=>{if(!l){console.log("Scanner stopped, ignoring scan");return}console.log("QR Code scanned:",u),console.log("Current buffer state:",H.current),Ma(u).then(w=>{if(console.log("QR scan result:",w),w){console.log("Closing scanner and modal"),l=!1;try{console.log("Stopping scanner..."),s.stop().then(()=>{console.log("Scanner stopped, clearing..."),s.clear(),Ve(!1)}).catch(A=>{console.log("Error stopping scanner:",A);try{s.clear()}catch(M){console.log("Error clearing scanner:",M)}Ve(!1)})}catch(A){console.log("Error in scanner cleanup:",A),Ve(!1)}}else console.log("Continuing to scan for more chunks...")}).catch(w=>{console.error("QR scan processing error:",w)})},u=>{l&&console.log("QR scan error (ignored):",u)}).catch(u=>{console.error("QR Scanner start error:",u),Ve(!1)}),()=>{l=!1;try{s.stop().then(()=>{s.clear()}).catch(u=>{console.log("Scanner already stopped or error stopping:",u);try{s.clear()}catch(g){console.log("Error clearing scanner in cleanup:",g)}})}catch(u){console.log("Error in cleanup:",u);try{s.clear()}catch(g){console.log("Error clearing scanner in cleanup:",g)}}}}},[Xn,Jn]);let za=fi(t),Ua=Pi(S),qt=t.order.length>1||S.order.length>0||t.order.some(s=>{let o=t.sessions[s];return o&&o.sas&&o.sas.isVerified});if(Jr){let s=[{message:"Preview mode \u2014 no connection is open.",type:"system",id:1,timestamp:Date.now()-3e5},{message:"This renders the real chat components so the layout can be checked without a handshake.",type:"received",id:2,timestamp:Date.now()-24e4},{message:"Header pinned, list scrolls, composer sits above the keyboard.",type:"sent",id:3,timestamp:Date.now()-18e4},...Array.from({length:30},(l,u)=>({message:"Filler message "+(u+1)+" \u2014 enough content to make the list scroll.",type:u%2?"sent":"received",id:10+u,timestamp:Date.now()-(30-u)*5e3}))],o=()=>{};return React.createElement("div",{className:"minimal-bg sb-app-shell",style:{display:"flex",flexDirection:"row",height:"100vh",width:"100%",overflow:"hidden"}},[React.createElement(ra,{key:"sidebar",chats:[{id:"preview",label:"Preview peer",unread:0,active:!0,verified:!0}],collapsed:br,drawerOpen:Ms,onToggleCollapse:()=>As(l=>!l),onSelect:o,onNewChat:o,onRename:o,onCloseDrawer:()=>nn(!1),myStatus:Wt,onSetStatus:Kn}),React.createElement("button",{key:"burger",className:"sb-burger",onClick:()=>nn(!0),style:{display:"none",position:"fixed",top:"calc(13px + var(--sb-safe-top, 0px))",insetInlineStart:"13px",zIndex:55,width:"38px",height:"38px",borderRadius:"10px",placeItems:"center",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"rgba(var(--sb-bg-rgb), 0.9)",color:"var(--sb-text-4)",cursor:"pointer"},dangerouslySetInnerHTML:{__html:ln.burger}}),React.createElement("div",{key:"col",className:"minimal-bg sb-app-col",style:{flex:1,minWidth:0,height:"100vh",overflow:"hidden",display:"flex",flexDirection:"column"}},React.createElement("main",{key:"main"},React.createElement(na,{title:"Preview peer",isOffline:!1,peerPresence:"available",onRenameTitle:o,messages:s,messageInput:zn,setMessageInput:Zt,onSendMessage:o,onSendVoice:o,onDisconnect:o,keyFingerprint:"preview",isVerified:!0,chatMessagesRef:Pe,scrollToBottom:o,webrtcManager:null,status:"connected",pendingIncomingFiles:[],onIncomingDecision:o,codeMode:Et,setCodeMode:On,viewOnceMode:Vt,setViewOnceMode:Pn,viewOnceTtl:Ln,setViewOnceTtl:ur,disappearTtl:Rt,setDisappearTtl:Fe,nowTick:fr,onUnsendMessage:o,onMessageExpire:o})))])}return React.createElement("div",{className:qt?"minimal-bg sb-app-shell":"minimal-bg",style:qt?{display:"flex",flexDirection:"row",height:"100vh",width:"100%",overflow:"hidden"}:{minHeight:"100vh"}},[qt&&React.createElement(ra,{key:"sessions-sidebar",chats:za,groups:Ua,collapsed:br,drawerOpen:Ms,onToggleCollapse:()=>As(s=>!s),onSelect:s=>{p({type:be.SET_ACTIVE_GROUP,id:null}),aa(s)},onSelectGroup:la,onNewChat:oa,onNewGroup:()=>{ge(!0),nn(!1)},onRename:ca,onCloseDrawer:()=>nn(!1),myStatus:Wt,onSetStatus:Kn}),ee&&React.createElement(Wi,{key:"create-group",candidates:$r,relayOnly:Ot,onCreate:da,onCancel:()=>ge(!1)}),O&&React.createElement($i,{key:"group-invite",invite:{name:O.name,fromLabel:t.sessions[O.sessionId]?.peerLabel||"A verified contact"},onAccept:pa,onDecline:()=>j(null)}),P&&React.createElement(Vi,{key:"group-error",message:P,onDismiss:()=>U(null)}),Q&&I&&React.createElement(ji,{key:"add-members",candidates:ha,remaining:Math.max(0,F.MAX_MEMBERS-I.members.length),onAdd:ga,onCancel:()=>X(!1)}),we&&I&&React.createElement(Hi,{key:"group-sas",group:I,onConfirm:ua,onCancel:()=>{I.phase===Y.READY?C(!1):xr(I.id)}}),qt&&React.createElement("button",{key:"sb-burger",className:"sb-burger",onClick:()=>nn(!0),style:{display:"none",position:"fixed",top:"calc(13px + var(--sb-safe-top, 0px))",insetInlineStart:"13px",zIndex:55,width:"38px",height:"38px",borderRadius:"10px",placeItems:"center",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"rgba(var(--sb-bg-rgb), 0.9)",color:"var(--sb-text-4)",cursor:"pointer"},dangerouslySetInnerHTML:{__html:ln.burger}}),React.createElement("div",{key:"app-column",className:qt?"minimal-bg sb-app-col":"minimal-bg min-h-screen",style:qt?{flex:1,minWidth:0,height:"100vh",overflow:"hidden",display:"flex",flexDirection:"column"}:{}},[!It&&!qt&&window.EnhancedMinimalHeader&&React.createElement(window.EnhancedMinimalHeader,{key:"header",status:Ne,fingerprint:mt,verificationCode:St,onDisconnect:Xr,isConnected:It,securityLevel:Gr,webrtcManager:ie.current}),!It&&!qt&&React.createElement(ws,{key:"lang-suggest"}),I&&React.createElement("main",{key:"group-main",style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"}},React.createElement(qi,{group:I,input:N,setInput:ce,onSend:fa,onLeave:()=>xr(I.id),onRemoveMember:ma,onAddMembers:()=>X(!0),isAdmin:I.isAdmin,scrollRef:V,onStartCall:ya,callActive:!!re[I.id],callOverlay:(()=>{let s=re[I.id]||null;if(!s||!s.joined&&ne[I.id]===s.callId)return null;let o=me[I.id]||null;return React.createElement(ks,{key:"group-call",call:s,media:o,groupName:I.name,localStream:$.current.get(I.id)?.getLocalStream()||null,getRemoteStream:l=>$.current.get(I.id)?.getRemoteStream(l)||null,onJoin:ba,onDismiss:xa,onLeave:va,onToggleMic:wa,onToggleCamera:ka,onFlipCamera:Sa})})()})),!I&&React.createElement("main",{key:"main"},It?React.createElement(na,{title:i?i.peerLabel:"",isOffline:jt,peerPresence:i?i.peerPresence:null,onRenameTitle:s=>{n&&e({type:J.RENAME,id:n,label:s})},messages:gt,messageInput:zn,setMessageInput:Zt,onSendMessage:Fa,onSendVoice:Oa,onDisconnect:Xr,keyFingerprint:mt,isVerified:yt,chatMessagesRef:Pe,scrollToBottom:Be,webrtcManager:ie.current,status:Ne,pendingIncomingFiles:Ge,onIncomingDecision:Ba,codeMode:Et,setCodeMode:On,viewOnceMode:Vt,setViewOnceMode:Pn,viewOnceTtl:Ln,setViewOnceTtl:ur,disappearTtl:Rt,setDisappearTtl:Fe,nowTick:fr,onUnsendMessage:Pa,onMessageExpire:La}):React.createElement(Zo,{onCreateOffer:Bs,onCreateAnswer:Ta,onConnect:Na,onClearData:zs,onVerifyConnection:Da,connectionStatus:Ne,offerData:Tn,answerData:pn,offerInput:Tt,setOfferInput:et,answerInput:Ye,setAnswerInput:Ke,showOfferStep:lt,showAnswerStep:pr,verificationCode:St,showVerification:fn,showQRCode:Nn,qrCodeUrl:se,showQRScanner:gr,setShowQRCode:E,setShowQRScanner:mr,setShowQRScannerModal:Ve,messages:gt,localVerificationConfirmed:Kt,remoteVerificationConfirmed:Z,bothVerificationsConfirmed:qe,qrFramesTotal:Kr,qrFrameIndex:Ra,qrManualMode:er,toggleQrManualMode:_a,nextQrFrame:Ca,prevQrFrame:Ia,markAnswerCreated:en,notificationIntegrationRef:hn,isGeneratingKeys:Me,setIsGeneratingKeys:Nt,handleCreateOffer:Bs,relayOnlyMode:Ot,setRelayOnlyMode:Pt,webrtcManagerRef:ie,showIceSettings:Br,setShowIceSettings:Bn,iceServersText:Cs,iceSettingsPersisted:hr,customIceServers:bt,handleApplyIceSettings:zr,handleForgetIceSettings:Ur,compact:qt})),Xn&&(()=>{let s=()=>{Ve(!1),H.current={id:null,total:0,seen:new Set,items:[]}},o=H.current,u=!!(o&&o.id&&o.total>1)?`Scanning frames\u2026 ${o.seen.size} / ${o.total}`:a("qr.scanning"),g=(w,A)=>React.createElement("span",{key:w,style:Object.assign({position:"absolute",width:"34px",height:"34px",zIndex:3},A)});return React.createElement("div",{key:"qr-scanner-modal",onClick:s,style:{position:"fixed",inset:0,zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",padding:"32px",background:"rgba(var(--sb-scrim-rgb), 0.82)",backdropFilter:"blur(10px)",WebkitBackdropFilter:"blur(10px)",animation:"sbUp .2s ease"}},[React.createElement("div",{key:"scanner-container",onClick:w=>w.stopPropagation(),style:{width:"100%",maxWidth:"420px",borderRadius:"22px",border:"1px solid rgba(var(--sb-ink), 0.1)",background:"var(--sb-bg)",boxShadow:"0 30px 90px rgba(var(--sb-shadow-rgb), calc(0.6 * var(--sb-shadow-k)))",overflow:"hidden"}},[React.createElement("div",{key:"scanner-header",style:{display:"flex",alignItems:"center",gap:"11px",padding:"18px 20px",borderBottom:"1px solid rgba(var(--sb-ink), 0.06)"}},[React.createElement("span",{key:"scanner-icon",style:{display:"flex"},dangerouslySetInnerHTML:{__html:''}}),React.createElement("div",{key:"scanner-titles",style:{flex:1,lineHeight:1.2}},[React.createElement("div",{key:"scanner-title",style:{fontSize:"15.5px",fontWeight:800,color:"var(--sb-text-1)"}},a("qr.title")),React.createElement("div",{key:"scanner-hint",style:{fontSize:"12px",color:"var(--sb-text-8)"}},a("qr.subtitle"))]),React.createElement("button",{key:"close-btn",onClick:s,style:{width:"32px",height:"32px",display:"grid",placeItems:"center",borderRadius:"9px",border:"none",background:"rgba(var(--sb-ink), 0.05)",color:"var(--sb-text-6)",cursor:"pointer"}},React.createElement("i",{className:"fas fa-times"}))]),React.createElement("div",{key:"scanner-body",style:{padding:"22px 24px 24px"}},[React.createElement("div",{key:"viewfinder",style:{position:"relative",aspectRatio:"1",borderRadius:"18px",overflow:"hidden",background:"#000",border:"1px solid rgba(var(--sb-ink), 0.1)"}},[React.createElement("div",{key:"vf-bg",style:{position:"absolute",inset:0,background:"radial-gradient(circle at 50% 45%, var(--sb-surface-2), #000)"}}),React.createElement("div",{key:"qr-reader",id:"qr-reader",style:{position:"absolute",inset:0,zIndex:1}}),g("c-tl",{top:"18px",insetInlineStart:"18px",borderTop:"2.5px solid var(--sb-green-solid)",borderInlineStart:"2.5px solid var(--sb-green-solid)",borderRadius:"8px 0 0 0"}),g("c-tr",{top:"18px",insetInlineEnd:"18px",borderTop:"2.5px solid var(--sb-green-solid)",borderInlineEnd:"2.5px solid var(--sb-green-solid)",borderRadius:"0 8px 0 0"}),g("c-bl",{bottom:"18px",insetInlineStart:"18px",borderBottom:"2.5px solid var(--sb-green-solid)",borderInlineStart:"2.5px solid var(--sb-green-solid)",borderRadius:"0 0 0 8px"}),g("c-br",{bottom:"18px",insetInlineEnd:"18px",borderBottom:"2.5px solid var(--sb-green-solid)",borderInlineEnd:"2.5px solid var(--sb-green-solid)",borderRadius:"0 0 8px 0"}),React.createElement("span",{key:"scan-line",style:{position:"absolute",left:"18px",right:"18px",height:"2.5px",zIndex:2,background:"linear-gradient(90deg, transparent, var(--sb-green), transparent)",boxShadow:"0 0 16px var(--sb-green)",animation:"sbScan 1.5s ease-in-out infinite alternate"}}),React.createElement("div",{key:"scan-status",style:{position:"absolute",bottom:0,left:0,right:0,zIndex:3,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"14px",background:"linear-gradient(transparent, rgba(0,0,0,0.6))"}},[React.createElement("span",{key:"spinner",style:{display:"flex",animation:"sbSpin 1.4s linear infinite"},dangerouslySetInnerHTML:{__html:''}}),React.createElement("span",{key:"scan-frames",style:{fontSize:"12.5px",fontWeight:600,color:"var(--sb-text-4)"}},u)])]),React.createElement("p",{key:"scanner-note",style:{margin:"16px 0 0",textAlign:"center",fontSize:"12px",lineHeight:1.5,color:"var(--sb-text-9)"}},a("qr.hint"))])])])})()])])},rc=({children:t})=>typeof window<"u"&&window.UpdateChecker?React.createElement(window.UpdateChecker,{debug:!1},t):t;function sc(){if(window.EnhancedSecureCryptoUtils&&window.EnhancedSecureWebRTCManager){let t=React.createElement(rc,null,React.createElement(_s));ReactDOM.render(t,document.getElementById("root"))}else console.error("\u041C\u043E\u0434\u0443\u043B\u0438 \u043D\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u044B:",{hasCrypto:!!window.EnhancedSecureCryptoUtils,hasWebRTC:!!window.EnhancedSecureWebRTCManager})}typeof window<"u"&&(window.addEventListener("unhandledrejection",t=>{console.error("Unhandled promise rejection:",t.reason),t.preventDefault()}),window.addEventListener("error",t=>{console.error("Global error:",t.error),t.preventDefault()}),window.initializeApp||(window.initializeApp=sc));if(window.EnhancedSecureCryptoUtils&&window.EnhancedSecureWebRTCManager){let t=({children:n})=>typeof window<"u"&&window.UpdateChecker?React.createElement(window.UpdateChecker,{debug:!1},n):n,e=React.createElement(t,null,React.createElement(_s));ReactDOM.render(e,document.getElementById("root"))}else ReactDOM.render(React.createElement(_s),document.getElementById("root")); //# sourceMappingURL=app.js.map