diff --git a/SECURITY_DISCLAIMER.md b/SECURITY_DISCLAIMER.md index 77cddc5..6601c86 100644 --- a/SECURITY_DISCLAIMER.md +++ b/SECURITY_DISCLAIMER.md @@ -1,6 +1,6 @@ # Security Disclaimer and Terms of Use -## 🔒 SecureBit.chat Enhanced Security Edition v4.01.212 +## 🔒 SecureBit.chat Enhanced Security Edition v4.01.222 ### Important Legal Notice @@ -203,6 +203,6 @@ This software is created to: --- *Last Updated: 08.07.2025* -*Version: Enhanced Security Edition v4.01.212* +*Version: Enhanced Security Edition v4.01.222* **USE AT YOUR OWN RISK AND RESPONSIBILITY** \ No newline at end of file diff --git a/index.html b/index.html index 394fee8..414e062 100644 --- a/index.html +++ b/index.html @@ -24,45 +24,43 @@ + - - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - + + + + + + @@ -163,7 +161,7 @@ icon: "fas fa-shield-halved", color: "orange", title: "12-Layer Military Security", - description: "Revolutionary defense system with ECDH P-384 + AES-GCM 256 + ECDSA. Enhanced Security Edition v4.01.212 provides military-grade protection exceeding government standards." + description: "Revolutionary defense system with ECDH P-384 + AES-GCM 256 + ECDSA. Enhanced Security Edition v4.01.222 provides military-grade protection exceeding government standards." }, { icon: "fas fa-bolt", @@ -513,7 +511,7 @@ Enhanced Security Edition Comparison

- SecureBit.chat v4.01.212 Enhanced Security Edition vs leading secure messengers + SecureBit.chat v4.01.222 Enhanced Security Edition vs leading secure messengers

🏆 @@ -659,7 +657,7 @@

- SecureBit.chat v4.01.212 Enhanced Security Edition Summary + SecureBit.chat v4.01.222 Enhanced Security Edition Summary

