/* Theme System CSS Variables */ :root { /* Default theme variables */ --accent-primary: #3b82f6; --accent-primary-rgb: 59, 130, 246; --accent-secondary: #2563eb; --accent-secondary-rgb: 37, 99, 235; --bg-primary: #111827; --bg-secondary: #1f2937; --text-primary: #f9fafb; --text-secondary: #e5e7eb; --border-color: #374151; --card-bg: #1f2937; --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.5); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5); --font-weight-semibold: 600; --transition-normal: 0.3s ease; } /* Restore base body styles from inline definition */ body.theme-default { background-color: #111827; margin: 0; color: var(--text-primary); } /* Cyberpunk Theme */ .theme-cyberpunk { --accent-primary: #ff00ff; --accent-primary-rgb: 255, 0, 255; --accent-secondary: #6600cc; --accent-secondary-rgb: 102, 0, 204; --bg-primary: #0c0117; --bg-secondary: #1a0233; --text-primary: #f8f8ff; --text-secondary: #b19cd9; --border-color: #6600cc; --card-bg: #1a0233; } /* Matrix Theme */ .theme-matrix { --accent-primary: #00ff00; --accent-primary-rgb: 0, 255, 0; --accent-secondary: #006400; --accent-secondary-rgb: 0, 100, 0; --bg-primary: #001a00; --bg-secondary: #002b00; --text-primary: #00ff00; --text-secondary: #009600; --border-color: #006400; --card-bg: #002b00; } /* Midnight Theme */ .theme-midnight { --accent-primary: #3b82f6; --accent-primary-rgb: 59, 130, 246; --accent-secondary: #1e40af; --accent-secondary-rgb: 30, 64, 175; --bg-primary: #0f172a; --bg-secondary: #1e293b; --text-primary: #e2e8f0; --text-secondary: #94a3b8; --border-color: #334155; --card-bg: #1e293b; } /* Additional styles that build on the theme system */ .gradient-bg { background: linear-gradient(135deg, var(--accent-secondary), var(--accent-primary)); } /* Improved Typography Hierarchy */ .section-title { font-size: 1.5rem; font-weight: 600; margin-bottom: 1.5rem; color: var(--text-primary); } .subsection-title { font-size: 1.25rem; font-weight: 600; margin-bottom: 1rem; } /* Typing Effect for Thought Viz */ .typing-effect { overflow: hidden; white-space: nowrap; animation: typing 1.5s steps(30, end), fadeIn 0.5s ease; max-width: 100%; display: inline-block; } @keyframes typing { from { max-width: 0 } to { max-width: 100% } } @keyframes fadeIn { from { opacity: 0 } to { opacity: 1 } } /* Consistent spacing utilities */ .spacing-standard { margin-bottom: 2rem; } .spacing-large { margin-bottom: 3rem; } .card { transition: all 0.3s ease; background: var(--card-bg); border: 1px solid var(--border-color); box-shadow: var(--shadow-md); } .card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); } /* Enhanced Button Styles */ .btn-primary { background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); color: white; font-weight: 600; transition: all 0.3s ease; border: none; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); } .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); filter: brightness(1.1); } .btn-secondary { background: var(--card-bg); color: var(--text-primary); border: 1px solid var(--border-color); font-weight: 500; transition: all 0.3s ease; } .btn-secondary:hover { background: var(--bg-secondary); transform: translateY(-1px); } /* Tab active state improvements */ .tab-active { color: var(--accent-primary) !important; border-bottom: 2px solid var(--accent-primary) !important; background: rgba(var(--accent-primary-rgb), 0.1); } .cloud-tab-active { color: var(--accent-primary) !important; border-bottom: 2px solid var(--accent-primary) !important; background: rgba(var(--accent-primary-rgb), 0.1); } .loader { border-top-color: var(--accent-primary); animation: spinner 1.5s linear infinite; } @keyframes spinner { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .face-analysis-animation canvas { border: 2px solid var(--border-color); max-width: 100%; } .tab-active { border-bottom: 2px solid var(--accent-primary); color: var(--accent-primary); } .btn-primary { background-color: var(--accent-primary); color: white; transition: all 0.2s; } .btn-primary:hover { background-color: var(--accent-secondary); transform: translateY(-1px); } /* Face analysis animation styles */ #face-animation-container { position: relative; transition: all 0.3s ease; } .gradient-overlay { background: linear-gradient(90deg, rgba(var(--accent-primary-rgb, 59, 130, 246), 0.5), rgba(var(--accent-secondary-rgb, 37, 99, 235), 0.2)); position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; opacity: 0; transition: opacity 0.3s ease; } #face-animation-container:hover .gradient-overlay { opacity: 1; } /* RESULTS-FOCUSED ALERT SYSTEM */ .security-alert { position: fixed; top: 180px; right: 20px; z-index: 1000; min-width: 400px; max-width: 500px; border-radius: 8px; -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); transform: translateX(100%); transition: transform 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55), visibility 0.5s; border: 2px solid; overflow: hidden; visibility: hidden; } .security-alert.show { transform: translateX(0); visibility: visible; } .security-alert.threat { background: rgba(127, 29, 29, 0.95); border-color: #dc2626; } .security-alert.secure { background: rgba(20, 83, 45, 0.95); border-color: #16a34a; } .alert-header { display: flex; align-items: center; padding: 15px 20px 10px 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .alert-icon { width: 32px; height: 32px; margin-right: 12px; display: flex; align-items: center; justify-content: center; border-radius: 50%; font-size: 16px; } .threat .alert-icon { background: rgba(220, 38, 38, 0.2); } .secure .alert-icon { background: rgba(22, 163, 74, 0.2); } .alert-title { font-size: 18px; font-weight: 700; margin: 0; } .alert-body { padding: 15px 20px; } .alert-metrics { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 15px; } .metric-item { background: rgba(0, 0, 0, 0.2); padding: 10px; border-radius: 6px; text-align: center; } .metric-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; opacity: 0.8; margin-bottom: 4px; } .metric-value { font-size: 18px; font-weight: 700; font-family: monospace; } .threat-level { display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; } .threat-level.critical { background: #dc2626; color: white; } .threat-level.high { background: #ea580c; color: white; } .threat-level.secure { background: #16a34a; color: white; } .confidence-display { font-size: 24px; font-weight: 900; font-family: monospace; animation: confidenceGlow 2s ease-in-out; } @keyframes confidenceGlow { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; text-shadow: 0 0 10px currentColor; } } /* GradCAM visualization */ .heatmap-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 5; opacity: 0.7; transition: opacity 0.3s ease; mix-blend-mode: screen; } /* Context-aware theme indicators */ .detection-mode .tab-active[id="tab-detect"] { border-bottom: 3px solid var(--accent-primary); font-weight: var(--font-weight-semibold); } .demorph-mode .tab-active[id="tab-demorph"] { border-bottom: 3px solid var(--accent-primary); font-weight: var(--font-weight-semibold); } /* Result containers */ .detection-result { transition: background-color var(--transition-normal); } /* Theme Button Styles */ .theme-btn { transition: all 0.2s ease; cursor: pointer; outline: none; } .theme-btn:hover { transform: scale(1.1); } /* Tailwind compatibility */ .text-primary { color: var(--text-primary) !important; } .text-secondary { color: var(--text-secondary) !important; } .bg-primary { background-color: var(--bg-primary) !important; } .bg-secondary { background-color: var(--bg-secondary) !important; } .border-color { border-color: var(--border-color) !important; } /* Law Enforcement Panel Styles */ .le-access-panel { margin-bottom: 2rem; } .le-card { background: linear-gradient(135deg, #1e40af 0%, #7c3aed 100%); border-radius: 12px; padding: 1.5rem; color: white; } .le-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; } .le-header-left { display: flex; align-items: center; gap: 1rem; } .le-icon { font-size: 2rem; } .le-title { margin: 0; font-size: 1.25rem; } .le-badge { background: rgba(255, 255, 255, 0.2); padding: 0.25rem 0.75rem; border-radius: 20px; font-size: 0.75rem; font-weight: 600; } .le-desc { margin: 0 0 1rem 0; opacity: 0.9; } .le-features { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; margin-bottom: 1.5rem; } .le-feature { background: rgba(255, 255, 255, 0.1); padding: 0.5rem; border-radius: 6px; text-align: center; font-size: 0.85rem; } .le-access-btn { display: block; background: rgba(255, 255, 255, 0.2); color: white; text-decoration: none; padding: 0.75rem; border-radius: 8px; text-align: center; font-weight: 600; transition: all 0.3s; border: 1px solid rgba(255, 255, 255, 0.3); } .le-access-btn:hover { background: rgba(255, 255, 255, 0.3); }