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 es="ice-device-key",ns="ice-settings";function rs(){return typeof indexedDB<"u"&&typeof crypto<"u"&&!!crypto.subtle}function ss(){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 ts(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 ts(t,es);if(e instanceof CryptoKey)return e;let n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await $s(t,es,n),n}async function qs(t){if(!rs())throw new Error("Persistent storage is not available in this browser");let e=await ss(),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,ns,{iv:Array.from(i),data:Array.from(new Uint8Array(c))})}async function Ys(){if(!rs())return null;try{let t=await ss(),e=await ts(t,ns);if(!e||!Array.isArray(e.iv)||!Array.isArray(e.data))return null;let n=await ts(t,es);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 is(){if(rs())try{let t=await ss();await Ka(t,ns)}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 er(t){if(typeof t!="string"||t.length===0||t.length>512)return!1;for(let e=0;eer(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||!er(n.username)||!er(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=Gn.find(d=>d.toLowerCase().split("-")[0]===i);if(c)return c}return null}function so({pathname:t="/",stored:e=null,languages:n=[]}={}){let r=as(t);return r||(io(t)?"en":e&&Gn.includes(e)?e:ri(n)||"en")}function io(t){return t==="/"||t==="/index.html"}function si(t,e="/"){let n=as(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 os(){try{return localStorage.getItem(ni)}catch{return null}}var Sr=null;function Er(){if(Sr)return Sr;let t=typeof window>"u"?null:window;return!t||!t.location?"en":(Sr=so({pathname:t.location.pathname||"/",stored:os(),languages:t.navigator?.languages||[]}),Sr)}function ao(t=Er()){return kr[t]?.dir==="rtl"?"rtl":"ltr"}function oo(t=Er()){return ao(t)==="rtl"}function ai(t=Er()){return oo(t)?-1:1}var oi="securebit-locale-suggest-dismissed";function ci(){try{return localStorage.getItem(oi)==="1"}catch{return!1}}function cs(){try{localStorage.setItem(oi,"1")}catch{}}function li({pathname:t="/",languages:e=[],stored:n=null}={}){let r=as(t)||"en",i=Gn.includes(n)&&n||ri(e);return i&&i!==r?i:null}function a(t,e,n=Er()){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"}),ls={available:"var(--sb-green-solid)",away:"var(--sb-yellow-2-solid)",busy:"var(--sb-red-solid)",offline:"var(--sb-text-9)"},ds={available:a("presence.available"),away:a("presence.away"),busy:a("presence.busy"),offline:a("presence.offline")},Rr=[{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 _r(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 ps(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||ps(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?ls[t.peerPresence]||"var(--sb-text-9)":"var(--sb-green-solid)",h=t.peerPresence?ds[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:_r(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}),Lt=Object.freeze({START:"start",JOIN:"join",LEAVE:"leave"}),kn=Object.freeze({OFFER:"moffer",ANSWER:"manswer"}),Sn=Object.freeze({CREATE:"create",ADD:"add",REMOVE:"remove",RENAME:"rename"}),tr=new TextEncoder,us=class extends Error{constructor(e,n="group_crypto"){super(e),this.name="GroupCryptoError",this.code=n}},oe=(t,e)=>{throw new us(t,e)};function fs(t){let e=t instanceof Uint8Array?t:new Uint8Array(t),n="";for(let r=0;rMath.ceil(e*4/3)+4&&oe("base64 payload exceeds its limit","bad_b64");let n;try{n=atob(t)}catch{oe("malformed base64","bad_b64")}let r=new Uint8Array(n.length);for(let i=0;iF.MAX_EPOCH)&&oe("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)&&oe("epoch out of range","bad_epoch"),t}function En(t){let e=typeof t=="string"?t:"";return tr.encode(e).length>F.MAX_NAME_BYTES&&oe("group name too long","bad_name"),e}function Rn(t){Array.isArray(t)||oe("member list is not an array","bad_members"),t.lengthF.MAX_MEMBERS&&oe(`a group is limited to ${F.MAX_MEMBERS} members`,"too_many_members");let e=new Set;for(let n of t)Me(n),e.has(n)&&oe("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)&&oe("SPKI length out of range","bad_spki"),fs(new Uint8Array(await t.digest("SHA-256",e)))}async function rr(t,e){let n=await yi(t,e),r;try{r=await t.importKey("spki",e,{name:"ECDSA",namedCurve:"P-384"},!1,["verify"])}catch{oe("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}){Nt(e),Ne(n),Me(r),(!(i instanceof Uint8Array)||i.length!==F.NONCE_BYTES)&&oe("nonce must be 32 bytes","bad_nonce");let c=sn("securebit/group/commit/v1",Xe(e),Bt(n),Xe(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 hs(t,{groupId:e,epoch:n,contributions:r,digits:i=F.SAS_DIGITS}){Nt(e),Ne(n),Array.isArray(r)||oe("contributions must be an array","bad_contributions"),(!Number.isInteger(i)||i<4||i>12)&&oe("digit count out of range","bad_digits"),Rn(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 Cr=class{constructor({groupId:e,epoch:n,selfFingerprint:r,memberFingerprints:i}){this.groupId=Nt(e),this.epoch=Ne(n),this.selfFingerprint=Me(r),this.members=Rn(i),this.members.includes(this.selfFingerprint)||oe("the local member is not in the member set","not_a_member"),this.nonce=nr(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){Me(e),this.members.includes(e)||oe("commitment from a non-member","not_a_member"),(!(n instanceof Uint8Array)||n.length!==F.COMMIT_BYTES)&&oe("malformed commitment","bad_commitment");let r=this.commitments.get(e);return r?(gi(r,n)||oe("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||oe("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){Me(n),this.members.includes(n)||oe("reveal from a non-member","not_a_member");let i=this.commitments.get(n);return i||oe("reveal arrived before the commitment","reveal_without_commitment"),await uo(e,i,{groupId:this.groupId,epoch:this.epoch,fingerprint:n,nonce:r})||oe("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||oe("not every member has revealed","incomplete_reveal"),this.code=await hs(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=""}){Nt(t),Ne(e),Object.values(Sn).includes(n)||oe("unknown membership operation","bad_op");let c=Rn(r);return sn("securebit/group/member-op/v1",Xe(t),Bt(e),n,En(i),...c.map(d=>Xe(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 gs(t,e){let n=typeof e=="string"?tr.encode(e):e;return n instanceof Uint8Array||oe("message body must be a string or bytes","bad_body"),n.length>F.MAX_BODY_BYTES&&oe("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 Nt(t),Ne(e),Ne(n),Me(r),(!(i instanceof Uint8Array)||i.length!==32)&&oe("body hash must be 32 bytes","bad_body_hash"),sn("securebit/group/message/v1",Xe(t),Bt(e),Bt(n),Xe(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 Nt(t),Ne(e),n!==kn.OFFER&&n!==kn.ANSWER&&oe("unknown mesh descriptor kind","bad_mesh_kind"),Me(r),Me(i),r===i&&oe("a member cannot dial itself","bad_mesh_peer"),(typeof c!="string"||c.length===0||c.length>F.MAX_DESCRIPTOR_CHARS)&&oe("mesh descriptor is missing or oversized","bad_descriptor"),(!(d instanceof Uint8Array)||d.length!==F.MESH_NONCE_BYTES)&&oe("mesh nonce must be 16 bytes","bad_mesh_nonce"),sn("securebit/group/mesh-descriptor/v1",Xe(t),Bt(e),n,Xe(r),Xe(i),c,d)}async function ms(t,e,n){let r=await t.sign({name:"ECDSA",hash:"SHA-384"},e,Ri(n));return new Uint8Array(r)}async function ys(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 Nt(t),Ne(e),Me(n),(typeof r!="string"||r.length===0||r.length>256)&&oe("link fingerprint is missing or oversized","bad_link_fp"),sn("securebit/group/link-probe/v1",Xe(t),Bt(e),Xe(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 Mi({groupId:t,epoch:e,callId:n,action:r,fp:i,seq:c,withVideo:d}){return Nt(t),Ne(e),bs(n),Ne(c),Me(i),r!==Lt.START&&r!==Lt.JOIN&&r!==Lt.LEAVE&&oe("unknown call action","bad_call_action"),sn("securebit/group/call/v1",Xe(t),Bt(e),Xe(n),r,Xe(i),Bt(c),d===!0?"v":"a")}function bs(t){return(typeof t!="string"||t.length!==F.CALL_ID_BYTES*2||!/^[0-9a-f]+$/.test(t))&&oe("malformed call id","bad_call_id"),t}function Ai(){return fs(nr(F.CALL_ID_BYTES))}async function Ti(t,e,n){let r=await t.sign({name:"ECDSA",hash:"SHA-384"},e,Mi(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=Mi(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"}),pe=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 xs(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 Ir(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 It(t,e,n){let r=t.groups[e];return r?{...t,groups:{...t.groups,[e]:{...r,...n}}}:t}function Pi(t,e){let n=be;switch(e.type){case n.CREATE_GROUP:{let r=e.entry||Ir(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),It(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),It(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?It(t,e.id,{members:c}):t}case n.SET_SAS:{let r=t.groups[e.id];return!r||r.sasCode===e.code?t:It(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:It(t,e.id,{sasConfirmed:!0,phase:Y.READY,error:null})}case n.ADD_MESSAGE:{let r=t.groups[e.id];return r?It(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 It(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?It(t,e.id,{messages:c}):t}case n.INCREMENT_UNREAD:{let r=t.groups[e.id];return r?It(t,e.id,{unreadCount:r.unreadCount+1}):t}case n.CLEAR_UNREAD:{let r=t.groups[e.id];return!r||r.unreadCount===0?t:It(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 It(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),It(t,e.id,i)}default:return t}}function vs(t){return t.members.filter(e=>e.state===pe.SELF||e.state===pe.LINKED).length}function mo(t){if(t.phase!==Y.READY)return fo[t.phase]||"Group";let e=t.members.length,n=vs(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:xs(t.name),dot:yo(t),headerSub:r,phase:t.phase,memberCount:t.members.length,linkedCount:vs(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 Oi(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",Tr=Object.freeze(new Set(Object.values(he)));function sr(t){return!t||typeof t!="object"?!1:t.type===Ar||Tr.has(t.type)}function Li(t){return!t||typeof t!="object"?null:t.type===Ar?typeof t.t=="string"?t.t:null:Tr.has(t.type)?t.type:null}function xo(t){let e=JSON.stringify(t),n=qe(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 Mr(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"||!Tr.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 _n=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}},Hn=class{constructor({groupId:e,name:n,isAdmin:r,subtle:i,send:c,emit:d,mesh:h=null,log:m=()=>{}}){this.groupId=Nt(e),this.name=En(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:pe.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===pe.LINKED&&e.sessionId)}_relayFor(e){let n=this.members.get(this.adminFp);return n&&n.state===pe.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===pe.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!==pe.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=pe.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===pe.LINKED||n.state===pe.LOST)&&(n.state=pe.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===pe.SELF)return;let c=n?pe.LINKED:pe.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()+_n.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 Rn([...this.members.keys()])){if(n>=vo)break;let c=this.members.get(i);if(!c||c.state===pe.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=nr(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,pe.PENDING);let v=await ms(this.subtle,this.identity.keyPair.privateKey,{groupId:this.groupId,epoch:r,kind:kn.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:qe(i),sig:qe(v)}))throw new K("no route to carry the dial","unreachable");c.timer=this._timer(()=>this._meshFail(e,"dial_timeout"),_n.MESH_DIAL_MS)}catch(d){this._meshFail(e,d?.code||"dial_failed")}}async _onMeshOffer(e){if(!this._mesh||this._destroyed)return;let n=Me(String(e.from||""));if(Me(String(e.to||""))!==this.selfFp||Ne(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 ys(this.subtle,r.publicKey,{groupId:this.groupId,epoch:this.epoch,kind:kn.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)||Ne(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,pe.PENDING);let k=await ms(this.subtle,this.identity.keyPair.privateKey,{groupId:this.groupId,epoch:h,kind:kn.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:qe(c),sig:qe(k)}))throw new K("no route to carry the answer","unreachable");m.timer=this._timer(()=>this._meshFail(n,"answer_timeout"),_n.MESH_DIAL_MS)}catch(v){this._meshFail(n,v?.code||"answer_failed")}}async _onMeshAnswer(e){if(!this._mesh||this._destroyed)return;let n=Me(String(e.from||""));if(Me(String(e.to||""))!==this.selfFp||Ne(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 ys(this.subtle,i.publicKey,{groupId:this.groupId,epoch:this.epoch,kind:kn.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=Me(String(e.from||""));Me(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:qe(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||Ne(n.epoch)!==this.epoch)return;let r=Me(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===pe.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,pe.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:qe(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")},_n.HELLO_MS)}async acceptInvite(e,n){let r=Mr(n);await this.init();let i=it(String(r.adminSpki||"")),{publicKey:c,fingerprint:d}=await rr(this.subtle,i);this.adminFp=d,this.epoch=Ne(r.epoch),this.name=En(r.name),this.members.set(d,{fp:d,name:"Admin",spki:i,publicKey:c,sessionId:e,state:pe.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:qe(this.identity.spki)}),this._timer(()=>{this.phase===Y.FORMING&&this._fail("roster_never_arrived")},_n.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 rr(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:pe.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(Sn.CREATE)}}}async publishRoster(e=Sn.ADD){if(!this.isAdmin)throw new K("only the admin publishes the roster","not_admin");let n=Rn([...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:qe(d.spki)})}await this._broadcast({type:he.ROSTER,gid:this.groupId,epoch:this.epoch,op:e,name:this.name,adminSpki:qe(this.identity.spki),members:n,sig:qe(i)}),await this._startCeremony()}async _onMemberKey(e){if(Ne(e.epoch)F.MAX_MEMBERS*2)return;let r=it(String(e.spki||"")),{publicKey:i,fingerprint:c}=await rr(this.subtle,r);if(Me(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:En(e.name)})}async _onRoster(e,n){let r=Ne(n.epoch);if(this.isAdmin)return;if(rF.MAX_MEMBERS)throw new K("roster exceeds the member limit","too_many_members");let h=Rn(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:En(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=En(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?pe.SELF:k?.state===pe.LINKED?pe.LINKED:pe.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 Cr({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:qe(e)});let n=this.epoch;this._timer(()=>{this.epoch===n&&(this.phase===Y.COMMITTING||this.phase===Y.REVEALING)&&this._fail("ceremony_timed_out")},_n.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);Ne(e.epoch)===this.epoch&&(this.ceremony.acceptCommitment(Me(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:qe(e)}),await this._maybeFinish()}async _onReveal(e){if(!this.ceremony)return this._holdCeremonyFrame(e);if(Ne(e.epoch)===this.epoch){if(!this.ceremony.commitments.has(Me(String(e.fp||""))))return this._holdCeremonyFrame(e);await this.ceremony.acceptReveal(this.subtle,Me(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 hs(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 gs(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:qe(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=Ne(e.epoch),i=Ne(e.seq),c=Me(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 gs(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=qe(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||pe.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:qe(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=Ai();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(Lt.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(Lt.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(Lt.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=Ne(e.epoch),r=Ne(e.seq),i=Me(String(e.fp||"")),c=bs(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 Lt.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 Lt.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 Lt.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||!sr(n))return;let i=Mr(n);if(!(!i||!Tr.has(i.type))&&Nt(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=Me(String(n.to||"")),i=n.inner;if(!sr(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!==pe.LINKED||!c.sessionId||await this._wire(c.sessionId,{...n,hopped:!0})}async _onLeave(e){let n=Me(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:Sn.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:qe(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()},_n.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 B=0;B{}),c.set(h,S),k}}var Wn={move:{damping:1,response:.4},drawer:{damping:.8,response:.3},rotate:{damping:.8,response:.4}},So=1/480,Eo=.064;function ir(){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=Wn.move.damping,response:c=Wn.move.response,restDelta:d=.1,restSpeed:h=.5,respectReducedMotion:m=!0,onUpdate:v,onComplete:S}=t,p=e,k=r,y=n,I=0,B=0,D=!1,le=2*Math.PI/c,ee=i,ge=()=>{D=!0,I=0,p=y,k=0,v&&v(p),S&&S()};if(m&&ir())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 P=Math.min((C-B)/1e3,Eo);B=C;let V=P;for(;V>0;){let O=Math.min(So,V),z=-le*le*(p-y)-2*ee*le*k;k+=z*O,p+=k*O,V-=O}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:os()})),[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=kr[t]||{},d=c.dir==="rtl"?"rtl":"ltr",h=typeof window<"u"?window.location.pathname:"/",m=si(t,h),v=ir(),S=()=>{cs(),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),cs()},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=ks;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"},an={users:'',send:'',shield:'',x:'',plus:'',relay:'',phone:'',exit:'',video:''},on=(t,e={})=>R("span",{style:{display:"grid",placeItems:"center",...e},dangerouslySetInnerHTML:{__html:t}}),gt=(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}),ar={position:"fixed",inset:0,zIndex:90,display:"grid",placeItems:"center",background:"rgba(var(--sb-scrim-rgb), 0.72)",backdropFilter:"blur(6px)",padding:"20px"},or={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 Cn={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:ar,role:"dialog","aria-modal":"true"},R("div",{style:or},[R("div",{key:"h",style:{display:"flex",flexDirection:"column",gap:"6px"}},[R("span",{key:"l",style:Cn},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:{...gt(r),flex:r?2:1}},r?a("group.close"):a("group.cancel")),!r&&R("button",{key:"ok",onClick:e,disabled:i,style:{...gt(!0),flex:2,opacity:i?.4:1,cursor:i?"not-allowed":"pointer"}},[on(an.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:ar,role:"dialog","aria-modal":"true"},R("div",{style:{...or,maxWidth:"470px"}},[R("div",{key:"h",style:{display:"flex",flexDirection:"column",gap:"6px"}},[R("span",{key:"l",style:Cn},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:Cn},a("group.members")),R("span",{key:"b",style:{...Cn,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:{...gt(!1),flex:1}},a("group.cancelBtn")),R("button",{key:"ok",onClick:()=>S&&n({name:i.trim(),sessionIds:d}),disabled:!S,style:{...gt(!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:ar,role:"alertdialog","aria-modal":"true"},R("div",{style:{...or,maxWidth:"400px"}},[R("span",{key:"l",style:Cn},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:gt(!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:ar,role:"dialog","aria-modal":"true"},R("div",{style:{...or,maxWidth:"440px"}},[R("div",{key:"h",style:{display:"flex",flexDirection:"column",gap:"6px"}},[R("span",{key:"l",style:Cn},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:{...gt(!1),flex:1}},a("group.cancelBtn")),R("button",{key:"ok",onClick:()=>i.length&&n(i),disabled:i.length===0,style:{...gt(!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:ar,role:"dialog","aria-modal":"true"},R("div",{style:or},[R("div",{key:"h",style:{display:"flex",flexDirection:"column",gap:"6px"}},[R("span",{key:"l",style:Cn},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:{...gt(!1),flex:1}},a("group.decline")),R("button",{key:"a",onClick:e,style:{...gt(!0),flex:2}},a("group.join"))])])):null}function Mo({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===pe.SELF,c=r.state===pe.LOST,d=i||r.state===pe.LINKED?_.goodSolid:r.state===pe.PENDING?_.warnSolid:_.badSolid,h=r.state===pe.PENDING;return R("span",{key:r.fp,title:i?"You":r.state===pe.LINKED?a("group.directLink"):r.state===pe.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&&on(an.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 Ao({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(B=>B.state===pe.PENDING),I=B=>{B.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}},xs(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"}},[on(an.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:{...gt(!1),flex:"none",padding:"8px 10px",opacity:S?.4:1,cursor:S?"default":"pointer"}},on(an.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:{...gt(!1),flex:"none",padding:"8px 10px",opacity:S?.4:1,cursor:S?"default":"pointer"}},on(an.video,{key:"i"})),h&&d&&t.members.lengthR(Ao,{key:B.id,msg:B}))),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:B=>n(B.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:{...gt(!0),flex:"none",width:"44px",height:"44px",padding:0,borderRadius:"11px",opacity:!k||!e.trim()?.4:1}},on(an.send))]),p])}var ze=Object.freeze({UNREACHABLE:"unreachable",CONNECTING:"connecting",ACTIVE:"active",FAILED:"failed"}),To={idle:ze.CONNECTING,outgoing:ze.CONNECTING,incoming:ze.CONNECTING,connecting:ze.CONNECTING,active:ze.ACTIVE,ended:ze.FAILED},Nr=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=cr(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===ze.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=ze.FAILED,this._changed())}))}_dial(e){(e.manager.getCallState?.().phase||"idle")==="idle"&&(e.state=ze.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=ze.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]||ze.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(),Nr.SAMPLE_MS))}_stopLevelPolling(){this._levelTimer&&(clearInterval(this._levelTimer),this._levelTimer=null)}_applyLevel(e,n,r,i,c){let d=e[n]===!0;return i>=Nr.ON?(e[r]=0,d?!1:(e[n]=!0,!0)):d?i>Nr.OFF?(e[r]=0,!1):e[r]?c-e[r]>=Nr.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=cr(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:ze.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===ze.ACTIVE).length}}_changed(){try{this._onChange(this.snapshot())}catch{}}};function Yi(t){try{return t.read()}catch{return 0}}function cr(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),In="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",Je={lock:'',minimize:'',expand:'',users:'',micOn:'',micOff:'',camOn:'',camOff:'',grid:'',flip:'',phone:'',phoneHangup:''},ft=(t,e,n)=>H("span",{style:{display:"grid",placeItems:"center",width:e+"px",height:e+"px"},dangerouslySetInnerHTML:{__html:`${t}`}}),Pr={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={...Pr,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"},Po={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"},Oo={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=Oo[t];return e?H("span",{key:"q",style:{display:"inline-flex",alignItems:"flex-end",gap:"2px",height:"12px"}},[0,1,2,3].map(n=>H("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 D=p.current;if(!D||!k)return;D.srcObject!==k&&(D.muted=!0,D.srcObject=k);let le=D.play&&D.play();le&&le.catch&&le.catch(()=>{})});let I=n||t.state===ze.ACTIVE?null:t.state===ze.UNREACHABLE?a("groupCall.waitingLink"):t.state===ze.FAILED?a("groupCall.legFailed"):a("groupCall.connecting"),B=Math.max(44,Math.min(148,Math.round((h||180)*.42)));return H("div",{role:m?"button":void 0,tabIndex:m?0:void 0,onClick:m,onKeyDown:m?D=>{(D.key==="Enter"||D.key===" ")&&(D.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?H("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)"}}):H("div",{key:"av",style:{width:B+"px",height:B+"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:In,fontSize:Math.round(B*.3)+"px",fontWeight:700,transition:"color .12s ease, border-color .12s ease"}},Bo(t.name)),H("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)"}},[H("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&&H("span",{key:"sp",style:{flex:"none",color:"var(--sb-green)",display:"grid",placeItems:"center"}},ft(Je.micOn,S?11:13,2)),I&&!S&&H("span",{key:"s",style:{flex:"none",fontFamily:In,fontSize:"10.5px",color:t.state===ze.FAILED?"var(--sb-red)":"var(--sb-text-6)"}},I),!n&&!S&&Lo(t.quality)])])}function Ss({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),[B,D]=React.useState(null),[le,ee]=zo(),ge=!!t?.joined;React.useEffect(()=>{if(!ge){I(0);return}let L=Date.now(),j=setInterval(()=>I(Math.floor((Date.now()-L)/1e3)),1e3);return()=>clearInterval(j)},[ge,t?.callId]),React.useEffect(()=>{t||k(!1)},[!t]);let we=React.useMemo(()=>new Set(["self",...(e?.peers||[]).map(L=>L.fp)]),[e]);if(React.useEffect(()=>{B&&!we.has(B)&&D(null)},[B,we]),!t)return null;let C=H("span",{key:"enc",style:{display:"inline-flex",alignItems:"center",gap:"5px",fontSize:"11.5px",fontWeight:600,color:"var(--sb-green)"}},[ft(Je.lock,12,2),a("call.encryptedShort")]);if(!ge)return H("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"}},[H("div",{key:"top",style:{flex:"none",padding:"16px 18px"}},H("span",{style:{display:"inline-flex",alignItems:"center",gap:"7px",fontSize:"12px",fontWeight:600,color:"var(--sb-green)"}},[ft(Je.lock,13,2),a("call.encrypted")])),H("div",{key:"mid",style:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"0 24px",textAlign:"center"}},[H("div",{key:"av",style:{position:"relative",width:"112px",height:"112px",marginBottom:"26px",display:"grid",placeItems:"center"}},[H("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"}}),H("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"}}),H("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)"}},ft(Je.users,42,1.6))]),H("div",{key:"n",style:{fontSize:"22px",fontWeight:800,letterSpacing:"-0.4px",color:"var(--sb-text-1)"}},n),H("div",{key:"s",style:{fontFamily:In,fontSize:"13.5px",color:"var(--sb-text-6)",marginTop:"8px"}},t.withVideo?a("groupCall.startedVideo",{name:t.startedByName}):a("groupCall.startedVoice",{name:t.startedByName})),H("div",{key:"p",style:{fontSize:"12.5px",color:"var(--sb-text-9)",marginTop:"6px"}},a("groupCall.inCall",{count:t.participants.length}))]),H("div",{key:"ctrls",style:{flex:"none",display:"flex",justifyContent:"center",gap:"48px",padding:"24px 24px 40px"}},[H("div",{key:"dec",style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"8px"}},[H("button",{key:"b",onClick:d,title:a("groupCall.dismiss"),style:{...Zi,width:"62px",height:"62px"}},ft(Je.phoneHangup,24,1.9)),H("span",{key:"l",style:{fontFamily:In,fontSize:"10.5px",color:"var(--sb-text-7)"}},a("groupCall.dismiss"))]),H("div",{key:"acc",style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"8px"}},[H("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)"}},ft(Je.phone,24,1.9)),H("span",{key:"l",style:{fontFamily:In,fontSize:"10.5px",color:"var(--sb-text-7)"}},a("groupCall.join"))])])]);let P=e?.peers||[],V={fp:"self",name:a("groupCall.you"),state:ze.ACTIVE,hasVideo:e?.cameraEnabled,quality:null,speaking:e?.selfSpeaking===!0};if(p){let L=P.filter(ne=>ne.speaking).map(ne=>ne.name),j=L.length===1?L[0]:L.length>1?L.slice(0,2).join(", "):e?.selfSpeaking?a("groupCall.you"):null;return H("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"}},[H("div",{key:"bar",style:{display:"flex",alignItems:"center",gap:"11px",padding:"11px 12px"}},[H("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)"}},ft(Je.users,16,1.9)),H("div",{key:"tx",style:{flex:1,minWidth:0}},[H("div",{key:"n",style:{fontSize:"13px",fontWeight:700,color:"var(--sb-text-1)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},n),H("div",{key:"s",style:{fontFamily:In,fontSize:"11px",color:j?"var(--sb-green)":"var(--sb-text-6)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},j?a("groupCall.speaking",{name:j}):`${a("groupCall.inCall",{count:t.participants.length})} \xB7 ${ea(y)}`)]),H("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"}},ft(Je.expand,15,2)),H("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"}},ft(Je.phoneHangup,15,2))])])}let O=[V,...P],Q=B?(L=>O.find(j=>j.fp===L)||null)(B):null,X=Q?O.filter(L=>L.fp!==Q.fp):[],W=Q?Xi(X.length,ee.w,ee.h):null,se=Q&&W&&W.main.w>0,ce=Qi(O.length,ee.w,ee.h),me=(L,j={})=>H(Uo,{key:L.fp,peer:L,self:L.fp==="self",speaking:L.speaking===!0,localStream:r,cameraEnabled:e?.cameraEnabled,stream:L.fp==="self"?null:i(L.fp),...j});return H("div",{style:{position:"absolute",inset:0,zIndex:40,display:"flex",flexDirection:"column",background:"var(--sb-bg-deepest)",animation:"sbExpand .2s ease"}},[H("div",{key:"top",style:{flex:"none",display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"14px",padding:"16px 18px 10px"}},[H("div",{key:"l",style:{minWidth:0}},[H("div",{key:"n",style:{fontSize:"17px",fontWeight:800,letterSpacing:"-0.3px",color:"#fff",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},n),H("div",{key:"s",style:{display:"inline-flex",alignItems:"center",gap:"9px",marginTop:"4px"}},[H("span",{key:"d",style:{fontFamily:In,fontSize:"12.5px",color:"var(--sb-text-2)"}},ea(y)),C,H("span",{key:"c",style:{fontSize:"11.5px",color:"var(--sb-text-7)"}},a("groupCall.inCall",{count:t.participants.length}))])]),H("div",{key:"r",style:{flex:"none",display:"flex",alignItems:"center",gap:"8px"}},[se&&H("button",{key:"grid",onClick:()=>D(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}},[ft(Je.grid,14,2),a("groupCall.showEveryone")]),H("button",{key:"min",onClick:()=>k(!0),title:a("call.minimize"),style:Po},ft(Je.minimize,16,2))])]),e?.error&&H("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}`)),H("div",{key:"stage",ref:le,className:"msc-scroll",style:{flex:1,minHeight:0,minWidth:0,overflow:"auto",margin:"0 14px 6px",display:"flex",alignItems:"safe center",justifyContent:"safe center"}},se?H("div",{style:{display:"flex",flexDirection:"column",gap:10+"px",width:"100%",height:ee.h+"px",minHeight:0}},[H("div",{key:"main",style:{flex:"none",display:"flex",justifyContent:"center",minHeight:0}},me(Q,{tileW:W.main.w,tileH:W.main.h,pinned:!0,onSelect:()=>D(null)})),X.length>0&&H("div",{key:"strip",className:"msc-scroll",style:{flex:"none",height:W.stripH+"px",display:"flex",gap:10+"px",justifyContent:X.length>4?"flex-start":"center",overflowX:"auto",overflowY:"hidden"}},X.map(L=>me(L,{tileW:W.thumbW,tileH:W.stripH,compact:!0,onSelect:()=>D(L.fp)})))]):H("div",{style:{display:"flex",flexWrap:"wrap",gap:10+"px",justifyContent:"center",alignContent:"center",width:ce.tileW?ce.cols*ce.tileW+(ce.cols-1)*10+"px":"100%"}},O.map(L=>me(L,{tileW:ce.tileW,tileH:ce.tileH,onSelect:()=>D(L.fp)})))),H("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)"}},[H("button",{key:"mic",onClick:m,title:a("call.mute"),style:e?.micEnabled?Pr:Ji},ft(e?.micEnabled?Je.micOn:Je.micOff,21,1.9)),H("button",{key:"cam",onClick:v,title:a("call.camera"),style:e?.cameraEnabled?Pr:Ji},ft(e?.cameraEnabled?Je.camOn:Je.camOff,21,1.8)),e?.cameraEnabled&&H("button",{key:"flip",onClick:S,title:a("call.flipCamera"),style:Pr},ft(Je.flip,21,1.8)),H("button",{key:"end",onClick:h,title:a("groupCall.leave"),style:Zi},ft(Je.phoneHangup,22,1.9))])])}typeof window<"u"&&(window.GroupCallUI=Ss);var lr=ai(),Or=()=>ir()?"auto":"smooth",ta=()=>{window.__sbScrollToDonate=Date.now(),document.dispatchEvent(new CustomEvent("securebit:scroll-to-donate"))},_s=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 _s(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 Es=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")`,Vn="'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,B=p.transfer||null,D=!!B&&!I,le=!!p.error||h,ee=B?B.dir:null,ge=B?Math.max(0,Math.min(100,B.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 Ae=ne.duration&&isFinite(ne.duration)?ne.duration:k;Ae&&d(Math.min(1,ne.currentTime/Ae))}),ne.addEventListener("ended",()=>{i(!1),d(0)}),ne.addEventListener("error",()=>{i(!1),m(!0)}),ne.src=I,v.current=ne}let j=v.current.play();j&&typeof j.then=="function"?j.then(()=>i(!0)).catch(ne=>{console.warn("Voice playback failed:",ne&&ne.name,ne&&ne.message),m(!0),i(!1)}):i(!0)},P=()=>{D||le||!I||(r?we():C())},V=j=>{if(D||le||!I)return;let ne=j.currentTarget.getBoundingClientRect(),Ae=Math.max(0,Math.min(1,(j.clientX-ne.left)/ne.width));v.current&&v.current.duration&&(v.current.currentTime=Ae*v.current.duration),d(Ae)},O=c*k,z=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)",W=y.map((j,ne)=>{let Ae=(ne+.5)/y.length<=c,$;return D?$=e?"rgba(var(--sb-ink), 0.13)":"rgba(var(--sb-ink), 0.1)":$=Ae?"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+j*22)+"px",borderRadius:"2px",background:$,transition:"background .12s"}})}),se=D&&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:z.toFixed(1),strokeDashoffset:(z*(1-ge/100)).toFixed(1),style:{transition:"stroke-dashoffset .12s linear"}})]),ce=le?n("i",{className:"fas fa-triangle-exclamation",style:{fontSize:"14px"}}):D?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=le?a("msg.failed"):D?ee==="up"?a("chat.uploading"):a("chat.downloading"):a("msg.voice"),L=D?ge+"%":sa(r||c>0?O: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"}},[se,n("button",{key:"pb",onClick:P,title:D?a("chat.transferring"):r?a("msg.pause"):a("msg.play"),style:{width:"42px",height:"42px",borderRadius:"50%",display:"grid",placeItems:"center",border:"none",background:le?"rgba(var(--sb-red-rgb), 0.15)":Q,color:le?"var(--sb-red)":X,cursor:D||le||!I?"default":"pointer",transition:"transform .15s cubic-bezier(.2,.7,.3,1)"}},ce)]),n("div",{key:"body",style:{flex:1,minWidth:0}},[n("div",{key:"wave",onClick:V,style:{display:"flex",alignItems:"center",gap:"2px",height:"30px",cursor:D||le||!I?"default":"pointer"}},W),n("div",{key:"meta",style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:"6px"}},[n("span",{key:"t",style:{fontFamily:Vn,fontSize:"10.5px",fontWeight:500,color:D?"var(--sb-orange-3)":"var(--sb-text-6)"}},L),n("span",{key:"l",style:{fontFamily:Vn,fontSize:"9.5px",fontWeight:600,color:le?"var(--sb-red)":D?"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 P=performance.now();(!p.lastDraw||P-p.lastDraw>55)&&(p.lastDraw=P,m(V=>{let O=V.slice(1);return O.push(Math.max(.08,C)),O}))},B=(C,P)=>{if(!C||!C.length)return new Array(P).fill(.3);let V=[],O=C.length/P;for(let z=0;z{if(!C||!C.length||V>=P)return C||new Float32Array(0);let O=P/V,z=Math.floor(C.length/O),Q=new Float32Array(z);for(let X=0;X{let V=new ArrayBuffer(44+C.length*2),O=new DataView(V),z=(X,W)=>{for(let se=0;se{if(!C||!C.length)return;p.pcm.push(C),p.sampleCount=(p.sampleCount||0)+C.length;let P=0;for(let V=0;V{if(p.finished)return;p.finished=!0,p.timer&&clearInterval(p.timer),p.timer=null;let P=(p.peaks||[]).slice(),V=p.ac&&p.ac.sampleRate||48e3;k();let O=null,z=1,Q=p.sampleCount||0;if(C&&p.pcm&&p.pcm.length&&Q>V*.2){let X=new Float32Array(Q),W=0;for(let me of p.pcm)X.set(me,W),W+=me.length;let se=24e3,ce=D(X,V,se);z=Math.max(1,Math.round(ce.length/se)),O=le(ce,se)}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&&O&&O.size>44?t(O,z,B(P,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 P=(performance.now()-p.t0)/1e3;d(P),P>=r&&ge(!0)},200),(async()=>{let P=null;try{navigator.mediaDevices&&navigator.mediaDevices.getUserMedia&&(P=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,noiseSuppression:!0}}))}catch{P=null}if(C){P&&P.getTracks().forEach(V=>V.stop());return}if(!P){S(!0),p.timer&&clearInterval(p.timer);return}p.stream=P;try{let V=window.AudioContext||window.webkitAudioContext;if(p.ac=new V,p.ac.state==="suspended")try{await p.ac.resume()}catch{}p.srcNode=p.ac.createMediaStreamSource(P),p.sink=p.ac.createGain(),p.sink.gain.value=0;let O=!1;if(p.ac.audioWorklet&&typeof p.ac.audioWorklet.addModule=="function"&&window.AudioWorkletNode)try{let z='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([z],{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),O=!0}catch{O=!1}O||(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,P)=>n("span",{key:P,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:Vn,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,B]=React.useState(!1),D=React.useRef(null),le=L=>new Date(L).toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit"});if(React.useEffect(()=>()=>{D.current&&clearTimeout(D.current)},[]),e==="system"||e==="notice"){let L=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 "+(L?"rgba(var(--sb-green-rgb), 0.25)":"rgba(var(--sb-orange-rgb), 0.22)"),background:L?"rgba(var(--sb-green-rgb), 0.08)":"rgba(var(--sb-orange-rgb), 0.08)",color:L?"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,P=L=>{if(L==null)return"";let j=Math.floor(L/3600),ne=Math.floor(L%3600/60),Ae=L%60,$=xe=>String(xe).padStart(2,"0");return j>0?j+":"+$(ne)+":"+$(Ae):ne+":"+$(Ae)},V=()=>{if(I)return;B(!0);let L=Math.max(1,typeof d=="number"?d:15)*1e3;D.current=setTimeout(()=>{k&&k()},L)},O=ee?"14px 14px 4px 14px":"14px 14px 14px 4px",z=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:O,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 W;y?W=React.createElement(Qo,{key:"voice",voice:y,isMe:ee}):we&&!I?W=React.createElement("div",{key:"cover",onClick:V,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"))])]):W=React.createElement("div",{key:"body",style:{padding:"12px 15px 10px",color:"var(--sb-text-2)"}},React.createElement(qo,{text:t}));let se=[React.createElement("span",{key:"time",style:{fontFamily:Vn,fontSize:"10.5px",color:"var(--sb-text-9)"}},le(n))];if(ee){let L={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")};se.push(React.createElement("span",{key:"dlv",title:L.label,style:{display:"inline-flex",alignItems:"center",color:L.color}},React.createElement("i",{className:"fas "+L.icon,style:{fontSize:"10.5px"}})))}we&&I?se.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&&se.push(React.createElement("span",{key:"ttl",style:{display:"inline-flex",alignItems:"center",gap:"4px",fontFamily:Vn,fontSize:"10.5px",fontWeight:500,color:"var(--sb-orange)"}},[React.createElement("i",{key:"i",className:"fas fa-clock",style:{fontSize:"10px"}}),P(C)]));let ce=[];ce.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&&ce.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}},se),React.createElement("div",{key:"r",style:{display:"flex",alignItems:"center",gap:"9px",flex:"none"}},ce)]);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:O,border:z,background:Q,overflow:"hidden"}},[W,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:B,showVerification:D,showQRCode:le,qrCodeUrl:ee,showQRScanner:ge,setShowQRCode:we,setShowQRScanner:C,setShowQRScannerModal:P,offerPassword:V,answerPassword:O,localVerificationConfirmed:z,remoteVerificationConfirmed:Q,bothVerificationsConfirmed:X,qrFramesTotal:W,qrFrameIndex:se,qrManualMode:ce,toggleQrManualMode:me,nextQrFrame:L,prevQrFrame:j,markAnswerCreated:ne,notificationIntegrationRef:Ae,isGeneratingKeys:$,setIsGeneratingKeys:xe,handleCreateOffer:Le,relayOnlyMode:at,setRelayOnlyMode:Ee,webrtcManagerRef:Ze,showIceSettings:ot,setShowIceSettings:vt,iceServersText:Yt,iceSettingsPersisted:wt,customIceServers:Re,handleApplyIceSettings:mt,handleForgetIceSettings:te,compact:De=!1})=>{let[kt,yt]=React.useState("create"),[zt,St]=React.useState(!1),[Ut,bt]=React.useState(!1),[Gt,Kt]=React.useState(!1),[b,Z]=React.useState(""),[Te,Ye]=React.useState(""),[et,Ue]=React.useState(!1),[ln,ct]=React.useState(0),[Ge,Mn]=React.useState(!1),[Mt,dn]=React.useState(!1),[Qt,At]=React.useState(0),tt=1800*1e3,Ke=h&&typeof h=="object"&&Number(h.ts||h.timestamp)||null,[Qe,lt]=React.useState(()=>Date.now());React.useEffect(()=>{if(!y||!Ke)return;lt(Date.now());let T=setInterval(()=>lt(Date.now()),1e3);return()=>clearInterval(T)},[y,Ke]),React.useEffect(()=>{Z(""),Ye("")},[B]),React.useEffect(()=>{(D||!y&&!I)&&bt(!1),dn(!1)},[y,I,D]),React.useEffect(()=>{if(!($&&!y&&!I&&!D)){At(0);return}At(0);let q=0,re=setInterval(()=>{q+=1,At(q),q>=3&&clearInterval(re)},520);return()=>clearInterval(re)},[$,y,I,D]),React.useEffect(()=>{if(!Ge)return;let T=()=>Mn(!1),q=setTimeout(()=>document.addEventListener("click",T),0);return()=>{clearTimeout(q),document.removeEventListener("click",T)}},[Ge]);let Xt=()=>{xe(!1),bt(!1),i()},dr=T=>c(T),pn=()=>{c(null,!1)},un=async()=>{if(!zt)try{if(!("Notification"in window)||!window.isSecureContext&&window.location.protocol!=="https:"&&window.location.hostname!=="localhost")return;let T=typeof Notification<"u"&&Notification?Notification.permission:"denied";if(T==="default"&&typeof Notification<"u"&&Notification){if(await Notification.requestPermission()==="granted"){try{if(window.NotificationIntegration&&Ze.current){let re=new window.NotificationIntegration(Ze.current);await re.init(),Ae.current=re}}catch{}setTimeout(()=>{try{let re=new Notification("SecureBit Chat",{body:a("notify.enabledBody"),icon:"/logo/icon-192x192.png",tag:"welcome-notification"});re.onclick=()=>{re.close()},setTimeout(()=>{re.close()},5e3)}catch{}},1e3)}}else if(T==="granted"){try{if(window.NotificationIntegration&&Ze.current&&!Ae.current){let q=new window.NotificationIntegration(Ze.current);await q.init(),Ae.current=q}}catch{}setTimeout(()=>{try{let q=new Notification("SecureBit Chat",{body:a("notify.workingBody"),icon:"/logo/icon-192x192.png",tag:"test-notification"});q.onclick=()=>{q.close()},setTimeout(()=>{q.close()},5e3)}catch{}},1e3)}St(!0)}catch{}},f=React.createElement,An="var(--sb-orange)",E="var(--sb-green)",ie="var(--sb-orange-solid)",ue="var(--sb-green-solid)",_e=Vn,Tt=T=>{try{let q=typeof T=="object"?JSON.stringify(T):T||"";return q?typeof window.encodeBinaryToPrefixed=="function"?window.encodeBinaryToPrefixed(q):typeof window.compressToPrefixedGzip=="function"?window.compressToPrefixedGzip(q):q:""}catch{return typeof T=="object"?JSON.stringify(T):T||""}},ae=kt==="create",fn=$&&!y&&!I&&!D,Ht=ae&&y&&!D,Tn=!ae&&I&&!D,Dt=!D&&!fn&&!Ht&&!Tn,Lr=D?a("step.verification"):Ht||Tn?a("step.exchange"):a("step.open"),Nn=Tt(ae?h:m),jn=(v||"").trim().length>0,Et=(p||"").trim().length>0,Dn=async()=>{try{typeof _s=="function"?await _s(Nn):await navigator.clipboard.writeText(Nn)}catch{}Kt(!0),setTimeout(()=>Kt(!1),1600)},Wt=(B||"").replace(/[-\s]/g,"").length,Fn=b.replace(/[-\s]/g,"").length,Pn=!z&&Wt>0&&Fn===Wt,pr=async()=>{try{Ye(""),await c(b)}catch(T){Z(""),Ye(T?.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}]]}},Pe=(T,q)=>{q=q||{};let re=Rt[T];if(!re){let He={};return q.color&&(He.color=q.color),q.fontSize&&(He.fontSize=q.fontSize),q.animation&&(He.animation=q.animation),q.style&&Object.assign(He,q.style),f("i",{key:q.key,className:`fas ${T}`,style:He})}let je=q.fontSize?parseFloat(q.fontSize):16,Ce={};return q.animation&&(Ce.animation=q.animation,Ce.transformOrigin="center",Ce.transformBox="fill-box"),q.style&&Object.assign(Ce,q.style),f("svg",{key:q.key,className:T,width:je,height:je,viewBox:"0 0 24 24",fill:"none",stroke:q.color||"currentColor",strokeWidth:re.sw||2,strokeLinecap:"round",strokeLinejoin:"round",style:Ce},re.e.map((He,Ln)=>f(He[0],Object.assign({key:Ln},He[1]))))},ur=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:ie,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:ie,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:_e,fontSize:12,fill:"var(--sb-diag-label)"},"mara")]),f("circle",{key:"r1",cx:250,cy:26,r:5,fill:"none",stroke:ie,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:ie,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:_e,fontSize:12,fill:"var(--sb-diag-label)"},"tobi")]),f("circle",{key:"r2",cx:250,cy:174,r:5,fill:"none",stroke:ie,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:_e,fontSize:12,fill:"var(--sb-diag-label)"},"peer"),f("circle",{key:"yh",cx:30,cy:100,r:15,fill:ie,fillOpacity:.09}),f("circle",{key:"yc",cx:30,cy:100,r:6,fill:ie}),f("text",{key:"yt",x:30,y:126,textAnchor:"middle",fontFamily:_e,fontSize:12,fill:"var(--sb-diag-text)"},a("mesh.you"))]),f("div",{key:"log",style:{display:"flex",flexDirection:"column",gap:"12px",fontFamily:_e,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(T=>f("span",{key:T,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:_e,fontSize:"11px",fontWeight:500,color:"var(--sb-text-6)"}},[f("span",{key:"dot",style:{width:"5px",height:"5px",borderRadius:"50%",background:ue}}),T])))]),Br=Dt&&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:ae?"translateX(0%)":`translateX(${100*lr}%)`,transition:"transform .26s cubic-bezier(.3,.8,.3,1)"}}),f("button",{key:"c",className:"sb-seg-btn",onClick:()=>yt("create"),style:{position:"relative",zIndex:1,flex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"11px",border:"none",background:"transparent",color:ae?"var(--sb-text-1)":"var(--sb-text-8)",fontFamily:"inherit",fontSize:"14px",fontWeight:700,cursor:"pointer"}},[Pe("fa-plus",{key:"i"}),a("action.create")]),f("button",{key:"j",className:"sb-seg-btn",onClick:()=>yt("join"),style:{position:"relative",zIndex:1,flex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:"11px",border:"none",background:"transparent",color:ae?"var(--sb-text-8)":"var(--sb-text-1)",fontFamily:"inherit",fontSize:"14px",fontWeight:700,cursor:"pointer"}},[Pe("fa-link",{key:"i"}),a("action.join")])]),Vt=T=>f("button",{key:T||"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"}},[Pe("fa-chevron-left",{key:"i"}),a("action.back")]),Jt=ae&&Ke?Math.max(0,Math.ceil((Ke+tt-Qe)/1e3)):null,$n=Jt===null?null:`${Math.floor(Jt/60)}:${String(Jt%60).padStart(2,"0")}`,Ft=f("div",{key:"card",style:{borderRadius:"16px",border:"1px solid rgba(var(--sb-ink), 0.07)",background:"var(--sb-surface)",overflow:"hidden",marginBottom:ae?"26px":"16px"}},[ee&&f("button",{key:"showqr",className:"sb-qr-row",onClick:()=>bt(!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"}},(W||0)>1?a("qr.showSubtitleFrames",{frames:W}):a("qr.showSubtitle"))]),Pe("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"}},[$n&&f("span",{key:"exp",dir:"ltr",style:{fontFamily:_e,fontSize:"11px",color:Jt<60?"var(--sb-red)":"var(--sb-text-9)"}},$n),f("button",{key:"copy",className:"sb-soft-btn",onClick:Dn,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"}},[Gt&&Pe("fa-check",{key:"i",color:ue}),Gt?a("action.copied"):a("action.copy")])])]),f("div",{key:"codewrap",onClick:()=>dn(T=>!T),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:_e,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"}},Nn),!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}},[Pe("fa-eye",{key:"i"}),a("cred.reveal")])])])]),Pt;if(D){let T=X,q=(B||"").replace(/[-\s]/g,""),re=q.length,je=b.replace(/[-\s]/g,""),Ce=re>0&&je.length===re,He=Ce&&je===q,Ln=Ce&&!He,_t=z,mn=Q,Qn=_t&&!mn,dt=Math.min(3,re),yn=Pn&&He,Xn=Fe=>f("svg",{key:Fe,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"}})),Hr=(Fe,Oe)=>({position:"relative",width:"22px",height:"22px",flex:"none",borderRadius:"50%",display:"grid",placeItems:"center",transition:"all .3s",border:`1.5px solid ${Fe?ue:Oe?"rgba(var(--sb-green-rgb), 0.5)":"rgba(var(--sb-ink), 0.18)"}`,background:Fe?ue:"transparent"}),en=(Fe,Oe)=>f("span",{key:Fe,style:{fontSize:"13px",fontWeight:600,color:"var(--sb-text-4)"}},Oe),br=q.split("").map((Fe,Oe)=>{let $t=je[Oe]||"",Bn=et&&!_t&&Oe===je.length&&!Ce,bn="rgba(var(--sb-ink), 0.09)",Jn="var(--sb-text-1)",xn="none";return $t&&(bn="rgba(var(--sb-ink), 0.2)",xn="otpPop .28s cubic-bezier(.2,.8,.3,1.2) both"),Bn&&(bn="rgba(var(--sb-orange-rgb), 0.65)"),Ln&&(bn="rgba(var(--sb-red-rgb), 0.6)",Jn="var(--sb-red)"),He&&(xn=`otpOk .45s cubic-bezier(.2,.8,.3,1) ${Oe*55}ms both`),f("span",{key:Oe,style:{position:"relative",flex:1,minWidth:0,height:"56px",display:"grid",placeItems:"center",borderRadius:"12px",border:`1px solid ${bn}`,background:"var(--sb-surface)",fontFamily:_e,fontSize:"22px",fontWeight:600,color:Jn,transition:"border-color .15s, color .15s, box-shadow .15s",animation:xn,marginInlineStart:Oe===dt&&re>dt?"10px":0,boxShadow:Bn?"0 0 0 3px rgba(var(--sb-orange-rgb), 0.12)":"none"}},[$t,Bn&&f("span",{key:"caret",style:{position:"absolute",left:"50%",top:"50%",width:"2px",height:"22px",margin:"-11px 0 0 -1px",borderRadius:"1px",background:ie,animation:"otpCaret 1s steps(1) infinite"}})])});Pt=f("div",{key:"verify",style:{animation:"sbUp .3s ease"}},[!T&&Vt("vback"),f("h2",{key:"t",style:{margin:"0 0 8px",fontSize:"22px",fontWeight:800,letterSpacing:"-0.5px",color:"var(--sb-text-1)"}},T?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"}},T?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:_e,fontSize:"34px",fontWeight:600,letterSpacing:"8px",lineHeight:1,color:T?E:"var(--sb-text-1)",transition:"color .4s"}},re?[f("span",{key:"a"},q.slice(0,dt)),f("span",{key:"b"},q.slice(dt))]:f("span",{style:{fontSize:"14px",letterSpacing:0,color:"var(--sb-text-8)"}},a("verify.waiting")))),!T&&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:_e,fontSize:"11px",transition:"color .2s",color:Ce?He?E:"var(--sb-red)":"var(--sb-text-faint)"}},Ce?He?a("sasv.match"):a("sasv.noMatch"):`${je.length} / ${re||Es}`)]),f("label",{key:"cells",dir:"ltr",style:{position:"relative",display:"flex",gap:"6px",marginBottom:Te?"8px":"18px",cursor:"text",animation:Ln?`otpShake .4s ease ${ln%2?"0s":"0.001s"}`:"none"}},[...br,f("input",{key:"in",dir:"ltr",value:b,disabled:_t||!re,autoFocus:!0,autoComplete:"one-time-code",spellCheck:!1,type:"text",inputMode:"numeric",pattern:"[0-9]*",maxLength:re||Es,"aria-label":a("sasv.enter"),onChange:Fe=>{let Oe=Fe.target.value.replace(/\D/g,"").slice(0,re||Es);re&&Oe.length===re&&Oe!==q&&ct($t=>$t+1),Z(Oe),Te&&Ye("")},onFocus:()=>Ue(!0),onBlur:()=>Ue(!1),style:{position:"absolute",inset:0,width:"100%",height:"100%",opacity:0,border:"none",outline:"none",background:"transparent",color:"transparent",caretColor:"transparent",fontSize:"16px"}})]),Te&&f("p",{key:"err",style:{color:"var(--sb-red)",fontSize:"12.5px",margin:"0 0 16px"}},Te)]),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:Hr(_t,!1)},_t&&Xn("c")),en("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:mn?"100%":_t?"50%":"0%",background:ue,transition:"width .6s cubic-bezier(.4,0,.2,1)"}}),Qn&&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"}},[en("l",a("sasv.peer")),f("span",{key:"r",style:Hr(mn,_t)},mn&&Xn("c"))])]),T?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((Fe,Oe)=>f("span",{key:Oe,style:{width:"4px",height:"4px",borderRadius:"50%",background:ue,animation:`svDot 1.2s ease-in-out ${Fe}s infinite`}})))])):f("div",{key:"btns"},[f("button",{key:"ok",onClick:pr,disabled:!yn,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:_t?"rgba(var(--sb-green-rgb), 0.12)":yn?ue:"rgba(var(--sb-ink), 0.05)",color:_t?E:yn?"var(--sb-on-green-2)":"var(--sb-text-faint)",cursor:yn?"pointer":"default"}},_t?a("sasv.waitingPeer"):a("verify.confirm")),f("button",{key:"no",onClick:pn,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:Fe=>{Fe.currentTarget.style.color="var(--sb-red)"},onMouseLeave:Fe=>{Fe.currentTarget.style.color="var(--sb-text-7)"}},a("sasv.codesDiffer"))])])}else if(fn){let T=[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"}},Pe("fa-circle-notch",{color:ie,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)"}},ae?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"}},T.map((q,re)=>{let je=Qt>re,Ce=Qt===re;return f("div",{key:re,style:{display:"flex",alignItems:"center",gap:"12px",padding:"13px 15px",borderTop:re?"1px solid rgba(var(--sb-ink), 0.05)":"none",transition:"background .3s",background:je?"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:je?"rgba(var(--sb-green-rgb), 0.12)":Ce?"rgba(var(--sb-orange-rgb), 0.12)":"rgba(var(--sb-ink), 0.04)",border:`1px solid ${je?"rgba(var(--sb-green-rgb), 0.3)":Ce?"rgba(var(--sb-orange-rgb), 0.3)":"rgba(var(--sb-ink), 0.1)"}`,transition:"all .3s"}},je?Pe("fa-check",{color:ue,fontSize:"11px"}):f("span",{style:{width:"6px",height:"6px",borderRadius:"50%",background:Ce?ie:"var(--sb-text-faint)",animation:Ce?"sbBlink 1s ease-in-out infinite":"none"}})),f("span",{key:"l",style:{fontSize:"13.5px",color:je?"var(--sb-text-4)":Ce?"var(--sb-text-2)":"var(--sb-text-9)",transition:"color .3s"}},q)])}))])}else if(Ht||Tn)Pt=f("div",{key:"cred",style:{animation:"sbUp .3s ease"}},[Vt("cback"),f("h2",{key:"h",style:{margin:"0 0 8px",fontSize:"26px",fontWeight:800,letterSpacing:"-0.7px",color:"var(--sb-text-1)"}},ae?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)"}},ae?a("handshake.shareDesc"):a("handshake.sendAnswerDesc")),Ft,Ht&&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:T=>{k(T.target.value),T.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:_e,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:()=>P(!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?ie:"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"))])]),Tn&&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:ie,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(ae)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:()=>{un(),Ze.current&&Le()},style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:"9px",padding:"15px",borderRadius:"13px",border:"none",background:ie,color:"var(--sb-on-accent)",fontFamily:"inherit",fontSize:"15px",fontWeight:700,cursor:"pointer",boxShadow:"0 8px 24px rgba(var(--sb-orange-rgb), 0.28)"}},[Pe("fa-bolt",{key:"i"}),a("intro.createCta")])]);else{let T=jn&&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:()=>{un(),P(!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"))]),Pe("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:q=>{S(q.target.value),q.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 ${jn?"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:_e,fontSize:"12.5px",lineHeight:1.5,padding:"11px 13px",transition:"border-color .15s"}})])]),f("button",{key:"connect",onClick:()=>{un(),n()},disabled:!T,style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:"9px",height:"50px",borderRadius:"13px",border:"none",background:T?ie:"rgba(var(--sb-ink), 0.05)",color:T?"var(--sb-on-accent)":"var(--sb-text-faint)",fontFamily:"inherit",fontSize:"14.5px",fontWeight:700,cursor:T?"pointer":"not-allowed",transition:"background .2s, color .2s"}},d==="connecting"?a("intro.connecting"):a("intro.connect"))])}let xt="1.0.6",hn=`https://github.com/SecureBitChat/securebit-desktop/releases/download/v${xt}`,Ot={mac:{name:"macOS",format:".dmg \xB7 Apple Silicon & Intel",icon:"fab fa-apple",url:`${hn}/SecureBit.Chat_${xt}_x64.dmg`},win:{name:"Windows",format:".exe \xB7 64-bit installer",icon:"fab fa-windows",url:`${hn}/SecureBit.Chat_${xt}_x64-setup.exe`},linux:{name:"Linux",format:".AppImage",icon:"fab fa-linux",url:`${hn}/SecureBit.Chat_${xt}_amd64.AppImage`}},jt=(()=>{let T=(navigator.userAgent||"")+" "+(navigator.platform||"");return/Mac|iPhone|iPad|iPod/i.test(T)&&!/Android/i.test(T)?"mac":/Win/i.test(T)?"win":/Linux/i.test(T)&&!/Android/i.test(T)?"linux":"win"})(),On=["mac","win","linux"].filter(T=>T!==jt),hr=T=>{try{window.open(T,"_blank","noopener")}catch{}},qn=Ge&&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("span",{key:"pill",style:{fontFamily:_e,fontSize:"10px",fontWeight:600,color:E,padding:"3px 8px",borderRadius:"6px",background:"rgba(var(--sb-green-rgb), 0.1)",border:"1px solid rgba(var(--sb-green-rgb), 0.22)"}},a("chat.onWeb"))]),f("div",{key:"rec",style:{padding:"12px 12px 6px"}},f("button",{key:"b",onClick:()=>hr(Ot[jt].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:An}},f("i",{className:Ot[jt].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)"}},Ot[jt].name),f("span",{key:"f",style:{display:"block",fontSize:"11px",color:"var(--sb-orange-3)",marginTop:"1px"}},`Recommended for this device \xB7 ${Ot[jt].format}`)]),Pe("fa-download",{color:ie})])),f("div",{key:"others",style:{padding:"0 12px 8px",display:"flex",flexDirection:"column",gap:"2px"}},On.map(T=>f("button",{key:T,onClick:()=>hr(Ot[T].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:Ot[T].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)"}},Ot[T].name),f("span",{key:"f",style:{display:"block",fontSize:"11px",color:"var(--sb-text-8)",marginTop:"1px"}},Ot[T].format)]),Pe("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)"}},[Pe("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"))])]),zr=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:()=>Mn(T=>!T),style:{display:"inline-flex",alignItems:"center",gap:"9px",paddingBlock:"8px",paddingInlineStart:"9px",paddingInlineEnd:"13px",borderRadius:"10px",border:`1px solid ${Ge?"rgba(var(--sb-orange-rgb), 0.4)":"rgba(var(--sb-ink), 0.08)"}`,background:Ge?"rgba(var(--sb-orange-rgb), 0.06)":"rgba(var(--sb-ink), 0.02)",color:"inherit",fontFamily:"inherit",cursor:"pointer",transition:"all .15s"}},[Pe("fa-download",{key:"i",color:ie}),f("span",{key:"t",style:{fontSize:"12.5px",fontWeight:700,color:"var(--sb-text-2)"}},a("action.downloadDesktop")),Pe("fa-chevron-down",{key:"c",color:"var(--sb-text-9)",style:{fontSize:"11px",transform:Ge?"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"}},[Pe("fa-sliders-h",{key:"i"}),a("action.advancedSettings")]),qn]),Ur=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:mt,onForget:te}):null,gn=f("div",{key:"right",style:De?{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:_e,fontSize:"11px",fontWeight:600,color:"var(--sb-text-9)",textTransform:"uppercase",letterSpacing:"1px",marginBottom:"10px"}},Lr),Br,Pt,zr])),Ur]),Zt=Ut&&ee&&f("div",{key:"qrmodal",onClick:()=>bt(!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:T=>T.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)"}},ae?a("handshake.shareTitle"):a("handshake.sendAnswerTitle")),f("div",{key:"s",style:{fontSize:"12px",color:"var(--sb-text-8)"}},`${ae?"offer":"answer"} \xB7 one-time`)]),f("button",{key:"x",onClick:()=>bt(!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"}},Pe("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"}},[(W||0)>=1&&f("div",{key:"frame",style:{display:"flex",alignItems:"center",gap:"9px"}},[f("span",{key:"l",style:{fontFamily:_e,fontSize:"12px",fontWeight:600,color:"var(--sb-text-6)"}},`Frame ${Math.max(1,se||1)} / ${W||1}`)]),(W||0)>1&&f("div",{key:"nav",style:{display:"flex",alignItems:"center",gap:"6px"}},[f("button",{key:"prev",onClick:j,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"}},Pe("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 ${ce?"rgba(var(--sb-ink), 0.1)":"rgba(var(--sb-orange-rgb), 0.45)"}`,background:ce?"rgba(var(--sb-ink), 0.04)":"rgba(var(--sb-orange-rgb), 0.08)",color:ce?"var(--sb-text-6)":An,fontFamily:"inherit",fontSize:"13px",fontWeight:600,cursor:"pointer"}},ce?"Manual":"Auto"),f("button",{key:"next",onClick:L,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"}},Pe("fa-chevron-right"))]),f("p",{key:"hint",style:{margin:"2px 0 0",textAlign:"center",fontSize:"12px",lineHeight:1.5,color:"var(--sb-text-9)"}},(W||0)>1?a("handshake.qrHintFrames",{frames:W}):a("handshake.qrHint"))])])])),Gr=f("div",{key:"hero",style:{display:"flex",flexWrap:"wrap",minHeight:"100vh",width:"100%",background:"var(--sb-bg)",color:"var(--sb-text-2)"}},[ur,gn]),gr=Dt&&f(UniqueFeatureSlider,{key:"unique-features-slider"}),Yn=Dt&&f(BecomePartner,{key:"become-partner"}),Ve=Dt&&f(Roadmap,{key:"roadmap"}),Kn=Dt&&f(DonateCrypto,{key:"donate-crypto"}),mr=Dt&&f(CommunityCTA,{key:"community-cta"}),yr=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 De?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)"}},[yr,gn,Zt]):f("div",{className:"sb-start",style:{width:"100%"}},[yr,Gr,gr,Yn,Ve,Kn,mr,Zt])};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=z=>String(z).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(([,z])=>z&&z.passed).length,I=Number.isFinite(e.totalChecks)?e.totalChecks:k.length,B=new Date(e.timestamp||Date.now()).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}),D=z=>{let Q=a(`secTest.${z}`);return Q===`secTest.${z}`?le(z):Q},le=z=>{let Q=String(z).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(([z,Q],X)=>{let W=!!(Q&&Q.passed),se=Q&&Q.details||(W?a("sec.testPassed"):a("sec.testFailed")),ce=a(`secDetail.${se}`),me=ce===`secDetail.${se}`?se:ce,L=W?"var(--sb-surface)":"var(--sb-bg)",j=W?"rgba(var(--sb-green-rgb), 0.16)":"rgba(var(--sb-red-rgb), 0.18)",ne=W?"rgba(var(--sb-green-rgb), 0.12)":"rgba(var(--sb-red-rgb), 0.1)",Ae=W?"rgba(var(--sb-green-rgb), 0.26)":"rgba(var(--sb-red-rgb), 0.24)",$=W?"var(--sb-text-1)":"var(--sb-text-4)";return`
${W?ee:ge}
${r(D(z))}
${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(B)}
${a("report.source")}
${p?a("sec.realTests"):a("sec.simulatedData")}
${we}
${p?a("sec.realTimeNote"):a("sec.simulatedWarning")}
`;let P=z=>{z.key==="Escape"&&V()},V=()=>{C.parentNode&&C.remove(),document.removeEventListener("keydown",P)};C.querySelector(".sv-close").addEventListener("click",V),C.addEventListener("click",z=>{z.target===C&&V()}),document.addEventListener("keydown",P);let O=C.querySelector(".sv-rerun");O.addEventListener("mouseenter",()=>{O.style.borderColor="rgba(var(--sb-orange-rgb), 0.45)",O.style.color="var(--sb-orange)"}),O.addEventListener("mouseleave",()=>{O.style.borderColor="rgba(var(--sb-ink), 0.1)",O.style.color="var(--sb-text-4)"}),O.addEventListener("click",()=>{V(),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,B]=React.useState("");React.useEffect(()=>{let $=!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)),$&&Ee&&Ee.isRealData!==!1&&p(Ee)}catch{}};xe();let Le=Ee=>{$&&Ee.detail&&Ee.detail.securityData&&p(Ee.detail.securityData)};document.addEventListener("real-security-calculated",Le);let at=setInterval(xe,15e3);return()=>{$=!1,clearInterval(at),document.removeEventListener("real-security-calculated",Le)}},[n]);let D=t==="connected"||t==="verified",le=t==="disconnected"||t==="peer_disconnected",ee=D&&!i,ge=i||le?"var(--sb-red-solid)":D?"var(--sb-green-solid)":"var(--sb-yellow-solid)",we=i?a("chat.offline"):D?a("status.connected"):t==="peer_disconnected"?a("status.peerDisconnected"):t==="disconnected"?a("chat.disconnected"):a("status.connecting"),C=i||le?"0 0 0 3px rgba(var(--sb-red-rgb), 0.16)":D?"0 0 0 3px rgba(var(--sb-green-rgb), 0.16)":"0 0 0 3px rgba(var(--sb-yellow-rgb), 0.16)",P=D&&!i?ls[c]||"var(--sb-green-solid)":ge,V=D&&!i&&c&&ds[c]||null,O=()=>{B(r||""),y(!0)},z=()=>{typeof d=="function"&&d(I),y(!1)},Q=$=>{$.key==="Enter"?($.preventDefault(),z()):$.key==="Escape"&&y(!1)},X=S&&Number.isFinite(S.passedChecks)?S.passedChecks:null,W=S&&Number.isFinite(S.totalChecks)?S.totalChecks:null,se=$=>{if(!$)return $;let xe=a(`secLevel.${$}`);return xe===`secLevel.${$}`?$:xe},ce=X!=null&&W?X+"/"+W: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)",L=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?se(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)"}},ce),React.createElement("button",{key:"c",type:"button",title:a("sec.panelTitle"),onClick:$=>{$.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"}}))]),j=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)"}},[j,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)"}},[_r(r||a("chatHdr.chat")),React.createElement("span",{key:"dot",style:{position:"absolute",insetInlineEnd:"-2px",bottom:"-2px",width:"11px",height:"11px",borderRadius:"50%",background:P,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:$=>B($.target.value),onKeyDown:Q,onBlur:z,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:$=>$.preventDefault(),onClick:z,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:O,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"):V||(D?a("chatHdr.p2pSub"):t==="peer_disconnected"?a("status.peerDisconnected"):t==="disconnected"?a("chat.disconnected"):a("status.connecting")))])]),L,React.createElement("div",{key:"right",className:"sb-hdr-right",style:{display:"flex",alignItems:"center",gap:"9px"}},[...(()=>{let $=ee&&n&&n.isVerified===!0,xe=Ze=>{if(!(!$||!n))try{let ot=n.startCall(Ze);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:$?"var(--sb-text-6)":"var(--sb-surface-5)",cursor:$?"pointer":"not-allowed",transition:"all .15s"};return[React.createElement("button",{key:"call-audio",className:$?"sb-call-btn":"sb-call-btn sb-call-off",disabled:!$,onClick:()=>xe(!1),title:$?a("chat.startVoiceCall"):a("chat.verifyForCalls"),style:Le,dangerouslySetInnerHTML:{__html:''}}),React.createElement("button",{key:"call-video",className:$?"sb-call-btn":"sb-call-btn sb-call-off",disabled:!$,onClick:()=>xe(!0),title:$?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"))])])]),Ae=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"),ce+(S?" \xB7 "+S.score+"%":"")]].map(([$,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"}},$),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,Ae])},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:B,pendingIncomingFiles:D=[],onIncomingDecision:le,codeMode:ee,setCodeMode:ge,viewOnceMode:we,setViewOnceMode:C,viewOnceTtl:P,setViewOnceTtl:V,disappearTtl:O,setDisappearTtl:z,nowTick:Q,onUnsendMessage:X,onMessageExpire:W})=>{let[se,ce]=React.useState(!1),[me,L]=React.useState(!1),[j,ne]=React.useState(!1),[Ae,$]=React.useState(!1),[xe,Le]=React.useState(!1),[at,Ee]=React.useState(!1),[Ze,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)"),ie=()=>Yt(E.matches);try{E.addEventListener("change",ie)}catch{E.addListener(ie)}return()=>{try{E.removeEventListener("change",ie)}catch{E.removeListener(ie)}}},[]);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(()=>{D.length>0&&L(!0)},[D.length]);let Re=React.useRef(!0);React.useEffect(()=>{let E=typeof window<"u"?window.visualViewport:null;if(!E)return;let ie=()=>{if(!Re.current)return;let _e=k.current;_e&&(_e.scrollTop=_e.scrollHeight)},ue=()=>{requestAnimationFrame(ie),setTimeout(ie,300)};return E.addEventListener("resize",ue),()=>E.removeEventListener("resize",ue)},[k]),React.useEffect(()=>{if(k.current&&i.length>0){let{scrollTop:E,scrollHeight:ie,clientHeight:ue}=k.current;if(ie-E-ue<100){let Tt=()=>{k.current&&k.current.scrollTo({top:k.current.scrollHeight,behavior:Or()})};Tt(),setTimeout(Tt,50),setTimeout(Tt,150)}}},[i,k]);let mt=()=>{if(k.current){let{scrollTop:E,scrollHeight:ie,clientHeight:ue}=k.current,_e=ie-E-ue<100;Re.current=_e,ce(!_e)}},te=()=>{Re.current=!0,typeof y=="function"?(y(),ce(!1)):k.current&&(k.current.scrollTo({top:k.current.scrollHeight,behavior:Or()}),ce(!1))},De=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,ie=I.isVerified||!1,ue=I.dataChannel&&I.dataChannel.readyState==="open";return E&&ie&&ue},yt="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",zt=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"}),Ut=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:yt,fontSize:"12px",fontWeight:500,cursor:"pointer",transition:"all .14s"}),bt=[{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}],Gt=[{label:a("msg.off"),v:0},{label:"5s",v:5},{label:"10s",v:10},{label:"30s",v:30},{label:"1m",v:60}],Kt=we?P:0,b=E=>{z(E),$(!1)},Z=E=>{E===0?C(!1):(V(E),C(!0)),Le(!1)},Te=!!(c&&c.trim()),Ye=typeof m=="function"&&!e&&kt()&&typeof navigator<"u"&&navigator.mediaDevices&&typeof navigator.mediaDevices.getUserMedia=="function",et=E=>{try{return new Date(E).toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return""}},Ue=i.filter(E=>E.type==="system"&&typeof E.message=="string"&&E.message.trim()),ln=i.filter(E=>E.type!=="system"),ct=(p||Ue.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")+(Ue.length?" \xB7 "+Ue.length+(Ue.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"}},[Ue.length>0&&React.createElement("div",{key:"steps",className:"sb-scroll",style:{marginBottom:"12px",maxHeight:"220px",overflowY:"auto",paddingInlineEnd:"6px"}},Ue.map((E,ie)=>React.createElement("div",{key:"s"+ie,style:{display:"flex",gap:"11px",padding:"6px 0",borderTop:ie===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:yt,fontSize:"10.5px",color:"var(--sb-text-faint)"}},et(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:yt,fontSize:"12px",color:"var(--sb-text-4)",letterSpacing:"0.8px",fontWeight:500,wordBreak:"break-all"}},S)])])]),Ge=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"))])),Mn=React.createElement("main",{key:"main",ref:k,onScroll:mt,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%"}},ln.length===0?[ct,Ge]:[ct].concat(ln.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:()=>W&&W(E.id),voice:E.voice}))))),Mt=Ae&&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(bt.map(E=>React.createElement("button",{key:"td"+E.v,onClick:()=>b(E.v),style:Ut(O===E.v)},E.label)))),dn=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(Gt.map(E=>React.createElement("button",{key:"od"+E.v,onClick:()=>Z(E.v),style:Ut(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:D,onIncomingDecision:le,showDropzone:j})),At=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&&j?(L(!1),ne(!1)):(L(!0),ne(!0))},className:"sb-chip",style:St(me&&j)},[React.createElement("i",{key:"i",className:"fas fa-paperclip",style:{fontSize:"13px"}}),me&&j?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),$(!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")+zt(P):a("chat.viewOnce")]),React.createElement("button",{key:"timer",onClick:()=>{$(E=>!E),Le(!1)},className:"sb-chip",style:St(Ae||O>0)},[React.createElement("i",{key:"i",className:"fas fa-stopwatch",style:{fontSize:"13px"}}),O>0?a("chat.timerPrefix")+zt(O):a("msg.timer")])])]),tt=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"))]),Ke=React.createElement("button",{key:"send",onClick:h,disabled:!Te,title:a("chat.send"),className:"sb-send",style:{flex:"none",width:"44px",height:"44px",borderRadius:"11px",border:"none",display:"grid",placeItems:"center",cursor:Te?"pointer":"default",background:Te?"var(--sb-orange-solid)":"rgba(var(--sb-ink), 0.05)",color:Te?"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"}})),Qe=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=Ye?vt?[Qe,Ke]:Te?[Ke]:[Qe]:[Ke],Xt=React.createElement("div",{key:"input",style:{display:"flex",alignItems:"flex-end",gap:"11px",paddingBlock:"11px",paddingInlineStart:"16px",paddingInlineEnd:"11px",border:"1px solid "+(Te?"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:De,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?yt:"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:yt,fontSize:"10.5px",color:"var(--sb-text-faint)",marginInlineStart:"auto"}},(c?c.length:0)+"/2000")])])].concat(lt)),dr=React.createElement("div",{key:"recbar"},React.createElement(Xo,{onCancel:()=>ot(!1),onSend:(E,ie,ue)=>{ot(!1),typeof m=="function"&&m(E,ie,ue)}})),pn=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"}},Ze?[dr]:[Mt,dn,Qt,At,tt,Xt])),un=se&&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:B,onDisconnect:v,webrtcManager:I,title:t,isOffline:e,peerPresence:n,onRenameTitle:r}),An=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,Mn,un,pn,An])},Rs=(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}),cn={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,B]=React.useState(null),[D,le]=React.useState(""),[ee,ge]=React.useState(!1),we=React.useRef(null),C=React.useRef(null),P=React.useRef(null),V=React.useRef(null),O=React.useRef(0),z=React.useRef(!1),Q=React.useRef(!1),[X,W]=React.useState(!!r),se=10,ce=220,me=()=>C.current&&C.current.offsetWidth||292,L=b=>{O.current=b;let Z=me(),Te=Math.min(1,Math.max(0,1+b/Z));if(C.current&&(C.current.style.transform="translate3d("+(b*lr).toFixed(2)+"px,0,0)"),we.current){we.current.style.opacity=Te.toFixed(3);let Ye="blur("+(5*Te).toFixed(2)+"px)";we.current.style.backdropFilter=Ye,we.current.style.webkitBackdropFilter=Ye}},j=(b,Z)=>{P.current&&P.current.stop(),P.current=Gi({from:O.current,to:b,velocity:Z,damping:Math.abs(Z)>60?Wn.drawer.damping:Wn.move.damping,response:Wn.drawer.response,restDelta:.5,restSpeed:8,onUpdate:L,onComplete:()=>{L(b),P.current=null,b!==0&&W(!1)}})};React.useLayoutEffect(()=>{if(r&&!X){W(!0);return}if(!X||r===z.current)return;let b=me();r&&!P.current&&!V.current&&L(-b),z.current=r,j(r?0:-b,P.current?P.current.velocity:0)},[r,X]),React.useEffect(()=>()=>{P.current&&P.current.stop()},[]);let ne=b=>{b.pointerType==="mouse"&&b.button!==0||V.current||(Q.current=!1,V.current={id:b.pointerId,x0:b.clientX,y0:b.clientY,base:O.current,axis:null,vel:Ui()},V.current.vel.add(b.clientX*lr,b.timeStamp||performance.now()))},Ae=b=>{let Z=V.current;if(!Z||b.pointerId!==Z.id)return;let Te=b.clientX-Z.x0,Ye=b.clientY-Z.y0;if(!Z.axis){if(Math.abs(Te)=Math.abs(Te)){V.current=null;return}Z.axis="x",P.current&&(Z.base=O.current,Z.x0=b.clientX,P.current.stop(),P.current=null);try{b.currentTarget.setPointerCapture(Z.id)}catch{}}Z.vel.add(b.clientX*lr,b.timeStamp||performance.now());let et=me(),Ue=Z.base+(b.clientX-Z.x0)*lr;Ue>0?Ue=ws(Ue,et):Ue<-et&&(Ue=-et+ws(Ue+et,et)),L(Ue)},$=b=>{let Z=V.current;if(!Z||b.pointerId!==void 0&&b.pointerId!==Z.id||(V.current=null,Z.axis!=="x"))return;Q.current=!0;let Te=me(),Ye=Z.vel.get(b.timeStamp||performance.now()),et=zi(O.current,Ye,[-Te,0],{flick:ce})===0;z.current=et,j(et?0:-Te,Ye),et||S()},xe=()=>{if(Q.current){Q.current=!1;return}S()},Le=b=>Z=>{Z.stopPropagation(),B(b.id),le(b.name)},at=()=>{I&&(v(I,D),B(null))},Ee=b=>{b.key==="Enter"?(b.preventDefault(),at()):b.key==="Escape"&&B(null)},Ze=(b={})=>y("input",{autoFocus:!0,value:D,onChange:Z=>le(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,Te)=>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 "+Te}})]),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?Ze():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"}})),mt=(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=Rr.find(b=>b.key===p)||Rr[0],De={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")),...Rr.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:De.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:De.lock}}),y("span",{key:"t",style:{fontSize:"11px",lineHeight:1.45,color:"var(--sb-text-7)"}},a("chat.peersOnly"))])]):null,yt=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:De.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:De.chevUp}})])]),zt=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:De.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")]),mt(cn.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:cn.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(cn.plus,{key:"p"}),a("chat.newChat")])),yt],Ut=[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),mt(cn.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:cn.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:cn.plus}})),zt],Gt={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?Ut: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:Gt},Kt),y("div",{key:"drawer",className:"sb-drawer-overlay",ref:we,onClick:xe,onPointerDown:ne,onPointerMove:Ae,onPointerUp:$,onPointerCancel:$,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]))])},Cs=()=>{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(Pi,void 0,Fi),k=React.useRef(new Map),y=S.activeGroupId,I=y?S.groups[y]:null,B=React.useRef(null);B.current=y;let[D,le]=React.useState(""),[ee,ge]=React.useState(!1),[we,C]=React.useState(!1),[P,V]=React.useState(null),[O,z]=React.useState(null),[Q,X]=React.useState(!1),W=React.useRef(null),[se,ce]=React.useState({}),[me,L]=React.useState({}),j=React.useRef(new Map),[ne,Ae]=React.useState({}),$=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}),Ze=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}),Yr.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(ce(u=>({...u,[s]:l.call})),Yr.current(s,l.call),l.call&&!l.call.joined&&s!==B.current){let u=`${s}:${l.call.callId}`;$.current.has(u)||($.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!==B.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=Mr(o)}catch{return}V(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))},[]),mt=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})},[]),De=i?i.status:"disconnected",kt=React.useCallback(s=>Re(o=>({type:J.SET_STATUS,id:o,status:s})),[Re]),yt=i?i.keyFingerprint:"",zt=React.useCallback(s=>Re(o=>({type:J.SET_FINGERPRINT,id:o,fingerprint:s})),[Re]),St=i?i.verificationCode:"",Ut=React.useCallback(s=>Re(o=>({type:J.SET_VERIFICATION,id:o,code:s})),[Re]),bt=i?i.sas.isVerified:!1,Gt=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,Te=React.useCallback(s=>Re(o=>({type:J.SET_SAS,id:o,sas:{remoteConfirmed:!!s}})),[Re]),Ye=i?i.sas.bothConfirmed:!1,et=React.useCallback(s=>Re(o=>({type:J.SET_SAS,id:o,sas:{bothConfirmed:!!s}})),[Re]),Ue=i?i.pendingIncomingFiles:c,ln=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,Ge=s=>React.useCallback(o=>Re(l=>({type:J.PATCH_SETUP,id:l,patch:{[s]:o}})),[Re]),Mn=ct("offerData",""),Mt=Ge("offerData"),dn=ct("answerData",""),Qt=Ge("answerData"),At=ct("offerInput",""),tt=Ge("offerInput"),Ke=ct("answerInput",""),Qe=Ge("answerInput"),lt=ct("showOfferStep",!1),Xt=Ge("showOfferStep"),dr=ct("showAnswerStep",!1),pn=Ge("showAnswerStep"),un=ct("showVerification",!1),f=Ge("showVerification"),An=ct("showQRCode",!1),E=Ge("showQRCode"),ie=ct("qrCodeUrl",""),ue=Ge("qrCodeUrl"),_e=ct("isGeneratingKeys",!1),Tt=Ge("isGeneratingKeys"),ae=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))}}),[]),fn=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))}}),[]),[Ht,Tn]=React.useState(()=>{try{return localStorage.getItem("securebit_my_status")||"available"}catch{return"available"}}),Dt=React.useRef(Ht);Dt.current=Ht;let Lr=s=>s==="invisible"?"offline":s,Nn=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:Lr(o)}));l&&typeof l.catch=="function"&&l.catch(()=>{})}}catch{}},[]),jn=React.useCallback(s=>{Tn(s);try{localStorage.setItem("securebit_my_status",s)}catch{}for(let o of d.current.values())Nn(o,s)},[Nn]),[Et,Dn]=React.useState(!1),[Wt,Fn]=React.useState(!1),[Pn,pr]=React.useState(15),[Rt,Pe]=React.useState(0),[ur,Br]=React.useState(()=>Date.now()),[Vt,Jt]=React.useState(typeof navigator<"u"&&navigator.onLine===!1),$n=React.useRef(Vt);React.useEffect(()=>{$n.current=Vt},[Vt]),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,M=()=>{let pt=Math.round(s?s.height:window.innerHeight||0);pt&&pt!==l&&(l=pt,o.style.setProperty("--sb-vh",pt+"px"))},A=()=>!!s&&window.innerHeight-s.height>120,U=()=>{let rt=A()?"0px":"env(safe-area-inset-bottom, 0px)";rt!==u&&(u=rt,o.style.setProperty("--sb-safe-bottom",rt))},ve=()=>{let pt=!!s&&s.scale>1.01,rt=s&&!pt?Math.max(0,Math.round(s.offsetTop)):0;rt!==g&&(g=rt,o.style.setProperty("--sb-vv-top",rt+"px"))},Se=()=>{M(),U(),ve()},de=()=>{w||(w=requestAnimationFrame(()=>{w=0,ve()}))},fe=[],nt=()=>{ve(),[60,180,360,600].forEach(pt=>fe.push(setTimeout(()=>{M(),U(),ve()},pt)))};Se(),s&&(s.addEventListener("resize",Se),s.addEventListener("scroll",de)),window.addEventListener("resize",Se),window.addEventListener("orientationchange",Se),window.addEventListener("scroll",de,{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",de)),window.removeEventListener("resize",Se),window.removeEventListener("orientationchange",Se),window.removeEventListener("scroll",de),document.removeEventListener("focusin",nt),document.removeEventListener("focusout",nt),We&&We()}},[]);let[Ft,Pt]=React.useState(()=>{try{return localStorage.getItem("securebit_relay_only_mode")==="true"}catch{return!1}}),[xt,hn]=React.useState(null),[Ot,fr]=React.useState(""),[jt,On]=React.useState(!1),[hr,qn]=React.useState(!1);React.useEffect(()=>{let s=!1;return Ys().then(o=>{s||!o||(Array.isArray(o.servers)&&o.servers.length>0&&(hn(o.servers),fr(JSON.stringify(o.servers,null,2))),o.privacyMode==="relay-only"&&Pt(!0),On(!0))}).catch(()=>{}),()=>{s=!0}},[]),React.useEffect(()=>{let s=()=>qn(!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;hn(l&&l.length?l:null),fr(s.serversText||""),Pt(s.privacyMode==="relay-only"),qn(!1),o?(On(!0),qs({servers:l||[],privacyMode:s.privacyMode}).catch(()=>{})):jt&&(On(!1),is().catch(()=>{}))},[jt]),Ur=React.useCallback(async()=>{await is().catch(()=>{}),On(!1),hn(null),fr("")},[]),[gn,Zt]=React.useState(""),[Gr,gr]=React.useState(!1),[Yn,Ve]=React.useState(!1),[Kn,mr]=React.useState(()=>typeof window<"u"&&!!window.Html5Qrcode);React.useEffect(()=>{if(Kn)return;let s=()=>mr(!0);return window.addEventListener("securebit:qr-ready",s),window.Html5Qrcode&&mr(!0),()=>window.removeEventListener("securebit:qr-ready",s)},[Kn]);let[yr,T]=React.useState(null),[q,re]=React.useState(0),[je,Ce]=React.useState(null),[He,Ln]=React.useState({status:"disconnected",hasActiveAnswer:!1,answerCreatedAt:null,isUserInitiatedDisconnect:!1}),_t=(s,o={})=>{let{preserveAnswer:l=!1,isUserAction:u=!1}=o;Ln(g=>({...g,...s,isUserInitiatedDisconnect:u,hasActiveAnswer:l?g.hasActiveAnswer:!1,answerCreatedAt:l?g.answerCreatedAt:null}))},mn=()=>{let s=!!dn||Ke&&typeof Ke=="string"&&Ke.trim().length>0,o=ie&&typeof ie=="string"&&ie.trim().length>0;return He.hasActiveAnswer&&!He.isUserInitiatedDisconnect||s&&!He.isUserInitiatedDisconnect||o&&!He.isUserInitiatedDisconnect},Qn=()=>{_t({hasActiveAnswer:!0,answerCreatedAt:Date.now()})};React.useEffect(()=>js({targetWindow:window,webrtcManagerRef:ae,onClearData:zs}),[]),React.useEffect(()=>{Zs()},[]);let dt=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 M=[...w,g];return setTimeout(()=>{if(Oe?.current){let A=Oe.current;try{let{scrollTop:U,scrollHeight:ve,clientHeight:Se}=A;(ve-U-Se<100||w.length===0)&&requestAnimationFrame(()=>{A&&A.scrollTo&&A.scrollTo({top:A.scrollHeight,behavior:Or()})})}catch(U){console.warn("Scroll error:",U),A.scrollTop=A.scrollHeight}}},50),M}),u},[]),yn=React.useCallback((s,o)=>{s&&te(l=>l.map(u=>String(u.mid)===String(s)&&u.type==="sent"?{...u,status:o}:u))},[]),Xn=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))},[]),en=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 A of u){if(!l||l.isConnected?.()!==!0){g.push(A);continue}try{let U=l.sendMessage?.(A.outText,A.meta);U&&typeof U.then=="function"&&U.then(()=>e({type:J.UPDATE_MESSAGE_STATUS,id:s,mid:A.mid,status:"delivered"})).catch(()=>e({type:J.UPDATE_MESSAGE_STATUS,id:s,mid:A.mid,status:"failed"}))}catch{g.push(A)}}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:Rs(`Connection restored \u2014 ${w.length} message${w.length===1?"":"s"} received while you were offline.`,"notice")});let M=s===r.current&&(typeof document>"u"||document.visibilityState==="visible");for(let A of w)if(e({type:J.ADD_MESSAGE,id:s,message:Rs(A.message,A.type,A.opts)}),A.opts&&A.opts.mid&&A.type==="received")if(M)try{l?.sendDeliveryReceipt?.(A.opts.mid)}catch{}else o.pendingReadAcks&&o.pendingReadAcks.push(A.opts.mid)},[]),br=React.useCallback(()=>{for(let s of m.current.keys())en(s)},[en]);React.useEffect(()=>{Vt||br()},[Vt,br]),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&&en(o)}},2e3);return()=>clearInterval(s)},[en]);let Fe=React.useCallback(async()=>{if(!window.isUpdatingSecurity){window.isUpdatingSecurity=!0;try{if(ae.current&&(T({level:"MAXIMUM",score:100,color:"green",details:a("sec.allEnabled"),passedChecks:10,totalChecks:10,isRealData:!0}),window.DEBUG_MODE)){let s=ae.current.ecdhKeyPair&&ae.current.ecdsaKeyPair?await ae.current.calculateSecurityLevel():{level:"MAXIMUM",score:100,sessionType:"premium",passedChecks:10,totalChecks:10}}}catch(s){console.error("Failed to update security level:",s),T({level:"ERROR",score:0,color:"red",details:a("sas.verificationFailed")})}finally{setTimeout(()=>{window.isUpdatingSecurity=!1},2e3)}}},[]),Oe=React.useRef(null),$t=tc(Oe);React.useEffect(()=>{try{localStorage.setItem("securebit_relay_only_mode",String(Ft))}catch{}ae.current?._config?.webrtc&&ae.current._setRelayOnlyMode(Ft)},[Ft]),React.useEffect(()=>{mt.length>0&&Oe.current&&($t(),setTimeout($t,50),setTimeout($t,150))},[mt]);let Bn=t.order.some(s=>(t.sessions[s]?.messages||[]).some(o=>typeof o.expiresAt=="number")),bn=React.useRef(t);bn.current=t,React.useEffect(()=>{if(!Bn)return;let s=l=>{let u=Date.now(),g=!1,w=l.map(M=>typeof M.expiresAt=="number"&&M.expiresAt<=u&&!M.expired?(g=!0,{...M,expired:!0,message:"",expiresAt:void 0}):M);return g?w:l},o=setInterval(()=>{let l=Date.now();Br(l);let u=bn.current;for(let g of u.order)(u.sessions[g]?.messages||[]).some(M=>typeof M.expiresAt=="number"&&M.expiresAt<=l&&!M.expired)&&e({type:J.SET_MESSAGES,id:g,updater:s})},1e3);return()=>clearInterval(o)},[Bn]);let Jn=(s={})=>{let o=s.role||"offer",l=ps({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:Rs(x,ye,ke)}),ye==="received"&&u!==r.current&&e({type:J.INCREMENT_UNREAD,id:u})},M=(x,ye)=>{x&&e({type:J.UPDATE_MESSAGE_STATUS,id:u,mid:x,status:ye})},A=(x,ye)=>{x!=null&&e({type:J.PATCH_MESSAGE,id:u,messageId:x,patch:ye})},U=(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}),de=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}}),pt=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 Ie=JSON.parse(x);if(Ie.type==="presence"){let Vs=Ie.data&&Ie.data.status||Ie.status;Vs&&e({type:J.SET_PEER_PRESENCE,id:u,presence:Vs});return}if(sr(Ie)){vt.current(u,Ie);return}let ut=["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(Ie.type&&ut.includes(Ie.type)){console.log(`Blocked system/file message from chat: ${Ie.type}`);return}Ie.type==="message"&&typeof Ie.data=="string"&&(x=Ie.data,Ie.meta&&typeof Ie.meta=="object"&&(ke=Ie.meta))}catch{}let Be={};if(ke&&typeof ke=="object"&&(typeof ke.mid=="string"&&(Be.mid=ke.mid),ke.once===!0&&(Be.viewOnce=!0,Be.viewOnceTtl=Number.isFinite(ke.onceTtl)?ke.onceTtl:15),Number.isFinite(ke.ttl)&&ke.ttl>0&&(Be.expiresAt=Date.now()+ke.ttl*1e3),Number.isFinite(ke.ts)&&(Be.timestamp=ke.ts)),$n.current&&ye==="received"){Hs().incoming.push({message:x,type:ye,opts:Be});return}if(w(x,ye,Be),Be.mid&&ye==="received")if(u===r.current&&(typeof document>"u"||document.visibilityState==="visible"))try{rn?.sendDeliveryReceipt?.(Be.mid)}catch{}else{let ut=Hs();ut.pendingReadAcks&&ut.pendingReadAcks.push(Be.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"&&en(u),x==="recovery_failed"){ve("disconnected"),u===r.current&&(document.dispatchEvent(new CustomEvent("peer-disconnect")),document.dispatchEvent(new CustomEvent("disconnected"))),setTimeout(()=>{Vr.current(u)||jr(u)},2500);return}if(x==="connected")document.dispatchEvent(new CustomEvent("new-connection")),window.isUpdatingSecurity||Fe().catch(console.error);else if(x==="verifying")rt(!0),window.isUpdatingSecurity||Fe().catch(console.error);else if(x==="verified"){fe(!0),rt(!1),pt(!0),ve("connected"),setTimeout(()=>{fe(!0)},0);try{let ke=Dt.current==="invisible"?"offline":Dt.current;setTimeout(()=>{try{let Be=rn.sendMessage?.(JSON.stringify({type:"presence",status:ke}));Be&&typeof Be.catch=="function"&&Be.catch(()=>{})}catch{}},400)}catch{}window.isUpdatingSecurity||Fe().catch(console.error)}else x==="connecting"?window.isUpdatingSecurity||Fe().catch(console.error):x==="disconnected"?(ve("disconnected"),fe(!1),rt(!1),nt(!1),We(!1),pt(!1),u===r.current&&document.dispatchEvent(new CustomEvent("disconnected"))):x==="peer_disconnected"&&(u===r.current&&(re(0),document.dispatchEvent(new CustomEvent("peer-disconnect"))),ve("peer_disconnected"),fe(!1),rt(!1),nt(!1),We(!1),pt(!1),setTimeout(()=>{Vr.current(u)||jr(u)},2500))}},Wa=x=>{Se(x===""?"":x)},Va=x=>{x===""?(de(""),rt(!1)):(de(x),rt(!0))},ja=x=>{nt(x.localConfirmed),We(x.remoteConfirmed),pt(x.bothConfirmed)},$a=(x,ye)=>{x==="replay_attack"?(re(0),Ce(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"&&(re(0),Ce(null),w(` Security breach: ${ye}`,"system"),typeof console.clear=="function"&&console.clear())};typeof console.clear=="function"&&console.clear();let rn=new EnhancedSecureWebRTCManager(Ws,Ha,Wa,Va,$a,ja,{webrtc:{relayOnly:Ft,iceServers:Array.isArray(xt)&&xt.length?xt:Array.isArray(window.SECUREBIT_ICE_SERVERS)?window.SECUREBIT_ICE_SERVERS:void 0}});if(d.current.set(u,rn),rn.onMessageDelete=x=>{x&&g(ye=>ye.filter(ke=>String(ke.mid)!==String(x)))},rn.onMessageDelivered=x=>{M(x,"read")},typeof Notification<"u"&&Notification&&Notification.permission==="granted"&&window.NotificationIntegration&&!h.current.get(u))try{let x=new window.NotificationIntegration(rn);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"),rn.setFileTransferCallbacks(x=>{if(x&&x.isVoice){let ye=Math.max(0,Math.min(100,x.progress||0)),ke=Be=>Be.voice?x.direction==="up"&&ye>=100?{voice:{...Be.voice,transfer:null}}:{voice:{...Be.voice,transfer:{dir:x.direction,pct:ye}}}:{};x.direction==="up"&&x.uiId!=null?A(x.uiId,ke):x.fileId&&U(x.fileId,ke);return}console.log("File progress:",x)},x=>{if(!!x.isVoice||typeof x.mimeType=="string"&&x.mimeType.startsWith("audio/")){x.getObjectURL().then(Ie=>{U(x.fileId,ut=>({voice:{...ut.voice||{},url:Ie,transfer:null}}))}).catch(Ie=>{console.error("Voice decode failed:",Ie),U(x.fileId,ut=>({voice:{...ut.voice||{},transfer:null,error:!0}}))});return}let ke=Math.max(1,Math.round((x.fileSize||0)/(1024*1024)));(async()=>{let Ie=await x.getObjectURL(),ut=document.createElement("a");ut.href=Ie,ut.download=x.fileName||"file",document.body.appendChild(ut),ut.click(),ut.remove(),setTimeout(()=>x.revokeObjectURL(Ie),15e3)})().then(()=>{w(`File received & saved: ${x.fileName} (${ke} MB)`,"system")}).catch(Ie=>{console.error("Auto-save failed:",Ie),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{rn.acceptIncomingFile(x.fileId)}catch{}return}Ga(ye=>ye.some(ke=>ke.fileId===x.fileId)?ye:[...ye,x])}),u},xn=React.useRef(Jn);xn.current=Jn;let Wr=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},[]),Vr=React.useRef(Is);Vr.current=Is;let jr=React.useCallback(s=>{if(!(!s||Wr.current.has(s))){Wr.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{Wr.current.delete(s)}}},[]);React.useEffect(()=>{t.order.length===0&&xn.current({role:"offer"})},[t.order.length]);let[xr,Ms]=React.useState(()=>{try{return localStorage.getItem("securebit_sidebar_collapsed")==="true"}catch{return!1}});React.useEffect(()=>{try{localStorage.setItem("securebit_sidebar_collapsed",String(xr))}catch{}},[xr]);let[As,tn]=React.useState(!1),aa=React.useCallback(s=>{e({type:J.SET_ACTIVE,id:s}),e({type:J.CLEAR_UNREAD,id:s}),tn(!1)},[]),oa=React.useCallback(()=>{p({type:be.SET_ACTIVE_GROUP,id:null}),xn.current({role:"offer"}),tn(!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{}}},[]),vn=React.useRef(Ts);vn.current=Ts;let Ns=React.useCallback((s,o)=>{let l="mesh:"+Array.from(crypto.getRandomValues(new Uint8Array(8))).map(U=>U.toString(16).padStart(2,"0")).join(""),u={manager:null,gid:s,fp:o,sessionId:l},g=U=>{if(typeof U!="string"||!U.trim().startsWith("{"))return;let ve;try{ve=JSON.parse(U)}catch{return}sr(ve)&&vt.current(l,ve)},w=U=>{let ve=U==="disconnected"||U==="failed"||U==="peer_disconnected"||U==="recovery_failed";if(wt.current(l,!ve&&u.manager?.isVerified===!0),U==="recovery_failed"||U==="failed"){let Se=k.current.get(s);try{Se?.unbindSession(o)}catch{}vn.current(l)}},M=U=>{if(!(!U||!u.manager))try{u.manager.markGroupLinkVerified(`group:${s}`)}catch{vn.current(l),wt.current(l,!1)}},A=new EnhancedSecureWebRTCManager(g,w,()=>{},M,()=>{},()=>{},{emitGlobalEvents:!1,webrtc:{relayOnly:Ft,iceServers:Array.isArray(xt)&&xt.length?xt:Array.isArray(window.SECUREBIT_ICE_SERVERS)?window.SECUREBIT_ICE_SERVERS:void 0}});return u.manager=A,xe.current.set(l,u),u},[Ft,xt]),$r=React.useRef(Ns);$r.current=Ns;let Ds=React.useCallback(s=>({createOffer:async o=>{let l=$r.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 vn.current(l.sessionId),u}},createAnswer:async(o,l)=>{let u=$r.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 vn.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=>vn.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 qr=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:_r(s.peerLabel)})),[t]),la=React.useCallback(s=>{p({type:be.SET_ACTIVE_GROUP,id:s}),p({type:be.CLEAR_UNREAD,id:s}),tn(!1)},[]),da=React.useCallback(async({name:s,sessionIds:o})=>{ge(!1);let l=Hn.newId(),u=new Hn({groupId:l,name:s,isAdmin:!0,subtle:crypto.subtle,send:at,emit:Ze(l),mesh:Ds(l)});k.current.set(l,u);try{await u.init(),p({type:be.CREATE_GROUP,entry:Ir({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}),z(g?.code==="invitations_could_not_be_sent"?a("err.inviteNotConnectedRetry"):`The group could not be created (${g?.code||"unknown error"}).`)}},[at,Ze,t]),pa=React.useCallback(async()=>{let s=P;if(!s)return;V(null);let o=new Hn({groupId:s.gid,name:s.name,isAdmin:!1,subtle:crypto.subtle,send:at,emit:Ze(s.gid),mesh:Ds(s.gid)});k.current.set(s.gid,o);try{await o.init(),p({type:be.CREATE_GROUP,entry:Ir({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"})}},[P,at,Ze]),ua=React.useCallback(()=>{let s=B.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"})}},[]),vr=React.useCallback((s,{announce:o=!0}={})=>{let l=k.current.get(s),u=j.current.get(s);u&&(j.current.delete(s),u.leave().catch(()=>{})),ce(g=>{let w={...g};return delete w[s],w}),L(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(vr);Fs.current=vr;let fa=React.useCallback(async s=>{let o=B.current,l=o&&k.current.get(o);if(!l)return;let u=String(s||"").trim();if(u){le("");try{let{unreachable:g}=await l.sendText(u);p({type:be.ADD_MESSAGE,id:o,message:Ee(u,"sent")});let w=g.map(M=>M.fp).sort().join(",");if(w!==(Le.current.get(o)||"")&&(Le.current.set(o,w),g.length>0)){let M=g.map(U=>U.name),A=M.length===1?`${M[0]} is`:`${M.slice(0,-1).join(", ")} and ${M[M.length-1]} are`;p({type:be.ADD_MESSAGE,id:o,message:Ee(`${A} 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 qr.filter(o=>!s.has(o.id))},[I,qr]),ga=React.useCallback(async s=>{X(!1);let o=B.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){z(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=B.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"})}},[]),Ps=React.useCallback((s,o)=>{let l=j.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){j.current.delete(s),l.leave().catch(()=>{}),L(w=>{let M={...w};return delete M[s],M});return}l.setPeers(g.participants)},[]),Yr=React.useRef(Ps);Yr.current=Ps;let wr=React.useCallback(async(s,o)=>{let l=j.current.get(s);if(l&&l.callId===o.callId)return l.setPeers(o.participants),l;l&&(j.current.delete(s),await l.leave().catch(()=>{}));let u=new Dr({getManager:g=>d.current.get(g)||xe.current.get(g)?.manager||null,onChange:g=>{L(w=>({...w,[s]:g}))}});return j.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=B.current,l=o&&k.current.get(o);if(l)try{await l.startCall({withVideo:s,prepare:u=>wr(o,u)})}catch(u){let g=j.current.get(o);g&&(j.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.${cr(u)}`),"system")})}},[wr]),ba=React.useCallback(async()=>{let s=B.current,o=s&&k.current.get(s),l=o?.getCallSnapshot?.();if(!(!o||!l))try{let u=await wr(s,{...l,joined:!0});await o.joinCall(),u.setPeers(o.getCallSnapshot()?.participants||[])}catch(u){let g=j.current.get(s);g&&(j.current.delete(s),g.leave().catch(()=>{})),p({type:be.ADD_MESSAGE,id:s,message:Ee(a(`groupCall.err.${cr(u)}`),"system")})}},[wr]),xa=React.useCallback(()=>{let s=B.current,o=s&&k.current.get(s)?.getCallSnapshot?.();o&&Ae(l=>({...l,[s]:o.callId}))},[]),va=React.useCallback(async()=>{let s=B.current;if(!s)return;let o=j.current.get(s);o&&(j.current.delete(s),L(l=>{let u={...l};return delete u[s],u}),await o.leave().catch(()=>{}));try{await k.current.get(s)?.leaveCall()}catch{}},[]),zn=React.useCallback(()=>B.current?j.current.get(B.current):null,[]),wa=React.useCallback(()=>{zn()?.toggleMic()},[zn]),ka=React.useCallback(()=>{zn()?.toggleCamera()},[zn]),Sa=React.useCallback(()=>{zn()?.flipCamera()},[zn]);React.useEffect(()=>{y&&p({type:be.CLEAR_UNREAD,id:y})},[y]),React.useEffect(()=>{let s=W.current;s&&(s.scrollTop=s.scrollHeight)},[I&&I.messages.length]),React.useEffect(()=>()=>{for(let s of j.current.values())s.leave().catch(()=>{});j.current.clear();for(let s of k.current.values())try{s.destroy()}catch{}k.current.clear();for(let s of[...xe.current.keys()])vn.current(s)},[]);let Kr=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")&&Kr(n))},[n,Kr]);let Os=React.useRef(!1);React.useEffect(()=>{if(Os.current)return;Os.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),Kr(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,[Qr,ht]=React.useState(0),[Ra,$e]=React.useState(0),[Zn,nn]=React.useState(!1),N=React.useRef({timer:null,chunks:[],idx:0,active:!1});React.useEffect(()=>()=>{try{N.current&&N.current.timer&&(clearInterval(N.current.timer),N.current.timer=null)}catch{}},[n]);let cc=()=>{try{N.current.timer&&clearInterval(N.current.timer)}catch{}N.current={timer:null,chunks:[],idx:0,active:!1},$e(0),ht(0),nn(!1)},Xr=async()=>{let{chunks:s,idx:o}=N.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)}$e((N.current?.idx||0)%(N.current?.chunks?.length||1)+1)},Un=async()=>{await Xr();let s=N.current?.chunks?.length||0;if(s>0){let o=((N.current?.idx||0)+1)%s;N.current.idx=o,$e(o+1)}},_a=()=>{let s=!Zn;nn(s),s?(N.current.timer&&(clearInterval(N.current.timer),N.current.timer=null),console.log("QR Manual mode enabled - auto-scroll stopped")):(N.current.chunks.length>1&&(N.current.active=!0,clearInterval(N.current.timer),N.current.timer=setInterval(Un,3e3)),console.log("QR Manual mode disabled - auto-scroll resumed"))},Ca=async()=>{if(console.log("\u{1F3AE} nextQrFrame called, qrFramesTotal:",Qr,"qrAnimationRef.current:",N.current),N.current.chunks.length>1){let s=(N.current.idx+1)%N.current.chunks.length;N.current.idx=s,$e(s+1),console.log("\u{1F3AE} Next frame index:",s+1);try{clearInterval(N.current.timer)}catch{}N.current.timer=null,await Xr(),!Zn&&N.current.chunks.length>1?(N.current.active=!0,N.current.timer=setInterval(Un,3e3)):N.current.active=!1}else console.log("\u{1F3AE} No multiple frames to navigate")},Ia=async()=>{if(console.log("\u{1F3AE} prevQrFrame called, qrFramesTotal:",Qr,"qrAnimationRef.current:",N.current),N.current.chunks.length>1){let s=(N.current.idx-1+N.current.chunks.length)%N.current.chunks.length;N.current.idx=s,$e(s+1),console.log("\u{1F3AE} Previous frame index:",s+1);try{clearInterval(N.current.timer)}catch{}N.current.timer=null,await Xr(),!Zn&&N.current.chunks.length>1?(N.current.active=!0,N.current.timer=setInterval(Un,3e3)):N.current.active=!1}else console.log("\u{1F3AE} No multiple frames to navigate")},G=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 de=typeof s=="string"?JSON.parse(s):s,fe=await window.generateBinaryQRCodeFromObject(de,{errorCorrectionLevel:"M",size:u,margin:2});if(fe){try{N.current&&N.current.timer&&clearInterval(N.current.timer)}catch{}N.current={timer:null,chunks:[],idx:0,active:!1},$e(0),ht(0),nn(!1),ue(fe),ht(1),$e(1);return}}catch(de){console.warn("Binary QR generation failed, falling back to compressed:",de?.message||de)}if(typeof window.generateCompressedQRCode=="function")try{let de=typeof s=="string"?s:JSON.stringify(s),fe=await window.generateCompressedQRCode(de,{errorCorrectionLevel:"M",size:u,margin:2});if(fe){try{N.current&&N.current.timer&&clearInterval(N.current.timer)}catch{}N.current={timer:null,chunks:[],idx:0,active:!1},$e(0),ht(0),nn(!1),ue(fe),ht(1),$e(1);return}}catch(de){console.warn("Compressed QR generation failed, falling back to plain:",de?.message||de)}let g=typeof s=="string"?s:JSON.stringify(s);if(g.length<=Ea){if(!window.generateQRCode)throw new Error("QR code generator unavailable");try{N.current&&N.current.timer&&clearInterval(N.current.timer)}catch{}N.current={timer:null,chunks:[],idx:0,active:!1},$e(0),ht(0),nn(!1);let de=await window.generateQRCode(g,{errorCorrectionLevel:"M",size:u,margin:2});ue(de),ht(1),$e(1);return}try{N.current&&N.current.timer&&clearInterval(N.current.timer)}catch{}N.current={timer:null,chunks:[],idx:0,active:!1},$e(0),ht(0),nn(!1);let w=`raw_${Date.now()}_${Math.random().toString(36).slice(2)}`,A=Math.max(200,Math.floor(g.length/10)),U=Math.ceil(g.length/A),ve=[];for(let de=0;de[...l,{message:` QR code generation failed: ${o.message}`,type:"error"}])}},Ma=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}}),Aa=async s=>{try{if(console.log("QR Code scanned:",s.substring(0,100)+"..."),console.log("Current buffer state:",G.current),s.startsWith("SB2:")||s.charCodeAt(0)===2)return G.current={id:null,total:0,seen:new Set,items:[]},lt?Qe(s):tt(s),te(l=>[...l,{message:a("flow.invitationCaptured"),type:"success"}]),Ve(!1),Promise.resolve(!0);if(s.startsWith("SB1:bin:")||G.current&&G.current.id){console.log("Binary chunk detected:",s.substring(0,50)+"..."),G.current.id||(console.log("Initializing buffer for binary chunks"),G.current={id:`bin_${Date.now()}`,total:4,seen:new Set,items:[],lastUpdateMs:Date.now()});let l=s.substring(0,50);if(G.current.seen.has(l))return console.log("Chunk already scanned, ignoring..."),Promise.resolve(!1);G.current.seen.add(l),G.current.items.push(s),G.current.lastUpdateMs=Date.now();try{let g=G.current.seen.size;document.dispatchEvent(new CustomEvent("qr-scan-progress",{detail:{id:G.current.id,seq:g,total:G.current.total}})),ht(G.current.total),$e(g)}catch{}let u=G.current.seen.size>=G.current.total;if(console.log(`Chunks collected: ${G.current.seen.size}/${G.current.total}, complete: ${u}`),!u)return console.log(`Scanned chunk ${G.current.seen.size}/${G.current.total}, waiting for more...`),Promise.resolve(!1);try{let g=G.current.items.join("");return lt?Qe(g):tt(g),te(w=>[...w,{message:"All binary chunks captured. Payload reconstructed.",type:"success"}]),G.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)+"..."),G.current.id||(console.log("Initializing buffer for potential binary chunks"),G.current={id:`bin_${Date.now()}`,total:4,seen:new Set,items:[],lastUpdateMs:Date.now()});let l=s.substring(0,50);if(G.current.seen.has(l))return console.log("Chunk already scanned, ignoring..."),Promise.resolve(!1);G.current.seen.add(l),G.current.items.push(s),G.current.lastUpdateMs=Date.now();try{let g=G.current.seen.size;document.dispatchEvent(new CustomEvent("qr-scan-progress",{detail:{id:G.current.id,seq:g,total:G.current.total}})),ht(G.current.total),$e(g)}catch{}let u=G.current.seen.size>=G.current.total;if(console.log(`Chunks collected: ${G.current.seen.size}/${G.current.total}, complete: ${u}`),!u)return console.log(`Scanned chunk ${G.current.seen.size}/${G.current.total}, waiting for more...`),Promise.resolve(!1);try{let g=G.current.items.join("");return lt?Qe(g):tt(g),te(w=>[...w,{message:"All binary chunks captured. Payload reconstructed.",type:"success"}]),G.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(!G.current.id||G.current.id!==l.id){G.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{}}G.current.seen.has(l.seq)||(G.current.seen.add(l.seq),G.current.items.push(s),G.current.lastUpdateMs=Date.now());try{let g=G.current.seen.size;document.dispatchEvent(new CustomEvent("qr-scan-progress",{detail:{id:l.id,seq:g,total:G.current.total||l.total||0}}))}catch{}if(!(G.current.seen.size>=(G.current.total||1)))return Promise.resolve(!1);if(l.rt==="raw")try{let w=G.current.items.map(A=>JSON.parse(A)).sort((A,U)=>(A.hdr.seq||0)-(U.hdr.seq||0)).map(A=>A.body||"").join(""),M=JSON.parse(w);lt?Qe(JSON.stringify(M,null,2)):tt(JSON.stringify(M,null,2)),te(A=>[...A,{message:"All frames captured. RAW payload reconstructed.",type:"success"}]);try{document.dispatchEvent(new CustomEvent("qr-scan-complete",{detail:{id:l.id}}))}catch{}return G.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=G.current.items.map(A=>JSON.parse(A)).sort((A,U)=>(A.hdr.seq||0)-(U.hdr.seq||0)).map(A=>A.body||"").join(""),M;if(typeof window.decodeAnyPayload=="function"){let A=window.decodeAnyPayload(w);M=typeof A=="string"?JSON.parse(A):A}else M=JSON.parse(w);lt?Qe(JSON.stringify(M,null,2)):tt(JSON.stringify(M,null,2)),te(A=>[...A,{message:"All frames captured. BIN payload reconstructed.",type:"success"}]);try{document.dispatchEvent(new CustomEvent("qr-scan-complete",{detail:{id:l.id}}))}catch{}return G.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(G.current.items);if(g.length>0){let{payloadObj:w}=g[0];lt?Qe(JSON.stringify(w,null,2)):tt(JSON.stringify(w,null,2)),te(M=>[...M,{message:"All frames captured. COSE payload reconstructed.",type:"success"}]);try{document.dispatchEvent(new CustomEvent("qr-scan-complete",{detail:{id:l.id}}))}catch{}return G.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=Ma(o);return lt?(Qe(JSON.stringify(l,null,2)),console.log("\u{1F4F1} Template data populated to answerInput (waiting for response mode)")):(tt(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),Qe(JSON.stringify(o,null,2))):(console.log("QR scan: Populating offerInput with:",o),tt(JSON.stringify(o,null,2))),te(l=>[...l,{message:"\u{1F4F1} QR code scanned successfully!",type:"success"}]),Ve(!1),!0)}catch{return lt?Qe(s):tt(s),te(l=>[...l,{message:"\u{1F4F1} QR code scanned successfully!",type:"success"}]),Ve(!1),!0}},Bs=async()=>{try{Tt(!0),Mt(""),Xt(!1),E(!1),ue("");let s=await ae.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,M=Math.max(200,Math.ceil(u.length/g));M<=0&&(M=200),u.length<=M?(w=1,M=u.length):(M=Math.ceil(u.length/g),w=g);let A=`bin_${Date.now()}_${Math.random().toString(36).slice(2)}`,U=[];for(let fe=0;fe=1024?720:512;if(window.generateQRCode&&U.length>0){let fe=await window.generateQRCode(U[0],{errorCorrectionLevel:"M",size:Se,margin:2});fe&&ue(fe)}try{N.current&&N.current.timer&&clearInterval(N.current.timer)}catch{}N.current={timer:null,chunks:U,idx:0,active:!0},ht(U.length),$e(1),nn(!1);let de=3e3;N.current.timer=setInterval(Un,de);try{E(!0)}catch{}}else{await Ls(s);try{E(!0)}catch{}}}catch(u){console.warn("Offer QR generation failed:",u)}mt.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||Fe().catch(console.error)}catch(s){te(o=>[...o,{message:`Error creating invitation: ${s.message}`,type:"system",id:Date.now(),timestamp:Date.now()}])}finally{Tt(!1)}},Ta=async()=>{try{if(!At.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(At.trim());s=typeof w=="string"?JSON.parse(w):w}else{let w=typeof window.decompressIfNeeded=="function"?window.decompressIfNeeded(At.trim()):At.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 ae.current.createSecureAnswer(s);Qt(l),pn(!0);let u=typeof l=="object"?JSON.stringify(l):l;try{if(typeof window.encodeBinaryToPrefixed=="function"){let w=window.encodeBinaryToPrefixed(u),M=4,A=M,U=Math.max(200,Math.ceil(w.length/M));U<=0&&(U=200),w.length<=U?(A=1,U=w.length):(U=Math.ceil(w.length/M),A=M);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{N.current&&N.current.timer&&clearInterval(N.current.timer)}catch{}N.current={timer:null,chunks:Se,idx:0,active:!0},ht(Se.length),$e(1),nn(!1);let nt=3e3;N.current.timer=setInterval(Un,nt);try{E(!0)}catch{}}else{await Ls(l);try{E(!0)}catch{}}}catch(w){console.warn("Answer QR generation failed:",w)}typeof Qn=="function"&&Qn(),mt.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||Fe().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(!Ke.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(Ke.trim());s=typeof l=="string"?JSON.parse(l):l}else{let l=typeof window.decompressIfNeeded=="function"?window.decompressIfNeeded(Ke.trim()):Ke.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 ae.current.handleSecureAnswer(s),je&&(Ce(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||Fe().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")&&(Ce(null),re(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")&&(Ce(null),re(0)),kt("failed")}},Da=async(s,o=!0)=>{if(o){ae.current.confirmVerification(s),b(!0);try{if(window.NotificationIntegration&&ae.current&&!fn.current){let l=new window.NotificationIntegration(ae.current);await l.init(),fn.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 fn.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),Te(!1),et(!1),f(!1),Ut(""),kt("disconnected"),Mt(""),Qt(""),tt(""),Qe(""),Xt(!1),pn(!1),zt(""),T(null),Gt(!1),te([]),re(0),Ce(null),document.dispatchEvent(new CustomEvent("disconnected")),Jr()},Fa=async()=>{if(!gn.trim()||!ae.current)return;let s=gn.trim(),o=`m_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,l=ae.current,u=l?.isConnected?.()===!0&&l?.isReconnecting?.()!==!0;if(!u&&l?.isConnected){let g=Et?"```\n"+s+"\n```":s,w=Date.now(),M={mid:o,ts:w};Wt&&(M.once=!0,M.onceTtl=Pn),Rt>0&&(M.ttl=Rt);let A={mid:o,status:"sent",timestamp:w};Rt>0&&(A.expiresAt=w+Rt*1e3),dt(g,"sent",A);let U=m.current.get(r.current);U&&U.outgoing.push({outText:g,meta:M,mid:o}),Zt(""),Et&&Dn(!1),Wt&&Fn(!1);return}if(!u){dt(a("chat.notSentReason"),"system");return}try{let g=s,w=Et?"```\n"+g+"\n```":g,M=o,A={mid:M,ts:Date.now()};Wt&&(A.once=!0,A.onceTtl=Pn),Rt>0&&(A.ttl=Rt);let U={mid:M,status:"sending"};Rt>0&&(U.expiresAt=Date.now()+Rt*1e3),dt(w,"sent",U);try{await ae.current.sendMessage(w,A),yn(M,"delivered")}catch(ve){throw yn(M,"failed"),ve}Zt(""),Et&&Dn(!1),Wt&&Fn(!1)}catch(g){let w=String(g?.message||g);/queued for sending|Data channel not ready/i.test(w)||dt(`Sending error: ${w}`,"system")}},Pa=async(s,o,l)=>{if(!s||!ae.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",M=new File([s],`voice-message.${w}`,{type:g}),A=null;try{A=URL.createObjectURL(s)}catch{}let U=ae.current?.isReconnecting?.()===!0;if(U||ae.current?.isConnected?.()!==!0){if(A)try{URL.revokeObjectURL(A)}catch{}dt(U?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):[]},de=dt("","sent",{voice:{dur:Se.dur,bars:Se.bars,url:A,transfer:{dir:"up",pct:0}}});try{await ae.current.sendFile(M,{voice:Se,uiId:de}),Xn(de,fe=>({voice:{...fe.voice||{},transfer:null}}))}catch(fe){Xn(de,We=>({voice:{...We.voice||{},transfer:null,error:!0}}));let nt=String(fe?.message||fe);/queued for sending|Data channel not ready/i.test(nt)||dt(`Voice message failed: ${nt}`,"system")}},Oa=React.useCallback(s=>{if(s){te(o=>o.filter(l=>String(l.mid)!==String(s)));try{ae.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(""),tt(""),Qe(""),Xt(!1),Tt(!1),mn()||pn(!1),f(!1),E(!1),gr(!1),Ve(!1),G.current={id:null,total:0,seen:new Set,items:[]},mn()||ue(""),Ut(""),Gt(!1),zt(""),T(null),kt("disconnected"),te([]),Zt(""),b(!1),Te(!1),et(!1),typeof console.clear=="function"&&console.clear(),re(0),Ce(null),document.dispatchEvent(new CustomEvent("peer-disconnect"))},Ba=React.useCallback(async(s,o)=>{try{o?await ae.current?.acceptIncomingFile(s):await ae.current?.rejectIncomingFile(s)}finally{ln(l=>l.filter(u=>u.fileId!==s))}},[]),Jr=()=>{try{let s=r.current;ta(),re(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"}})),jr(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!",dt(o,"system")},Us=React.useRef(De);React.useEffect(()=>{let s=Us.current==="reconnecting";Us.current=De,De==="connected"&&bt&&!s&&dt(" Secure connection successfully established and verified! You can now communicate safely with full protection against MITM attacks and Perfect Forward Secrecy..","system")},[De,bt]);let Zr=React.useMemo(()=>{try{return new URLSearchParams(window.location.search).get("preview")==="chat"}catch{return!1}},[]),Ct=(De==="connected"||De==="verified"||De==="reconnecting")&&bt,Gs=React.useRef({id:n,live:Ct});React.useEffect(()=>{let s=Gs.current;Gs.current={id:n,live:Ct},s.live&&!Ct&&s.id===n&&ta()},[Ct,n]),React.useEffect(()=>(document.body.classList.toggle("sb-in-chat",Ct||Zr),()=>document.body.classList.remove("sb-in-chat")),[Ct,Zr]),React.useEffect(()=>{Ct&&je&&De!=="failed"&&(Ce(null),re(0),dt(" All security features enabled by default","system"))},[Ct,je,De]),React.useEffect(()=>{if(Yn&&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:",G.current),Aa(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(M=>{console.log("Error stopping scanner:",M);try{s.clear()}catch(A){console.log("Error clearing scanner:",A)}Ve(!1)})}catch(M){console.log("Error in scanner cleanup:",M),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)}}}}},[Yn,Kn]);let za=fi(t),Ua=Oi(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(Zr){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:xr,drawerOpen:As,onToggleCollapse:()=>Ms(l=>!l),onSelect:o,onNewChat:o,onRename:o,onCloseDrawer:()=>tn(!1),myStatus:Ht,onSetStatus:jn}),React.createElement("button",{key:"burger",className:"sb-burger",onClick:()=>tn(!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:cn.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:gn,setMessageInput:Zt,onSendMessage:o,onSendVoice:o,onDisconnect:o,keyFingerprint:"preview",isVerified:!0,chatMessagesRef:Oe,scrollToBottom:o,webrtcManager:null,status:"connected",pendingIncomingFiles:[],onIncomingDecision:o,codeMode:Et,setCodeMode:Dn,viewOnceMode:Wt,setViewOnceMode:Fn,viewOnceTtl:Pn,setViewOnceTtl:pr,disappearTtl:Rt,setDisappearTtl:Pe,nowTick:ur,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:xr,drawerOpen:As,onToggleCollapse:()=>Ms(s=>!s),onSelect:s=>{p({type:be.SET_ACTIVE_GROUP,id:null}),aa(s)},onSelectGroup:la,onNewChat:oa,onNewGroup:()=>{ge(!0),tn(!1)},onRename:ca,onCloseDrawer:()=>tn(!1),myStatus:Ht,onSetStatus:jn}),ee&&React.createElement(Wi,{key:"create-group",candidates:qr,relayOnly:Ft,onCreate:da,onCancel:()=>ge(!1)}),P&&React.createElement($i,{key:"group-invite",invite:{name:P.name,fromLabel:t.sessions[P.sessionId]?.peerLabel||"A verified contact"},onAccept:pa,onDecline:()=>V(null)}),O&&React.createElement(Vi,{key:"group-error",message:O,onDismiss:()=>z(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):vr(I.id)}}),qt&&React.createElement("button",{key:"sb-burger",className:"sb-burger",onClick:()=>tn(!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:cn.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"}:{}},[!Ct&&!qt&&window.EnhancedMinimalHeader&&React.createElement(window.EnhancedMinimalHeader,{key:"header",status:De,fingerprint:yt,verificationCode:St,onDisconnect:Jr,isConnected:Ct,securityLevel:yr,webrtcManager:ae.current}),!Ct&&!qt&&React.createElement(ks,{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:D,setInput:le,onSend:fa,onLeave:()=>vr(I.id),onRemoveMember:ma,onAddMembers:()=>X(!0),isAdmin:I.isAdmin,scrollRef:W,onStartCall:ya,callActive:!!se[I.id],callOverlay:(()=>{let s=se[I.id]||null;if(!s||!s.joined&&ne[I.id]===s.callId)return null;let o=me[I.id]||null;return React.createElement(Ss,{key:"group-call",call:s,media:o,groupName:I.name,localStream:j.current.get(I.id)?.getLocalStream()||null,getRemoteStream:l=>j.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"},Ct?React.createElement(na,{title:i?i.peerLabel:"",isOffline:Vt,peerPresence:i?i.peerPresence:null,onRenameTitle:s=>{n&&e({type:J.RENAME,id:n,label:s})},messages:mt,messageInput:gn,setMessageInput:Zt,onSendMessage:Fa,onSendVoice:Pa,onDisconnect:Jr,keyFingerprint:yt,isVerified:bt,chatMessagesRef:Oe,scrollToBottom:$t,webrtcManager:ae.current,status:De,pendingIncomingFiles:Ue,onIncomingDecision:Ba,codeMode:Et,setCodeMode:Dn,viewOnceMode:Wt,setViewOnceMode:Fn,viewOnceTtl:Pn,setViewOnceTtl:pr,disappearTtl:Rt,setDisappearTtl:Pe,nowTick:ur,onUnsendMessage:Oa,onMessageExpire:La}):React.createElement(Zo,{onCreateOffer:Bs,onCreateAnswer:Ta,onConnect:Na,onClearData:zs,onVerifyConnection:Da,connectionStatus:De,offerData:Mn,answerData:dn,offerInput:At,setOfferInput:tt,answerInput:Ke,setAnswerInput:Qe,showOfferStep:lt,showAnswerStep:dr,verificationCode:St,showVerification:un,showQRCode:An,qrCodeUrl:ie,showQRScanner:Gr,setShowQRCode:E,setShowQRScanner:gr,setShowQRScannerModal:Ve,messages:mt,localVerificationConfirmed:Kt,remoteVerificationConfirmed:Z,bothVerificationsConfirmed:Ye,qrFramesTotal:Qr,qrFrameIndex:Ra,qrManualMode:Zn,toggleQrManualMode:_a,nextQrFrame:Ca,prevQrFrame:Ia,markAnswerCreated:Qn,notificationIntegrationRef:fn,isGeneratingKeys:_e,setIsGeneratingKeys:Tt,handleCreateOffer:Bs,relayOnlyMode:Ft,setRelayOnlyMode:Pt,webrtcManagerRef:ae,showIceSettings:hr,setShowIceSettings:qn,iceServersText:Ot,iceSettingsPersisted:jt,customIceServers:xt,handleApplyIceSettings:zr,handleForgetIceSettings:Ur,compact:qt})),Yn&&(()=>{let s=()=>{Ve(!1),G.current={id:null,total:0,seen:new Set,items:[]}},o=G.current,u=!!(o&&o.id&&o.total>1)?`Scanning frames\u2026 ${o.seen.size} / ${o.total}`:a("qr.scanning"),g=(w,M)=>React.createElement("span",{key:w,style:Object.assign({position:"absolute",width:"34px",height:"34px",zIndex:3},M)});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(Cs));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(Cs));ReactDOM.render(e,document.getElementById("root"))}else ReactDOM.render(React.createElement(Cs),document.getElementById("root")); //# sourceMappingURL=app.js.map