SecureBit.chat dominates in 11 out of 15 security categories, establishing itself as the most secure P2P messenger available. @@ -2004,7 +2002,7 @@ React.createElement('i', { className: 'fas fa-check-circle mr-2' }), - 'Encrypted invitation created! Send the code and password to your contact.:' + 'Encrypted invitation created! Send the code and password to your contact:' ]), offerPassword && React.createElement('div', { key: 'password-display', @@ -2051,63 +2049,63 @@ ]), // Step 2 - Session Type Selection + // showOfferStep && React.createElement('div', { + // key: 'step2', + // className: "card-minimal rounded-xl p-6" + // }, [ + // React.createElement('div', { + // key: 'step-header', + // className: "flex items-center mb-4" + // }, [ + // React.createElement('div', { + // key: 'number', + // className: "w-8 h-8 bg-green-500 text-white rounded-lg flex items-center justify-center font-semibold text-sm mr-3" + // }, '2'), + // React.createElement('h3', { + // key: 'title', + // className: "text-lg font-medium text-primary" + // }, "Select session type") + // ]), + // React.createElement('p', { + // key: 'description', + // className: "text-secondary text-sm mb-4" + // }, "Choose a session plan or use limited demo mode for testing."), + // React.createElement(SessionTypeSelector, { + // key: 'session-selector', + // onSelectType: (sessionType) => { + // // Save the selected session type + // setSelectedSessionType(sessionType); + // console.log('🎯 Session type selected:', sessionType); + + // // FIX: For demo sessions, we immediately call automatic activation + // if (sessionType === 'demo') { + // console.log('🎮 Demo session selected, scheduling automatic activation...'); + // // Delay activation for 2 seconds to stabilize + // setTimeout(() => { + // if (sessionManager) { + // console.log('🚀 Triggering demo session activation from selection...'); + // handleDemoVerification(); + // } + // }, 2000); + // } + + // // Open a modal payment window + // if (typeof window.showPaymentModal === 'function') { + // window.showPaymentModal(sessionType); + // } else { + // // Fallback - show session information + // console.log('Selected session type:', sessionType); + // } + // }, + // onCancel: resetToSelect, + // sessionManager: window.sessionManager + // }) + // ]), + + // Step 3 - Waiting for response showOfferStep && React.createElement('div', { key: 'step2', className: "card-minimal rounded-xl p-6" - }, [ - React.createElement('div', { - key: 'step-header', - className: "flex items-center mb-4" - }, [ - React.createElement('div', { - key: 'number', - className: "w-8 h-8 bg-green-500 text-white rounded-lg flex items-center justify-center font-semibold text-sm mr-3" - }, '2'), - React.createElement('h3', { - key: 'title', - className: "text-lg font-medium text-primary" - }, "Select session type") - ]), - React.createElement('p', { - key: 'description', - className: "text-secondary text-sm mb-4" - }, "Choose a session plan or use limited demo mode for testing."), - React.createElement(SessionTypeSelector, { - key: 'session-selector', - onSelectType: (sessionType) => { - // Save the selected session type - setSelectedSessionType(sessionType); - console.log('🎯 Session type selected:', sessionType); - - // FIX: For demo sessions, we immediately call automatic activation - if (sessionType === 'demo') { - console.log('🎮 Demo session selected, scheduling automatic activation...'); - // Delay activation for 2 seconds to stabilize - setTimeout(() => { - if (sessionManager) { - console.log('🚀 Triggering demo session activation from selection...'); - handleDemoVerification(); - } - }, 2000); - } - - // Open a modal payment window - if (typeof window.showPaymentModal === 'function') { - window.showPaymentModal(sessionType); - } else { - // Fallback - show session information - console.log('Selected session type:', sessionType); - } - }, - onCancel: resetToSelect, - sessionManager: window.sessionManager - }) - ]), - - // Step 3 - Waiting for response - showOfferStep && React.createElement('div', { - key: 'step3', - className: "card-minimal rounded-xl p-6" }, [ React.createElement('div', { key: 'step-header', @@ -2116,7 +2114,7 @@ React.createElement('div', { key: 'number', className: "w-8 h-8 bg-blue-500 text-white rounded-lg flex items-center justify-center font-semibold text-sm mr-3" - }, '3'), + }, '2'), React.createElement('h3', { key: 'title', className: "text-lg font-medium text-primary" @@ -3794,36 +3792,175 @@ console.log('✅ Global timer management functions loaded'); \ No newline at end of file diff --git a/logo/icon-128x128.png b/logo/icon-128x128.png new file mode 100644 index 0000000..24bd86c Binary files /dev/null and b/logo/icon-128x128.png differ diff --git a/logo/icon-152x152.png b/logo/icon-152x152.png new file mode 100644 index 0000000..1178357 Binary files /dev/null and b/logo/icon-152x152.png differ diff --git a/logo/icon-180x180.png b/logo/icon-180x180.png new file mode 100644 index 0000000..ec3d50e Binary files /dev/null and b/logo/icon-180x180.png differ diff --git a/logo/icon-192x192.png b/logo/icon-192x192.png new file mode 100644 index 0000000..d985d80 Binary files /dev/null and b/logo/icon-192x192.png differ diff --git a/logo/icon-256x256.png b/logo/icon-256x256.png new file mode 100644 index 0000000..84fee80 Binary files /dev/null and b/logo/icon-256x256.png differ diff --git a/logo/icon-384x384.png b/logo/icon-384x384.png new file mode 100644 index 0000000..84fee80 Binary files /dev/null and b/logo/icon-384x384.png differ diff --git a/logo/icon-512x512.png b/logo/icon-512x512.png new file mode 100644 index 0000000..8c4b6d0 Binary files /dev/null and b/logo/icon-512x512.png differ diff --git a/logo/icon-72x72.png b/logo/icon-72x72.png new file mode 100644 index 0000000..831e41c Binary files /dev/null and b/logo/icon-72x72.png differ diff --git a/logo/icon-96x96.png b/logo/icon-96x96.png new file mode 100644 index 0000000..1a909bf Binary files /dev/null and b/logo/icon-96x96.png differ diff --git a/manifest.json b/manifest.json index f93c160..c91429b 100644 --- a/manifest.json +++ b/manifest.json @@ -2,65 +2,88 @@ "name": "SecureBit.chat - Enhanced Security Edition", "short_name": "SecureBit", "description": "P2P messenger with military-grade cryptography and Lightning Network payments", - "start_url": "/", + "start_url": "./", "display": "standalone", "background_color": "#1a1a1a", "theme_color": "#ff6b35", "orientation": "portrait-primary", - "scope": "/", + "scope": "./", "lang": "en", "dir": "ltr", "categories": ["communication", "security", "productivity"], - "iarc_rating_id": "", "prefer_related_applications": false, "icons": [ { - "src": "logo/icon-72x72.png", + "src": "./logo/icon-72x72.png", "sizes": "72x72", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { - "src": "logo/icon-96x96.png", + "src": "./logo/icon-96x96.png", "sizes": "96x96", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { - "src": "logo/icon-128x128.png", + "src": "./logo/icon-128x128.png", "sizes": "128x128", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { - "src": "logo/icon-144x144.png", + "src": "./logo/icon-144x144.png", "sizes": "144x144", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { - "src": "logo/icon-152x152.png", + "src": "./logo/icon-152x152.png", "sizes": "152x152", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { - "src": "logo/icon-192x192.png", + "src": "./logo/icon-180x180.png", + "sizes": "180x180", + "type": "image/png", + "purpose": "any" + }, + { + "src": "./logo/icon-192x192.png", "sizes": "192x192", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { - "src": "logo/icon-384x384.png", + "src": "./logo/icon-256x256.png", + "sizes": "256x256", + "type": "image/png", + "purpose": "any" + }, + { + "src": "./logo/icon-384x384.png", "sizes": "384x384", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { - "src": "logo/icon-512x512.png", + "src": "./logo/icon-512x512.png", "sizes": "512x512", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" + }, + { + "src": "./logo/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "./logo/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" } ], "shortcuts": [ @@ -68,57 +91,27 @@ "name": "Create Channel", "short_name": "Create", "description": "Create a new secure channel", - "url": "/?action=create", + "url": "./?action=create", "icons": [ { - "src": "logo/icon-96x96.png", - "sizes": "96x96" + "src": "./logo/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" } ] }, { "name": "Join Channel", - "short_name": "Join", + "short_name": "Join", "description": "Join an existing secure channel", - "url": "/?action=join", + "url": "./?action=join", "icons": [ { - "src": "logo/icon-96x96.png", - "sizes": "96x96" + "src": "./logo/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" } ] } - ], - "screenshots": [ - { - "src": "screenshots/desktop-1.png", - "sizes": "1280x720", - "type": "image/png", - "form_factor": "wide", - "label": "SecureBit.chat main interface" - }, - { - "src": "screenshots/mobile-1.png", - "sizes": "414x896", - "type": "image/png", - "form_factor": "narrow", - "label": "SecureBit.chat mobile interface" - } - ], - "related_applications": [], - "protocol_handlers": [ - { - "protocol": "web+securebit", - "url": "/?invite=%s" - } - ], - "share_target": { - "action": "/share", - "method": "GET", - "params": { - "title": "title", - "text": "text", - "url": "url" - } - } + ] } \ No newline at end of file diff --git a/src/components/ui/Header.jsx b/src/components/ui/Header.jsx index 8f74e3b..35568e8 100644 --- a/src/components/ui/Header.jsx +++ b/src/components/ui/Header.jsx @@ -497,7 +497,7 @@ const EnhancedMinimalHeader = ({ React.createElement('p', { key: 'subtitle', className: 'text-xs sm:text-sm text-muted hidden sm:block' - }, 'End-to-end freedom. v4.01.212') + }, 'End-to-end freedom. v4.01.222') ]) ]), diff --git a/src/components/ui/SessionTypeSelector.jsx b/src/components/ui/SessionTypeSelector.jsx index ffc323f..c371abe 100644 --- a/src/components/ui/SessionTypeSelector.jsx +++ b/src/components/ui/SessionTypeSelector.jsx @@ -374,12 +374,7 @@ const SessionTypeSelector = ({ onSelectType, onCancel, sessionManager }) => { onClick: onCancel, className: 'px-6 py-3 bg-gray-600 hover:bg-gray-500 text-white rounded-lg transition-all' }, 'Cancel'), - React.createElement('button', { - key: 'refresh', - onClick: updateDemoInfo, - className: 'px-3 py-3 bg-blue-600 hover:bg-blue-500 text-white rounded-lg transition-all', - title: 'Refresh demo status' - }, React.createElement('i', { className: 'fas fa-sync-alt' })) + ]) ]); }; diff --git a/src/pwa/install-prompt.js b/src/pwa/install-prompt.js index dd9353d..ac903ee 100644 --- a/src/pwa/install-prompt.js +++ b/src/pwa/install-prompt.js @@ -1,6 +1,3 @@ -// PWA Install Prompt Manager for SecureBit.chat -// Enhanced Security Edition v4.01.212 - class PWAInstallPrompt { constructor() { this.deferredPrompt = null; @@ -21,11 +18,16 @@ class PWAInstallPrompt { this.createInstallButton(); this.loadInstallPreferences(); + if (this.isIOSSafari() && !this.isInstalled && this.shouldShowPrompt()) { + setTimeout(() => { + this.showIOSInstallInstructions(); + }, 3000); + } + console.log('✅ PWA Install Prompt initialized'); } checkInstallationStatus() { - // Check if app is already installed if (window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true) { this.isInstalled = true; @@ -34,17 +36,24 @@ class PWAInstallPrompt { return true; } - // Check for iOS Safari specific installation if (this.isIOSSafari()) { this.isInstalled = window.navigator.standalone === true; + if (this.isInstalled) { + console.log('📱 iOS PWA detected'); + document.body.classList.add('pwa-installed', 'ios-pwa'); + } } document.body.classList.add(this.isInstalled ? 'pwa-installed' : 'pwa-browser'); + + if (this.isIOSSafari()) { + document.body.classList.add('ios-safari'); + } + return this.isInstalled; } setupEventListeners() { - // Capture the install prompt event window.addEventListener('beforeinstallprompt', (event) => { console.log('💿 Install prompt event captured'); event.preventDefault(); @@ -55,7 +64,6 @@ class PWAInstallPrompt { } }); - // Handle successful installation window.addEventListener('appinstalled', () => { console.log('✅ PWA installed successfully'); this.isInstalled = true; @@ -63,35 +71,45 @@ class PWAInstallPrompt { this.showInstallSuccess(); this.saveInstallPreference('installed', true); - // Update UI for installed state document.body.classList.remove('pwa-browser'); document.body.classList.add('pwa-installed'); }); - // Handle iOS installation detection if (this.isIOSSafari()) { + let wasStandalone = window.navigator.standalone; + window.addEventListener('visibilitychange', () => { if (document.hidden) return; setTimeout(() => { - if (window.navigator.standalone && !this.isInstalled) { + const isStandalone = window.navigator.standalone; + + if (isStandalone && !wasStandalone && !this.isInstalled) { + console.log('✅ iOS PWA installation detected'); this.isInstalled = true; this.hideInstallPrompts(); this.showInstallSuccess(); + document.body.classList.remove('pwa-browser'); + document.body.classList.add('pwa-installed', 'ios-pwa'); } + + wasStandalone = isStandalone; }, 1000); }); } } createInstallButton() { - // Create floating install button this.installButton = document.createElement('button'); this.installButton.id = 'pwa-install-button'; this.installButton.className = 'hidden fixed bottom-6 right-6 bg-gradient-to-r from-orange-500 to-orange-600 hover:from-orange-600 hover:to-orange-700 text-white px-6 py-3 rounded-full shadow-lg transition-all duration-300 z-50 flex items-center space-x-3 group'; + + const buttonText = this.isIOSSafari() ? 'Install App' : 'Install App'; + const buttonIcon = this.isIOSSafari() ? 'fas fa-share' : 'fas fa-download'; + this.installButton.innerHTML = ` - - Install App + + ${buttonText}

