| | <!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>Analysis Dashboard - DeepGuard</title> |
| | <link rel="preconnect" href="https://fonts.googleapis.com"> |
| | <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
| | <link |
| | href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Space+Grotesk:wght@400;500;600;700&display=swap" |
| | rel="stylesheet"> |
| | <link rel="stylesheet" href="variables.css"> |
| | <link rel="stylesheet" href="style.css"> |
| | <link rel="stylesheet" href="animations.css"> |
| | <link rel="stylesheet" href="pwa.css"> |
| | <link rel="stylesheet" href="responsive-additions.css"> |
| | <link rel="stylesheet" href="responsive-pages.css"> |
| |
|
| | |
| | <link rel="manifest" href="manifest.json"> |
| | <meta name="theme-color" content="#E3F514"> |
| | <meta name="apple-mobile-web-app-capable" content="yes"> |
| | <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> |
| | <meta name="apple-mobile-web-app-title" content="DeepGuard"> |
| | <link rel="apple-touch-icon" href="logo.ico"> |
| | </head> |
| |
|
| | <body class="analysis-page"> |
| | <div class="mesh-background"></div> |
| | <div id="particles-js"></div> |
| |
|
| | |
| | <nav class="navbar"> |
| | <div class="container"> |
| | <div class="nav-content"> |
| | <a href="index.html" class="logo"> |
| | <img src="logo.svg" alt="DeepGuard Logo" class="logo-img"> |
| | <span class="logo-text">Deep<span class="gradient-text">Guard</span></span> |
| | </a> |
| |
|
| | |
| | <button class="hamburger" id="hamburger" aria-label="Toggle navigation menu"> |
| | <span></span> |
| | <span></span> |
| | <span></span> |
| | </button> |
| |
|
| | |
| | <div class="nav-menu-wrapper"> |
| | <ul class="nav-menu"> |
| | <li><a href="index.html">Home</a></li> |
| | <li><a href="analysis.html" class="active">Analysis</a></li> |
| | <li><a href="history.html">History</a></li> |
| | </ul> |
| | <a href="index.html" class="btn-secondary-nav">← Back to Home</a> |
| | </div> |
| | </div> |
| | </div> |
| | </nav> |
| |
|
| | <main class="analysis-container"> |
| | <div class="analysis-grid"> |
| | |
| | <div class="upload-section"> |
| | <div class="section-header-small"> |
| | <h2>Media Input</h2> |
| | <p>Upload image for AI analysis</p> |
| | </div> |
| |
|
| | <div class="upload-area animate-pulse-glow" id="uploadArea"> |
| | <div class="upload-icon animate-float"> |
| | <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| | stroke-width="2"> |
| | <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /> |
| | <polyline points="17 8 12 3 7 8" /> |
| | <line x1="12" y1="3" x2="12" y2="15" /> |
| | </svg> |
| | </div> |
| | <h3 class="upload-title">Drop Images Here</h3> |
| | <p class="upload-description">Supports JPG, PNG, WEBP, MP4, AVI, MOV · Max 100MB</p> |
| | <p class="upload-description" style="margin-top: 8px; font-size: 13px; opacity: 0.8;">📋 Or press |
| | Ctrl/Cmd+V to paste from clipboard</p> |
| | <p class="file-count-badge" id="fileCountBadge" style="display: none;"></p> |
| | <input type="file" id="fileInput" accept="image/*,video/*" multiple hidden> |
| | <button class="btn-primary" onclick="document.getElementById('fileInput').click()" |
| | aria-label="Select files to upload">Select |
| | Files</button> |
| | |
| | <div class="scanner-line"></div> |
| | </div> |
| |
|
| | |
| | <div class="file-queue-container" id="fileQueueContainer" style="display: none;"> |
| | <div class="queue-header"> |
| | <div class="queue-title-section"> |
| | <h3 class="queue-title"> |
| | <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| | stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon-inline" |
| | aria-hidden="true"> |
| | <path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path> |
| | <path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path> |
| | </svg> |
| | Upload Queue |
| | </h3> |
| | <span class="queue-count-badge" id="queueCount" |
| | aria-label="Number of files in queue">0</span> |
| | </div> |
| | <div class="queue-actions"> |
| | <button class="btn-secondary-small" onclick="document.getElementById('fileInput').click()" |
| | title="Add more files" aria-label="Add more files to queue"> |
| | + Add More |
| | </button> |
| | <button class="btn-secondary-small" onclick="clearQueue()" title="Clear all files" |
| | aria-label="Clear all files from queue"> |
| | <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| | stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon-inline" |
| | aria-hidden="true"> |
| | <polyline points="3 6 5 6 21 6"></polyline> |
| | <path |
| | d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"> |
| | </path> |
| | <line x1="10" y1="11" x2="10" y2="17"></line> |
| | <line x1="14" y1="11" x2="14" y2="17"></line> |
| | </svg> |
| | Clear |
| | </button> |
| | </div> |
| | </div> |
| | <div class="file-queue" id="fileQueue"></div> |
| | <div class="queue-footer"> |
| | <button class="btn-secondary-outline" onclick="clearQueue()" style="flex: 1;" |
| | aria-label="Back to upload area"> |
| | ← Back to Upload |
| | </button> |
| | <button class="btn-primary" onclick="processUploadQueue()" style="flex: 2;" id="startUploadBtn" |
| | aria-label="Start analysis processing"> |
| | <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| | stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon-inline" |
| | aria-hidden="true"> |
| | <path |
| | d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"> |
| | </path> |
| | <path |
| | d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"> |
| | </path> |
| | <path d="M9 12H4s.55-3.03 2-5c1.62-2.2 5-3 5-3"></path> |
| | <path d="M12 15v5s3.03-.55 5-2c2.2-1.62 3-5 3-5"></path> |
| | </svg> |
| | Start Analysis |
| | </button> |
| | </div> |
| | </div> |
| |
|
| | <div class="preview-area" id="previewArea" style="display: none;"> |
| | <img id="previewImage" src="" alt="Preview"> |
| | <img id="heatmapOverlay" src="" alt="Heatmap" |
| | style="display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: contain; opacity: 0; transition: opacity 0.5s ease;"> |
| |
|
| | <div class="heatmap-toggle-container" id="heatmapToggle" style="display: none;"> |
| | <span class="toggle-label">Heatmap</span> |
| | <label class="switch"> |
| | <input type="checkbox" id="heatmapSwitch"> |
| | <span class="slider round"></span> |
| | </label> |
| | </div> |
| |
|
| | <button class="btn-close-preview" onclick="resetAnalysis()" aria-label="Close preview" |
| | title="Close Preview">×</button> |
| | </div> |
| | |
| | <div id="processingOverlay" class="processing-overlay-enhanced" style="display: none;"> |
| | <div class="processing-content-enhanced"> |
| | |
| | <div class="model-status-badge" id="modelStatusBadge" style="display: none;"> |
| | <span class="status-dot"></span> |
| | <span class="status-text">Model Status: <strong |
| | id="modelStatusText">Checking...</strong></span> |
| | </div> |
| |
|
| | |
| | <div class="neural-spinner"> |
| | <div class="spinner-ring"></div> |
| | <div class="spinner-ring"></div> |
| | <div class="spinner-ring"></div> |
| | </div> |
| |
|
| | |
| | <h2 class="processing-title-enhanced" id="processingMainTitle">Analyzing Media</h2> |
| |
|
| | |
| | <div class="progress-steps" id="progressSteps"> |
| | <div class="progress-step" data-step="upload"> |
| | <div class="step-icon">📤</div> |
| | <div class="step-label">Uploading</div> |
| | </div> |
| | <div class="progress-step" data-step="connect"> |
| | <div class="step-icon">🔌</div> |
| | <div class="step-label">Connecting</div> |
| | </div> |
| | <div class="progress-step" data-step="warmup"> |
| | <div class="step-icon">⏳</div> |
| | <div class="step-label">Warming Up</div> |
| | </div> |
| | <div class="progress-step" data-step="analyze"> |
| | <div class="step-icon">🔍</div> |
| | <div class="step-label">Analyzing</div> |
| | </div> |
| | <div class="progress-step" data-step="generate"> |
| | <div class="step-icon">✨</div> |
| | <div class="step-label">Finalizing</div> |
| | </div> |
| | </div> |
| |
|
| | |
| | <p class="processing-message" id="processingMessage"> |
| | Please don't refresh • Your media is safe and never stored |
| | </p> |
| |
|
| | |
| | <div class="warmup-alert" id="warmupAlert" style="display: none;"> |
| | <div class="warmup-icon">⏳</div> |
| | <div class="warmup-content"> |
| | <div class="warmup-progress-wrapper" style="width: 100%;"> |
| | <div |
| | style="display: flex; justify-content: space-between; margin-bottom: 8px; font-size: 14px; font-weight: 500; color: #fff;"> |
| | <span>Model Waking Up</span> |
| | <span id="warmupPercent">0%</span> |
| | </div> |
| | <div |
| | style="width: 100%; height: 6px; background: rgba(255,255,255,0.1); border-radius: 10px; overflow: hidden; position: relative;"> |
| | <div id="warmupProgressFill" |
| | style="width: 0%; height: 100%; background: #E3F514; border-radius: 10px; transition: width 0.3s linear; box-shadow: 0 0 10px rgba(227, 245, 20, 0.5);"> |
| | </div> |
| | </div> |
| | <p class="warmup-reassurance" |
| | style="margin-top: 10px; font-size: 12px; color: rgba(255,255,255,0.6);">✓ |
| | Starting cloud instance (first run only)</p> |
| | </div> |
| | </div> |
| | </div> |
| | </div> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="results-section" id="resultsSection"> |
| | <div class="empty-state"> |
| | <div class="empty-icon animate-float" aria-hidden="true" |
| | style="opacity: 0.6; color: var(--accent-yellow);"> |
| | <svg width="56" height="56" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| | stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"> |
| | <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon> |
| | </svg> |
| | </div> |
| | <h3 style="font-family: var(--font-display); font-size: 1.5rem; margin-bottom: 8px;">Ready to |
| | Analyze</h3> |
| | <p style="max-width: 280px; margin: 0 auto; line-height: 1.6;">Upload media to start the DeepGuard |
| | detection pipeline</p> |
| | </div> |
| |
|
| | <div class="analysis-results" style="display: none;"> |
| | <div class="verdict-card" id="verdictCard"> |
| | <span class="verdict-label">DETECTION RESULT</span> |
| | <h1 class="verdict-title" id="verdictTitle">--</h1> |
| | <div id="detectionBadges" class="detection-badges"></div> |
| | <div class="confidence-meter"> |
| | <div class="meter-bar"> |
| | <div class="meter-fill" id="confidenceBar"></div> |
| | </div> |
| | <span class="meter-value" id="confidenceValue">0%</span> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="feedback-section" id="feedbackSection" style="display: none;"> |
| | <div class="feedback-header"> |
| | <h4>Was this prediction correct?</h4> |
| | <p>Your feedback helps improve the model</p> |
| | </div> |
| | <div class="feedback-buttons"> |
| | <button class="btn-feedback btn-feedback-correct" id="btnFeedbackCorrect" |
| | onclick="submitFeedback(true)"> |
| | <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| | stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> |
| | <polyline points="20 6 9 17 4 12"></polyline> |
| | </svg> |
| | Prediction is Correct |
| | </button> |
| | <button class="btn-feedback btn-feedback-wrong" id="btnFeedbackWrong" |
| | onclick="submitFeedback(false)"> |
| | <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| | stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> |
| | <line x1="18" y1="6" x2="6" y2="18"></line> |
| | <line x1="6" y1="6" x2="18" y2="18"></line> |
| | </svg> |
| | Prediction is Wrong |
| | </button> |
| | </div> |
| | <div class="feedback-message" id="feedbackMessage" style="display: none;"></div> |
| | </div> |
| |
|
| | </div> |
| |
|
| | <div class="metrics-grid"> |
| | |
| | <div class="metric-card" |
| | style="grid-column: span 2; display: flex; justify-content: center; align-items: center; padding: 20px;"> |
| | <canvas id="probabilityChart" style="max-height: 150px;"></canvas> |
| | </div> |
| |
|
| | <div class="metric-card" style="position: relative; overflow: hidden;"> |
| | <div |
| | style="position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--accent-yellow), transparent); border-radius: 3px 3px 0 0;"> |
| | </div> |
| | <div style="display: flex; align-items: center; gap: 10px; margin-bottom: 8px;"> |
| | <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--accent-yellow)" |
| | stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| | <circle cx="12" cy="12" r="10"></circle> |
| | <polyline points="12 6 12 12 16 14"></polyline> |
| | </svg> |
| | <span class="metric-label" style="margin-bottom: 0;">Scan Time</span> |
| | </div> |
| | <span class="metric-value" id="scanTimeDisplay">--</span> |
| | </div> |
| | <div class="metric-card" style="position: relative; overflow: hidden;"> |
| | <div |
| | style="position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--accent-yellow), transparent); border-radius: 3px 3px 0 0;"> |
| | </div> |
| | <div style="display: flex; align-items: center; gap: 10px; margin-bottom: 8px;"> |
| | <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--accent-yellow)" |
| | stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| | <path d="M12 2L2 7l10 5 10-5-10-5z"></path> |
| | <path d="M2 17l10 5 10-5"></path> |
| | <path d="M2 12l10 5 10-5"></path> |
| | </svg> |
| | <span class="metric-label" style="margin-bottom: 0;">Model Version</span> |
| | </div> |
| | <span class="metric-value">Mark V</span> |
| | </div> |
| | </div> |
| |
|
| | <div class="analysis-details" |
| | style="background: rgba(255, 255, 255, 0.03); backdrop-filter: blur(16px); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 20px; padding: 24px; position: relative; overflow: hidden;"> |
| | <div |
| | style="position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--accent-yellow), transparent);"> |
| | </div> |
| | <h4 |
| | style="display: flex; align-items: center; gap: 10px; font-family: var(--font-display); margin-bottom: 12px;"> |
| | <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-yellow)" |
| | stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| | <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path> |
| | <polyline points="14 2 14 8 20 8"></polyline> |
| | <line x1="16" y1="13" x2="8" y2="13"></line> |
| | <line x1="16" y1="17" x2="8" y2="17"></line> |
| | <polyline points="10 9 9 9 8 9"></polyline> |
| | </svg> |
| | Forensic Analysis |
| | </h4> |
| | <p id="analysisText" style="color: var(--text-secondary); line-height: 1.7;">Waiting for analysis... |
| | </p> |
| |
|
| | <button class="btn-primary" id="downloadReportBtn" |
| | style="margin-top: 20px; width: 100%; display: none; position: relative; overflow: hidden;" |
| | onclick="generatePDFReport()"> |
| | 📄 Download Forensic Report |
| | </button> |
| | </div> |
| | </div> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="container" style="max-width: 1200px; margin-top: 60px;" id="statisticsSection"> |
| | <div class="section-header"> |
| | <h2 class="section-title">Analysis <span class="gradient-text">Statistics</span></h2> |
| | <p class="section-subtitle">Overview of your detection history</p> |
| | </div> |
| | <div class="statistics-grid"> |
| | <div class="stat-card" |
| | style="--accent-color: var(--accent-yellow); animation: fadeInUp 0.5s ease backwards; animation-delay: 0.1s;"> |
| | <div |
| | style="position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--accent-yellow), transparent); border-radius: 3px 3px 0 0;"> |
| | </div> |
| | <div class="stat-icon" |
| | style="background: rgba(227, 245, 20, 0.1); border-radius: 14px; width: 52px; height: 52px; display: flex; align-items: center; justify-content: center; margin: 0 auto 16px; border: 1px solid rgba(227, 245, 20, 0.2);"> |
| | 📊</div> |
| | <div class="stat-value" id="totalScans">0</div> |
| | <div class="stat-label">Total Analyzed</div> |
| | </div> |
| | <div class="stat-card" |
| | style="--accent-color: #ff6b6b; animation: fadeInUp 0.5s ease backwards; animation-delay: 0.2s;"> |
| | <div |
| | style="position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, #ff6b6b, transparent); border-radius: 3px 3px 0 0;"> |
| | </div> |
| | <div class="stat-icon" |
| | style="background: rgba(255, 107, 107, 0.1); border-radius: 14px; width: 52px; height: 52px; display: flex; align-items: center; justify-content: center; margin: 0 auto 16px; border: 1px solid rgba(255, 107, 107, 0.2);"> |
| | ⚠️</div> |
| | <div class="stat-value" id="fakeCount">0</div> |
| | <div class="stat-label">Fake Detected</div> |
| | </div> |
| | <div class="stat-card" |
| | style="--accent-color: #10b981; animation: fadeInUp 0.5s ease backwards; animation-delay: 0.3s;"> |
| | <div |
| | style="position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, #10b981, transparent); border-radius: 3px 3px 0 0;"> |
| | </div> |
| | <div class="stat-icon" |
| | style="background: rgba(16, 185, 129, 0.1); border-radius: 14px; width: 52px; height: 52px; display: flex; align-items: center; justify-content: center; margin: 0 auto 16px; border: 1px solid rgba(16, 185, 129, 0.2);"> |
| | ✓</div> |
| | <div class="stat-value" id="realCount">0</div> |
| | <div class="stat-label">Real Images</div> |
| | </div> |
| | <div class="stat-card" |
| | style="--accent-color: #3b82f6; animation: fadeInUp 0.5s ease backwards; animation-delay: 0.4s;"> |
| | <div |
| | style="position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, #3b82f6, transparent); border-radius: 3px 3px 0 0;"> |
| | </div> |
| | <div class="stat-icon" |
| | style="background: rgba(59, 130, 246, 0.1); border-radius: 14px; width: 52px; height: 52px; display: flex; align-items: center; justify-content: center; margin: 0 auto 16px; border: 1px solid rgba(59, 130, 246, 0.2);"> |
| | 🎯</div> |
| | <div class="stat-value" id="avgConfidence">0%</div> |
| | <div class="stat-label">Avg Confidence</div> |
| | </div> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="container" style="max-width: 1200px; margin-top: 40px; padding-bottom: 60px;" id="recentSection"> |
| | <div class="section-header"> |
| | <h2 class="section-title">Recent <span class="gradient-text">Analyses</span></h2> |
| | <a href="history.html" class="btn-secondary" style="font-size: 14px;">View All History →</a> |
| | </div> |
| | <div class="recent-grid" id="recentGrid"> |
| | |
| | </div> |
| | </div> |
| | </main> |
| |
|
| | |
| | <footer class="footer" style="position: relative; z-index: 1;"> |
| | <div class="container"> |
| | <div class="footer-content-minimal"> |
| | <div class="footer-brand"> |
| | <div class="logo"> |
| | <img src="logo.svg" alt="DeepGuard Logo" class="logo-img"> |
| | <span class="logo-text">Deep<span style="color: var(--accent-yellow);">Guard</span></span> |
| | </div> |
| | </div> |
| | <p class="footer-tagline-premium">Protecting digital truth with AI</p> |
| | <div class="footer-links-premium"> |
| | <a href="https://harshasnade-deepfake-detection.hf.space" target="_blank" |
| | class="footer-link-premium-item"> |
| | <img src="https://huggingface.co/front/assets/huggingface_logo-noborder.svg" alt="Hugging Face"> |
| | <span>Models</span> |
| | </a> |
| | <a href="https://github.com/Harshvardhan-Asnade/Deepfake-Model" target="_blank" |
| | class="footer-link-premium-item"> |
| | <svg viewBox="0 0 24 24" fill="currentColor"> |
| | <path |
| | d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" /> |
| | </svg> |
| | <span>GitHub</span> |
| | </a> |
| | </div> |
| | <div class="footer-copyright-premium"> |
| | <p>© 2024 <span style="color: var(--accent-yellow); font-weight: 700;">DeepGuard</span></p> |
| | </div> |
| | </div> |
| | </div> |
| | <div class="footer-glow-enhanced"></div> |
| | <div class="footer-glow"></div> |
| | </footer> |
| |
|
| | <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> |
| | <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script> |
| | <script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script> |
| | |
| | <div id="toastContainer" class="toast-container" aria-live="polite" aria-atomic="true"></div> |
| |
|
| | <script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script> |
| | <script src="https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js"></script> |
| | <script src="https://unpkg.com/@studio-freight/lenis@1.0.42/dist/lenis.min.js"></script> |
| | <script src="motion.js"></script> |
| | <script src="script.js"></script> |
| | <script src="mobile.js"></script> |
| | <script src="pwa.js"></script> |
| |
|
| |
|
| | </body> |
| |
|
| | </html> |