| | <!DOCTYPE html> |
| | <html lang="en"> |
| |
|
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> |
| | <title>Offline - DeepGuard</title> |
| | <link rel="stylesheet" href="style.css"> |
| | <link rel="stylesheet" href="responsive-additions.css"> |
| | <style> |
| | .offline-container { |
| | min-height: 100vh; |
| | display: flex; |
| | flex-direction: column; |
| | align-items: center; |
| | justify-content: center; |
| | text-align: center; |
| | padding: 40px 20px; |
| | background: var(--primary-bg); |
| | } |
| | |
| | .offline-icon { |
| | font-size: 120px; |
| | margin-bottom: 30px; |
| | opacity: 0.3; |
| | } |
| | |
| | .offline-title { |
| | font-size: 48px; |
| | font-weight: 800; |
| | color: var(--accent-yellow); |
| | margin-bottom: 20px; |
| | font-family: var(--font-display); |
| | } |
| | |
| | .offline-message { |
| | font-size: 20px; |
| | color: var(--text-secondary); |
| | max-width: 500px; |
| | margin: 0 auto 40px; |
| | line-height: 1.6; |
| | } |
| | |
| | .offline-actions { |
| | display: flex; |
| | gap: 16px; |
| | flex-wrap: wrap; |
| | justify-content: center; |
| | } |
| | |
| | .btn-retry { |
| | padding: 16px 32px; |
| | background: var(--accent-yellow); |
| | color: #000; |
| | border: none; |
| | border-radius: 12px; |
| | font-size: 16px; |
| | font-weight: 600; |
| | cursor: pointer; |
| | transition: all 0.3s ease; |
| | } |
| | |
| | .btn-retry:hover { |
| | transform: translateY(-2px); |
| | box-shadow: 0 10px 30px rgba(227, 245, 20, 0.3); |
| | } |
| | |
| | .btn-home { |
| | padding: 16px 32px; |
| | background: transparent; |
| | color: var(--accent-yellow); |
| | border: 2px solid var(--accent-yellow); |
| | border-radius: 12px; |
| | font-size: 16px; |
| | font-weight: 600; |
| | cursor: pointer; |
| | transition: all 0.3s ease; |
| | text-decoration: none; |
| | display: inline-block; |
| | } |
| | |
| | .btn-home:hover { |
| | background: rgba(227, 245, 20, 0.1); |
| | } |
| | |
| | .offline-tips { |
| | margin-top: 60px; |
| | padding: 30px; |
| | background: rgba(255, 255, 255, 0.03); |
| | border: 1px solid rgba(255, 255, 255, 0.1); |
| | border-radius: 16px; |
| | max-width: 600px; |
| | } |
| | |
| | .offline-tips h3 { |
| | color: var(--accent-yellow); |
| | margin-bottom: 15px; |
| | font-size: 18px; |
| | } |
| | |
| | .offline-tips ul { |
| | list-style: none; |
| | padding: 0; |
| | text-align: left; |
| | color: var(--text-secondary); |
| | } |
| | |
| | .offline-tips li { |
| | padding: 8px 0; |
| | padding-left: 30px; |
| | position: relative; |
| | } |
| | |
| | .offline-tips li::before { |
| | content: '•'; |
| | color: var(--accent-yellow); |
| | position: absolute; |
| | left: 0; |
| | font-size: 24px; |
| | } |
| | </style> |
| | </head> |
| |
|
| | <body> |
| | <div class="offline-container"> |
| | <div class="offline-icon">📡</div> |
| | <h1 class="offline-title">You're Offline</h1> |
| | <p class="offline-message"> |
| | It looks like you've lost your internet connection. Some features may not be available until you're back |
| | online. |
| | </p> |
| |
|
| | <div class="offline-actions"> |
| | <button class="btn-retry" onclick="location.reload()"> |
| | 🔄 Try Again |
| | </button> |
| | <a href="/index.html" class="btn-home"> |
| | 🏠 Go Home |
| | </a> |
| | </div> |
| |
|
| | <div class="offline-tips"> |
| | <h3>While You're Offline:</h3> |
| | <ul> |
| | <li>You can still browse previously loaded pages</li> |
| | <li>Cached content remains available</li> |
| | <li>Analysis history is accessible</li> |
| | <li>New analyses require an internet connection</li> |
| | </ul> |
| | </div> |
| | </div> |
| |
|
| | <script> |
| | |
| | window.addEventListener('online', () => { |
| | console.log('Connection restored'); |
| | setTimeout(() => { |
| | location.reload(); |
| | }, 1000); |
| | }); |
| | |
| | |
| | if (navigator.onLine) { |
| | console.log('Online - attempting to reload'); |
| | location.reload(); |
| | } |
| | </script> |
| | </body> |
| |
|
| | </html> |