`; @@ -109,23 +127,27 @@ class PWAInstallPrompt { this.installBanner.id = 'pwa-install-banner'; this.installBanner.className = 'pwa-install-banner fixed bottom-0 left-0 right-0 transform translate-y-full transition-transform duration-300 z-40'; this.installBanner.innerHTML = ` -
-
- +
+
+
+
+ +
+
+
Install SecureBit.chat
+
Get the native app experience with enhanced security
+
+
+
+ + +
-
-
Install SecureBit.chat
-
Get the native app experience with enhanced security
-
-
-
- -
`; @@ -146,11 +168,11 @@ class PWAInstallPrompt { showInstallOptions() { if (this.isInstalled) return; - // For mobile devices, show banner - if (this.isMobileDevice()) { + if (this.isIOSSafari()) { + this.showInstallButton(); + } else if (this.isMobileDevice()) { this.showInstallBanner(); } else { - // For desktop, show floating button this.showInstallButton(); } } @@ -179,6 +201,7 @@ class PWAInstallPrompt { if (this.installBanner && !this.isInstalled) { setTimeout(() => { this.installBanner.classList.add('show'); + this.installBanner.style.transform = 'translateY(0)'; }, 1000); console.log('💿 Install banner shown'); @@ -192,12 +215,13 @@ class PWAInstallPrompt { if (this.installBanner) { this.installBanner.classList.remove('show'); + this.installBanner.style.transform = 'translateY(100%)'; } } async handleInstallClick() { if (this.isIOSSafari()) { - this.showIOSInstructions(); + this.showIOSInstallInstructions(); return; } @@ -210,7 +234,6 @@ class PWAInstallPrompt { try { console.log('💿 Showing install prompt...'); - // Show the install prompt const result = await this.deferredPrompt.prompt(); console.log('💿 Install prompt result:', result.outcome); @@ -223,7 +246,6 @@ class PWAInstallPrompt { this.handleInstallDismissal(); } - // Clear the deferred prompt this.deferredPrompt = null; } catch (error) { @@ -232,42 +254,73 @@ class PWAInstallPrompt { } } - showIOSInstructions() { + showIOSInstallInstructions() { const modal = document.createElement('div'); - modal.className = 'fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4'; + modal.className = 'fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4 backdrop-blur-sm'; modal.innerHTML = `

