/* ────────────────────────────────────────── DeepShield AI — style.css Premium dark glassmorphism design ────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } :root { --bg: #08080f; --surface: rgba(255,255,255,0.04); --surface-2: rgba(255,255,255,0.07); --border: rgba(255,255,255,0.08); --border-glow: rgba(139,92,246,0.35); --text: #f0f0ff; --text-sub: rgba(240,240,255,0.55); --purple: #8B5CF6; --cyan: #06B6D4; --green: #22c55e; --red: #ef4444; --orange: #f97316; --radius: 18px; --radius-sm: 10px; --transition: 0.3s cubic-bezier(0.4,0,0.2,1); } html { scroll-behavior: smooth; } body { background: var(--bg); color: var(--text); font-family: 'Inter', sans-serif; font-size: 15px; line-height: 1.6; min-height: 100vh; overflow-x: hidden; } /* ── Background Orbs ── */ .bg-orbs { position: fixed; inset: 0; pointer-events: none; z-index: 0; overflow: hidden; } .orb { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.18; animation: drift 12s ease-in-out infinite alternate; } .orb-1 { width: 500px; height: 500px; background: var(--purple); top: -150px; left: -100px; animation-delay: 0s; } .orb-2 { width: 400px; height: 400px; background: var(--cyan); bottom: -100px; right: -80px; animation-delay: -5s; } .orb-3 { width: 300px; height: 300px; background: #ec4899; top: 40%; left: 60%; animation-delay: -9s; } @keyframes drift { from { transform: translate(0, 0) scale(1); } to { transform: translate(30px, 20px) scale(1.08); } } /* ── Navbar ── */ .navbar { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 14px 32px; background: rgba(8,8,15,0.85); backdrop-filter: blur(20px); border-bottom: 1px solid var(--border); } .nav-brand { display: flex; align-items: center; gap: 10px; } .brand-icon { font-size: 24px; } .brand-name { font-family: 'Space Grotesk', sans-serif; font-size: 20px; font-weight: 700; color: var(--text); } .brand-accent { color: var(--purple); } .nav-badge { font-size: 11px; font-weight: 600; padding: 4px 12px; border-radius: 99px; background: rgba(139,92,246,0.15); border: 1px solid rgba(139,92,246,0.3); color: var(--purple); letter-spacing: 0.5px; text-transform: uppercase; } /* ── Server Status Badge ── */ .server-status { display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 600; padding: 4px 12px; border-radius: 99px; background: var(--surface-2); border: 1px solid var(--border); transition: all 0.3s; } .status-dot { width: 8px; height: 8px; border-radius: 50%; } .status-checking { color: #facc15; border-color: rgba(250,204,21,0.3); background: rgba(250,204,21,0.1); } .status-checking .status-dot { background: #facc15; animation: pulse-dot 1s infinite alternate; } .status-connected { color: #4ade80; border-color: rgba(74,222,128,0.3); background: rgba(74,222,128,0.1); } .status-connected .status-dot { background: #4ade80; box-shadow: 0 0 8px #4ade80; } .status-error { color: #f87171; border-color: rgba(248,113,113,0.3); background: rgba(248,113,113,0.1); } .status-error .status-dot { background: #f87171; box-shadow: 0 0 8px #f87171; } /* ── Hero ── */ .hero { text-align: center; padding: 60px 24px 36px; position: relative; z-index: 1; } .hero-tag { display: inline-block; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 1.5px; padding: 6px 16px; border-radius: 99px; background: rgba(6,182,212,0.1); border: 1px solid rgba(6,182,212,0.25); color: var(--cyan); margin-bottom: 20px; } .hero-title { font-family: 'Space Grotesk', sans-serif; font-size: clamp(36px, 6vw, 64px); font-weight: 700; line-height: 1.1; margin-bottom: 18px; letter-spacing: -1px; } .gradient-text { background: linear-gradient(135deg, var(--purple), var(--cyan)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .hero-subtitle { color: var(--text-sub); font-size: 17px; max-width: 540px; margin: 0 auto; line-height: 1.7; } /* ── Main Card ── */ .main-card { position: relative; z-index: 1; max-width: 820px; margin: 0 auto 60px; padding: 40px 32px; background: var(--surface); border: 1px solid var(--border); border-radius: 28px; backdrop-filter: blur(24px); box-shadow: 0 32px 80px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.03) inset; } /* ── Drop Zone ── */ .drop-zone { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; padding: 52px 32px; border: 2px dashed rgba(139,92,246,0.3); border-radius: var(--radius); background: rgba(139,92,246,0.04); cursor: pointer; transition: all var(--transition); outline: none; } .drop-zone:hover, .drop-zone:focus, .drop-zone.dragging { border-color: var(--purple); background: rgba(139,92,246,0.1); box-shadow: 0 0 0 4px rgba(139,92,246,0.12); transform: translateY(-2px); } .drop-icon svg { width: 64px; height: 64px; } .drop-title { font-size: 19px; font-weight: 600; color: var(--text); } .drop-sub { color: var(--text-sub); } .link-text { color: var(--purple); text-decoration: underline; cursor: pointer; } .drop-limits { font-size: 12px; color: var(--text-sub); opacity: 0.7; margin-top: 4px; letter-spacing: 0.3px; } /* ── File Preview ── */ .file-preview { display: flex; flex-direction: column; gap: 18px; margin-top: 20px; } .file-info { display: flex; align-items: center; gap: 12px; padding: 14px 18px; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-sm); } .file-icon { font-size: 28px; } .file-meta { flex: 1; display: flex; flex-direction: column; } .file-name { font-weight: 600; font-size: 14px; color: var(--text); word-break: break-all; } .file-size { font-size: 12px; color: var(--text-sub); } .remove-btn { background: none; border: 1px solid var(--border); color: var(--text-sub); width: 32px; height: 32px; border-radius: 50%; font-size: 14px; cursor: pointer; transition: all var(--transition); display: flex; align-items: center; justify-content: center; } .remove-btn:hover { background: rgba(239,68,68,0.1); border-color: var(--red); color: var(--red); } .video-container { border-radius: var(--radius-sm); overflow: hidden; background: #000; border: 1px solid var(--border); } .video-preview { width: 100%; max-height: 300px; display: block; } .analyze-btn { display: flex; align-items: center; justify-content: center; gap: 10px; width: 100%; padding: 16px; font-size: 16px; font-weight: 700; border: none; border-radius: var(--radius-sm); background: linear-gradient(135deg, var(--purple), var(--cyan)); color: #fff; cursor: pointer; transition: all var(--transition); letter-spacing: 0.3px; box-shadow: 0 8px 24px rgba(139,92,246,0.35); } .analyze-btn:hover { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(139,92,246,0.45); } .analyze-btn:active { transform: translateY(0); } .analyze-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; } .btn-icon { font-size: 18px; } /* ── Loading ── */ .loading-section { display: flex; flex-direction: column; align-items: center; gap: 24px; padding: 40px 0; } .loading-animation { position: relative; width: 100px; height: 100px; display: flex; align-items: center; justify-content: center; } .spinner-ring { position: absolute; inset: 0; border-radius: 50%; border: 3px solid transparent; border-top-color: var(--purple); animation: spin 1s linear infinite; } .ring-2 { inset: 8px; border-top-color: var(--cyan); animation-duration: 1.4s; animation-direction: reverse; } .ring-3 { inset: 16px; border-top-color: rgba(139,92,246,0.4); animation-duration: 2s; } .spinner-center { font-size: 28px; z-index: 1; } @keyframes spin { to { transform: rotate(360deg); } } .loading-title { font-size: 22px; font-weight: 700; text-align: center; } .loading-steps { display: flex; flex-direction: column; gap: 10px; width: 100%; max-width: 280px; } .step { display: flex; align-items: center; gap: 12px; font-size: 14px; color: var(--text-sub); transition: all var(--transition); } .step.active { color: var(--text); } .step-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--border); transition: all var(--transition); flex-shrink: 0; } .step.active .step-dot { background: var(--purple); box-shadow: 0 0 8px var(--purple); animation: pulse-dot 1s ease-in-out infinite; } .step.done .step-dot { background: var(--green); animation: none; } .step.done { color: var(--green); } @keyframes pulse-dot { 0%,100% { transform: scale(1); } 50% { transform: scale(1.4); } } .loading-note { font-size: 12px; color: var(--text-sub); text-align: center; opacity: 0.7; } /* ── Results ── */ .results-section { display: flex; flex-direction: column; gap: 24px; } .verdict-card { display: flex; gap: 32px; padding: 28px; border-radius: var(--radius); border: 1px solid var(--border-glow); background: var(--surface-2); align-items: center; flex-wrap: wrap; } .verdict-card.is-fake { border-color: rgba(239,68,68,0.4); background: rgba(239,68,68,0.04); } .verdict-card.is-real { border-color: rgba(34,197,94,0.4); background: rgba(34,197,94,0.04); } .verdict-left { display: flex; flex-direction: column; align-items: center; gap: 10px; min-width: 160px; } .verdict-circle-wrap { position: relative; width: 140px; height: 140px; } .verdict-ring { width: 100%; height: 100%; transform: rotate(-90deg); } .ring-bg { fill: none; stroke: rgba(255,255,255,0.06); stroke-width: 8; } .ring-progress { fill: none; stroke: var(--purple); stroke-width: 8; stroke-linecap: round; stroke-dasharray: 314; stroke-dashoffset: 314; transition: stroke-dashoffset 1.2s cubic-bezier(0.4,0,0.2,1), stroke 0.4s; } .verdict-inner { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; } .verdict-pct { font-family: 'Space Grotesk', sans-serif; font-size: 30px; font-weight: 700; line-height: 1; } .verdict-label { font-size: 13px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; margin-top: 2px; } .verdict-desc { font-size: 12px; color: var(--text-sub); text-align: center; } .verdict-right { flex: 1; min-width: 220px; } .verdict-badge { display: inline-block; font-size: 20px; font-weight: 800; font-family: 'Space Grotesk', sans-serif; padding: 8px 20px; border-radius: var(--radius-sm); margin-bottom: 18px; letter-spacing: 1px; } .verdict-badge.fake { background: rgba(239,68,68,0.15); border: 1px solid rgba(239,68,68,0.4); color: #f87171; } .verdict-badge.real { background: rgba(34,197,94,0.15); border: 1px solid rgba(34,197,94,0.4); color: #4ade80; } .verdict-stats { display: flex; flex-direction: column; gap: 10px; } .stat-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; border-radius: 8px; background: var(--surface); border: 1px solid var(--border); font-size: 14px; } .stat-label { color: var(--text-sub); } .stat-val { font-weight: 700; } .fake-val { color: #f87171; } .real-val { color: #4ade80; } /* ── Frame Chart ── */ .chart-card { padding: 24px; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius); } .chart-title { font-size: 16px; font-weight: 700; margin-bottom: 4px; } .chart-sub { font-size: 12px; color: var(--text-sub); margin-bottom: 18px; } .frame-chart { display: flex; align-items: flex-end; gap: 4px; height: 120px; position: relative; padding: 0 4px; } .frame-chart::after { content: "50%"; position: absolute; right: 0; top: 50%; transform: translateY(-50%); font-size: 10px; color: var(--text-sub); opacity: 0.6; } .frame-chart::before { content: ""; position: absolute; left: 4px; right: 24px; top: 50%; border-top: 1px dashed rgba(255,255,255,0.12); } .bar-wrap { flex: 1; display: flex; align-items: flex-end; height: 100%; position: relative; } .bar { width: 100%; border-radius: 4px 4px 0 0; min-height: 4px; transition: height 0.8s cubic-bezier(0.4,0,0.2,1); cursor: default; position: relative; } .bar::after { content: attr(data-tip); position: absolute; bottom: calc(100% + 4px); left: 50%; transform: translateX(-50%); background: rgba(0,0,0,0.85); color: var(--text); font-size: 10px; padding: 2px 6px; border-radius: 4px; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity 0.2s; } .bar:hover::after { opacity: 1; } .bar.bar-fake { background: linear-gradient(to top, #ef4444, #f97316); } .bar.bar-real { background: linear-gradient(to top, #22c55e, #06B6D4); } .chart-legend { display: flex; gap: 18px; margin-top: 12px; } .legend-item { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-sub); } .dot { width: 10px; height: 10px; border-radius: 3px; } .dot-fake { background: #ef4444; } .dot-real { background: #22c55e; } .dot-thresh { background: transparent; border: 1px dashed rgba(255,255,255,0.3); } /* ── Actions ── */ .result-actions { display: flex; gap: 12px; flex-wrap: wrap; } .action-btn { flex: 1; min-width: 160px; padding: 14px 20px; font-size: 15px; font-weight: 600; border-radius: var(--radius-sm); cursor: pointer; transition: all var(--transition); border: none; outline: none; letter-spacing: 0.2px; } .action-primary { background: linear-gradient(135deg, var(--purple), var(--cyan)); color: #fff; box-shadow: 0 6px 20px rgba(139,92,246,0.3); } .action-primary:hover { transform: translateY(-2px); box-shadow: 0 10px 28px rgba(139,92,246,0.4); } .action-secondary { background: var(--surface-2); color: var(--text); border: 1px solid var(--border); } .action-secondary:hover { background: var(--surface); border-color: var(--purple); } /* ── Error ── */ .error-section { display: flex; flex-direction: column; align-items: center; gap: 16px; padding: 40px 0; text-align: center; } .error-icon { font-size: 48px; } .error-title { font-size: 22px; font-weight: 700; color: var(--red); } .error-msg { color: var(--text-sub); max-width: 400px; font-size: 14px; } /* ── Footer ── */ .footer { text-align: center; padding: 28px 24px 40px; color: var(--text-sub); font-size: 13px; position: relative; z-index: 1; line-height: 1.8; } .footer-note { font-size: 11px; opacity: 0.5; } /* ── Utility ── */ .hidden { display: none !important; } /* ── Responsive ── */ @media (max-width: 600px) { .main-card { padding: 24px 16px; border-radius: 20px; margin: 0 12px 40px; } .verdict-card { flex-direction: column; align-items: center; text-align: center; } .verdict-right { width: 100%; } .hero { padding: 40px 16px 24px; } .navbar { padding: 12px 16px; } .result-actions { flex-direction: column; } } /* ── Entrance Animation ── */ @keyframes fadeUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .results-section > * { animation: fadeUp 0.5s ease both; } .results-section > *:nth-child(2) { animation-delay: 0.1s; } .results-section > *:nth-child(3) { animation-delay: 0.2s; }