\n \n ${isReal ? 'Real-time verification using actual cryptographic functions \u2014 no mock data.' : 'Warning: connection may not be fully established \u2014 values may be simulated.'}\n
\n \n ${isReal ? 'Real-time verification using actual cryptographic functions \u2014 no mock data.' : 'Warning: connection may not be fully established \u2014 values may be simulated.'}\n
\n
`;\n\n const onKey = (e) => { if (e.key === 'Escape') close(); };\n const close = () => { if (modal.parentNode) modal.remove(); document.removeEventListener('keydown', onKey); };\n modal.querySelector('.sv-close').addEventListener('click', close);\n modal.addEventListener('click', (e) => { if (e.target === modal) close(); });\n document.addEventListener('keydown', onKey);\n const rerun = modal.querySelector('.sv-rerun');\n rerun.addEventListener('mouseenter', () => { rerun.style.borderColor = 'rgba(240,137,42,0.45)'; rerun.style.color = '#f0892a'; });\n rerun.addEventListener('mouseleave', () => { rerun.style.borderColor = 'rgba(255,255,255,0.1)'; rerun.style.color = '#cfcfd4'; });\n rerun.addEventListener('click', () => { close(); runSecurityReport(webrtcManager); });\n document.body.appendChild(modal);\n };\n\n // In-chat header matching the SecureBit Chat design: logo + version,\n // a \"Secure\" pill (click = run the security verification report; the chevron\n // toggles the network/crypto detail panel), a connection indicator, Disconnect.\n const SecureBitChatHeader = ({ status, onDisconnect, webrtcManager, title, isOffline, peerPresence, onRenameTitle }) => {\n const MONO = \"'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace\";\n const [showNetwork, setShowNetwork] = React.useState(false);\n const [sec, setSec] = React.useState(null);\n const [editingName, setEditingName] = React.useState(false);\n const [nameDraft, setNameDraft] = React.useState('');\n\n React.useEffect(() => {\n let alive = true;\n const fetchSec = async () => {\n try {\n if (!webrtcManager) return;\n let data = null;\n if (typeof webrtcManager.getRealSecurityLevel === 'function') data = await webrtcManager.getRealSecurityLevel();\n else if (typeof webrtcManager.calculateAndReportSecurityLevel === 'function') data = await webrtcManager.calculateAndReportSecurityLevel();\n else if (window.EnhancedSecureCryptoUtils) data = await window.EnhancedSecureCryptoUtils.calculateSecurityLevel(webrtcManager);\n if (alive && data && data.isRealData !== false) setSec(data);\n } catch (e) { /* ignore */ }\n };\n fetchSec();\n const onCalc = (e) => { if (alive && e.detail && e.detail.securityData) setSec(e.detail.securityData); };\n document.addEventListener('real-security-calculated', onCalc);\n const iv = setInterval(fetchSec, 15000);\n return () => { alive = false; clearInterval(iv); document.removeEventListener('real-security-calculated', onCalc); };\n }, [webrtcManager]);\n\n // Offline (our device lost connectivity) takes precedence over the P2P state \u2014\n // the data channel can stay \"open\" after the network drops, so without this the\n // header would keep saying \"Connected\" while the user is actually offline.\n const onlineConnected = status === 'connected' || status === 'verified';\n const dropped = status === 'disconnected' || status === 'peer_disconnected';\n const connected = onlineConnected && !isOffline;\n const connDot = (isOffline || dropped) ? '#e5727a' : (onlineConnected ? '#3ecf8e' : '#e3c84e');\n const connLabel = isOffline\n ? 'Offline'\n : (onlineConnected ? 'Connected'\n : (status === 'peer_disconnected' ? 'Peer disconnected'\n : (status === 'disconnected' ? 'Disconnected' : 'Connecting\u2026')));\n const connGlow = (isOffline || dropped) ? '0 0 0 3px rgba(229,114,122,0.16)' : (onlineConnected ? '0 0 0 3px rgba(62,207,142,0.16)' : '0 0 0 3px rgba(227,200,78,0.16)');\n // The avatar dot + subtitle reflect the PEER's advertised availability while connected.\n const peerDot = (onlineConnected && !isOffline) ? (PRESENCE_DOT[peerPresence] || '#3ecf8e') : connDot;\n const peerPresenceWord = (onlineConnected && !isOffline && peerPresence) ? (PRESENCE_WORD[peerPresence] || null) : null;\n const startRename = () => { setNameDraft(title || ''); setEditingName(true); };\n const commitRename = () => { if (typeof onRenameTitle === 'function') onRenameTitle(nameDraft); setEditingName(false); };\n const renameKey = (e) => { if (e.key === 'Enter') { e.preventDefault(); commitRename(); } else if (e.key === 'Escape') { setEditingName(false); } };\n const passed = sec && Number.isFinite(sec.passedChecks) ? sec.passedChecks : null;\n const total = sec && Number.isFinite(sec.totalChecks) ? sec.totalChecks : null;\n const scoreLabel = (passed != null && total) ? (passed + '/' + total) : (sec ? (sec.score + '%') : '\u2014');\n const accent = sec\n ? (sec.color === 'green' ? '#3ecf8e' : sec.color === 'orange' ? '#f0892a' : sec.color === 'yellow' ? '#e3c84e' : '#e5727a')\n : '#3ecf8e';\n\n const secBtn = React.createElement('div', {\n key: 'sec', title: 'Run security verification',\n onClick: () => runSecurityReport(webrtcManager),\n className: 'sb-secpill',\n style: { display: 'flex', alignItems: 'center', gap: '9px', padding: '7px 13px', borderRadius: '9px', border: '1px solid ' + (showNetwork ? 'rgba(255,255,255,0.16)' : 'rgba(255,255,255,0.07)'), background: showNetwork ? 'rgba(255,255,255,0.05)' : 'rgba(255,255,255,0.02)', cursor: 'pointer', fontFamily: 'inherit', transition: 'all .15s' }\n }, [\n React.createElement('i', { key: 'i', className: 'fas fa-shield-halved', style: { color: accent, fontSize: '13px' } }),\n React.createElement('span', { key: 'l', className: 'sb-sec-label', style: { fontSize: '13px', fontWeight: 600, color: '#e8e8eb' } }, sec ? (sec.level || 'Secure') : 'Secure'),\n React.createElement('span', { key: 'd', className: 'sb-sec-div', style: { width: '1px', height: '13px', background: 'rgba(255,255,255,0.12)' } }),\n React.createElement('span', { key: 's', className: 'sb-sec-score', style: { fontFamily: MONO, fontSize: '11.5px', fontWeight: 500, color: '#8a8a92' } }, scoreLabel),\n React.createElement('button', {\n key: 'c', type: 'button', title: 'Network & crypto details',\n onClick: (e) => { e.stopPropagation(); setShowNetwork(v => !v); },\n style: { background: 'none', border: 'none', padding: 0, margin: 0, cursor: 'pointer', display: 'grid', placeItems: 'center' }\n }, React.createElement('i', { className: 'fas fa-chevron-down', style: { color: '#6b6b73', fontSize: '11px', transform: showNetwork ? 'rotate(180deg)' : 'rotate(0deg)', transition: 'transform .2s' } }))\n ]);\n\n const headerResponsiveCss = React.createElement('style', { key: 'hdr-css', dangerouslySetInnerHTML: { __html:\n // Mobile: leave room for the drawer hamburger and shed non-essential header\n // chrome so avatar + name + status + Disconnect fit a narrow screen.\n '@media (max-width:768px){' +\n '.sb-chat-header{padding-left:60px !important;gap:10px !important;}' +\n '.sb-chat-header .sb-sec-score,.sb-chat-header .sb-sec-label,.sb-chat-header .sb-sec-div{display:none !important;}' +\n '.sb-chat-header .sb-secpill{padding:8px !important;gap:6px !important;}' +\n '.sb-chat-header .sb-conn-text{display:none !important;}' +\n '.sb-chat-header .sb-conn{padding:9px !important;}' +\n '.sb-chat-header .sb-hdr-sub{display:none !important;}' +\n '}' +\n '@media (max-width:480px){.sb-chat-header{padding-right:12px !important;gap:8px !important;}}'\n } });\n const header = React.createElement('header', {\n key: 'hdr', className: 'sb-chat-header', style: { flex: 'none', display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '24px', padding: '0 20px', height: '64px', borderBottom: '1px solid rgba(255,255,255,0.06)', background: 'rgba(18,18,20,0.72)', backdropFilter: 'blur(14px)', WebkitBackdropFilter: 'blur(14px)' }\n }, [\n headerResponsiveCss,\n // The SecureBit brand/logo lives in the left rail; this header identifies the\n // ACTIVE conversation \u2014 avatar monogram + local label + connection status.\n React.createElement('div', { key: 'left', style: { display: 'flex', alignItems: 'center', gap: '12px', minWidth: 0 } }, [\n React.createElement('div', { key: 'avatar', style: { position: 'relative', flex: 'none', width: '36px', height: '36px', borderRadius: '10px', display: 'grid', placeItems: 'center', background: 'rgba(255,255,255,0.05)', border: '1px solid rgba(255,255,255,0.09)', fontSize: '13px', fontWeight: 700, letterSpacing: '-0.3px', color: '#e8e8eb' } }, [\n monoInitials(title || 'Chat'),\n React.createElement('span', { key: 'dot', style: { position: 'absolute', right: '-2px', bottom: '-2px', width: '11px', height: '11px', borderRadius: '50%', background: peerDot, border: '2px solid #121214' } })\n ]),\n editingName\n ? React.createElement('div', { key: 'edit', style: { display: 'flex', flexDirection: 'column', gap: '4px', minWidth: 0 } }, [\n React.createElement('div', { key: 'row', style: { display: 'flex', alignItems: 'center', gap: '6px' } }, [\n React.createElement('input', { key: 'in', autoFocus: true, value: nameDraft, maxLength: 32, placeholder: 'Name this chat', onChange: (e) => setNameDraft(e.target.value), onKeyDown: renameKey, onBlur: commitRename, style: { width: '210px', padding: '5px 10px', borderRadius: '8px', border: '1px solid rgba(240,137,42,0.55)', background: '#0f0f11', color: '#f4f4f6', fontFamily: 'inherit', fontSize: '14px', fontWeight: 700, outline: 'none' } }),\n React.createElement('button', { key: 'ok', onMouseDown: (e) => e.preventDefault(), onClick: commitRename, title: 'Save', style: { flex: 'none', width: '28px', height: '28px', borderRadius: '8px', display: 'grid', placeItems: 'center', border: 'none', background: '#f0892a', color: '#1a0f04', cursor: 'pointer' } }, React.createElement('i', { className: 'fas fa-check', style: { fontSize: '12px' } }))\n ]),\n React.createElement('div', { key: 'hint', style: { fontSize: '11px', color: '#56565e' } }, 'Local label \u00B7 stored only on this device')\n ])\n : React.createElement('div', { key: 'txt', style: { lineHeight: 1.2, minWidth: 0 } }, [\n React.createElement('div', { key: 'r1', style: { display: 'flex', alignItems: 'center', gap: '7px' } }, [\n React.createElement('span', { key: 'n', style: { fontSize: '15px', fontWeight: 800, letterSpacing: '-0.3px', color: '#f4f4f6', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' } }, title || 'Secure chat'),\n React.createElement('button', { key: 'edit', onClick: startRename, title: 'Rename chat (local only)', style: { flex: 'none', width: '24px', height: '24px', borderRadius: '7px', display: 'grid', placeItems: 'center', border: 'none', background: 'transparent', color: '#56565e', cursor: 'pointer' } }, React.createElement('i', { className: 'fas fa-pen', style: { fontSize: '11px' } }))\n ]),\n React.createElement('div', { key: 'r2', className: 'sb-hdr-sub', style: { fontSize: '11px', color: '#6b6b73', fontWeight: 500, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' } }, isOffline ? 'No network \u00B7 reconnecting' : (peerPresenceWord || (onlineConnected ? 'P2P \u00B7 end-to-end encrypted' : (status === 'peer_disconnected' ? 'Peer disconnected' : (status === 'disconnected' ? 'Disconnected' : 'Connecting\u2026')))))\n ])\n ]),\n secBtn,\n React.createElement('div', { key: 'right', className: 'sb-hdr-right', style: { display: 'flex', alignItems: 'center', gap: '9px' } }, [\n React.createElement('div', { key: 'conn', className: 'sb-conn', style: { display: 'flex', alignItems: 'center', gap: '8px', padding: '8px 13px', borderRadius: '9px', border: '1px solid rgba(255,255,255,0.07)', background: 'rgba(255,255,255,0.02)' } }, [\n React.createElement('span', { key: 'dot', style: { flex: 'none', width: '7px', height: '7px', borderRadius: '50%', background: connDot, boxShadow: connGlow } }),\n React.createElement('span', { key: 't', className: 'sb-conn-text', style: { fontSize: '13px', fontWeight: 600, color: '#cfcfd4' } }, connLabel)\n ]),\n React.createElement('button', { key: 'dc', onClick: onDisconnect, className: 'sb-disconnect', style: { display: 'flex', alignItems: 'center', gap: '7px', padding: '8px 14px', borderRadius: '9px', border: '1px solid rgba(255,255,255,0.08)', background: 'transparent', color: '#9a9aa2', fontFamily: 'inherit', fontSize: '13px', fontWeight: 600, cursor: 'pointer', transition: 'all .15s' } }, [\n React.createElement('i', { key: 'i', className: 'fas fa-power-off', style: { fontSize: '12px' } }),\n React.createElement('span', { key: 't', className: 'sb-hide-sm' }, 'Disconnect')\n ])\n ])\n ]);\n\n const netPanel = showNetwork && React.createElement('div', {\n key: 'net', style: { flex: 'none', padding: '13px 20px', borderBottom: '1px solid rgba(255,255,255,0.06)', background: 'rgba(18,18,20,0.72)', backdropFilter: 'blur(14px)', WebkitBackdropFilter: 'blur(14px)' }\n }, React.createElement('div', { style: { maxWidth: '1000px', margin: '0 auto', display: 'grid', gridTemplateColumns: 'repeat(auto-fit,minmax(140px,1fr))', gap: '14px', fontFamily: MONO } },\n [\n ['Transport', 'WebRTC \u00B7 DTLS'],\n ['Cipher', 'AES-256-GCM'],\n ['Key exchange', 'ECDH P-384'],\n ['Security', scoreLabel + (sec ? (' \u00B7 ' + sec.score + '%') : '')]\n ].map(([k, v], i) => React.createElement('div', { key: 'nf' + i }, [\n React.createElement('div', { key: 'k', style: { fontSize: '10px', color: '#6b6b73', textTransform: 'uppercase', letterSpacing: '0.6px', marginBottom: '4px' } }, k),\n React.createElement('div', { key: 'v', style: { fontSize: '12.5px', color: i === 3 ? accent : '#cfcfd4', fontWeight: 500 } }, v)\n ]))\n ));\n\n return React.createElement('div', { style: { flex: 'none' } }, [header, netPanel]);\n };\n\n\n const EnhancedChatInterface = ({\n title,\n isOffline,\n peerPresence,\n onRenameTitle,\n messages,\n messageInput,\n setMessageInput,\n onSendMessage,\n onDisconnect,\n keyFingerprint,\n isVerified,\n chatMessagesRef,\n scrollToBottom,\n webrtcManager,\n status,\n pendingIncomingFiles = [],\n onIncomingDecision,\n // Secure chat extras\n codeMode,\n setCodeMode,\n viewOnceMode,\n setViewOnceMode,\n viewOnceTtl,\n setViewOnceTtl,\n disappearTtl,\n setDisappearTtl,\n nowTick,\n onUnsendMessage,\n onMessageExpire\n }) => {\n const [showScrollButton, setShowScrollButton] = React.useState(false);\n const [showFileTransfer, setShowFileTransfer] = React.useState(false);\n // True only when the user opened the panel to SEND (shows the drop-zone).\n // Incoming-file auto-open leaves this false, so the receiver sees the\n // incoming request + receiving progress, not the \"send attachments\" UI.\n const [fileSendMode, setFileSendMode] = React.useState(false);\n const [showTimer, setShowTimer] = React.useState(false);\n const [showOnce, setShowOnce] = React.useState(false);\n const [showHandshake, setShowHandshake] = React.useState(false);\n const taRef = React.useRef(null);\n\n // Auto-grow the message textarea (and reset its height after sending).\n React.useEffect(() => {\n const el = taRef.current;\n if (!el || codeMode) return;\n el.style.height = 'auto';\n el.style.height = Math.min(el.scrollHeight, 240) + 'px';\n }, [messageInput, codeMode]);\n\n // Auto-open the file transfer panel when an incoming request arrives\n React.useEffect(() => {\n if (pendingIncomingFiles.length > 0) {\n setShowFileTransfer(true);\n }\n }, [pendingIncomingFiles.length]);\n\n React.useEffect(() => {\n if (chatMessagesRef.current && messages.length > 0) {\n const { scrollTop, scrollHeight, clientHeight } = chatMessagesRef.current;\n const isNearBottom = scrollHeight - scrollTop - clientHeight < 100;\n if (isNearBottom) {\n const smoothScroll = () => {\n if (chatMessagesRef.current) {\n chatMessagesRef.current.scrollTo({\n top: chatMessagesRef.current.scrollHeight,\n behavior: 'smooth'\n });\n }\n };\n smoothScroll();\n setTimeout(smoothScroll, 50);\n setTimeout(smoothScroll, 150);\n }\n }\n }, [messages, chatMessagesRef]);\n\n const handleScroll = () => {\n if (chatMessagesRef.current) {\n const { scrollTop, scrollHeight, clientHeight } = chatMessagesRef.current;\n const isNearBottom = scrollHeight - scrollTop - clientHeight < 100;\n setShowScrollButton(!isNearBottom);\n }\n };\n\n const handleScrollToBottom = () => {\n if (typeof scrollToBottom === 'function') {\n scrollToBottom();\n setShowScrollButton(false);\n } else if (chatMessagesRef.current) {\n chatMessagesRef.current.scrollTo({ top: chatMessagesRef.current.scrollHeight, behavior: 'smooth' });\n setShowScrollButton(false);\n }\n };\n\n const handleKeyPress = (e) => {\n if (e.key !== 'Enter') return;\n if (codeMode) {\n if (e.metaKey || e.ctrlKey) { e.preventDefault(); onSendMessage(); }\n } else if (!e.shiftKey) {\n e.preventDefault();\n onSendMessage();\n }\n };\n\n const isFileTransferReady = () => {\n if (!webrtcManager) return false;\n const connected = webrtcManager.isConnected ? webrtcManager.isConnected() : false;\n const verified = webrtcManager.isVerified || false;\n const hasDataChannel = webrtcManager.dataChannel && webrtcManager.dataChannel.readyState === 'open';\n return connected && verified && hasDataChannel;\n };\n\n // ---- design tokens / helpers ----\n const MONO = \"'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace\";\n const fmtShort = (s) => {\n if (!s) return '';\n if (s >= 86400 && s % 86400 === 0) return (s / 86400) + 'd';\n if (s >= 3600 && s % 3600 === 0) return (s / 3600) + 'h';\n if (s >= 60) return Math.round(s / 60) + 'm';\n return s + 's';\n };\n const chipStyle = (active) => ({\n display: 'flex', alignItems: 'center', gap: '6px', padding: '7px 11px', borderRadius: '8px',\n border: '1px solid ' + (active ? 'rgba(255,255,255,0.18)' : 'rgba(255,255,255,0.07)'),\n background: active ? 'rgba(255,255,255,0.06)' : 'transparent',\n color: active ? '#fff' : '#9a9aa2',\n fontFamily: 'inherit', fontSize: '12.5px', fontWeight: 600, cursor: 'pointer', transition: 'all .15s'\n });\n const optStyle = (sel) => ({\n padding: '6px 12px', borderRadius: '8px',\n border: '1px solid ' + (sel ? 'rgba(255,255,255,0.22)' : 'rgba(255,255,255,0.07)'),\n background: sel ? 'rgba(255,255,255,0.07)' : 'transparent',\n color: sel ? '#fff' : '#8a8a92',\n fontFamily: MONO, fontSize: '12px', fontWeight: 500, cursor: 'pointer', transition: 'all .14s'\n });\n\n const timerDefs = [\n { label: 'Off', v: 0 }, { label: '5s', v: 5 }, { label: '30s', v: 30 },\n { label: '1m', v: 60 }, { label: '1h', v: 3600 }, { label: '24h', v: 86400 }\n ];\n const onceDefs = [\n { label: 'Off', v: 0 }, { label: '5s', v: 5 }, { label: '10s', v: 10 },\n { label: '30s', v: 30 }, { label: '1m', v: 60 }\n ];\n const onceSelected = viewOnceMode ? viewOnceTtl : 0;\n const pickTimer = (v) => { setDisappearTtl(v); setShowTimer(false); };\n const pickOnce = (v) => {\n if (v === 0) setViewOnceMode(false);\n else { setViewOnceTtl(v); setViewOnceMode(true); }\n setShowOnce(false);\n };\n\n const hasText = !!(messageInput && messageInput.trim());\n\n // System notices are surfaced inside the handshake/connection log card\n // (matching the design) rather than as bubbles in the message flow.\n const fmtT = (ts) => { try { return new Date(ts).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit', second: '2-digit' }); } catch (e) { return ''; } };\n // Connection log = string-only system notices (a React-element message\n // would render as \"[object Object]\" in the log, so it's excluded).\n const systemMessages = messages.filter((m) => m.type === 'system' && typeof m.message === 'string' && m.message.trim());\n const chatMessages = messages.filter((m) => m.type !== 'system');\n\n // ---- handshake / connection log card ----\n const handshakeCard = (isVerified || systemMessages.length > 0) && React.createElement('div', {\n key: 'handshake',\n style: { border: '1px solid rgba(255,255,255,0.07)', borderRadius: '12px', background: '#161618', overflow: 'hidden' }\n }, [\n React.createElement('button', {\n key: 'hs-btn', onClick: () => setShowHandshake(v => !v),\n style: { width: '100%', display: 'flex', alignItems: 'center', gap: '13px', padding: '14px 16px', background: 'transparent', border: 'none', color: 'inherit', cursor: 'pointer', textAlign: 'left', fontFamily: 'inherit' }\n }, [\n React.createElement('div', { key: 'ic', style: { flex: 'none', width: '30px', height: '30px', display: 'grid', placeItems: 'center' } },\n React.createElement('i', { className: 'fas fa-check', style: { color: '#3ecf8e', fontSize: '16px' } })\n ),\n React.createElement('div', { key: 'tx', style: { flex: 1, minWidth: 0 } }, [\n React.createElement('div', { key: 't1', style: { fontSize: '13.5px', fontWeight: 600, color: '#e8e8eb', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' } }, 'Secure channel established'),\n React.createElement('div', { key: 't2', style: { fontSize: '12px', color: '#7b7b83', marginTop: '1px', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' } }, 'Verified \u00B7 Perfect Forward Secrecy' + (systemMessages.length ? (' \u00B7 ' + systemMessages.length + (systemMessages.length === 1 ? ' event' : ' events')) : ''))\n ]),\n React.createElement('i', { key: 'chev', className: 'fas fa-chevron-down', style: { flex: 'none', color: '#6b6b73', fontSize: '13px', transform: showHandshake ? 'rotate(180deg)' : 'rotate(0deg)', transition: 'transform .2s' } })\n ]),\n showHandshake && React.createElement('div', { key: 'hs-body', style: { padding: '2px 16px 14px 59px' } }, [\n systemMessages.length > 0 && React.createElement('div', { key: 'steps', className: 'sb-scroll', style: { marginBottom: '12px', maxHeight: '220px', overflowY: 'auto', paddingRight: '6px' } },\n systemMessages.map((m, i) => React.createElement('div', { key: 's' + i, style: { display: 'flex', gap: '11px', padding: '6px 0', borderTop: i === 0 ? 'none' : '1px solid rgba(255,255,255,0.04)' } }, [\n React.createElement('span', { key: 'd', style: { flex: 'none', width: '5px', height: '5px', borderRadius: '50%', background: '#3ecf8e', marginTop: '7px', opacity: 0.6 } }),\n React.createElement('span', { key: 't', style: { flex: 1, fontSize: '12.5px', color: '#9a9aa2', lineHeight: 1.5, wordBreak: 'break-word' } }, String(m.message || '').trim()),\n React.createElement('span', { key: 'tm', style: { flex: 'none', fontFamily: MONO, fontSize: '10.5px', color: '#56565e' } }, fmtT(m.timestamp))\n ]))\n ),\n keyFingerprint && React.createElement('div', { key: 'sn', style: { display: 'flex', alignItems: 'center', gap: '9px', padding: '10px 12px', borderRadius: '9px', background: 'rgba(255,255,255,0.025)', border: '1px solid rgba(255,255,255,0.06)' } }, [\n React.createElement('i', { key: 'i', className: 'fas fa-lock', style: { color: '#8a8a92', fontSize: '12px' } }),\n React.createElement('span', { key: 'l', style: { fontSize: '11.5px', color: '#8a8a92' } }, 'Safety number'),\n React.createElement('span', { key: 'v', style: { fontFamily: MONO, fontSize: '12px', color: '#cfcfd4', letterSpacing: '0.8px', fontWeight: 500, wordBreak: 'break-all' } }, keyFingerprint)\n ])\n ])\n ]);\n\n // ---- empty state ----\n const emptyState = React.createElement('div', { key: 'empty', style: { display: 'flex', alignItems: 'center', justifyContent: 'center', flex: 1, minHeight: '40vh' } },\n React.createElement('div', { style: { textAlign: 'center', maxWidth: '420px' } }, [\n 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' } }),\n React.createElement('h3', { key: 't', style: { fontSize: '17px', fontWeight: 700, color: '#e8e8eb', margin: '0 0 6px' } }, 'Secure channel is ready'),\n React.createElement('p', { key: 'p', style: { fontSize: '13px', color: '#7b7b83', margin: 0 } }, 'Every message is end-to-end encrypted on your device before it leaves.')\n ])\n );\n\n // ---- messages list ----\n const messagesArea = React.createElement('main', {\n key: 'main',\n ref: chatMessagesRef,\n onScroll: handleScroll,\n className: 'sb-scroll',\n style: { flex: 1, overflowY: 'auto', padding: '20px 20px 22px' }\n }, React.createElement('div', { style: { width: '100%', maxWidth: '1000px', margin: '0 auto', display: 'flex', flexDirection: 'column', gap: '16px', minHeight: '100%' } },\n chatMessages.length === 0\n ? [handshakeCard, emptyState]\n : [handshakeCard].concat(chatMessages.map((msg) => React.createElement(EnhancedChatMessage, {\n key: msg.id,\n message: msg.message,\n type: msg.type,\n timestamp: msg.timestamp,\n mid: msg.mid,\n status: msg.status,\n viewOnce: msg.viewOnce,\n viewOnceTtl: msg.viewOnceTtl,\n expiresAt: msg.expiresAt,\n expired: msg.expired,\n nowTick: nowTick,\n canUnsend: typeof onUnsendMessage === 'function',\n onUnsend: onUnsendMessage,\n onExpire: () => onMessageExpire && onMessageExpire(msg.id)\n })))\n ));\n\n // ---- option rows ----\n const timerRow = showTimer && 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(255,255,255,0.07)', background: '#161618' } },\n [React.createElement('span', { key: 'lbl', style: { fontSize: '12px', color: '#8a8a92', fontWeight: 600, marginRight: '4px' } }, 'Disappear after')].concat(\n timerDefs.map((d) => React.createElement('button', { key: 'td' + d.v, onClick: () => pickTimer(d.v), style: optStyle(disappearTtl === d.v) }, d.label))\n )\n );\n const onceRow = showOnce && 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(255,255,255,0.07)', background: '#161618' } },\n [React.createElement('span', { key: 'lbl', style: { fontSize: '12px', color: '#8a8a92', fontWeight: 600, marginRight: '4px' } }, 'Visible for')].concat(\n onceDefs.map((d) => React.createElement('button', { key: 'od' + d.v, onClick: () => pickOnce(d.v), style: optStyle(onceSelected === d.v) }, d.label))\n )\n );\n\n // ---- file transfer panel ----\n const filePanel = showFileTransfer && React.createElement('div', { key: 'file-panel', style: { marginBottom: '10px' } },\n React.createElement(window.FileTransferComponent || (() => React.createElement('div', { style: { padding: '16px', textAlign: 'center', color: '#e5727a' } }, 'FileTransferComponent not loaded')), {\n webrtcManager: webrtcManager,\n isConnected: isFileTransferReady(),\n pendingIncomingFiles: pendingIncomingFiles,\n onIncomingDecision: onIncomingDecision,\n showDropzone: fileSendMode\n })\n );\n\n // ---- chips row ----\n const chipsRow = React.createElement('div', { key: 'chips', style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', flexWrap: 'wrap', gap: '8px', marginBottom: '10px' } }, [\n React.createElement('button', { key: 'files', onClick: () => {\n if (showFileTransfer && fileSendMode) { setShowFileTransfer(false); setFileSendMode(false); }\n else { setShowFileTransfer(true); setFileSendMode(true); }\n }, className: 'sb-chip', style: chipStyle(showFileTransfer && fileSendMode) }, [\n React.createElement('i', { key: 'i', className: 'fas fa-paperclip', style: { fontSize: '13px' } }),\n (showFileTransfer && fileSendMode) ? 'Hide files' : 'Send files'\n ]),\n React.createElement('div', { key: 'right', style: { display: 'flex', alignItems: 'center', gap: '6px', flexWrap: 'wrap' } }, [\n React.createElement('button', { key: 'code', onClick: () => setCodeMode(v => !v), className: 'sb-chip', style: chipStyle(codeMode) }, [\n React.createElement('i', { key: 'i', className: 'fas fa-code', style: { fontSize: '13px' } }), 'Code'\n ]),\n React.createElement('button', { key: 'once', onClick: () => { setShowOnce(v => !v); setShowTimer(false); }, className: 'sb-chip', style: chipStyle(showOnce || viewOnceMode) }, [\n React.createElement('i', { key: 'i', className: 'fas fa-eye-slash', style: { fontSize: '13px' } }),\n viewOnceMode ? ('View once \u00B7 ' + fmtShort(viewOnceTtl)) : 'View once'\n ]),\n React.createElement('button', { key: 'timer', onClick: () => { setShowTimer(v => !v); setShowOnce(false); }, className: 'sb-chip', style: chipStyle(showTimer || disappearTtl > 0) }, [\n React.createElement('i', { key: 'i', className: 'fas fa-stopwatch', style: { fontSize: '13px' } }),\n disappearTtl > 0 ? ('Timer \u00B7 ' + fmtShort(disappearTtl)) : 'Timer'\n ])\n ])\n ]);\n\n // ---- code-mode header strip ----\n const codeStrip = codeMode && React.createElement('div', { key: 'code-strip', style: { display: 'flex', alignItems: 'center', gap: '8px', padding: '8px 14px', border: '1px solid rgba(255,255,255,0.08)', borderBottom: 'none', borderRadius: '14px 14px 0 0', background: '#161618' } }, [\n React.createElement('i', { key: 'i', className: 'fas fa-code', style: { color: '#8a8a92', fontSize: '12px' } }),\n React.createElement('span', { key: 's', style: { fontSize: '11.5px', fontWeight: 600, color: '#8a8a92' } }, 'Code snippet \u00B7 formatting preserved \u00B7 \u2318\u21B5 to send'),\n React.createElement('button', { key: 'c', onClick: () => setCodeMode(false), className: 'sb-link', style: { marginLeft: 'auto', background: 'none', border: 'none', color: '#6b6b73', cursor: 'pointer', fontSize: '11.5px', fontFamily: 'inherit', fontWeight: 600 } }, 'Close')\n ]);\n\n // ---- input row ----\n const inputRow = React.createElement('div', {\n key: 'input',\n style: { display: 'flex', alignItems: 'flex-end', gap: '11px', padding: '11px 11px 11px 16px', border: '1px solid ' + (hasText ? 'rgba(255,255,255,0.18)' : 'rgba(255,255,255,0.08)'), background: '#161618', borderRadius: codeMode ? '0 0 14px 14px' : '14px', transition: 'border .15s' }\n }, [\n React.createElement('div', { key: 'ta-wrap', style: { flex: 1, minWidth: 0 } }, [\n React.createElement('textarea', {\n key: 'ta',\n value: messageInput,\n ref: taRef,\n onChange: (e) => setMessageInput(e.target.value),\n onKeyDown: handleKeyPress,\n rows: 1,\n maxLength: 2000,\n placeholder: codeMode ? 'Paste or write code\u2026' : 'Type an encrypted message\u2026',\n className: 'sb-textarea',\n style: { width: '100%', minHeight: codeMode ? '120px' : '22px', maxHeight: '240px', resize: 'none', border: 'none', outline: 'none', background: 'transparent', color: '#e8e8eb', fontFamily: codeMode ? MONO : 'inherit', fontSize: codeMode ? '13px' : '14.5px', lineHeight: 1.55, padding: '6px 0' }\n }),\n React.createElement('div', { key: 'foot', style: { display: 'flex', alignItems: 'center', gap: '12px', marginTop: '3px' } }, [\n React.createElement('span', { key: 'enc', style: { display: 'inline-flex', alignItems: 'center', gap: '5px', fontSize: '11px', color: '#56565e' } }, [\n React.createElement('i', { key: 'i', className: 'fas fa-lock', style: { color: '#3ecf8e', fontSize: '10px' } }),\n 'Encrypted on your device'\n ]),\n React.createElement('span', { key: 'cnt', style: { fontFamily: MONO, fontSize: '10.5px', color: '#56565e', marginLeft: 'auto' } }, (messageInput ? messageInput.length : 0) + '/2000')\n ])\n ]),\n React.createElement('button', {\n key: 'send', onClick: onSendMessage, disabled: !hasText, title: 'Send', className: 'sb-send',\n style: { flex: 'none', width: '44px', height: '44px', borderRadius: '11px', border: 'none', display: 'grid', placeItems: 'center', cursor: hasText ? 'pointer' : 'default', background: hasText ? '#f0892a' : 'rgba(255,255,255,0.05)', color: hasText ? '#1a0f04' : '#56565e', transition: 'all .15s' }\n }, React.createElement('i', { className: 'fas fa-paper-plane', style: { fontSize: '15px' } }))\n ]);\n\n const composer = React.createElement('footer', { key: 'composer', style: { flex: 'none', padding: '12px 20px 18px', background: '#0f0f11', borderTop: '1px solid rgba(255,255,255,0.05)' } },\n React.createElement('div', { style: { maxWidth: '1000px', margin: '0 auto' } }, [\n timerRow, onceRow, filePanel, chipsRow, codeStrip, inputRow\n ])\n );\n\n const scrollBtn = showScrollButton && React.createElement('button', {\n key: 'scrollbtn', onClick: handleScrollToBottom,\n style: { position: 'fixed', right: '24px', bottom: '150px', width: '44px', height: '44px', borderRadius: '50%', border: '1px solid rgba(255,255,255,0.1)', background: '#26262b', color: '#cfcfd4', display: 'grid', placeItems: 'center', cursor: 'pointer', zIndex: 50, boxShadow: '0 6px 20px rgba(0,0,0,0.4)' }\n }, React.createElement('i', { className: 'fas fa-arrow-down', style: { fontSize: '15px' } }));\n\n const chatHeader = React.createElement(SecureBitChatHeader, {\n key: 'chat-header', status: status, onDisconnect: onDisconnect, webrtcManager: webrtcManager, title: title, isOffline: isOffline, peerPresence: peerPresence, onRenameTitle: onRenameTitle\n });\n\n return React.createElement('div', {\n className: 'chat-container',\n style: { display: 'flex', flexDirection: 'column', height: '100vh', background: '#0f0f11', color: '#e8e8eb' }\n }, [chatHeader, messagesArea, scrollBtn, composer]);\n };\n \n \n // Build a chat message in the shape addMessageWithAutoScroll produces, so the\n // per-session callbacks can dispatch ADD_MESSAGE without an active-view setter.\n const buildSessionMessage = (message, type, opts = {}) => ({\n message,\n type,\n id: Date.now() + Math.random(),\n timestamp: (typeof opts.timestamp === 'number') ? opts.timestamp : Date.now(),\n mid: opts.mid,\n status: opts.status,\n viewOnce: opts.viewOnce === true,\n viewOnceTtl: (typeof opts.viewOnceTtl === 'number') ? opts.viewOnceTtl : 15,\n expiresAt: (typeof opts.expiresAt === 'number') ? opts.expiresAt : undefined\n });\n\n // Left rail listing every open session (design import: \"Multi Session\n // Concepts\"). Two desktop states \u2014 expanded (292px) and a collapsed icon dock\n // (72px) \u2014 plus a mobile slide-out drawer. Pure presentational: all data comes\n // from decorated session objects, all actions are callbacks.\n const SB_SVG = {\n chevL: '',\n chevR: '',\n plus: '',\n users: '',\n burger: ''\n };\n\n const SessionsSidebar = ({ chats, collapsed, drawerOpen, onToggleCollapse, onSelect, onNewChat, onRename, onCloseDrawer, myStatus, onSetStatus }) => {\n const h = React.createElement;\n const [editingId, setEditingId] = React.useState(null);\n const [draft, setDraft] = React.useState('');\n const [presenceOpen, setPresenceOpen] = React.useState(false);\n const startEdit = (c) => (e) => { e.stopPropagation(); setEditingId(c.id); setDraft(c.name); };\n const commitEdit = () => { if (editingId) { onRename(editingId, draft); setEditingId(null); } };\n const editKey = (e) => {\n if (e.key === 'Enter') { e.preventDefault(); commitEdit(); }\n else if (e.key === 'Escape') { setEditingId(null); }\n };\n const renameInput = (extra = {}) => h('input', {\n autoFocus: true,\n value: draft,\n onChange: (e) => setDraft(e.target.value),\n onKeyDown: editKey,\n onBlur: commitEdit,\n onClick: (e) => e.stopPropagation(),\n style: Object.assign({ width: '100%', background: 'rgba(255,255,255,0.06)', border: '1px solid rgba(240,137,42,0.5)', borderRadius: '6px', color: '#f4f4f6', fontFamily: 'inherit', fontSize: '14px', fontWeight: 700, padding: '2px 6px', outline: 'none' }, extra)\n });\n const icon = (svg, style) => h('span', { style: Object.assign({ display: 'grid', placeItems: 'center' }, style || {}), dangerouslySetInnerHTML: { __html: svg } });\n const avatar = (c, size, ring) => h('div', {\n style: { position: 'relative', flex: 'none', width: size + 'px', height: size + 'px', borderRadius: (size >= 44 ? 12 : 11) + 'px', display: 'grid', placeItems: 'center', background: c.active ? 'rgba(255,255,255,0.06)' : 'rgba(255,255,255,0.035)', border: '1px solid rgba(255,255,255,' + (c.active ? '0.14' : '0.07') + ')', fontSize: '13px', fontWeight: 700, letterSpacing: '-0.3px', color: c.active ? '#f4f4f6' : '#9a9aa2' }\n }, [c.mono, h('span', { key: 'dot', style: { position: 'absolute', right: '-2px', bottom: '-2px', width: '11px', height: '11px', borderRadius: '50%', background: c.dot, border: '2px solid ' + ring } })]);\n\n // ---- Expanded list row ----\n const expandedRow = (c) => h('div', {\n key: c.id,\n onClick: () => onSelect(c.id),\n style: { position: 'relative', display: 'flex', alignItems: 'center', gap: '12px', padding: '11px 12px', marginBottom: '4px', borderRadius: '11px', background: c.active ? '#161618' : 'transparent', border: '1px solid ' + (c.active ? 'rgba(255,255,255,0.08)' : 'transparent'), cursor: 'pointer' }\n }, [\n c.active && h('span', { key: 'bar', style: { position: 'absolute', left: 0, top: '12px', bottom: '12px', width: '3px', borderRadius: '0 3px 3px 0', background: '#f0892a' } }),\n avatar(c, 38, c.active ? '#161618' : '#0c0c0e'),\n h('div', { key: 'body', style: { flex: 1, minWidth: 0 } }, [\n h('div', { key: 'top', style: { display: 'flex', alignItems: 'center', gap: '7px' } }, [\n editingId === c.id\n ? renameInput()\n : h('span', {\n key: 'name',\n onDoubleClick: startEdit(c),\n title: 'Double-click to rename',\n style: { flex: 1, minWidth: 0, fontSize: '14px', fontWeight: c.active ? 700 : 600, letterSpacing: '-0.2px', color: c.active ? '#f4f4f6' : '#cfcfd4', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }\n }, c.name),\n c.unread && editingId !== c.id && h('span', { key: 'u', style: { flex: 'none', minWidth: '18px', height: '18px', padding: '0 5px', borderRadius: '9px', display: 'grid', placeItems: 'center', background: '#f0892a', color: '#1a0f04', fontFamily: \"'JetBrains Mono',monospace\", fontSize: '10px', fontWeight: 700 } }, c.unread)\n ]),\n h('div', { key: 'prev', style: { fontSize: '12px', color: c.active ? '#8a8a92' : '#6b6b73', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' } }, c.preview)\n ])\n ]);\n\n // ---- Collapsed dock item ----\n const dockItem = (c) => h('div', { key: c.id, style: { position: 'relative' } }, [\n c.active && h('span', { key: 'bar', style: { position: 'absolute', left: '-13px', top: '9px', bottom: '9px', width: '3px', borderRadius: '0 3px 3px 0', background: '#f0892a' } }),\n h('div', {\n key: 'tile',\n onClick: () => onSelect(c.id),\n title: c.name,\n style: { position: 'relative', width: '44px', height: '44px', borderRadius: '12px', display: 'grid', placeItems: 'center', cursor: 'pointer', background: c.active ? 'rgba(255,255,255,0.06)' : 'rgba(255,255,255,0.03)', border: '1px solid rgba(255,255,255,' + (c.active ? '0.14' : '0.07') + ')', fontSize: '13px', fontWeight: 700, letterSpacing: '-0.3px', color: c.active ? '#f4f4f6' : '#9a9aa2' }\n }, [\n c.mono,\n h('span', { key: 'dot', style: { position: 'absolute', right: '-2px', bottom: '-2px', width: '11px', height: '11px', borderRadius: '50%', background: c.dot, border: '2.5px solid #0c0c0e' } }),\n c.unread && h('span', { key: 'u', style: { position: 'absolute', left: '-5px', top: '-5px', minWidth: '17px', height: '17px', padding: '0 4px', borderRadius: '9px', display: 'grid', placeItems: 'center', background: '#f0892a', color: '#1a0f04', fontFamily: \"'JetBrains Mono',monospace\", fontSize: '9.5px', fontWeight: 700, border: '2px solid #0c0c0e' } }, c.unread)\n ])\n ]);\n\n // Same logo treatment as the landing header (Header.jsx): the mark on a\n // transparent background \u2014 no black tile.\n const brandMark = (size) => h('div', { style: { width: size + 'px', height: size + 'px', flex: 'none', display: 'grid', placeItems: 'center' } },\n h('img', { src: '/logo/securebit-mark.svg', alt: 'SecureBit', style: { width: '100%', height: '100%', objectFit: 'contain', display: 'block' } }));\n const collapseBtn = (svg, title) => h('button', { onClick: onToggleCollapse, title, style: { width: '30px', height: '30px', borderRadius: '8px', display: 'grid', placeItems: 'center', border: '1px solid rgba(255,255,255,0.07)', background: 'transparent', color: '#8a8a92', cursor: 'pointer' }, dangerouslySetInnerHTML: { __html: svg } });\n\n // ---- Expanded rail content ----\n // ---- Presence (\"You\" status) panel ----\n const myMeta = MY_STATUS_OPTIONS.find((o) => o.key === myStatus) || MY_STATUS_OPTIONS[0];\n const PRES_SVG = {\n user: '',\n check: '',\n chevUp: '',\n lock: ''\n };\n const presenceMenu = (pos) => (presenceOpen ? h('div', {\n key: 'pmenu',\n style: Object.assign({ position: 'absolute', zIndex: 30, borderRadius: '14px', background: '#161618', border: '1px solid rgba(255,255,255,0.1)', boxShadow: '0 16px 40px rgba(0,0,0,0.55)', padding: '6px' }, pos)\n }, [\n h('div', { key: 'h', style: { padding: '9px 10px 7px', fontFamily: \"'JetBrains Mono',monospace\", fontSize: '10px', fontWeight: 600, color: '#56565e', textTransform: 'uppercase', letterSpacing: '1.2px' } }, 'Set your status'),\n ...MY_STATUS_OPTIONS.map((o) => h('button', {\n key: o.key,\n onClick: () => { onSetStatus(o.key); setPresenceOpen(false); },\n style: { width: '100%', display: 'flex', alignItems: 'center', gap: '11px', padding: '9px 10px', borderRadius: '9px', border: 'none', background: 'transparent', cursor: 'pointer', textAlign: 'left' }\n }, [\n h('span', { key: 'd', style: { flex: 'none', width: '10px', height: '10px', borderRadius: '50%', background: o.dot } }),\n h('span', { key: 't', style: { flex: 1, minWidth: 0 } }, [\n h('span', { key: 'w', style: { display: 'block', fontSize: '13.5px', fontWeight: 600, color: '#e8e8eb' } }, o.word),\n h('span', { key: 'de', style: { display: 'block', fontSize: '11.5px', color: '#6b6b73' } }, o.desc)\n ]),\n o.key === myStatus && h('span', { key: 'c', style: { flex: 'none', display: 'grid', placeItems: 'center' }, dangerouslySetInnerHTML: { __html: PRES_SVG.check } })\n ])),\n h('div', { key: 'note', style: { display: 'flex', alignItems: 'flex-start', gap: '8px', margin: '6px 6px 4px', padding: '9px 10px', borderRadius: '9px', background: 'rgba(62,207,142,0.06)', border: '1px solid rgba(62,207,142,0.16)' } }, [\n h('span', { key: 'i', style: { flex: 'none', marginTop: '1px', display: 'grid' }, dangerouslySetInnerHTML: { __html: PRES_SVG.lock } }),\n h('span', { key: 't', style: { fontSize: '11px', lineHeight: 1.45, color: '#8a8a92' } }, 'Sent end-to-end to connected peers only \u2014 never stored on a server.')\n ])\n ]) : null);\n const presencePanelExpanded = h('div', { key: 'you', style: { flex: 'none', position: 'relative', marginTop: '10px', borderTop: '1px solid rgba(255,255,255,0.06)', padding: '10px 12px 12px' } }, [\n presenceMenu({ left: '12px', right: '12px', bottom: '64px' }),\n h('button', { key: 'btn', onClick: () => setPresenceOpen((v) => !v), style: { width: '100%', display: 'flex', alignItems: 'center', gap: '11px', padding: '7px 8px', borderRadius: '11px', border: '1px solid rgba(255,255,255,0.06)', background: 'rgba(255,255,255,0.02)', cursor: 'pointer' } }, [\n h('div', { key: 'av', style: { position: 'relative', flex: 'none', width: '36px', height: '36px', borderRadius: '10px', display: 'grid', placeItems: 'center', background: 'rgba(240,137,42,0.12)', border: '1px solid rgba(240,137,42,0.24)', color: '#f0892a' } }, [\n h('span', { key: 'i', style: { display: 'grid' }, dangerouslySetInnerHTML: { __html: PRES_SVG.user } }),\n h('span', { key: 'dot', style: { position: 'absolute', right: '-2px', bottom: '-2px', width: '11px', height: '11px', borderRadius: '50%', background: myMeta.dot, border: '2px solid #0c0c0e' } })\n ]),\n h('div', { key: 'tx', style: { flex: 1, minWidth: 0, textAlign: 'left' } }, [\n h('div', { key: 'y', style: { fontSize: '13.5px', fontWeight: 700, color: '#f4f4f6' } }, 'You'),\n h('div', { key: 'w', style: { fontSize: '12px', color: '#8a8a92' } }, myMeta.word)\n ]),\n h('span', { key: 'ch', style: { display: 'grid', placeItems: 'center' }, dangerouslySetInnerHTML: { __html: PRES_SVG.chevUp } })\n ])\n ]);\n const presencePanelCollapsed = h('div', { key: 'you', style: { flex: 'none', position: 'relative', display: 'flex', flexDirection: 'column', alignItems: 'center', padding: '0 0 13px' } }, [\n presenceMenu({ left: '60px', bottom: '8px', width: '248px' }),\n h('button', { key: 'btn', onClick: () => setPresenceOpen((v) => !v), title: 'Your status \u2014 ' + myMeta.word, style: { position: 'relative', width: '44px', height: '44px', borderRadius: '12px', display: 'grid', placeItems: 'center', cursor: 'pointer', background: 'rgba(240,137,42,0.12)', border: '1px solid rgba(240,137,42,0.24)', color: '#f0892a' } }, [\n h('span', { key: 'i', style: { display: 'grid' }, dangerouslySetInnerHTML: { __html: PRES_SVG.user } }),\n h('span', { key: 'dot', style: { position: 'absolute', right: '-2px', bottom: '-2px', width: '12px', height: '12px', borderRadius: '50%', background: myMeta.dot, border: '2.5px solid #0c0c0e' } })\n ])\n ]);\n\n const expandedInner = [\n h('div', { key: 'head', style: { flex: 'none', display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 12px 0 16px', height: '64px', borderBottom: '1px solid rgba(255,255,255,0.06)' } }, [\n h('div', { key: 'brand', style: { display: 'flex', alignItems: 'center', gap: '10px' } }, [brandMark(30), h('span', { key: 't', style: { fontSize: '15px', fontWeight: 800, letterSpacing: '-0.3px', color: '#f4f4f6' } }, 'SecureBit')]),\n collapseBtn(SB_SVG.chevL, 'Collapse')\n ]),\n h('div', { key: 'label', style: { flex: 'none', display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '16px 16px 9px' } }, [\n h('span', { key: 'l', style: { fontFamily: \"'JetBrains Mono',monospace\", fontSize: '10px', fontWeight: 600, color: '#56565e', textTransform: 'uppercase', letterSpacing: '1.3px' } }, 'Chats'),\n h('span', { key: 'c', style: { fontFamily: \"'JetBrains Mono',monospace\", fontSize: '10px', fontWeight: 600, color: '#6b6b73' } }, String(chats.length))\n ]),\n h('div', { key: 'list', className: 'msc-scroll', style: { flex: 1, overflowY: 'auto', padding: '0 10px' } }, [\n ...chats.map(expandedRow),\n h('div', { key: 'gh', style: { marginTop: '14px', padding: '0 2px 6px' } }, h('span', { style: { fontFamily: \"'JetBrains Mono',monospace\", fontSize: '10px', fontWeight: 600, color: '#56565e', textTransform: 'uppercase', letterSpacing: '1.3px' } }, 'Group chats')),\n h('div', { key: 'gph', title: 'Coming in v6.0', style: { display: 'flex', alignItems: 'center', gap: '12px', padding: '11px 12px', borderRadius: '11px', background: 'transparent', border: '1px dashed rgba(255,255,255,0.09)', cursor: 'not-allowed' } }, [\n h('div', { key: 'i', style: { flex: 'none', width: '38px', height: '38px', borderRadius: '11px', display: 'grid', placeItems: 'center', background: 'rgba(255,255,255,0.025)', border: '1px solid rgba(255,255,255,0.06)', color: '#56565e' }, dangerouslySetInnerHTML: { __html: SB_SVG.users } }),\n h('div', { key: 'b', style: { flex: 1, minWidth: 0 } }, [\n h('div', { key: 't', style: { fontSize: '14px', fontWeight: 600, color: '#8a8a92' } }, 'Group chats'),\n h('div', { key: 's', style: { fontSize: '11.5px', color: '#56565e' } }, 'Up to 8 peers \u00B7 P2P mesh')\n ]),\n h('span', { key: 'soon', style: { flex: 'none', padding: '4px 9px', borderRadius: '7px', background: 'rgba(240,137,42,0.1)', border: '1px solid rgba(240,137,42,0.24)', fontFamily: \"'JetBrains Mono',monospace\", fontSize: '9.5px', fontWeight: 700, color: '#f0892a', textTransform: 'uppercase', letterSpacing: '0.8px' } }, 'Soon')\n ])\n ]),\n h('div', { key: 'new', style: { flex: 'none', padding: '12px' } }, h('button', {\n onClick: onNewChat,\n style: { width: '100%', display: 'inline-flex', alignItems: 'center', justifyContent: 'center', gap: '9px', padding: '12px', borderRadius: '11px', border: 'none', background: '#f0892a', color: '#1a0f04', fontFamily: 'inherit', fontSize: '14px', fontWeight: 700, cursor: 'pointer', boxShadow: '0 8px 24px rgba(240,137,42,0.28)' }\n }, [icon(SB_SVG.plus, { key: 'p' }), 'New chat'])),\n presencePanelExpanded\n ];\n\n // ---- Collapsed dock content ----\n const collapsedInner = [\n h('div', { key: 'head', style: { flex: 'none', display: 'flex', flexDirection: 'column', alignItems: 'center', gap: '10px', padding: '13px 0', width: '100%', borderBottom: '1px solid rgba(255,255,255,0.06)' } }, [brandMark(32), collapseBtn(SB_SVG.chevR, 'Expand')]),\n h('div', { key: 'list', className: 'msc-scroll', style: { flex: 1, overflowY: 'auto', display: 'flex', flexDirection: 'column', alignItems: 'center', gap: '10px', padding: '14px 0', width: '100%' } }, [\n ...chats.map(dockItem),\n h('div', { key: 'sep', style: { width: '30px', height: '1px', background: 'rgba(255,255,255,0.07)', margin: '2px 0' } }),\n h('div', { key: 'gph', title: 'Group chats \u2014 coming in v6.0', style: { position: 'relative', width: '44px', height: '44px', borderRadius: '12px', display: 'grid', placeItems: 'center', cursor: 'not-allowed', background: 'transparent', border: '1px dashed rgba(255,255,255,0.1)', color: '#56565e' }, dangerouslySetInnerHTML: { __html: SB_SVG.users } })\n ]),\n h('div', { key: 'new', style: { flex: 'none', padding: '13px 0' } }, h('button', {\n onClick: onNewChat, title: 'New chat',\n style: { width: '44px', height: '44px', borderRadius: '12px', display: 'grid', placeItems: 'center', border: 'none', background: '#f0892a', color: '#1a0f04', cursor: 'pointer', boxShadow: '0 8px 24px rgba(240,137,42,0.28)' }, dangerouslySetInnerHTML: { __html: SB_SVG.plus }\n })),\n presencePanelCollapsed\n ];\n\n const railWidth = collapsed ? '72px' : '292px';\n const railStyle = { flex: 'none', width: railWidth, display: 'flex', flexDirection: 'column', alignItems: collapsed ? 'center' : 'stretch', background: '#0c0c0e', borderRight: '1px solid rgba(255,255,255,0.06)' };\n const inner = collapsed ? collapsedInner : expandedInner;\n\n return h(React.Fragment, null, [\n // Responsive behaviour (inline styles can't express media queries).\n h('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;}}' } }),\n // Desktop rail\n h('aside', { key: 'rail', className: 'sb-rail', style: railStyle }, inner),\n // Mobile drawer overlay\n h('div', {\n key: 'drawer', className: 'sb-drawer-overlay',\n onClick: onCloseDrawer,\n style: { position: 'fixed', inset: 0, zIndex: 60, background: 'rgba(6,6,8,0.6)', backdropFilter: 'blur(4px)', WebkitBackdropFilter: 'blur(4px)', display: drawerOpen ? 'block' : 'none' }\n }, h('aside', { onClick: (e) => e.stopPropagation(), style: { position: 'absolute', left: 0, top: 0, bottom: 0, width: '292px', display: 'flex', flexDirection: 'column', background: '#0c0c0e', borderRight: '1px solid rgba(255,255,255,0.06)', boxShadow: '0 0 60px rgba(0,0,0,0.6)' } }, expandedInner))\n ]);\n };\n\n // Main Enhanced Application Component\n const EnhancedSecureP2PChat = () => {\n\n // ============================================\n // MULTI-SESSION REGISTRY\n // Each conversation is an independent session with its OWN\n // EnhancedSecureWebRTCManager (full key/ratchet/SAS isolation). The reducer\n // holds serializable per-session state; non-serializable objects (managers,\n // notification integrations, offline queues) live in ref-held Maps keyed by\n // sessionId and are NEVER shared between sessions. sessionId is local-only.\n // ============================================\n const [sessionsState, dispatch] = React.useReducer(sessionsReducer, undefined, createInitialState);\n const activeSessionId = sessionsState.activeSessionId;\n const activeIdRef = React.useRef(null);\n activeIdRef.current = activeSessionId;\n const active = activeSessionId ? sessionsState.sessions[activeSessionId] : null;\n const EMPTY_ARR = React.useRef([]).current;\n\n const managersRef = React.useRef(new Map()); // id -> EnhancedSecureWebRTCManager\n const integrationsRef = React.useRef(new Map()); // id -> NotificationIntegration\n const queuesRef = React.useRef(new Map()); // id -> { incoming:[], outgoing:[] }\n\n // Active-session VIEW. The rest of the component (and the child setup/chat\n // components) read these names unchanged; the setters dispatch to the active\n // session read from activeIdRef at call time, so even memoized callbacks stay\n // correct across session switches.\n const dispatchActive = React.useCallback((build) => {\n const id = activeIdRef.current; if (!id) return;\n dispatch(build(id));\n }, []);\n\n const messages = active ? active.messages : EMPTY_ARR;\n const setMessages = React.useCallback((updaterOrArr) => {\n const id = activeIdRef.current; if (!id) return;\n if (typeof updaterOrArr === 'function') dispatch({ type: SA.SET_MESSAGES, id, updater: updaterOrArr });\n else dispatch({ type: SA.SET_MESSAGES, id, messages: updaterOrArr });\n }, []);\n\n const connectionStatus = active ? active.status : 'disconnected';\n const setConnectionStatus = React.useCallback((status) => dispatchActive((id) => ({ type: SA.SET_STATUS, id, status })), [dispatchActive]);\n\n const keyFingerprint = active ? active.keyFingerprint : '';\n const setKeyFingerprint = React.useCallback((fingerprint) => dispatchActive((id) => ({ type: SA.SET_FINGERPRINT, id, fingerprint })), [dispatchActive]);\n\n const verificationCode = active ? active.verificationCode : '';\n const setVerificationCode = React.useCallback((code) => dispatchActive((id) => ({ type: SA.SET_VERIFICATION, id, code })), [dispatchActive]);\n\n const isVerified = active ? active.sas.isVerified : false;\n const setIsVerified = React.useCallback((v) => dispatchActive((id) => ({ type: SA.SET_SAS, id, sas: { isVerified: !!v } })), [dispatchActive]);\n const localVerificationConfirmed = active ? active.sas.localConfirmed : false;\n const setLocalVerificationConfirmed = React.useCallback((v) => dispatchActive((id) => ({ type: SA.SET_SAS, id, sas: { localConfirmed: !!v } })), [dispatchActive]);\n const remoteVerificationConfirmed = active ? active.sas.remoteConfirmed : false;\n const setRemoteVerificationConfirmed = React.useCallback((v) => dispatchActive((id) => ({ type: SA.SET_SAS, id, sas: { remoteConfirmed: !!v } })), [dispatchActive]);\n const bothVerificationsConfirmed = active ? active.sas.bothConfirmed : false;\n const setBothVerificationsConfirmed = React.useCallback((v) => dispatchActive((id) => ({ type: SA.SET_SAS, id, sas: { bothConfirmed: !!v } })), [dispatchActive]);\n\n const pendingIncomingFiles = active ? active.pendingIncomingFiles : EMPTY_ARR;\n const setPendingIncomingFiles = React.useCallback((updaterOrArr) => {\n const id = activeIdRef.current; if (!id) return;\n if (typeof updaterOrArr === 'function') dispatch({ type: SA.SET_PENDING_FILES, id, updater: updaterOrArr });\n else dispatch({ type: SA.SET_PENDING_FILES, id, files: updaterOrArr });\n }, []);\n\n // Per-session offer/answer setup flow (preserved when switching chats).\n const setupField = (name, fallback) => (active ? active.setup[name] : fallback);\n const setSetupField = (name) => React.useCallback((value) => dispatchActive((id) => ({ type: SA.PATCH_SETUP, id, patch: { [name]: value } })), [dispatchActive]);\n const offerData = setupField('offerData', '');\n const setOfferData = setSetupField('offerData');\n const answerData = setupField('answerData', '');\n const setAnswerData = setSetupField('answerData');\n const offerInput = setupField('offerInput', '');\n const setOfferInput = setSetupField('offerInput');\n const answerInput = setupField('answerInput', '');\n const setAnswerInput = setSetupField('answerInput');\n const showOfferStep = setupField('showOfferStep', false);\n const setShowOfferStep = setSetupField('showOfferStep');\n const showAnswerStep = setupField('showAnswerStep', false);\n const setShowAnswerStep = setSetupField('showAnswerStep');\n const showVerification = setupField('showVerification', false);\n const setShowVerification = setSetupField('showVerification');\n const showQRCode = setupField('showQRCode', false);\n const setShowQRCode = setSetupField('showQRCode');\n const qrCodeUrl = setupField('qrCodeUrl', '');\n const setQrCodeUrl = setSetupField('qrCodeUrl');\n const isGeneratingKeys = setupField('isGeneratingKeys', false);\n const setIsGeneratingKeys = setSetupField('isGeneratingKeys');\n\n // Accessor over the ACTIVE session's manager / notification integration.\n // Existing `webrtcManagerRef.current.X()` call sites keep working against the\n // active session; per-session callbacks use their own captured manager instead.\n const webrtcManagerRef = React.useMemo(() => ({\n get current() { return managersRef.current.get(activeIdRef.current) || null; },\n set current(v) {\n const id = activeIdRef.current; if (!id) return;\n if (v) managersRef.current.set(id, v); else managersRef.current.delete(id);\n }\n }), []);\n const notificationIntegrationRef = React.useMemo(() => ({\n get current() { return integrationsRef.current.get(activeIdRef.current) || null; },\n set current(v) {\n const id = activeIdRef.current; if (!id) return;\n if (v) integrationsRef.current.set(id, v); else integrationsRef.current.delete(id);\n }\n }), []);\n\n // ---- Presence / availability ----\n // My status is broadcast E2E over each connected session's data channel\n // (sendSystemMessage) and never stored on a server. 'invisible' goes on the\n // wire as 'offline' so peers cannot tell. myStatusRef lets the per-session\n // callbacks (captured at create time) read the current status.\n const [myStatus, setMyStatusState] = React.useState(() => {\n try { return localStorage.getItem('securebit_my_status') || 'available'; } catch { return 'available'; }\n });\n const myStatusRef = React.useRef(myStatus);\n myStatusRef.current = myStatus;\n const wirePresence = (s) => (s === 'invisible' ? 'offline' : s);\n // Presence travels as a normal ENCRYPTED chat message (type 'message') \u2014 that is\n // the only inbound path the manager delivers to onMessage; unknown raw system\n // types are dropped. handleMessage recognises the {type:'presence'} payload and\n // consumes it without displaying it.\n const sendPresenceTo = React.useCallback((mgr, s) => {\n if (!mgr || typeof mgr.sendMessage !== 'function') return;\n try {\n if (mgr.isConnected && mgr.isConnected()) {\n const p = mgr.sendMessage(JSON.stringify({ type: 'presence', status: wirePresence(s) }));\n if (p && typeof p.catch === 'function') p.catch(() => {});\n }\n } catch (_) {}\n }, []);\n const setMyStatus = React.useCallback((key) => {\n setMyStatusState(key);\n try { localStorage.setItem('securebit_my_status', key); } catch {}\n for (const mgr of managersRef.current.values()) sendPresenceTo(mgr, key);\n }, [sendPresenceTo]);\n\n // Secure chat extras: per-message send modes + 1s tick for countdowns.\n const [codeMode, setCodeMode] = React.useState(false);\n const [viewOnceMode, setViewOnceMode] = React.useState(false);\n const [viewOnceTtl, setViewOnceTtl] = React.useState(15); // seconds visible after the peer opens it\n const [disappearTtl, setDisappearTtl] = React.useState(0); // seconds; 0 = off (sticky)\n const [nowTick, setNowTick] = React.useState(() => Date.now());\n // connectionStatus \u2192 per-session status (active-session view, above).\n // Offline awareness \u2014 tracks the real online/offline events (which is\n // also what a console-simulated `dispatchEvent(new Event('offline'))`\n // fires, even when navigator.onLine stays true).\n const [isOffline, setIsOffline] = React.useState(typeof navigator !== 'undefined' && navigator.onLine === false);\n // Ref mirror so manager callbacks (which close over stale state) always\n // read the current offline status. Two queues implement store-and-forward\n // over the still-live P2P channel: outgoing waits until WE reconnect,\n // incoming waits until WE reconnect before being shown/acked.\n const offlineRef = React.useRef(isOffline);\n // Offline store-and-forward queues are now per-session (queuesRef, above).\n React.useEffect(() => { offlineRef.current = isOffline; }, [isOffline]);\n React.useEffect(() => {\n const goOffline = () => setIsOffline(true);\n const goOnline = () => setIsOffline(false);\n window.addEventListener('offline', goOffline);\n window.addEventListener('online', goOnline);\n return () => { window.removeEventListener('offline', goOffline); window.removeEventListener('online', goOnline); };\n }, []);\n const [relayOnlyMode, setRelayOnlyMode] = React.useState(() => {\n try { return localStorage.getItem('securebit_relay_only_mode') === 'true'; } catch { return false; }\n });\n // Custom ICE (STUN/TURN) servers \u2014 advanced network settings.\n const [customIceServers, setCustomIceServers] = React.useState(null); // null => use public defaults\n const [iceServersText, setIceServersText] = React.useState('');\n const [iceSettingsPersisted, setIceSettingsPersisted] = React.useState(false);\n const [showIceSettings, setShowIceSettings] = React.useState(false);\n\n // Load any previously saved (encrypted) custom ICE settings on mount.\n React.useEffect(() => {\n let cancelled = false;\n loadIceSettings().then((saved) => {\n if (cancelled || !saved) return;\n if (Array.isArray(saved.servers) && saved.servers.length > 0) {\n setCustomIceServers(saved.servers);\n setIceServersText(JSON.stringify(saved.servers, null, 2));\n }\n if (saved.privacyMode === 'relay-only') {\n setRelayOnlyMode(true);\n }\n setIceSettingsPersisted(true);\n }).catch(() => { /* fail closed: keep defaults */ });\n return () => { cancelled = true; };\n }, []);\n\n // Global entry point: the header gear dispatches this event.\n React.useEffect(() => {\n const open = () => setShowIceSettings(true);\n window.addEventListener('securebit:open-network-settings', open);\n return () => window.removeEventListener('securebit:open-network-settings', open);\n }, []);\n\n const handleApplyIceSettings = React.useCallback((next, persist) => {\n const servers = next.useCustom && Array.isArray(next.servers) ? next.servers : null;\n setCustomIceServers(servers && servers.length ? servers : null);\n setIceServersText(next.serversText || '');\n setRelayOnlyMode(next.privacyMode === 'relay-only');\n setShowIceSettings(false);\n if (persist) {\n setIceSettingsPersisted(true);\n saveIceSettings({ servers: servers || [], privacyMode: next.privacyMode }).catch(() => { /* surfaced as no-op */ });\n } else if (iceSettingsPersisted) {\n // User turned persistence off \u2014 remove the stored copy.\n setIceSettingsPersisted(false);\n clearIceSettings().catch(() => {});\n }\n }, [iceSettingsPersisted]);\n\n const handleForgetIceSettings = React.useCallback(async () => {\n await clearIceSettings().catch(() => {});\n setIceSettingsPersisted(false);\n setCustomIceServers(null);\n setIceServersText('');\n }, []);\n \n // Moved scrollToBottom logic to be available globally\n const [messageInput, setMessageInput] = React.useState('');\n // offerData/answerData/offerInput/answerInput, showOfferStep/showAnswerStep,\n // showVerification/showQRCode/qrCodeUrl, isGeneratingKeys \u2192 per-session setup\n // slice (declared in the active-session view block above).\n const [showQRScanner, setShowQRScanner] = React.useState(false);\n const [showQRScannerModal, setShowQRScannerModal] = React.useState(false);\n\n // isVerified + mutual-verification flags \u2192 per-session SAS slice (above).\n const [securityLevel, setSecurityLevel] = React.useState(null);\n const [sessionTimeLeft, setSessionTimeLeft] = React.useState(0);\n\n // PAKE password states removed - using SAS verification instead\n\n // Session state - all security features enabled by default\n const [pendingSession, setPendingSession] = React.useState(null);\n\n // All security features are enabled by default - no payment required\n // pendingIncomingFiles \u2192 per-session slice (above).\n\n\n\n // ============================================\n // CENTRALIZED CONNECTION STATE MANAGEMENT\n // ============================================\n \n const [connectionState, setConnectionState] = React.useState({\n status: 'disconnected',\n hasActiveAnswer: false,\n answerCreatedAt: null,\n isUserInitiatedDisconnect: false\n });\n \n // Centralized connection state handler\n const updateConnectionState = (newState, options = {}) => {\n const { preserveAnswer = false, isUserAction = false } = options;\n \n setConnectionState(prev => ({\n ...prev,\n ...newState,\n isUserInitiatedDisconnect: isUserAction,\n hasActiveAnswer: preserveAnswer ? prev.hasActiveAnswer : false,\n answerCreatedAt: preserveAnswer ? prev.answerCreatedAt : null\n }));\n };\n \n // Check if we should preserve answer data\n const shouldPreserveAnswerData = () => {\n const hasAnswerData = !!answerData || \n (answerInput && typeof answerInput === 'string' && answerInput.trim().length > 0);\n\n const hasAnswerQR = qrCodeUrl && typeof qrCodeUrl === 'string' && qrCodeUrl.trim().length > 0;\n \n const shouldPreserve = (connectionState.hasActiveAnswer && \n !connectionState.isUserInitiatedDisconnect) ||\n (hasAnswerData && \n !connectionState.isUserInitiatedDisconnect) ||\n (hasAnswerQR && \n !connectionState.isUserInitiatedDisconnect);\n \n \n return shouldPreserve;\n };\n \n // Mark answer as created\n const markAnswerCreated = () => {\n updateConnectionState({\n hasActiveAnswer: true,\n answerCreatedAt: Date.now()\n });\n };\n \n // webrtcManagerRef / notificationIntegrationRef \u2192 accessors over the active\n // session's manager / integration (active-session view block, above).\n\n // Development-only debug helpers. Production never exposes\n // manager internals or cleanup controls on `window`.\n React.useEffect(() => {\n return installDebugWindowHooks({\n targetWindow: window,\n webrtcManagerRef,\n onClearData: handleClearData\n });\n }, []);\n \n const addMessageWithAutoScroll = React.useCallback((message, type, opts = {}) => {\n const newMessage = {\n message,\n type,\n id: Date.now() + Math.random(),\n timestamp: (typeof opts.timestamp === 'number') ? opts.timestamp : Date.now(),\n mid: opts.mid,\n status: opts.status, // WhatsApp-style: sending | sent | delivered | failed\n viewOnce: opts.viewOnce === true,\n viewOnceTtl: (typeof opts.viewOnceTtl === 'number') ? opts.viewOnceTtl : 15,\n expiresAt: (typeof opts.expiresAt === 'number') ? opts.expiresAt : undefined\n };\n\n setMessages(prev => {\n const updated = [...prev, newMessage];\n \n setTimeout(() => {\n if (chatMessagesRef?.current) {\n const container = chatMessagesRef.current;\n try {\n const { scrollTop, scrollHeight, clientHeight } = container;\n const isNearBottom = scrollHeight - scrollTop - clientHeight < 100;\n \n if (isNearBottom || prev.length === 0) {\n requestAnimationFrame(() => {\n if (container && container.scrollTo) {\n container.scrollTo({\n top: container.scrollHeight,\n behavior: 'smooth'\n });\n }\n });\n }\n } catch (error) {\n console.warn('Scroll error:', error);\n container.scrollTop = container.scrollHeight;\n }\n }\n }, 50);\n \n return updated;\n });\n }, []);\n\n // Flip a sent message's delivery state (sending \u2192 sent \u2192 delivered, or failed).\n const updateMessageStatus = React.useCallback((mid, status) => {\n if (!mid) return;\n setMessages(prev => prev.map(m => (String(m.mid) === String(mid) && m.type === 'sent') ? { ...m, status } : m));\n }, []);\n\n // When WE come back online: for EVERY session, transmit anything queued while\n // offline and surface (and acknowledge) anything that arrived meanwhile. Each\n // session flushes against its own manager and into its own slice.\n const flushOfflineQueues = React.useCallback(() => {\n for (const [id, q] of queuesRef.current.entries()) {\n const mgr = managersRef.current.get(id);\n const out = q.outgoing; q.outgoing = [];\n for (const item of out) {\n const send = mgr?.sendMessage?.(item.outText, item.meta);\n if (send && typeof send.then === 'function') {\n send.then(() => dispatch({ type: SA.UPDATE_MESSAGE_STATUS, id, mid: item.mid, status: 'delivered' }))\n .catch(() => dispatch({ type: SA.UPDATE_MESSAGE_STATUS, id, mid: item.mid, status: 'failed' }));\n }\n }\n const inc = q.incoming; q.incoming = [];\n if (inc.length > 0) {\n dispatch({ type: SA.ADD_MESSAGE, id, message: buildSessionMessage(\n `Connection restored \u2014 ${inc.length} message${inc.length === 1 ? '' : 's'} received while you were offline.`,\n 'notice'\n ) });\n }\n const viewing = id === activeIdRef.current && (typeof document === 'undefined' || document.visibilityState === 'visible');\n for (const item of inc) {\n dispatch({ type: SA.ADD_MESSAGE, id, message: buildSessionMessage(item.message, item.type, item.opts) });\n if (item.opts && item.opts.mid && item.type === 'received') {\n if (viewing) { try { mgr?.sendDeliveryReceipt?.(item.opts.mid); } catch (_) {} }\n else if (q.pendingReadAcks) q.pendingReadAcks.push(item.opts.mid);\n }\n }\n }\n }, []);\n\n React.useEffect(() => {\n if (isOffline) return; // only act on the offline \u2192 online edge\n flushOfflineQueues();\n }, [isOffline, flushOfflineQueues]);\n\n // Update security level based on real verification\n const updateSecurityLevel = React.useCallback(async () => {\n if (window.isUpdatingSecurity) {\n return;\n }\n \n window.isUpdatingSecurity = true;\n \n try {\n if (webrtcManagerRef.current) {\n // All security features are enabled by default - always show MAXIMUM level\n setSecurityLevel({\n level: 'MAXIMUM',\n score: 100,\n color: 'green',\n details: 'All security features enabled by default',\n passedChecks: 10,\n totalChecks: 10,\n isRealData: true\n });\n \n if (window.DEBUG_MODE) {\n const currentLevel = webrtcManagerRef.current.ecdhKeyPair && webrtcManagerRef.current.ecdsaKeyPair \n ? await webrtcManagerRef.current.calculateSecurityLevel()\n : {\n level: 'MAXIMUM',\n score: 100,\n sessionType: 'premium',\n passedChecks: 10,\n totalChecks: 10\n };\n }\n }\n } catch (error) {\n console.error('Failed to update security level:', error);\n setSecurityLevel({\n level: 'ERROR',\n score: 0,\n color: 'red',\n details: 'Verification failed'\n });\n } finally {\n setTimeout(() => {\n window.isUpdatingSecurity = false;\n }, 2000);\n }\n }, []);\n \n // Session time ticker removed - sessions are unlimited\n \n // Sessions are unlimited - no expiration handler needed\n \n // All security features are enabled by default - no demo sessions needed\n const chatMessagesRef = React.useRef(null);\n \n // Create scroll function using global helper\n const scrollToBottom = createScrollToBottomFunction(chatMessagesRef);\n\n React.useEffect(() => {\n try { localStorage.setItem('securebit_relay_only_mode', String(relayOnlyMode)); } catch {}\n if (webrtcManagerRef.current?._config?.webrtc) {\n webrtcManagerRef.current._setRelayOnlyMode(relayOnlyMode);\n }\n }, [relayOnlyMode]);\n \n // Auto-scroll when messages change\n React.useEffect(() => {\n if (messages.length > 0 && chatMessagesRef.current) {\n scrollToBottom();\n setTimeout(scrollToBottom, 50);\n setTimeout(scrollToBottom, 150);\n }\n }, [messages]);\n\n // Disappearing-message clock: tick every second (while ANY session has an\n // expiry) and prune past-deadline messages \u2014 independently per session, so\n // a background conversation's timers keep running too.\n const anyExpiring = sessionsState.order.some((id) => (sessionsState.sessions[id]?.messages || []).some((m) => typeof m.expiresAt === 'number'));\n const sessionsStateRef = React.useRef(sessionsState);\n sessionsStateRef.current = sessionsState;\n React.useEffect(() => {\n if (!anyExpiring) return;\n // Disappearing messages leave a tombstone (content wiped) instead of vanishing.\n const expireFn = (prev) => {\n const now = Date.now();\n let changed = false;\n const next = prev.map((m) => {\n if (typeof m.expiresAt === 'number' && m.expiresAt <= now && !m.expired) {\n changed = true;\n return { ...m, expired: true, message: '', expiresAt: undefined };\n }\n return m;\n });\n return changed ? next : prev;\n };\n const interval = setInterval(() => {\n const now = Date.now();\n setNowTick(now);\n const st = sessionsStateRef.current;\n for (const id of st.order) {\n const msgs = st.sessions[id]?.messages || [];\n if (msgs.some((m) => typeof m.expiresAt === 'number' && m.expiresAt <= now && !m.expired)) {\n dispatch({ type: SA.SET_MESSAGES, id, updater: expireFn });\n }\n }\n }, 1000);\n return () => clearInterval(interval);\n }, [anyExpiring]);\n \n // PAKE password functions removed - using SAS verification instead\n \n // Build a brand-new, fully-isolated session: its own manager, its own\n // id-bound callbacks, its own notification integration and offline queues.\n // The callback bodies below are the original single-session handlers; the\n // id-bound shadow setters declared here redirect every set*/dispatch into\n // THIS session's slice, so nothing leaks into another conversation.\n const createSession = (opts = {}) => {\n const role = opts.role || 'offer';\n const entry = createSessionEntry({ role });\n const id = entry.id;\n dispatch({ type: SA.CREATE_SESSION, entry, activate: opts.activate !== false });\n // pendingReadAcks: mids received while this chat was NOT being viewed; the\n // read receipt is held back until the user actually opens the conversation.\n queuesRef.current.set(id, { incoming: [], outgoing: [], pendingReadAcks: [] });\n\n // --- id-bound shadow setters (override the active-session view names) ---\n const setMessages = (u) => {\n if (typeof u === 'function') dispatch({ type: SA.SET_MESSAGES, id, updater: u });\n else dispatch({ type: SA.SET_MESSAGES, id, messages: u });\n };\n const addMessageWithAutoScroll = (message, type, opts2 = {}) => {\n dispatch({ type: SA.ADD_MESSAGE, id, message: buildSessionMessage(message, type, opts2) });\n // Background session received a chat message \u2192 bump its unread badge.\n if (type === 'received' && id !== activeIdRef.current) {\n dispatch({ type: SA.INCREMENT_UNREAD, id });\n }\n };\n const updateMessageStatus = (mid, status) => { if (mid) dispatch({ type: SA.UPDATE_MESSAGE_STATUS, id, mid, status }); };\n const setConnectionStatus = (status) => dispatch({ type: SA.SET_STATUS, id, status });\n const setKeyFingerprint = (fingerprint) => dispatch({ type: SA.SET_FINGERPRINT, id, fingerprint });\n const setVerificationCode = (code) => dispatch({ type: SA.SET_VERIFICATION, id, code });\n const setIsVerified = (v) => dispatch({ type: SA.SET_SAS, id, sas: { isVerified: !!v } });\n const setLocalVerificationConfirmed = (v) => dispatch({ type: SA.SET_SAS, id, sas: { localConfirmed: !!v } });\n const setRemoteVerificationConfirmed = (v) => dispatch({ type: SA.SET_SAS, id, sas: { remoteConfirmed: !!v } });\n const setBothVerificationsConfirmed = (v) => dispatch({ type: SA.SET_SAS, id, sas: { bothConfirmed: !!v } });\n const setShowVerification = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { showVerification: !!v } });\n const setShowOfferStep = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { showOfferStep: !!v } });\n const setShowAnswerStep = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { showAnswerStep: !!v } });\n const setShowQRCode = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { showQRCode: !!v } });\n const setQrCodeUrl = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { qrCodeUrl: v } });\n const setOfferData = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { offerData: v } });\n const setAnswerData = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { answerData: v } });\n const setOfferInput = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { offerInput: v } });\n const setAnswerInput = (v) => dispatch({ type: SA.PATCH_SETUP, id, patch: { answerInput: v } });\n const setPendingIncomingFiles = (u) => {\n if (typeof u === 'function') dispatch({ type: SA.SET_PENDING_FILES, id, updater: u });\n else dispatch({ type: SA.SET_PENDING_FILES, id, files: u });\n };\n const sessionQueues = () => queuesRef.current.get(id) || { incoming: [], outgoing: [] };\n\n const handleMessage = (message, type, meta) => {\n if (typeof message === 'string' && message.trim().startsWith('{')) {\n try {\n const parsedMessage = JSON.parse(message);\n // Peer availability update (E2E control message) \u2014 store it for THIS\n // session and never show it in the chat.\n if (parsedMessage.type === 'presence') {\n const st = (parsedMessage.data && parsedMessage.data.status) || parsedMessage.status;\n if (st) dispatch({ type: SA.SET_PEER_PRESENCE, id, presence: st });\n return;\n }\n const blockedTypes = [\n 'file_transfer_start',\n 'file_transfer_response',\n 'file_chunk',\n 'chunk_confirmation',\n 'file_transfer_complete',\n 'file_transfer_error',\n 'heartbeat',\n 'verification',\n 'verification_response',\n 'verification_confirmed',\n 'verification_both_confirmed',\n 'peer_disconnect',\n 'key_rotation_signal',\n 'key_rotation_ready',\n 'security_upgrade',\n 'message_delete',\n 'message_receipt'\n ];\n if (parsedMessage.type && blockedTypes.includes(parsedMessage.type)) {\n console.log(`Blocked system/file message from chat: ${parsedMessage.type}`);\n return;\n }\n // Defensive unwrap: a plain-message envelope can leak through as\n // raw JSON for some payloads (e.g. fenced code blocks). Show the\n // real text, not {\"type\":\"message\",\"data\":\"```...\"}.\n if (parsedMessage.type === 'message' && typeof parsedMessage.data === 'string') {\n message = parsedMessage.data;\n if (parsedMessage.meta && typeof parsedMessage.meta === 'object') meta = parsedMessage.meta;\n }\n } catch (parseError) {\n\n }\n }\n \n // Per-message UI metadata from the peer (view-once / disappearing / id).\n const opts = {};\n if (meta && typeof meta === 'object') {\n if (typeof meta.mid === 'string') opts.mid = meta.mid;\n if (meta.once === true) {\n opts.viewOnce = true;\n opts.viewOnceTtl = Number.isFinite(meta.onceTtl) ? meta.onceTtl : 15;\n }\n if (Number.isFinite(meta.ttl) && meta.ttl > 0) {\n opts.expiresAt = Date.now() + meta.ttl * 1000;\n }\n if (Number.isFinite(meta.ts)) opts.timestamp = meta.ts;\n }\n\n // If WE are offline, hold the peer's message back: don't show it\n // and don't acknowledge it yet, so the sender stays at one check.\n // It's surfaced (and acked \u2192 \u2713\u2713) the moment we reconnect.\n if (offlineRef.current && type === 'received') {\n sessionQueues().incoming.push({ message, type, opts });\n return;\n }\n\n addMessageWithAutoScroll(message, type, opts);\n\n // Read receipt: only ack once the user is actually looking at THIS\n // conversation (active session + visible tab). Otherwise hold the mid\n // back so a message read in a background chat stays \"delivered\" (grey\n // \u2713\u2713) on the sender's side \u2014 it flips to green only when this chat is\n // opened (see flushReadAcks).\n if (opts.mid && type === 'received') {\n const beingViewed = id === activeIdRef.current && (typeof document === 'undefined' || document.visibilityState === 'visible');\n if (beingViewed) {\n try { manager?.sendDeliveryReceipt?.(opts.mid); } catch (_) {}\n } else {\n const q = sessionQueues();\n if (q.pendingReadAcks) q.pendingReadAcks.push(opts.mid);\n }\n }\n };\n\n const handleStatusChange = (status) => {\n setConnectionStatus(status);\n \n if (status === 'connected') {\n document.dispatchEvent(new CustomEvent('new-connection'));\n \n // \u041D\u0435 \u0441\u043A\u0440\u044B\u0432\u0430\u0435\u043C \u0432\u0435\u0440\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044E \u043F\u0440\u0438 'connected' - \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 'verified'\n // setIsVerified(true);\n // setShowVerification(false);\n if (!window.isUpdatingSecurity) {\n updateSecurityLevel().catch(console.error);\n }\n } else if (status === 'verifying') {\n setShowVerification(true);\n if (!window.isUpdatingSecurity) {\n updateSecurityLevel().catch(console.error);\n }\n } else if (status === 'verified') {\n setIsVerified(true);\n setShowVerification(false);\n setBothVerificationsConfirmed(true);\n setConnectionStatus('connected');\n // Force immediate update of isVerified state\n setTimeout(() => {\n setIsVerified(true);\n }, 0);\n // Tell the newly-connected peer my current availability (E2E, via\n // the normal encrypted message path \u2014 see sendPresenceTo).\n try {\n const s = myStatusRef.current === 'invisible' ? 'offline' : myStatusRef.current;\n setTimeout(() => {\n try {\n const p = manager.sendMessage?.(JSON.stringify({ type: 'presence', status: s }));\n if (p && typeof p.catch === 'function') p.catch(() => {});\n } catch (_) {}\n }, 400);\n } catch (_) {}\n if (!window.isUpdatingSecurity) {\n updateSecurityLevel().catch(console.error);\n }\n } else if (status === 'connecting') {\n if (!window.isUpdatingSecurity) {\n updateSecurityLevel().catch(console.error);\n }\n } else if (status === 'disconnected') {\n // Drop: the manager has cleared its verification (re-establishment\n // required), so reset this session's verification flags too \u2014 the\n // setup/connect screen then shows so the user can reconnect. We do\n // NOT remove the session (that create\u2192destroy\u2192create churn flashed\n // the console) and we keep the message history; closing a chat is\n // done only via the Disconnect button.\n setConnectionStatus('disconnected');\n setIsVerified(false);\n setShowVerification(false);\n setLocalVerificationConfirmed(false);\n setRemoteVerificationConfirmed(false);\n setBothVerificationsConfirmed(false);\n if (id === activeIdRef.current) document.dispatchEvent(new CustomEvent('disconnected'));\n } else if (status === 'peer_disconnected') {\n if (id === activeIdRef.current) {\n setSessionTimeLeft(0);\n document.dispatchEvent(new CustomEvent('peer-disconnect'));\n }\n setConnectionStatus('peer_disconnected');\n setIsVerified(false);\n setShowVerification(false);\n setLocalVerificationConfirmed(false);\n setRemoteVerificationConfirmed(false);\n setBothVerificationsConfirmed(false);\n }\n };\n \n const handleKeyExchange = (fingerprint) => {\n if (fingerprint === '') {\n setKeyFingerprint('');\n } else {\n setKeyFingerprint(fingerprint);\n }\n };\n \n const handleVerificationRequired = (code) => {\n if (code === '') {\n setVerificationCode('');\n setShowVerification(false);\n } else {\n setVerificationCode(code);\n setShowVerification(true);\n }\n };\n \n const handleVerificationStateChange = (state) => {\n setLocalVerificationConfirmed(state.localConfirmed);\n setRemoteVerificationConfirmed(state.remoteConfirmed);\n setBothVerificationsConfirmed(state.bothConfirmed);\n };\n \n // Callback for handling response errors\n const handleAnswerError = (errorType, errorMessage) => {\n if (errorType === 'replay_attack') {\n // Reset the session upon replay attack\n setSessionTimeLeft(0);\n setPendingSession(null);\n \n addMessageWithAutoScroll('\uD83D\uDCA1 Data is outdated. Please create a new invitation or use a current response code.', 'system');\n \n if (typeof console.clear === 'function') {\n console.clear();\n }\n } else if (errorType === 'security_violation') {\n // Reset the session upon security breach\n setSessionTimeLeft(0);\n setPendingSession(null);\n \n addMessageWithAutoScroll(` Security breach: ${errorMessage}`, 'system');\n \n if (typeof console.clear === 'function') {\n console.clear();\n }\n }\n };\n \n \n if (typeof console.clear === 'function') {\n console.clear();\n }\n \n const manager = new EnhancedSecureWebRTCManager(\n handleMessage,\n handleStatusChange,\n handleKeyExchange,\n handleVerificationRequired,\n handleAnswerError,\n handleVerificationStateChange,\n {\n webrtc: {\n relayOnly: relayOnlyMode,\n // Priority: user's custom servers > operator override > built-in defaults.\n iceServers: (Array.isArray(customIceServers) && customIceServers.length)\n ? customIceServers\n : (Array.isArray(window.SECUREBIT_ICE_SERVERS) ? window.SECUREBIT_ICE_SERVERS : undefined)\n }\n }\n );\n managersRef.current.set(id, manager);\n\n // Unsend / delete-for-everyone: peer asked us to drop a message.\n manager.onMessageDelete = (mid) => {\n if (!mid) return;\n setMessages(prev => prev.filter(m => String(m.mid) !== String(mid)));\n };\n\n // Read receipt: the peer actually opened the chat and read it \u2192 green.\n // (A receipt is only sent once the recipient is viewing the conversation,\n // so background-read messages stay at two grey 'delivered' ticks.)\n manager.onMessageDelivered = (mid) => {\n updateMessageStatus(mid, 'read');\n };\n\n // Per-session notification integration (raises OS notifications when the\n // tab is hidden; the unread badge handles the in-app, focused case).\n if (typeof Notification !== 'undefined' && Notification && Notification.permission === 'granted' && window.NotificationIntegration && !integrationsRef.current.get(id)) {\n try {\n const integration = new window.NotificationIntegration(manager);\n integration.init().then(() => {\n integrationsRef.current.set(id, integration);\n }).catch((error) => {\n // Handle error silently\n });\n } catch (error) {\n // Handle error silently\n }\n }\n\n handleMessage(' SecureBit.chat Enhanced Security Edition v4.10.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');\n\n // Setup file transfer callbacks (id-bound to THIS session's manager).\n manager.setFileTransferCallbacks(\n // Progress callback\n (progress) => {\n console.log('File progress:', progress);\n },\n\n // File received callback \u2014 auto-save to disk, no button press needed.\n (fileData) => {\n const sizeMb = Math.max(1, Math.round((fileData.fileSize || 0) / (1024 * 1024)));\n\n const saveToDisk = async () => {\n const url = await fileData.getObjectURL();\n const a = document.createElement('a');\n a.href = url;\n a.download = fileData.fileName || 'file';\n document.body.appendChild(a);\n a.click();\n a.remove();\n setTimeout(() => fileData.revokeObjectURL(url), 15000);\n };\n\n saveToDisk()\n .then(() => {\n addMessageWithAutoScroll(`File received & saved: ${fileData.fileName} (${sizeMb} MB)`, 'system');\n })\n .catch((e) => {\n console.error('Auto-save failed:', e);\n addMessageWithAutoScroll(`File received: ${fileData.fileName} (${sizeMb} MB). Open the file panel to download it.`, 'system');\n });\n },\n\n // Error callback\n (error) => {\n console.error('File transfer error:', error);\n\n if (error.includes('Connection not ready')) {\n addMessageWithAutoScroll(` File transfer error: connection not ready. Try again later.`, 'system');\n } else if (error.includes('File too large')) {\n addMessageWithAutoScroll(` File is too big. Maximum size: 100 MB`, 'system');\n } else {\n addMessageWithAutoScroll(` File transfer error: ${error}`, 'system');\n }\n },\n\n // Incoming file request callback \u2014 receiver must explicitly accept before any data is sent\n (fileRequest) => {\n setPendingIncomingFiles(prev => {\n if (prev.some(f => f.fileId === fileRequest.fileId)) return prev;\n return [...prev, fileRequest];\n });\n }\n );\n\n return id;\n };\n\n // Keep createSession reachable from non-render callers (new-chat button etc.).\n const createSessionRef = React.useRef(createSession);\n createSessionRef.current = createSession;\n\n // Tear down ONE session completely: its manager (existing key-wipe logic),\n // its notification integration and its queues. Other sessions are untouched.\n // Re-entrancy guarded: mgr.disconnect() can synchronously re-fire the\n // 'disconnected' status callback, which would otherwise recurse back in here.\n const destroyingRef = React.useRef(new Set());\n const destroySession = React.useCallback((id) => {\n if (!id || destroyingRef.current.has(id)) return;\n destroyingRef.current.add(id);\n try {\n const mgr = managersRef.current.get(id);\n if (mgr) { try { mgr.disconnect(); } catch (_) {} managersRef.current.delete(id); }\n const integ = integrationsRef.current.get(id);\n if (integ) { try { integ.cleanup?.(); } catch (_) {} integrationsRef.current.delete(id); }\n queuesRef.current.delete(id);\n dispatch({ type: SA.REMOVE_SESSION, id });\n } finally {\n destroyingRef.current.delete(id);\n }\n }, []);\n\n // Always keep at least one session around: when the last chat is removed the\n // user lands back on the single-column \"Start Secure\" page with a fresh session.\n React.useEffect(() => {\n if (sessionsState.order.length === 0) createSessionRef.current({ role: 'offer' });\n }, [sessionsState.order.length]);\n\n // ---- Sidebar (session list) state + actions ----\n const [sidebarCollapsed, setSidebarCollapsed] = React.useState(() => {\n try { return localStorage.getItem('securebit_sidebar_collapsed') === 'true'; } catch { return false; }\n });\n React.useEffect(() => { try { localStorage.setItem('securebit_sidebar_collapsed', String(sidebarCollapsed)); } catch {} }, [sidebarCollapsed]);\n const [sidebarDrawerOpen, setSidebarDrawerOpen] = React.useState(false);\n const handleSelectSession = React.useCallback((id) => {\n dispatch({ type: SA.SET_ACTIVE, id });\n dispatch({ type: SA.CLEAR_UNREAD, id });\n setSidebarDrawerOpen(false);\n }, []);\n const handleNewChat = React.useCallback(() => {\n createSessionRef.current({ role: 'offer' });\n setSidebarDrawerOpen(false);\n }, []);\n const handleRenameSession = React.useCallback((id, label) => { dispatch({ type: SA.RENAME, id, label }); }, []);\n // Send any held-back read receipts for a session (call when the user opens it).\n const flushReadAcks = React.useCallback((id) => {\n if (!id) return;\n const q = queuesRef.current.get(id);\n const mgr = managersRef.current.get(id);\n if (!q || !mgr || !q.pendingReadAcks || q.pendingReadAcks.length === 0) return;\n const acks = q.pendingReadAcks; q.pendingReadAcks = [];\n for (const mid of acks) { try { mgr.sendDeliveryReceipt?.(mid); } catch (_) {} }\n }, []);\n // Opening a session clears its unread badge and releases its read receipts.\n React.useEffect(() => {\n if (!activeSessionId) return;\n dispatch({ type: SA.CLEAR_UNREAD, id: activeSessionId });\n if (typeof document === 'undefined' || document.visibilityState === 'visible') flushReadAcks(activeSessionId);\n }, [activeSessionId, flushReadAcks]);\n\n // App-level lifecycle: create the first session on mount, wire the global\n // tab/unload guards, and on unmount disconnect EVERY live manager.\n const didInitRef = React.useRef(false);\n React.useEffect(() => {\n if (didInitRef.current) return;\n didInitRef.current = true;\n\n // (The first session is created by the ensure-at-least-one-session effect,\n // which also handles re-landing after the last chat is closed.)\n\n let isTabSwitching = false;\n let tabSwitchTimeout = null;\n\n const handleBeforeUnload = (event) => {\n if (event.type === 'beforeunload' && !isTabSwitching) {\n for (const mgr of managersRef.current.values()) {\n try {\n if (mgr.isConnected && mgr.isConnected()) {\n try { mgr.sendSystemMessage({ type: 'peer_disconnect', reason: 'user_disconnect', timestamp: Date.now() }); } catch (_) {}\n setTimeout(() => { try { mgr.disconnect(); } catch (_) {} }, 100);\n } else {\n mgr.disconnect();\n }\n } catch (_) {}\n }\n } else if (isTabSwitching) {\n event.preventDefault();\n event.returnValue = '';\n }\n };\n\n const handleVisibilityChange = () => {\n if (document.visibilityState === 'hidden') {\n isTabSwitching = true;\n if (tabSwitchTimeout) clearTimeout(tabSwitchTimeout);\n tabSwitchTimeout = setTimeout(() => { isTabSwitching = false; }, 5000);\n } else if (document.visibilityState === 'visible') {\n isTabSwitching = false;\n if (tabSwitchTimeout) { clearTimeout(tabSwitchTimeout); tabSwitchTimeout = null; }\n // Tab regained focus \u2192 release held read receipts for the open chat.\n flushReadAcks(activeIdRef.current);\n }\n };\n\n window.addEventListener('beforeunload', handleBeforeUnload);\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n return () => {\n window.removeEventListener('beforeunload', handleBeforeUnload);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n if (tabSwitchTimeout) { clearTimeout(tabSwitchTimeout); tabSwitchTimeout = null; }\n for (const mgr of managersRef.current.values()) { try { mgr.disconnect(); } catch (_) {} }\n managersRef.current.clear();\n for (const integ of integrationsRef.current.values()) { try { integ.cleanup?.(); } catch (_) {} }\n integrationsRef.current.clear();\n queuesRef.current.clear();\n };\n }, []); // run once\n \n // All security features are enabled by default - no session purchase needed\n \n const compressOfferData = (offerData) => {\n try {\n // Parse the offer data if it's a string\n const offer = typeof offerData === 'string' ? JSON.parse(offerData) : offerData;\n \n // Create a minimal version with only the most essential data\n const minimalOffer = {\n type: offer.type,\n version: offer.version,\n timestamp: offer.timestamp,\n sessionId: offer.sessionId,\n connectionId: offer.connectionId,\n verificationCode: offer.verificationCode,\n salt: offer.salt,\n // Use only key fingerprints instead of full keys\n keyFingerprints: offer.keyFingerprints,\n // Add a reference to get full data\n fullDataAvailable: true,\n compressionLevel: 'minimal'\n };\n \n return JSON.stringify(minimalOffer);\n } catch (error) {\n console.error('Error compressing offer data:', error);\n return offerData; // Return original if compression fails\n }\n };\n\n const createQRReference = (offerData) => {\n try {\n // Create a unique reference ID for this offer\n const referenceId = `offer_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n \n // Store the full offer data in localStorage with the reference ID\n localStorage.setItem(`qr_offer_${referenceId}`, JSON.stringify(offerData));\n \n // Create a minimal QR code with just the reference\n const qrReference = {\n type: 'secure_offer_reference',\n referenceId: referenceId,\n timestamp: Date.now(),\n message: 'Scan this QR code and use the reference ID to get full offer data'\n };\n \n return JSON.stringify(qrReference);\n } catch (error) {\n console.error('Error creating QR reference:', error);\n return null;\n }\n };\n\n const createTemplateOffer = (offer) => {\n // Minimal template to keep QR within single image capacity\n const templateOffer = {\n type: 'enhanced_secure_offer_template',\n version: '4.0',\n sessionId: offer.sessionId,\n connectionId: offer.connectionId,\n verificationCode: offer.verificationCode,\n timestamp: offer.timestamp,\n // Avoid bulky fields (SDP, raw keys); keep only fingerprints and essentials\n keyFingerprints: offer.keyFingerprints,\n // Keep concise auth hints (omit large nonces)\n authChallenge: offer?.authChallenge?.challenge,\n // Optionally include a compact capability hint if small\n capabilities: Array.isArray(offer.capabilities) && offer.capabilities.length <= 5\n ? offer.capabilities\n : undefined\n };\n \n return templateOffer;\n };\n\n // Conservative QR payload limits (characters). Adjust per error correction level.\n const MAX_QR_LEN = 800; // for JSON/plain/gzip\n const BIN_MAX_QR_LEN = 400; // stricter for SB1:bin to improve scan reliability\n const [qrFramesTotal, setQrFramesTotal] = React.useState(0);\n const [qrFrameIndex, setQrFrameIndex] = React.useState(0);\n const [qrManualMode, setQrManualMode] = React.useState(false);\n\n // Animated QR state (for multi-chunk COSE)\n const qrAnimationRef = React.useRef({ timer: null, chunks: [], idx: 0, active: false });\n // Stop any running QR auto-advance when the active session changes, so frames\n // are never pushed into the wrong session's setup slice.\n React.useEffect(() => () => {\n try { if (qrAnimationRef.current && qrAnimationRef.current.timer) { clearInterval(qrAnimationRef.current.timer); qrAnimationRef.current.timer = null; } } catch {}\n }, [activeSessionId]);\n const stopQrAnimation = () => {\n try { if (qrAnimationRef.current.timer) { clearInterval(qrAnimationRef.current.timer); } } catch {}\n qrAnimationRef.current = { timer: null, chunks: [], idx: 0, active: false };\n setQrFrameIndex(0);\n setQrFramesTotal(0);\n setQrManualMode(false);\n };\n\n // Render frame at current index (no index mutation)\n const renderCurrent = async () => {\n const { chunks, idx } = qrAnimationRef.current || {};\n if (!chunks || !chunks.length) return;\n const current = chunks[idx % chunks.length];\n try {\n const isDesktop = (typeof window !== 'undefined') && ((window.innerWidth || 0) >= 1024);\n const QR_SIZE = isDesktop ? 720 : 512;\n const url = await (window.generateQRCode ? window.generateQRCode(current, { errorCorrectionLevel: 'M', margin: 2, size: QR_SIZE }) : Promise.resolve(''));\n if (url) setQrCodeUrl(url);\n } catch (e) {\n console.warn('Animated QR render error (current):', e);\n }\n setQrFrameIndex(((qrAnimationRef.current?.idx || 0) % (qrAnimationRef.current?.chunks?.length || 1)) + 1);\n };\n\n // Render current frame, then advance index by 1\n const renderAndAdvance = async () => {\n await renderCurrent();\n const len = qrAnimationRef.current?.chunks?.length || 0;\n if (len > 0) {\n const nextIdx = ((qrAnimationRef.current?.idx || 0) + 1) % len;\n qrAnimationRef.current.idx = nextIdx;\n setQrFrameIndex(nextIdx + 1);\n }\n };\n\n const toggleQrManualMode = () => {\n const newManualMode = !qrManualMode;\n setQrManualMode(newManualMode);\n \n if (newManualMode) {\n\n if (qrAnimationRef.current.timer) {\n clearInterval(qrAnimationRef.current.timer);\n qrAnimationRef.current.timer = null;\n }\n console.log('QR Manual mode enabled - auto-scroll stopped');\n } else {\n if (qrAnimationRef.current.chunks.length > 1) {\n const intervalMs = 3000;\n qrAnimationRef.current.active = true;\n clearInterval(qrAnimationRef.current.timer);\n qrAnimationRef.current.timer = setInterval(renderAndAdvance, intervalMs);\n }\n console.log('QR Manual mode disabled - auto-scroll resumed');\n }\n };\n\n const nextQrFrame = async () => {\n console.log('\uD83C\uDFAE nextQrFrame called, qrFramesTotal:', qrFramesTotal, 'qrAnimationRef.current:', qrAnimationRef.current);\n if (qrAnimationRef.current.chunks.length > 1) {\n const nextIdx = (qrAnimationRef.current.idx + 1) % qrAnimationRef.current.chunks.length;\n qrAnimationRef.current.idx = nextIdx;\n setQrFrameIndex(nextIdx + 1);\n console.log('\uD83C\uDFAE Next frame index:', nextIdx + 1);\n // Ensure auto-advance timer runs in manual mode too\n try { clearInterval(qrAnimationRef.current.timer); } catch {}\n qrAnimationRef.current.timer = null;\n await renderCurrent();\n // If not in manual mode, restart auto timer\n if (!qrManualMode && qrAnimationRef.current.chunks.length > 1) {\n const intervalMs = 3000;\n qrAnimationRef.current.active = true;\n qrAnimationRef.current.timer = setInterval(renderAndAdvance, intervalMs);\n } else {\n qrAnimationRef.current.active = false;\n }\n } else {\n console.log('\uD83C\uDFAE No multiple frames to navigate');\n }\n };\n\n const prevQrFrame = async () => {\n console.log('\uD83C\uDFAE prevQrFrame called, qrFramesTotal:', qrFramesTotal, 'qrAnimationRef.current:', qrAnimationRef.current);\n if (qrAnimationRef.current.chunks.length > 1) {\n const prevIdx = (qrAnimationRef.current.idx - 1 + qrAnimationRef.current.chunks.length) % qrAnimationRef.current.chunks.length;\n qrAnimationRef.current.idx = prevIdx;\n setQrFrameIndex(prevIdx + 1);\n console.log('\uD83C\uDFAE Previous frame index:', prevIdx + 1);\n try { clearInterval(qrAnimationRef.current.timer); } catch {}\n qrAnimationRef.current.timer = null;\n await renderCurrent();\n if (!qrManualMode && qrAnimationRef.current.chunks.length > 1) {\n const intervalMs = 3000;\n qrAnimationRef.current.active = true;\n qrAnimationRef.current.timer = setInterval(renderAndAdvance, intervalMs);\n } else {\n qrAnimationRef.current.active = false;\n }\n } else {\n console.log('\uD83C\uDFAE No multiple frames to navigate');\n }\n };\n\n // Buffer for assembling scanned COSE chunks\n const qrChunksBufferRef = React.useRef({ id: null, total: 0, seen: new Set(), items: [] });\n\n const generateQRCode = async (data) => {\n try {\n const originalSize = typeof data === 'string' ? data.length : JSON.stringify(data).length;\n const isDesktop = (typeof window !== 'undefined') && ((window.innerWidth || 0) >= 1024);\n const QR_SIZE = isDesktop ? 720 : 512;\n \n // Try binary format first (CBOR + deflate + base64url)\n if (typeof window.generateBinaryQRCodeFromObject === 'function') {\n try {\n const obj = typeof data === 'string' ? JSON.parse(data) : data;\n const qrDataUrl = await window.generateBinaryQRCodeFromObject(obj, { errorCorrectionLevel: 'M', size: QR_SIZE, margin: 2 });\n if (qrDataUrl) {\n try { if (qrAnimationRef.current && qrAnimationRef.current.timer) { clearInterval(qrAnimationRef.current.timer); } } catch {}\n qrAnimationRef.current = { timer: null, chunks: [], idx: 0, active: false };\n setQrFrameIndex(0);\n setQrFramesTotal(0);\n setQrManualMode(false);\n setQrCodeUrl(qrDataUrl);\n setQrFramesTotal(1);\n setQrFrameIndex(1);\n return;\n }\n } catch (e) {\n console.warn('Binary QR generation failed, falling back to compressed:', e?.message || e);\n }\n }\n \n // Fallback to compressed JSON\n if (typeof window.generateCompressedQRCode === 'function') {\n try {\n const payload = typeof data === 'string' ? data : JSON.stringify(data);\n const qrDataUrl = await window.generateCompressedQRCode(payload, { errorCorrectionLevel: 'M', size: QR_SIZE, margin: 2 });\n if (qrDataUrl) {\n try { if (qrAnimationRef.current && qrAnimationRef.current.timer) { clearInterval(qrAnimationRef.current.timer); } } catch {}\n qrAnimationRef.current = { timer: null, chunks: [], idx: 0, active: false };\n setQrFrameIndex(0);\n setQrFramesTotal(0);\n setQrManualMode(false);\n setQrCodeUrl(qrDataUrl);\n setQrFramesTotal(1);\n setQrFrameIndex(1);\n return;\n }\n } catch (e) {\n console.warn('Compressed QR generation failed, falling back to plain:', e?.message || e);\n }\n }\n \n // Final fallback to plain JSON\n const payload = typeof data === 'string' ? data : JSON.stringify(data);\n if (payload.length <= MAX_QR_LEN) {\n if (!window.generateQRCode) throw new Error('QR code generator unavailable');\n try { if (qrAnimationRef.current && qrAnimationRef.current.timer) { clearInterval(qrAnimationRef.current.timer); } } catch {}\n qrAnimationRef.current = { timer: null, chunks: [], idx: 0, active: false };\n setQrFrameIndex(0);\n setQrFramesTotal(0);\n setQrManualMode(false);\n const qrDataUrl = await window.generateQRCode(payload, { errorCorrectionLevel: 'M', size: QR_SIZE, margin: 2 });\n setQrCodeUrl(qrDataUrl);\n setQrFramesTotal(1);\n setQrFrameIndex(1);\n return;\n }\n\n // Large payload: \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043C \u043D\u0430 \u0444\u0440\u0435\u0439\u043C\u044B (plain JSON)\n try { if (qrAnimationRef.current && qrAnimationRef.current.timer) { clearInterval(qrAnimationRef.current.timer); } } catch {}\n qrAnimationRef.current = { timer: null, chunks: [], idx: 0, active: false };\n setQrFrameIndex(0);\n setQrFramesTotal(0);\n setQrManualMode(false);\n const id = `raw_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n\n const TARGET_CHUNKS = 10;\n const FRAME_MAX = Math.max(200, Math.floor(payload.length / TARGET_CHUNKS));\n const total = Math.ceil(payload.length / FRAME_MAX);\n const rawChunks = [];\n for (let i = 0; i < total; i++) {\n const seq = i + 1;\n const part = payload.slice(i * FRAME_MAX, (i + 1) * FRAME_MAX);\n rawChunks.push(JSON.stringify({ hdr: { v: 1, id, seq, total, rt: 'raw' }, body: part }));\n }\n if (!window.generateQRCode) throw new Error('QR code generator unavailable');\n if (rawChunks.length === 1) {\n const url = await window.generateQRCode(rawChunks[0], { errorCorrectionLevel: 'M', margin: 2, size: QR_SIZE });\n setQrCodeUrl(url);\n setQrFramesTotal(1);\n setQrFrameIndex(1);\n return;\n }\n qrAnimationRef.current.chunks = rawChunks;\n qrAnimationRef.current.idx = 0;\n qrAnimationRef.current.active = true;\n setQrFramesTotal(rawChunks.length);\n setQrFrameIndex(1);\n const EC_OPTS = { errorCorrectionLevel: 'M', margin: 2, size: QR_SIZE };\n await renderNext();\n\n if (!qrManualMode) {\n const intervalMs = 4000; // 4 seconds per frame for better readability\n qrAnimationRef.current.active = true;\n qrAnimationRef.current.timer = setInterval(renderAndAdvance, intervalMs);\n }\n return;\n } catch (error) {\n console.error('QR code generation failed:', error);\n setMessages(prev => [...prev, {\n message: ` QR code generation failed: ${error.message}`,\n type: 'error'\n }]);\n }\n };\n\n const reconstructFromTemplate = (templateData) => {\n // Reconstruct full offer from template\n const fullOffer = {\n type: \"enhanced_secure_offer\",\n version: templateData.version,\n timestamp: templateData.timestamp,\n sessionId: templateData.sessionId,\n connectionId: templateData.connectionId,\n verificationCode: templateData.verificationCode,\n salt: templateData.salt,\n sdp: templateData.sdp,\n keyFingerprints: templateData.keyFingerprints,\n capabilities: templateData.capabilities,\n \n // Reconstruct ECDH key object\n ecdhPublicKey: {\n keyType: \"ECDH\",\n keyData: templateData.ecdhKeyData,\n timestamp: templateData.timestamp - 1000, // Approximate\n version: templateData.version,\n signature: templateData.ecdhSignature\n },\n \n // Reconstruct ECDSA key object\n ecdsaPublicKey: {\n keyType: \"ECDSA\",\n keyData: templateData.ecdsaKeyData,\n timestamp: templateData.timestamp - 999, // Approximate\n version: templateData.version,\n signature: templateData.ecdsaSignature\n },\n \n // Reconstruct auth challenge\n authChallenge: {\n challenge: templateData.authChallenge,\n timestamp: templateData.timestamp,\n nonce: templateData.authNonce,\n version: templateData.version\n },\n \n // Generate security level (can be recalculated)\n securityLevel: {\n level: \"CRITICAL\",\n score: 20,\n color: \"red\",\n verificationResults: {\n encryption: { passed: false, details: \"Encryption not working\", points: 0 },\n keyExchange: { passed: true, details: \"Simple key exchange verified\", points: 15 },\n messageIntegrity: { passed: false, details: \"Message integrity failed\", points: 0 },\n rateLimiting: { passed: true, details: \"Rate limiting active\", points: 5 },\n ecdsa: { passed: false, details: \"Enhanced session required - feature not available\", points: 0 },\n metadataProtection: { passed: false, details: \"Enhanced session required - feature not available\", points: 0 },\n pfs: { passed: false, details: \"Enhanced session required - feature not available\", points: 0 },\n nestedEncryption: { passed: false, details: \"Enhanced session required - feature not available\", points: 0 },\n packetPadding: { passed: false, details: \"Enhanced session required - feature not available\", points: 0 },\n advancedFeatures: { passed: false, details: \"Premium session required - feature not available\", points: 0 }\n },\n timestamp: templateData.timestamp,\n details: \"Real verification: 20/100 security checks passed (2/4 available)\",\n isRealData: true,\n passedChecks: 2,\n totalChecks: 4,\n sessionType: \"demo\",\n maxPossibleScore: 50\n }\n };\n \n return fullOffer;\n };\n\n const handleQRScan = async (scannedData) => {\n try {\n console.log('QR Code scanned:', scannedData.substring(0, 100) + '...');\n console.log('Current buffer state:', qrChunksBufferRef.current);\n \n // Check if this is a binary chunk (starts with SB1:bin: or is a raw binary chunk)\n if (scannedData.startsWith('SB1:bin:') || (qrChunksBufferRef.current && qrChunksBufferRef.current.id)) {\n console.log('Binary chunk detected:', scannedData.substring(0, 50) + '...');\n \n // This is a binary chunk - add to buffer\n if (!qrChunksBufferRef.current.id) {\n console.log('Initializing buffer for binary chunks');\n // Initialize buffer for binary chunks\n qrChunksBufferRef.current = { \n id: `bin_${Date.now()}`, \n total: 4, // We expect 4 chunks\n seen: new Set(), \n items: [],\n lastUpdateMs: Date.now()\n };\n }\n \n // Add chunk to buffer (use data hash as identifier)\n const chunkHash = scannedData.substring(0, 50); // Use first 50 chars as hash\n \n // Check if this chunk was already scanned\n if (qrChunksBufferRef.current.seen.has(chunkHash)) {\n console.log(`Chunk already scanned, ignoring...`);\n return Promise.resolve(false);\n }\n \n qrChunksBufferRef.current.seen.add(chunkHash);\n qrChunksBufferRef.current.items.push(scannedData);\n qrChunksBufferRef.current.lastUpdateMs = Date.now();\n \n // Emit progress and force re-render\n try {\n const uniqueCount = qrChunksBufferRef.current.seen.size;\n document.dispatchEvent(new CustomEvent('qr-scan-progress', { \n detail: { \n id: qrChunksBufferRef.current.id, \n seq: uniqueCount, \n total: qrChunksBufferRef.current.total \n } \n }));\n \n // Force re-render to update progress indicator\n setQrFramesTotal(qrChunksBufferRef.current.total);\n setQrFrameIndex(uniqueCount);\n } catch {}\n \n // Check if we have all chunks\n const isComplete = qrChunksBufferRef.current.seen.size >= qrChunksBufferRef.current.total;\n console.log(`Chunks collected: ${qrChunksBufferRef.current.seen.size}/${qrChunksBufferRef.current.total}, complete: ${isComplete}`);\n \n if (!isComplete) {\n // Keep scanner open for more chunks\n console.log(`Scanned chunk ${qrChunksBufferRef.current.seen.size}/${qrChunksBufferRef.current.total}, waiting for more...`);\n return Promise.resolve(false);\n }\n \n // All chunks collected - reconstruct binary data\n try {\n const fullBinaryData = qrChunksBufferRef.current.items.join('');\n // Store the original binary data, not decoded JSON\n if (showOfferStep) {\n setAnswerInput(fullBinaryData);\n } else {\n setOfferInput(fullBinaryData);\n }\n \n setMessages(prev => [...prev, { \n message: 'All binary chunks captured. Payload reconstructed.', \n type: 'success' \n }]);\n \n // Clear buffer and close scanner\n qrChunksBufferRef.current = { id: null, total: 0, seen: new Set(), items: [] };\n setShowQRScannerModal(false);\n return Promise.resolve(true);\n } catch (e) {\n console.warn('Binary chunks reconstruction failed:', e);\n return Promise.resolve(false);\n }\n }\n \n // Check if this might be a binary chunk (long string without JSON structure)\n if (scannedData.length > 100 && !scannedData.startsWith('{') && !scannedData.startsWith('[')) {\n console.log('Detected potential binary chunk (long non-JSON string):', scannedData.substring(0, 50) + '...');\n \n // Initialize buffer if not exists\n if (!qrChunksBufferRef.current.id) {\n console.log('Initializing buffer for potential binary chunks');\n qrChunksBufferRef.current = { \n id: `bin_${Date.now()}`, \n total: 4, // We expect 4 chunks\n seen: new Set(), \n items: [],\n lastUpdateMs: Date.now()\n };\n }\n \n // Add chunk to buffer (use data hash as identifier)\n const chunkHash = scannedData.substring(0, 50); // Use first 50 chars as hash\n \n // Check if this chunk was already scanned\n if (qrChunksBufferRef.current.seen.has(chunkHash)) {\n console.log(`Chunk already scanned, ignoring...`);\n return Promise.resolve(false);\n }\n \n qrChunksBufferRef.current.seen.add(chunkHash);\n qrChunksBufferRef.current.items.push(scannedData);\n qrChunksBufferRef.current.lastUpdateMs = Date.now();\n \n // Force re-render to update progress indicator\n try {\n const uniqueCount = qrChunksBufferRef.current.seen.size;\n document.dispatchEvent(new CustomEvent('qr-scan-progress', { \n detail: { \n id: qrChunksBufferRef.current.id, \n seq: uniqueCount, \n total: qrChunksBufferRef.current.total \n } \n }));\n \n // Force re-render to update progress indicator\n setQrFramesTotal(qrChunksBufferRef.current.total);\n setQrFrameIndex(uniqueCount);\n } catch {}\n \n // Check if we have all chunks\n const isComplete = qrChunksBufferRef.current.seen.size >= qrChunksBufferRef.current.total;\n console.log(`Chunks collected: ${qrChunksBufferRef.current.seen.size}/${qrChunksBufferRef.current.total}, complete: ${isComplete}`);\n \n if (!isComplete) {\n // Keep scanner open for more chunks\n console.log(`Scanned chunk ${qrChunksBufferRef.current.seen.size}/${qrChunksBufferRef.current.total}, waiting for more...`);\n return Promise.resolve(false);\n }\n \n // All chunks collected - reconstruct binary data\n try {\n const fullBinaryData = qrChunksBufferRef.current.items.join('');\n // Store the original binary data, not decoded JSON\n if (showOfferStep) {\n setAnswerInput(fullBinaryData);\n } else {\n setOfferInput(fullBinaryData);\n }\n \n setMessages(prev => [...prev, { \n message: 'All binary chunks captured. Payload reconstructed.', \n type: 'success' \n }]);\n \n // Clear buffer and close scanner\n qrChunksBufferRef.current = { id: null, total: 0, seen: new Set(), items: [] };\n setShowQRScannerModal(false);\n return Promise.resolve(true);\n } catch (e) {\n console.warn('Binary chunks reconstruction failed:', e);\n return Promise.resolve(false);\n }\n }\n \n // Single QR code - try to decode directly\n // Removed verbose debug log\n let parsedData;\n if (typeof window.decodeAnyPayload === 'function') {\n const any = window.decodeAnyPayload(scannedData);\n if (typeof any === 'string') {\n parsedData = JSON.parse(any);\n } else {\n parsedData = any; // object from binary\n }\n } else {\n const maybeDecompressed = (typeof window.decompressIfNeeded === 'function') ? window.decompressIfNeeded(scannedData) : scannedData;\n parsedData = JSON.parse(maybeDecompressed);\n }\n console.log('Decoded data:', parsedData);\n \n // QR with hdr/body: COSE or RAW/BIN animated frames\n if (parsedData.hdr && parsedData.body) {\n const { hdr } = parsedData;\n // Initialize/rotate buffer by id\n if (!qrChunksBufferRef.current.id || qrChunksBufferRef.current.id !== hdr.id) {\n qrChunksBufferRef.current = { id: hdr.id, total: hdr.total || 1, seen: new Set(), items: [], lastUpdateMs: Date.now() };\n try {\n document.dispatchEvent(new CustomEvent('qr-scan-progress', { detail: { id: hdr.id, seq: 0, total: hdr.total || 1 } }));\n } catch {}\n }\n // Deduplicate & record\n if (!qrChunksBufferRef.current.seen.has(hdr.seq)) {\n qrChunksBufferRef.current.seen.add(hdr.seq);\n qrChunksBufferRef.current.items.push(scannedData);\n qrChunksBufferRef.current.lastUpdateMs = Date.now();\n }\n // Emit progress based on unique frames captured\n try {\n const uniqueCount = qrChunksBufferRef.current.seen.size;\n document.dispatchEvent(new CustomEvent('qr-scan-progress', { detail: { id: hdr.id, seq: uniqueCount, total: qrChunksBufferRef.current.total || hdr.total || 0 } }));\n } catch {}\n const isComplete = qrChunksBufferRef.current.seen.size >= (qrChunksBufferRef.current.total || 1);\n if (!isComplete) {\n // Explicitly keep scanner open\n return Promise.resolve(false);\n }\n // Completed: decide RAW vs BIN vs COSE\n if (hdr.rt === 'raw') {\n try {\n // Sort by seq and concatenate bodies\n const parts = qrChunksBufferRef.current.items\n .map(s => JSON.parse(s))\n .sort((a, b) => (a.hdr.seq || 0) - (b.hdr.seq || 0))\n .map(p => p.body || '');\n const fullText = parts.join('');\n const payloadObj = JSON.parse(fullText);\n if (showOfferStep) {\n setAnswerInput(JSON.stringify(payloadObj, null, 2));\n } else {\n setOfferInput(JSON.stringify(payloadObj, null, 2));\n }\n setMessages(prev => [...prev, { message: 'All frames captured. RAW payload reconstructed.', type: 'success' }]);\n try { document.dispatchEvent(new CustomEvent('qr-scan-complete', { detail: { id: hdr.id } })); } catch {}\n // Close scanner from caller by returning true\n qrChunksBufferRef.current = { id: null, total: 0, seen: new Set(), items: [] };\n setShowQRScannerModal(false);\n return Promise.resolve(true);\n } catch (e) {\n console.warn('RAW multi-frame reconstruction failed:', e);\n return Promise.resolve(false);\n }\n } else if (hdr.rt === 'bin') {\n try {\n const parts = qrChunksBufferRef.current.items\n .map(s => JSON.parse(s))\n .sort((a, b) => (a.hdr.seq || 0) - (b.hdr.seq || 0))\n .map(p => p.body || '');\n const fullText = parts.join(''); // SB1:bin:...\n let payloadObj;\n if (typeof window.decodeAnyPayload === 'function') {\n const any = window.decodeAnyPayload(fullText);\n payloadObj = (typeof any === 'string') ? JSON.parse(any) : any;\n } else {\n payloadObj = JSON.parse(fullText);\n }\n if (showOfferStep) {\n setAnswerInput(JSON.stringify(payloadObj, null, 2));\n } else {\n setOfferInput(JSON.stringify(payloadObj, null, 2));\n }\n setMessages(prev => [...prev, { message: 'All frames captured. BIN payload reconstructed.', type: 'success' }]);\n try { document.dispatchEvent(new CustomEvent('qr-scan-complete', { detail: { id: hdr.id } })); } catch {}\n qrChunksBufferRef.current = { id: null, total: 0, seen: new Set(), items: [] };\n setShowQRScannerModal(false);\n return Promise.resolve(true);\n } catch (e) {\n console.warn('BIN multi-frame reconstruction failed:', e);\n return Promise.resolve(false);\n }\n } else if (window.receiveAndProcess) {\n try {\n const results = await window.receiveAndProcess(qrChunksBufferRef.current.items);\n if (results.length > 0) {\n const { payloadObj } = results[0];\n if (showOfferStep) {\n setAnswerInput(JSON.stringify(payloadObj, null, 2));\n } else {\n setOfferInput(JSON.stringify(payloadObj, null, 2));\n }\n setMessages(prev => [...prev, { message: 'All frames captured. COSE payload reconstructed.', type: 'success' }]);\n try { document.dispatchEvent(new CustomEvent('qr-scan-complete', { detail: { id: hdr.id } })); } catch {}\n qrChunksBufferRef.current = { id: null, total: 0, seen: new Set(), items: [] };\n setShowQRScannerModal(false);\n return Promise.resolve(true);\n }\n } catch (e) {\n console.warn('COSE multi-chunk processing failed:', e);\n }\n return Promise.resolve(false);\n } else {\n return Promise.resolve(false);\n }\n }\n \n // Check if this is a template-based QR code\n if (parsedData.type === 'enhanced_secure_offer_template') {\n console.log('QR scan: Template-based offer detected, reconstructing...');\n const fullOffer = reconstructFromTemplate(parsedData);\n \n // Determine which input to populate based on current mode\n if (showOfferStep) {\n // In \"Waiting for peer's response\" mode - populate answerInput\n setAnswerInput(JSON.stringify(fullOffer, null, 2));\n console.log('\uD83D\uDCF1 Template data populated to answerInput (waiting for response mode)');\n } else {\n // In \"Paste secure invitation\" mode - populate offerInput\n setOfferInput(JSON.stringify(fullOffer, null, 2));\n console.log('\uD83D\uDCF1 Template data populated to offerInput (paste invitation mode)');\n }\n setMessages(prev => [...prev, {\n message: '\uD83D\uDCF1 QR code scanned successfully! Full offer reconstructed from template.',\n type: 'success'\n }]);\n setShowQRScannerModal(false); // Close QR scanner modal\n return true;\n }\n // Check if this is a reference-based QR code\n else if (parsedData.type === 'secure_offer_reference' && parsedData.referenceId) {\n // Try to get the full offer data from localStorage\n const fullOfferData = localStorage.getItem(`qr_offer_${parsedData.referenceId}`);\n if (fullOfferData) {\n const fullOffer = JSON.parse(fullOfferData);\n // Determine which input to populate based on current mode\n if (showOfferStep) {\n // In \"Waiting for peer's response\" mode - populate answerInput\n setAnswerInput(JSON.stringify(fullOffer, null, 2));\n } else {\n // In \"Paste secure invitation\" mode - populate offerInput\n setOfferInput(JSON.stringify(fullOffer, null, 2));\n }\n setMessages(prev => [...prev, {\n message: '\uD83D\uDCF1 QR code scanned successfully! Full offer data retrieved.',\n type: 'success'\n }]);\n setShowQRScannerModal(false); // Close QR scanner modal\n return true;\n } else {\n setMessages(prev => [...prev, {\n message: 'QR code reference found but full data not available. Please use copy/paste.',\n type: 'error'\n }]);\n return false;\n }\n } else {\n // If payload was compressed, it's already decompressed above; keep legacy warning only when clearly incomplete\n if (!parsedData.sdp && parsedData.type === 'enhanced_secure_offer') {\n setMessages(prev => [...prev, {\n message: 'Compressed QR may omit SDP for brevity. Use copy/paste if connection fails.',\n type: 'warning'\n }]);\n }\n \n // Determine which input to populate based on current mode\n if (showOfferStep) {\n // In \"Waiting for peer's response\" mode - populate answerInput\n console.log('QR scan: Populating answerInput with:', parsedData);\n setAnswerInput(JSON.stringify(parsedData, null, 2));\n } else {\n // In \"Paste secure invitation\" mode - populate offerInput\n console.log('QR scan: Populating offerInput with:', parsedData);\n setOfferInput(JSON.stringify(parsedData, null, 2));\n }\n setMessages(prev => [...prev, {\n message: '\uD83D\uDCF1 QR code scanned successfully!',\n type: 'success'\n }]);\n setShowQRScannerModal(false);\n return true;\n }\n } catch (error) {\n // If not JSON, use as plain text\n if (showOfferStep) {\n // In \"Waiting for peer's response\" mode - populate answerInput\n setAnswerInput(scannedData);\n } else {\n // In \"Paste secure invitation\" mode - populate offerInput\n setOfferInput(scannedData);\n }\n setMessages(prev => [...prev, {\n message: '\uD83D\uDCF1 QR code scanned successfully!',\n type: 'success'\n }]);\n setShowQRScannerModal(false);\n return true;\n }\n };\n\n\n\n \n const handleCreateOffer = async () => {\n try {\n // All security features are enabled by default\n setIsGeneratingKeys(true);\n setOfferData('');\n setShowOfferStep(false);\n setShowQRCode(false);\n setQrCodeUrl('');\n \n const offer = await webrtcManagerRef.current.createSecureOffer();\n \n // Store offer data directly (no encryption needed with SAS)\n setOfferData(offer);\n setShowOfferStep(true);\n \n // Generate QR code with binary format and chunking\n const offerString = typeof offer === 'object' ? JSON.stringify(offer) : offer;\n try {\n if (typeof window.encodeBinaryToPrefixed === 'function') {\n const bin = window.encodeBinaryToPrefixed(offerString);\n // Force chunking into 4 parts - split binary data directly\n const TARGET_CHUNKS = 4;\n let total = TARGET_CHUNKS;\n let FRAME_MAX = Math.max(200, Math.ceil(bin.length / TARGET_CHUNKS));\n if (FRAME_MAX <= 0) FRAME_MAX = 200;\n \n // Ensure we don't exceed TARGET_CHUNKS\n if (bin.length <= FRAME_MAX) {\n total = 1;\n FRAME_MAX = bin.length;\n } else {\n // Recalculate to ensure exactly TARGET_CHUNKS parts\n FRAME_MAX = Math.ceil(bin.length / TARGET_CHUNKS);\n total = TARGET_CHUNKS;\n }\n \n const id = `bin_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n const chunks = [];\n for (let i = 0; i < total; i++) {\n const seq = i + 1;\n const part = bin.slice(i * FRAME_MAX, (i + 1) * FRAME_MAX);\n // Store binary chunks directly without JSON wrapper\n chunks.push(part);\n }\n \n // Seed first frame and start auto-advance immediately\n const isDesktop = (typeof window !== 'undefined') && ((window.innerWidth || 0) >= 1024);\n const QR_SIZE = isDesktop ? 720 : 512;\n if (window.generateQRCode && chunks.length > 0) {\n const firstUrl = await window.generateQRCode(chunks[0], { errorCorrectionLevel: 'M', size: QR_SIZE, margin: 2 });\n if (firstUrl) setQrCodeUrl(firstUrl);\n }\n \n // Store precomputed chunks to ref, ready for animation\n try { if (qrAnimationRef.current && qrAnimationRef.current.timer) { clearInterval(qrAnimationRef.current.timer); } } catch {}\n qrAnimationRef.current = { timer: null, chunks, idx: 0, active: true };\n setQrFramesTotal(chunks.length);\n setQrFrameIndex(1);\n setQrManualMode(false);\n \n // Start auto-advance loop for Offer immediately\n const intervalMs = 3000;\n qrAnimationRef.current.timer = setInterval(renderAndAdvance, intervalMs);\n \n // Show QR immediately for Offer flow\n try { setShowQRCode(true); } catch {}\n } else {\n // Fallback to single QR\n await generateQRCode(offer);\n try { setShowQRCode(true); } catch {}\n }\n } catch (e) {\n console.warn('Offer QR generation failed:', e);\n }\n \n const existingMessages = messages.filter(m => \n m.type === 'system' && \n (m.message.includes('Secure invitation created') || m.message.includes('Send the encrypted code'))\n );\n \n if (existingMessages.length === 0) {\n setMessages(prev => [...prev, { \n message: 'Secure invitation created and encrypted!', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n \n setMessages(prev => [...prev, { \n message: 'Send the invitation code to your interlocutor via a secure channel (voice call, SMS, etc.).',\n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n \n }\n \n if (!window.isUpdatingSecurity) {\n updateSecurityLevel().catch(console.error);\n }\n } catch (error) {\n setMessages(prev => [...prev, { \n message: `Error creating invitation: ${error.message}`, \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n } finally {\n setIsGeneratingKeys(false);\n }\n };\n \n const handleCreateAnswer = async () => {\n try {\n \n if (!offerInput.trim()) {\n setMessages(prev => [...prev, { \n message: 'You need to insert the invitation code from your interlocutor.', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n return;\n }\n \n try {\n setMessages(prev => [...prev, { \n message: 'Processing the secure invitation...', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n \n let offer;\n try {\n // Prefer binary decode first, then gzip JSON\n if (typeof window.decodeAnyPayload === 'function') {\n const any = window.decodeAnyPayload(offerInput.trim());\n offer = (typeof any === 'string') ? JSON.parse(any) : any;\n } else {\n const rawText = (typeof window.decompressIfNeeded === 'function') ? window.decompressIfNeeded(offerInput.trim()) : offerInput.trim();\n offer = JSON.parse(rawText);\n }\n } catch (parseError) {\n throw new Error(`Invalid invitation format: ${parseError.message}`);\n }\n \n if (!offer || typeof offer !== 'object') {\n throw new Error('The invitation must be an object');\n }\n \n // Support both compact and legacy offer formats\n const isValidOfferType = (offer.t === 'offer') || (offer.type === 'enhanced_secure_offer');\n if (!isValidOfferType) {\n throw new Error('Invalid invitation type. Expected offer or enhanced_secure_offer');\n }\n\n const answer = await webrtcManagerRef.current.createSecureAnswer(offer);\n \n // Store answer data directly (no encryption needed with SAS)\n setAnswerData(answer);\n setShowAnswerStep(true);\n \n // Generate QR code with binary format and chunking\n const answerString = typeof answer === 'object' ? JSON.stringify(answer) : answer;\n try {\n if (typeof window.encodeBinaryToPrefixed === 'function') {\n const bin = window.encodeBinaryToPrefixed(answerString);\n // Force chunking into 4 parts - split binary data directly\n const TARGET_CHUNKS = 4;\n let total = TARGET_CHUNKS;\n let FRAME_MAX = Math.max(200, Math.ceil(bin.length / TARGET_CHUNKS));\n if (FRAME_MAX <= 0) FRAME_MAX = 200;\n \n // Ensure we don't exceed TARGET_CHUNKS\n if (bin.length <= FRAME_MAX) {\n total = 1;\n FRAME_MAX = bin.length;\n } else {\n // Recalculate to ensure exactly TARGET_CHUNKS parts\n FRAME_MAX = Math.ceil(bin.length / TARGET_CHUNKS);\n total = TARGET_CHUNKS;\n }\n \n const id = `ans_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n const chunks = [];\n for (let i = 0; i < total; i++) {\n const seq = i + 1;\n const part = bin.slice(i * FRAME_MAX, (i + 1) * FRAME_MAX);\n // Store binary chunks directly without JSON wrapper\n chunks.push(part);\n }\n \n const isDesktop = (typeof window !== 'undefined') && ((window.innerWidth || 0) >= 1024);\n const QR_SIZE = isDesktop ? 720 : 512;\n if (window.generateQRCode && chunks.length > 0) {\n const firstUrl = await window.generateQRCode(chunks[0], { errorCorrectionLevel: 'M', size: QR_SIZE, margin: 2 });\n if (firstUrl) setQrCodeUrl(firstUrl);\n }\n \n try { if (qrAnimationRef.current && qrAnimationRef.current.timer) { clearInterval(qrAnimationRef.current.timer); } } catch {}\n qrAnimationRef.current = { timer: null, chunks, idx: 0, active: true };\n setQrFramesTotal(chunks.length);\n setQrFrameIndex(1);\n setQrManualMode(false);\n \n const intervalMs = 3000;\n qrAnimationRef.current.timer = setInterval(renderAndAdvance, intervalMs);\n \n // Show QR immediately for Answer flow\n try { setShowQRCode(true); } catch {}\n } else {\n // Fallback to single QR\n await generateQRCode(answer);\n try { setShowQRCode(true); } catch {}\n }\n } catch (e) {\n console.warn('Answer QR generation failed:', e);\n }\n \n // Mark generated answers as active immediately.\n // `answerInput` is empty on the joiner path\n // because the response was created locally,\n // not pasted by the user.\n if (typeof markAnswerCreated === 'function') {\n markAnswerCreated();\n }\n\n \n const existingResponseMessages = messages.filter(m => \n m.type === 'system' && \n (m.message.includes('Secure response created') || m.message.includes('Send the response'))\n );\n \n if (existingResponseMessages.length === 0) {\n setMessages(prev => [...prev, { \n message: 'Secure response created!', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n \n setMessages(prev => [...prev, { \n message: 'Send the response code to the initiator via a secure channel or let them scan the QR code below.', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n \n }\n \n // Update security level after creating answer\n if (!window.isUpdatingSecurity) {\n updateSecurityLevel().catch(console.error);\n }\n } catch (error) {\n console.error('Error in handleCreateAnswer:', error);\n setMessages(prev => [...prev, { \n message: `Error processing the invitation: ${error.message}`, \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n }\n } catch (error) {\n console.error('Error in handleCreateAnswer:', error);\n setMessages(prev => [...prev, { \n message: `Invitation processing error: ${error.message}`, \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n }\n };\n \n const handleConnect = async () => {\n try {\n if (!answerInput.trim()) {\n setMessages(prev => [...prev, { \n message: 'You need to insert the response code from your interlocutor.', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n return;\n }\n \n try {\n setMessages(prev => [...prev, { \n message: 'Processing the secure response...', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n \n let answer;\n try {\n // Prefer binary decode first, then gzip JSON\n if (typeof window.decodeAnyPayload === 'function') {\n const anyAnswer = window.decodeAnyPayload(answerInput.trim());\n answer = (typeof anyAnswer === 'string') ? JSON.parse(anyAnswer) : anyAnswer;\n } else {\n const rawText = (typeof window.decompressIfNeeded === 'function') ? window.decompressIfNeeded(answerInput.trim()) : answerInput.trim();\n answer = JSON.parse(rawText);\n }\n } catch (parseError) {\n throw new Error(`Invalid response format: ${parseError.message}`);\n }\n \n if (!answer || typeof answer !== 'object') {\n throw new Error('The response must be an object');\n }\n \n // Support both compact and legacy formats\n const answerType = answer.t || answer.type;\n if (!answerType || (answerType !== 'answer' && answerType !== 'enhanced_secure_answer')) {\n throw new Error('Invalid response type. Expected answer or enhanced_secure_answer');\n }\n \n await webrtcManagerRef.current.handleSecureAnswer(answer);\n \n // All security features are enabled by default - no session activation needed\n if (pendingSession) {\n setPendingSession(null);\n setMessages(prev => [...prev, { \n message: `All security features enabled by default`, \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n }\n \n setMessages(prev => [...prev, { \n message: 'Finalizing the secure connection...', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n \n // Update security level after handling answer\n if (!window.isUpdatingSecurity) {\n updateSecurityLevel().catch(console.error);\n }\n } catch (error) {\n console.error('Error in handleConnect inner try:', error);\n \n // \u0411\u043E\u043B\u0435\u0435 \u0434\u0435\u0442\u0430\u043B\u044C\u043D\u0430\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u043E\u0448\u0438\u0431\u043E\u043A\n let errorMessage = 'Connection setup error';\n if (error.message.includes('CRITICAL SECURITY FAILURE')) {\n if (error.message.includes('ECDH public key structure')) {\n errorMessage = 'Invalid response code - missing or corrupted cryptographic key. Please check the code and try again.';\n } else if (error.message.includes('ECDSA public key structure')) {\n errorMessage = 'Invalid response code - missing signature verification key. Please check the code and try again.';\n } else {\n errorMessage = 'Security validation failed - possible attack detected';\n }\n } else if (error.message.includes('too old') || error.message.includes('replay')) {\n errorMessage = 'Response data is outdated - please use a fresh invitation';\n } else if (error.message.includes('MITM') || error.message.includes('signature')) {\n errorMessage = 'Security breach detected - connection rejected';\n } else if (error.message.includes('Invalid') || error.message.includes('format')) {\n errorMessage = 'Invalid response format - please check the code';\n } else {\n errorMessage = ` ${error.message}`;\n }\n \n setMessages(prev => [...prev, { \n message: errorMessage, \n type: 'system',\n id: Date.now(),\n timestamp: Date.now(),\n showRetryButton: true\n }]);\n\n if (!error.message.includes('too old') && !error.message.includes('replay')) {\n setPendingSession(null);\n setSessionTimeLeft(0);\n }\n\n setConnectionStatus('failed');\n \n } \n } catch (error) {\n console.error('Error in handleConnect outer try:', error);\n\n let errorMessage = 'Connection setup error';\n if (error.message.includes('CRITICAL SECURITY FAILURE')) {\n if (error.message.includes('ECDH public key structure')) {\n errorMessage = 'Invalid response code - missing or corrupted cryptographic key. Please check the code and try again.';\n } else if (error.message.includes('ECDSA public key structure')) {\n errorMessage = 'Invalid response code - missing signature verification key. Please check the code and try again.';\n } else {\n errorMessage = 'Security validation failed - possible attack detected';\n }\n } else if (error.message.includes('too old') || error.message.includes('replay')) {\n errorMessage = 'Response data is outdated - please use a fresh invitation';\n } else if (error.message.includes('MITM') || error.message.includes('signature')) {\n errorMessage = 'Security breach detected - connection rejected';\n } else if (error.message.includes('Invalid') || error.message.includes('format')) {\n errorMessage = 'Invalid response format - please check the code';\n } else {\n errorMessage = `${error.message}`;\n }\n \n setMessages(prev => [...prev, { \n message: errorMessage, \n type: 'system',\n id: Date.now(),\n timestamp: Date.now(),\n showRetryButton: true\n }]);\n\n if (!error.message.includes('too old') && !error.message.includes('replay')) {\n setPendingSession(null);\n setSessionTimeLeft(0);\n }\n\n setConnectionStatus('failed');\n }\n };\n \n const handleVerifyConnection = async (userCode, isValid = true) => {\n if (isValid) {\n webrtcManagerRef.current.confirmVerification(userCode);\n // Mark local verification as confirmed\n setLocalVerificationConfirmed(true);\n \n // Initialize notification integration if permission was granted\n try {\n if (window.NotificationIntegration && webrtcManagerRef.current && !notificationIntegrationRef.current) {\n const integration = new window.NotificationIntegration(webrtcManagerRef.current);\n await integration.init();\n \n // Store reference for cleanup\n notificationIntegrationRef.current = integration;\n \n \n // Check if permission was already granted\n const status = integration.getStatus();\n if (status.permission === 'granted') {\n setMessages(prev => [...prev, { \n message: '\u2713 Notifications enabled - you will receive alerts when the tab is inactive', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n } else {\n setMessages(prev => [...prev, { \n message: '\u2139 Notifications disabled - you can enable them using the button on the main page', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n }\n } else if (notificationIntegrationRef.current) {\n } else {\n // Handle error silently\n }\n } catch (error) {\n console.warn('Failed to initialize notifications:', error);\n // Don't show error to user, notifications are optional\n }\n } else {\n setMessages(prev => [...prev, { \n message: ' Verification rejected. The connection is unsafe! Session reset..', \n type: 'system',\n id: Date.now(),\n timestamp: Date.now()\n }]);\n \n // Clear verification states\n setLocalVerificationConfirmed(false);\n setRemoteVerificationConfirmed(false);\n setBothVerificationsConfirmed(false);\n setShowVerification(false);\n setVerificationCode('');\n \n // Reset UI to initial state\n setConnectionStatus('disconnected');\n setOfferData('');\n setAnswerData('');\n setOfferInput('');\n setAnswerInput('');\n setShowOfferStep(false);\n setShowAnswerStep(false);\n setKeyFingerprint('');\n setSecurityLevel(null);\n setIsVerified(false);\n setMessages([]);\n \n setSessionTimeLeft(0);\n setPendingSession(null);\n \n // Dispatch disconnected event for SessionTimer\n document.dispatchEvent(new CustomEvent('disconnected'));\n \n handleDisconnect();\n }\n };\n \n const handleSendMessage = async () => {\n if (!messageInput.trim()) {\n return;\n }\n \n if (!webrtcManagerRef.current) {\n return;\n }\n\n const baseTextEarly = messageInput.trim();\n const midEarly = `m_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n\n // Offline guard: a P2P data channel can stay \"open\" after the\n // browser loses connectivity, so isConnected() isn't enough \u2014 show\n // the bubble as \"not sent\" (\u2717) instead of silently transmitting.\n // Uses the live offline state (catches console-simulated offline too).\n const offlineNow = isOffline\n || (typeof navigator !== 'undefined' && navigator.onLine === false)\n || (window.pwaOfflineManager && window.pwaOfflineManager.isOnline === false);\n if (offlineNow) {\n // Store-and-forward: show one check (sent), keep it in the\n // conversation at its original time, and transmit on reconnect.\n const outTextOff = codeMode ? '```\\n' + baseTextEarly + '\\n```' : baseTextEarly;\n const tsOff = Date.now();\n const metaOff = { mid: midEarly, ts: tsOff };\n if (viewOnceMode) { metaOff.once = true; metaOff.onceTtl = viewOnceTtl; }\n if (disappearTtl > 0) metaOff.ttl = disappearTtl;\n const echoOpts = { mid: midEarly, status: 'sent', timestamp: tsOff };\n if (disappearTtl > 0) echoOpts.expiresAt = tsOff + disappearTtl * 1000;\n addMessageWithAutoScroll(outTextOff, 'sent', echoOpts);\n // Queue on the ACTIVE session's outgoing queue (created in createSession);\n // guard in case the entry is missing so the echo never gets lost.\n const q = queuesRef.current.get(activeIdRef.current);\n if (q) q.outgoing.push({ outText: outTextOff, meta: metaOff, mid: midEarly });\n setMessageInput('');\n if (codeMode) setCodeMode(false);\n if (viewOnceMode) setViewOnceMode(false);\n return;\n }\n\n // Online but the channel isn't ready (e.g. dropped/not yet established) \u2014\n // can't transmit. The setup screen is shown for re-establishment in that case.\n if (!webrtcManagerRef.current.isConnected()) {\n return;\n }\n\n try {\n const baseText = baseTextEarly;\n // Code mode wraps the text in a fenced block so both sides render\n // a code window with a copy button (the marker travels as text).\n const outText = codeMode ? '```\\n' + baseText + '\\n```' : baseText;\n\n // Shared id lets unsend/disappearing/receipts reference the\n // same message on both peers.\n const mid = midEarly;\n const meta = { mid, ts: Date.now() }; // ts \u2192 recipient shows the original send time\n if (viewOnceMode) { // applies to the recipient\n meta.once = true;\n meta.onceTtl = viewOnceTtl; // seconds visible after opening\n }\n if (disappearTtl > 0) meta.ttl = disappearTtl; // applies to both sides\n\n // Local echo: sender sees their own text normally (view-once is a\n // recipient-side control), but disappearing also expires our copy.\n // Starts as \"sending\"; flips to \"sent\" once the channel accepts it\n // and \"delivered\" when the peer's receipt arrives.\n const localOpts = { mid, status: 'sending' };\n if (disappearTtl > 0) localOpts.expiresAt = Date.now() + disappearTtl * 1000;\n addMessageWithAutoScroll(outText, 'sent', localOpts);\n\n try {\n await webrtcManagerRef.current.sendMessage(outText, meta);\n // Reliable ordered data channel: a resolved send means the peer's\n // device received it \u2192 two grey ticks. The peer's read receipt\n // (onMessageDelivered) upgrades it to two green ticks ('read').\n updateMessageStatus(mid, 'delivered');\n } catch (sendErr) {\n updateMessageStatus(mid, 'failed');\n throw sendErr;\n }\n setMessageInput('');\n // Per-message toggles reset; disappearing stays as a sticky setting.\n if (codeMode) setCodeMode(false);\n if (viewOnceMode) setViewOnceMode(false);\n } catch (error) {\n const msg = String(error?.message || error);\n if (!/queued for sending|Data channel not ready/i.test(msg)) {\n addMessageWithAutoScroll(`Sending error: ${msg}`,'system');\n }\n }\n };\n\n // Unsend: remove locally and ask the peer to drop it too.\n const handleUnsendMessage = React.useCallback((mid) => {\n if (!mid) return;\n setMessages(prev => prev.filter(m => String(m.mid) !== String(mid)));\n try { webrtcManagerRef.current?.sendMessageDelete?.(String(mid)); } catch (_) {}\n }, []);\n\n // View-once reveal timeout / disappearing expiry: wipe the content and\n // leave a \"This message has expired\" tombstone (per the design).\n const handleMessageExpire = React.useCallback((id) => {\n setMessages(prev => prev.map(m => m.id === id ? { ...m, expired: true, message: '', expiresAt: undefined } : m));\n }, []);\n\n // Panic wipe: clear the conversation, tear down the session and wipe keys.\n const handleClearData = () => {\n setOfferData('');\n setAnswerData('');\n setOfferInput('');\n setAnswerInput('');\n setShowOfferStep(false);\n setIsGeneratingKeys(false);\n\n if (!shouldPreserveAnswerData()) {\n setShowAnswerStep(false);\n }\n \n setShowVerification(false);\n setShowQRCode(false);\n setShowQRScanner(false);\n setShowQRScannerModal(false);\n // Clear QR scanner buffer\n qrChunksBufferRef.current = { id: null, total: 0, seen: new Set(), items: [] };\n\n if (!shouldPreserveAnswerData()) {\n setQrCodeUrl('');\n }\n \n setVerificationCode('');\n setIsVerified(false);\n setKeyFingerprint('');\n setSecurityLevel(null);\n setConnectionStatus('disconnected');\n setMessages([]);\n setMessageInput('');\n \n // Clear verification states\n setLocalVerificationConfirmed(false);\n setRemoteVerificationConfirmed(false);\n setBothVerificationsConfirmed(false);\n \n // PAKE passwords removed - using SAS verification instead \n\n if (typeof console.clear === 'function') {\n console.clear();\n }\n \n // Cleanup session state\n setSessionTimeLeft(0);\n \n setPendingSession(null);\n document.dispatchEvent(new CustomEvent('peer-disconnect'));\n // Session manager removed - all features enabled by default\n };\n \n const handleIncomingDecision = React.useCallback(async (fileId, accepted) => {\n try {\n if (accepted) {\n await webrtcManagerRef.current?.acceptIncomingFile(fileId);\n } else {\n await webrtcManagerRef.current?.rejectIncomingFile(fileId);\n }\n } finally {\n setPendingIncomingFiles(prev => prev.filter(f => f.fileId !== fileId));\n }\n }, []);\n\n // Disconnect tears down ONLY the active session \u2014 its peerConnection, its\n // manager (with the manager's own key-wipe logic) and its notification\n // integration. Every other session keeps running untouched. If it was the\n // last session we immediately open a fresh blank one so the UI isn't empty.\n const handleDisconnect = () => {\n try {\n const id = activeIdRef.current;\n setSessionTimeLeft(0);\n // Global lifecycle events (consumed by any remaining listeners).\n document.dispatchEvent(new CustomEvent('peer-disconnect'));\n document.dispatchEvent(new CustomEvent('disconnected'));\n document.dispatchEvent(new CustomEvent('session-cleanup', {\n detail: { timestamp: Date.now(), reason: 'manual_disconnect' }\n }));\n // Manual disconnect always wipes this chat's data and removes it; the\n // ensure-at-least-one-session effect re-opens the landing if it was the\n // last one. Siblings keep running untouched.\n destroySession(id);\n if (typeof console.clear === 'function') console.clear();\n } catch (error) {\n console.error('Error during disconnect:', error);\n }\n };\n \n const handleSessionActivated = (session) => {\n let message;\n if (session.type === 'demo') {\n message = ` Demo session activated for 6 minutes. You can create invitations!`;\n } else {\n message = ` All security features enabled by default. You can create invitations!`;\n }\n \n addMessageWithAutoScroll(message, 'system');\n \n };\n \n React.useEffect(() => {\n if (connectionStatus === 'connected' && isVerified) {\n addMessageWithAutoScroll(' Secure connection successfully established and verified! You can now communicate safely with full protection against MITM attacks and Perfect Forward Secrecy..', 'system');\n \n }\n }, [connectionStatus, isVerified]);\n \n // Chat view requires an ACTIVE verified connection. On a drop the manager\n // clears its verification state (it must be re-established \u2014 there is no\n // \"keep chatting while disconnected\" in this P2P design), so we fall back to\n // the setup screen, which is the re-establish path. Note: this means a dropped\n // chat shows the connect screen; the conversation history stays in the session.\n const isConnectedAndVerified = (connectionStatus === 'connected' || connectionStatus === 'verified') && isVerified;\n\n // The PWA \"Install app\" pill is a landing-page affordance \u2014 hide it once\n // we're inside the chat (CSS: body.sb-in-chat #pwa-install-button).\n React.useEffect(() => {\n document.body.classList.toggle('sb-in-chat', isConnectedAndVerified);\n return () => document.body.classList.remove('sb-in-chat');\n }, [isConnectedAndVerified]);\n \n React.useEffect(() => {\n // All security features are enabled by default - no session activation needed\n if (isConnectedAndVerified && pendingSession && connectionStatus !== 'failed') {\n setPendingSession(null);\n setSessionTimeLeft(0); \n addMessageWithAutoScroll(' All security features enabled by default', 'system');\n }\n }, [isConnectedAndVerified, pendingSession, connectionStatus]);\n\n // QR Scanner initialization\n React.useEffect(() => {\n if (showQRScannerModal && window.Html5Qrcode) {\n const html5Qrcode = new window.Html5Qrcode(\"qr-reader\");\n const config = { \n fps: 10\n // \u0423\u0431\u0438\u0440\u0430\u0435\u043C qrbox \u0447\u0442\u043E\u0431\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u0441\u044E \u043E\u0431\u043B\u0430\u0441\u0442\u044C\n };\n\n let isScanning = true;\n\n html5Qrcode.start(\n { facingMode: \"environment\" }, // Use back camera\n config,\n (decodedText, decodedResult) => {\n if (!isScanning) {\n console.log('Scanner stopped, ignoring scan');\n return;\n }\n \n console.log('QR Code scanned:', decodedText);\n console.log('Current buffer state:', qrChunksBufferRef.current);\n \n handleQRScan(decodedText).then((success) => {\n console.log('QR scan result:', success);\n if (success) {\n // Successfully processed - stop scanner and close modal\n console.log('Closing scanner and modal');\n isScanning = false;\n \n // Stop scanner first, then clear\n try {\n console.log('Stopping scanner...');\n html5Qrcode.stop().then(() => {\n console.log('Scanner stopped, clearing...');\n html5Qrcode.clear();\n setShowQRScannerModal(false);\n }).catch((err) => {\n console.log('Error stopping scanner:', err);\n // Try to clear anyway\n try {\n html5Qrcode.clear();\n } catch (clearErr) {\n console.log('Error clearing scanner:', clearErr);\n }\n setShowQRScannerModal(false);\n });\n } catch (err) {\n console.log('Error in scanner cleanup:', err);\n setShowQRScannerModal(false);\n }\n } else {\n console.log('Continuing to scan for more chunks...');\n }\n }).catch((error) => {\n console.error('QR scan processing error:', error);\n // Continue scanning on error\n });\n },\n (error) => {\n // Ignore scanning errors - continue scanning\n if (isScanning) {\n console.log('QR scan error (ignored):', error);\n }\n }\n ).catch((err) => {\n console.error('QR Scanner start error:', err);\n // Close modal on start error\n setShowQRScannerModal(false);\n });\n\n return () => {\n isScanning = false;\n try {\n // Try to stop scanner, but don't worry if it's already stopped\n html5Qrcode.stop().then(() => {\n html5Qrcode.clear();\n }).catch((err) => {\n // Scanner might already be stopped, just clear it\n console.log('Scanner already stopped or error stopping:', err);\n try {\n html5Qrcode.clear();\n } catch (clearErr) {\n console.log('Error clearing scanner in cleanup:', clearErr);\n }\n });\n } catch (err) {\n console.log('Error in cleanup:', err);\n // Just try to clear, don't worry about stopping\n try {\n html5Qrcode.clear();\n } catch (clearErr) {\n console.log('Error clearing scanner in cleanup:', clearErr);\n }\n }\n };\n }\n }, [showQRScannerModal]);\n \n const sessionChats = decorateSessions(sessionsState);\n // The multi-session chrome (left rail + chat column) appears only once there\n // is a genuinely WORKING conversation \u2014 a session whose SAS is verified \u2014 or\n // when more than one session exists. The whole offer/answer/verification flow\n // of the first session (which the manager reports as 'connecting'/'verifying')\n // stays on the original single-column \"Start Secure\" screen, exactly as before;\n // the rail only shows up after the first secure channel is actually established.\n const showSidebar = sessionsState.order.length > 1 || sessionsState.order.some((id) => {\n const s = sessionsState.sessions[id];\n return s && s.sas && s.sas.isVerified;\n });\n\n return React.createElement('div', {\n className: \"minimal-bg\",\n // With the rail visible the app is a fixed-height shell (rail + column\n // fill the viewport, design-style). Otherwise it's the scrollable landing.\n // flexDirection:'row' is explicit \u2014 the .minimal-bg class forces\n // flex-direction:column, which would otherwise stack the rail ABOVE the chat.\n style: showSidebar ? { display: 'flex', flexDirection: 'row', height: '100vh', width: '100%', overflow: 'hidden' } : { minHeight: '100vh' }\n }, [\n showSidebar && React.createElement(SessionsSidebar, {\n key: 'sessions-sidebar',\n chats: sessionChats,\n collapsed: sidebarCollapsed,\n drawerOpen: sidebarDrawerOpen,\n onToggleCollapse: () => setSidebarCollapsed(v => !v),\n onSelect: handleSelectSession,\n onNewChat: handleNewChat,\n onRename: handleRenameSession,\n onCloseDrawer: () => setSidebarDrawerOpen(false),\n myStatus: myStatus,\n onSetStatus: setMyStatus\n }),\n // Mobile-only hamburger that opens the drawer (hidden on desktop via CSS).\n showSidebar && React.createElement('button', {\n key: 'sb-burger',\n className: 'sb-burger',\n onClick: () => setSidebarDrawerOpen(true),\n style: { display: 'none', position: 'fixed', top: '13px', left: '13px', zIndex: 55, width: '38px', height: '38px', borderRadius: '10px', placeItems: 'center', border: '1px solid rgba(255,255,255,0.1)', background: 'rgba(18,18,20,0.9)', color: '#cfcfd4', cursor: 'pointer' },\n dangerouslySetInnerHTML: { __html: SB_SVG.burger }\n }),\n React.createElement('div', {\n key: 'app-column',\n className: showSidebar ? 'minimal-bg' : 'minimal-bg min-h-screen',\n style: showSidebar ? { flex: 1, minWidth: 0, height: '100vh', overflow: 'hidden', display: 'flex', flexDirection: 'column' } : {}\n }, [\n // Advanced network settings now render inside the connection\n // screen's right panel (see EnhancedConnectionSetup), matching\n // the design's slide-up-within-the-right-column behavior.\n // The verified chat renders its own in-chat header (SecureBit Chat\n // design); the shared header is shown only on the landing/setup view.\n (!isConnectedAndVerified && !showSidebar && window.EnhancedMinimalHeader) && React.createElement(window.EnhancedMinimalHeader, {\n key: 'header',\n status: connectionStatus,\n fingerprint: keyFingerprint,\n verificationCode: verificationCode,\n onDisconnect: handleDisconnect,\n isConnected: isConnectedAndVerified,\n securityLevel: securityLevel,\n // sessionManager removed - all features enabled by default\n webrtcManager: webrtcManagerRef.current\n }),\n \n React.createElement('main', {\n key: 'main'\n }, \n (() => {\n return isConnectedAndVerified;\n })()\n ? (() => {\n return React.createElement(EnhancedChatInterface, {\n title: active ? active.peerLabel : '',\n isOffline: isOffline,\n peerPresence: active ? active.peerPresence : null,\n onRenameTitle: (label) => { if (activeSessionId) dispatch({ type: SA.RENAME, id: activeSessionId, label }); },\n messages: messages,\n messageInput: messageInput,\n setMessageInput: setMessageInput,\n onSendMessage: handleSendMessage,\n onDisconnect: handleDisconnect,\n keyFingerprint: keyFingerprint,\n isVerified: isVerified,\n chatMessagesRef: chatMessagesRef,\n scrollToBottom: scrollToBottom,\n webrtcManager: webrtcManagerRef.current,\n status: connectionStatus,\n pendingIncomingFiles: pendingIncomingFiles,\n onIncomingDecision: handleIncomingDecision,\n // Secure chat extras\n codeMode: codeMode,\n setCodeMode: setCodeMode,\n viewOnceMode: viewOnceMode,\n setViewOnceMode: setViewOnceMode,\n viewOnceTtl: viewOnceTtl,\n setViewOnceTtl: setViewOnceTtl,\n disappearTtl: disappearTtl,\n setDisappearTtl: setDisappearTtl,\n nowTick: nowTick,\n onUnsendMessage: handleUnsendMessage,\n onMessageExpire: handleMessageExpire\n });\n })()\n : React.createElement(EnhancedConnectionSetup, {\n onCreateOffer: handleCreateOffer,\n onCreateAnswer: handleCreateAnswer,\n onConnect: handleConnect,\n onClearData: handleClearData,\n onVerifyConnection: handleVerifyConnection,\n connectionStatus: connectionStatus,\n offerData: offerData,\n answerData: answerData,\n offerInput: offerInput,\n setOfferInput: setOfferInput,\n answerInput: answerInput,\n setAnswerInput: setAnswerInput,\n showOfferStep: showOfferStep,\n showAnswerStep: showAnswerStep,\n verificationCode: verificationCode,\n showVerification: showVerification,\n showQRCode: showQRCode,\n qrCodeUrl: qrCodeUrl,\n showQRScanner: showQRScanner,\n setShowQRCode: setShowQRCode,\n setShowQRScanner: setShowQRScanner,\n setShowQRScannerModal: setShowQRScannerModal,\n messages: messages,\n localVerificationConfirmed: localVerificationConfirmed,\n remoteVerificationConfirmed: remoteVerificationConfirmed,\n bothVerificationsConfirmed: bothVerificationsConfirmed,\n // QR control props\n qrFramesTotal: qrFramesTotal,\n qrFrameIndex: qrFrameIndex,\n qrManualMode: qrManualMode,\n toggleQrManualMode: toggleQrManualMode,\n nextQrFrame: nextQrFrame,\n prevQrFrame: prevQrFrame,\n // PAKE passwords removed - using SAS verification instead\n markAnswerCreated: markAnswerCreated,\n notificationIntegrationRef: notificationIntegrationRef,\n isGeneratingKeys: isGeneratingKeys,\n setIsGeneratingKeys: setIsGeneratingKeys,\n handleCreateOffer: handleCreateOffer,\n relayOnlyMode: relayOnlyMode,\n setRelayOnlyMode: setRelayOnlyMode,\n webrtcManagerRef: webrtcManagerRef,\n showIceSettings: showIceSettings,\n setShowIceSettings: setShowIceSettings,\n iceServersText: iceServersText,\n iceSettingsPersisted: iceSettingsPersisted,\n customIceServers: customIceServers,\n handleApplyIceSettings: handleApplyIceSettings,\n handleForgetIceSettings: handleForgetIceSettings,\n // Render only the create/connect card inside the chat column\n // (an additional session), instead of the full landing.\n compact: showSidebar\n })\n ),\n \n // QR Scanner Modal \u2014 camera scan (design import: \"Start Secure\" / Camera scan modal)\n showQRScannerModal && (() => {\n const closeScanner = () => {\n setShowQRScannerModal(false);\n // Clear QR scanner buffer\n qrChunksBufferRef.current = { id: null, total: 0, seen: new Set(), items: [] };\n };\n const buf = qrChunksBufferRef.current;\n const hasParts = !!(buf && buf.id && buf.total > 1);\n const framesText = hasParts\n ? `Scanning frames\u2026 ${buf.seen.size} / ${buf.total}`\n : 'Scanning\u2026';\n const corner = (k, st) => React.createElement('span', {\n key: k,\n style: Object.assign({ position: 'absolute', width: '34px', height: '34px', zIndex: 3 }, st)\n });\n return React.createElement('div', {\n key: 'qr-scanner-modal',\n onClick: closeScanner,\n style: { position: 'fixed', inset: 0, zIndex: 50, display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '32px', background: 'rgba(6,6,8,0.82)', backdropFilter: 'blur(10px)', WebkitBackdropFilter: 'blur(10px)', animation: 'sbUp .2s ease' }\n }, [\n React.createElement('div', {\n key: 'scanner-container',\n onClick: (e) => e.stopPropagation(),\n style: { width: '100%', maxWidth: '420px', borderRadius: '22px', border: '1px solid rgba(255,255,255,0.1)', background: '#111113', boxShadow: '0 30px 90px rgba(0,0,0,0.6)', overflow: 'hidden' }\n }, [\n // Header\n React.createElement('div', {\n key: 'scanner-header',\n style: { display: 'flex', alignItems: 'center', gap: '11px', padding: '18px 20px', borderBottom: '1px solid rgba(255,255,255,0.06)' }\n }, [\n React.createElement('span', {\n key: 'scanner-icon',\n style: { display: 'flex' },\n dangerouslySetInnerHTML: { __html: '' }\n }),\n React.createElement('div', {\n key: 'scanner-titles',\n style: { flex: 1, lineHeight: 1.2 }\n }, [\n React.createElement('div', {\n key: 'scanner-title',\n style: { fontSize: '15.5px', fontWeight: 800, color: '#f4f4f6' }\n }, 'Scan QR code'),\n React.createElement('div', {\n key: 'scanner-hint',\n style: { fontSize: '12px', color: '#7b7b83' }\n }, \"Point your camera at their QR\")\n ]),\n React.createElement('button', {\n key: 'close-btn',\n onClick: closeScanner,\n style: { width: '32px', height: '32px', display: 'grid', placeItems: 'center', borderRadius: '9px', border: 'none', background: 'rgba(255,255,255,0.05)', color: '#9a9aa2', cursor: 'pointer' }\n }, React.createElement('i', { className: 'fas fa-times' }))\n ]),\n // Body\n React.createElement('div', {\n key: 'scanner-body',\n style: { padding: '22px 24px 24px' }\n }, [\n React.createElement('div', {\n key: 'viewfinder',\n style: { position: 'relative', aspectRatio: '1', borderRadius: '18px', overflow: 'hidden', background: '#000', border: '1px solid rgba(255,255,255,0.1)' }\n }, [\n React.createElement('div', {\n key: 'vf-bg',\n style: { position: 'absolute', inset: 0, background: 'radial-gradient(circle at 50% 45%, #1a1a1f, #000)' }\n }),\n // Camera video is injected here by Html5Qrcode\n React.createElement('div', {\n key: 'qr-reader',\n id: 'qr-reader',\n style: { position: 'absolute', inset: 0, zIndex: 1 }\n }),\n corner('c-tl', { top: '18px', left: '18px', borderTop: '2.5px solid #3ecf8e', borderLeft: '2.5px solid #3ecf8e', borderRadius: '8px 0 0 0' }),\n corner('c-tr', { top: '18px', right: '18px', borderTop: '2.5px solid #3ecf8e', borderRight: '2.5px solid #3ecf8e', borderRadius: '0 8px 0 0' }),\n corner('c-bl', { bottom: '18px', left: '18px', borderBottom: '2.5px solid #3ecf8e', borderLeft: '2.5px solid #3ecf8e', borderRadius: '0 0 0 8px' }),\n corner('c-br', { bottom: '18px', right: '18px', borderBottom: '2.5px solid #3ecf8e', borderRight: '2.5px solid #3ecf8e', borderRadius: '0 0 8px 0' }),\n React.createElement('span', {\n key: 'scan-line',\n style: { position: 'absolute', left: '18px', right: '18px', height: '2.5px', zIndex: 2, background: 'linear-gradient(90deg, transparent, #3ecf8e, transparent)', boxShadow: '0 0 16px #3ecf8e', animation: 'sbScan 1.5s ease-in-out infinite alternate' }\n }),\n React.createElement('div', {\n key: 'scan-status',\n 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))' }\n }, [\n React.createElement('span', {\n key: 'spinner',\n style: { display: 'flex', animation: 'sbSpin 1.4s linear infinite' },\n dangerouslySetInnerHTML: { __html: '' }\n }),\n React.createElement('span', {\n key: 'scan-frames',\n style: { fontSize: '12.5px', fontWeight: 600, color: '#cfcfd4' }\n }, framesText)\n ])\n ]),\n React.createElement('p', {\n key: 'scanner-note',\n style: { margin: '16px 0 0', textAlign: 'center', fontSize: '12px', lineHeight: 1.5, color: '#6b6b73' }\n }, 'Hold steady until all parts are captured. Camera access is local \u2014 nothing is uploaded.')\n ])\n ])\n ]);\n })()\n ]) // end app-column\n ]);\n };\n // UpdateChecker \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 \u0434\u043B\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0439 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439\n const UpdateCheckerWrapper = ({ children }) => {\n // \u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E\u0441\u0442\u044C UpdateChecker\n if (typeof window !== 'undefined' && window.UpdateChecker) {\n return React.createElement(window.UpdateChecker, {\n debug: false\n }, children);\n }\n // Fallback \u0435\u0441\u043B\u0438 UpdateChecker \u043D\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\n return children;\n };\n\n function initializeApp() {\n if (window.EnhancedSecureCryptoUtils && window.EnhancedSecureWebRTCManager) {\n // \u041E\u0431\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043C \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0432 UpdateChecker \u0434\u043B\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0439 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439\n const AppWithUpdateChecker = React.createElement(UpdateCheckerWrapper, null,\n React.createElement(EnhancedSecureP2PChat)\n );\n ReactDOM.render(AppWithUpdateChecker, document.getElementById('root'));\n } else {\n console.error('\u041C\u043E\u0434\u0443\u043B\u0438 \u043D\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u044B:', {\n hasCrypto: !!window.EnhancedSecureCryptoUtils,\n hasWebRTC: !!window.EnhancedSecureWebRTCManager\n });\n }\n }\n\n if (typeof window !== 'undefined') {\n\n window.addEventListener('unhandledrejection', (event) => {\n console.error('Unhandled promise rejection:', event.reason);\n event.preventDefault(); \n });\n \n\n window.addEventListener('error', (event) => {\n console.error('Global error:', event.error);\n event.preventDefault(); \n });\n \n if (!window.initializeApp) {\n window.initializeApp = initializeApp;\n }\n };\n \n // Render Enhanced Application with UpdateChecker\n if (window.EnhancedSecureCryptoUtils && window.EnhancedSecureWebRTCManager) {\n const UpdateCheckerWrapper = ({ children }) => {\n if (typeof window !== 'undefined' && window.UpdateChecker) {\n return React.createElement(window.UpdateChecker, {\n debug: false\n }, children);\n }\n return children;\n };\n const AppWithUpdateChecker = React.createElement(UpdateCheckerWrapper, null,\n React.createElement(EnhancedSecureP2PChat)\n );\n ReactDOM.render(AppWithUpdateChecker, document.getElementById('root'));\n } else {\n ReactDOM.render(React.createElement(EnhancedSecureP2PChat), document.getElementById('root'));\n }\n"],
+ "mappings": "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",
+ "names": ["setMessages", "addMessageWithAutoScroll", "updateMessageStatus", "setConnectionStatus", "setKeyFingerprint", "setVerificationCode", "setIsVerified", "setLocalVerificationConfirmed", "setRemoteVerificationConfirmed", "setBothVerificationsConfirmed", "setShowVerification", "setShowOfferStep", "setShowAnswerStep", "setShowQRCode", "setQrCodeUrl", "setOfferData", "setAnswerData", "setOfferInput", "setAnswerInput", "setPendingIncomingFiles", "opts", "offerData", "payload", "UpdateCheckerWrapper"]
}
diff --git a/index.html b/index.html
index 1de523f..514b00e 100644
--- a/index.html
+++ b/index.html
@@ -23,7 +23,7 @@
-
+
@@ -89,7 +89,7 @@
-
+
@@ -98,7 +98,7 @@
-
+
@@ -182,32 +182,36 @@
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+