Install on iOS

-
-
-
1
- Tap the Share button + +
+
+
1
+
+
Tap the Share button
+
+ + Usually at the bottom of Safari +
+
-
-
2
- Select "Add to Home Screen" + +
+
2
+
+
Find "Add to Home Screen"
+
Scroll down in the share menu
+
-
-
3
- Tap "Add" to install + +
+
3
+
+
Tap "Add"
+
Confirm to install SecureBit.chat
+
- + +
+

+ + After installation, open SecureBit from your home screen for the best experience. +

+
+ +
+ + +
`; document.body.appendChild(modal); + + this.saveInstallPreference('ios_instructions_shown', Date.now()); } showFallbackInstructions() { const modal = document.createElement('div'); - modal.className = 'fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4'; + modal.className = 'fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4 backdrop-blur-sm'; modal.innerHTML = `
@@ -307,6 +360,11 @@ class PWAInstallPrompt { showInstallSuccess() { const notification = document.createElement('div'); notification.className = 'fixed top-4 right-4 bg-green-500 text-white p-4 rounded-lg shadow-lg z-50 max-w-sm transform translate-x-full transition-transform duration-300'; + + const successText = this.isIOSSafari() ? + 'iOS App installed! Open from home screen.' : + 'SecureBit.chat is now on your device'; + notification.innerHTML = `
@@ -314,23 +372,51 @@ class PWAInstallPrompt {
App Installed!
-
SecureBit.chat is now on your device
+
${successText}
`; document.body.appendChild(notification); - // Animate in setTimeout(() => { notification.classList.remove('translate-x-full'); }, 100); - // Auto-remove after 4 seconds setTimeout(() => { notification.classList.add('translate-x-full'); setTimeout(() => notification.remove(), 300); - }, 4000); + }, 5000); + } + + shouldShowPrompt() { + const preferences = this.loadInstallPreferences(); + + if (this.isInstalled) return false; + + if (this.isIOSSafari()) { + const lastShown = preferences.ios_instructions_shown; + const lastDismissed = localStorage.getItem('ios_install_dismissed'); + + if (lastShown && Date.now() - lastShown < 24 * 60 * 60 * 1000) { + return false; + } + + if (lastDismissed && Date.now() - parseInt(lastDismissed) < 7 * 24 * 60 * 60 * 1000) { + return false; + } + + return true; + } + + if (preferences.dismissed >= this.maxDismissals) return false; + + const lastDismissed = preferences.lastDismissed; + if (lastDismissed && Date.now() - lastDismissed < 24 * 60 * 60 * 1000) { + return false; + } + + return true; } dismissInstallPrompt() { @@ -351,12 +437,11 @@ class PWAInstallPrompt { this.saveInstallPreference('dismissed', this.dismissedCount); if (this.dismissedCount < this.maxDismissals) { - // Show reminder after some time setTimeout(() => { if (!this.isInstalled && this.shouldShowPrompt()) { this.showInstallButton(); } - }, 300000); // 5 minutes + }, 300000); } } @@ -390,24 +475,6 @@ class PWAInstallPrompt { }, 10000); } - shouldShowPrompt() { - const preferences = this.loadInstallPreferences(); - - // Don't show if already installed - if (this.isInstalled) return false; - - // Don't show if dismissed too many times - if (preferences.dismissed >= this.maxDismissals) return false; - - // Don't show if recently dismissed (less than 24 hours) - const lastDismissed = preferences.lastDismissed; - if (lastDismissed && Date.now() - lastDismissed < 24 * 60 * 60 * 1000) { - return false; - } - - return true; - } - saveInstallPreference(action, value) { const preferences = this.loadInstallPreferences(); preferences[action] = value; @@ -439,12 +506,16 @@ class PWAInstallPrompt { isIOSSafari() { const userAgent = navigator.userAgent; - return /iPad|iPhone|iPod/.test(userAgent) && /Safari/.test(userAgent) && !/CriOS|FxiOS/.test(userAgent); + const isIOS = /iPad|iPhone|iPod/.test(userAgent); + const isSafari = /Safari/.test(userAgent) && !/CriOS|FxiOS|EdgiOS/.test(userAgent); + return isIOS && isSafari; } // Public API methods showInstallPrompt() { - if (this.deferredPrompt && !this.isInstalled) { + if (this.isIOSSafari()) { + this.showIOSInstallInstructions(); + } else if (this.deferredPrompt && !this.isInstalled) { this.handleInstallClick(); } else { this.showFallbackInstructions(); @@ -459,6 +530,7 @@ class PWAInstallPrompt { return { isInstalled: this.isInstalled, canPrompt: !!this.deferredPrompt, + isIOSSafari: this.isIOSSafari(), dismissedCount: this.dismissedCount, shouldShowPrompt: this.shouldShowPrompt() }; @@ -469,6 +541,12 @@ class PWAInstallPrompt { this.saveInstallPreference('dismissed', 0); console.log('💿 Install dismissals reset'); } + + // Method for setting service worker registration + setServiceWorkerRegistration(registration) { + this.swRegistration = registration; + console.log('📡 Service Worker registration set for PWA Install Prompt'); + } } // Export for module use diff --git a/src/pwa/pwa-manager.js b/src/pwa/pwa-manager.js index 85a9ea1..75a9d42 100644 --- a/src/pwa/pwa-manager.js +++ b/src/pwa/pwa-manager.js @@ -1,5 +1,5 @@ // PWA Offline Manager for SecureBit.chat -// Enhanced Security Edition v4.01.212 +// Enhanced Security Edition v4.01.222 // Handles offline functionality, data synchronization, and user experience class PWAOfflineManager { diff --git a/src/styles/components.css b/src/styles/components.css index e1f027a..7963a64 100644 --- a/src/styles/components.css +++ b/src/styles/components.css @@ -164,11 +164,11 @@ main { border: 1px solid rgba(75, 85, 99, 0.2); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); } -.card-minimal:hover { +/* .card-minimal:hover { border-color: rgba(249, 115, 22, 0.3); transform: translateY(-1px); transition: all 0.2s ease; -} +} */ .status-dot { width: 8px; diff --git a/sw.js b/sw.js index 1ecf01e..f64f5ff 100644 --- a/sw.js +++ b/sw.js @@ -1,5 +1,5 @@ // SecureBit.chat Service Worker -// Enhanced Security Edition v4.01.212 +// Enhanced Security Edition v4.01.222 const CACHE_NAME = 'securebit-v4.0.3'; const STATIC_CACHE = 'securebit-static-v4.0.3'; @@ -352,4 +352,4 @@ self.addEventListener('unhandledrejection', (event) => { console.error('❌ Service Worker unhandled rejection:', event.reason); }); -console.log('🔧 SecureBit.chat Service Worker loaded - Enhanced Security Edition v4.01.212'); \ No newline at end of file +console.log('🔧 SecureBit.chat Service Worker loaded - Enhanced Security Edition v4.01.222'); \ No newline at end of file