AuthriX / frontend-react /src /components /HeroSection.tsx
Deepfake Authenticator
feat: replace vanilla frontend with React + Vite UI
70348ce
import GridScan from './GridScan';
import AnalyzeButton from './AnalyzeButton';
interface HeroSectionProps {
onAnalyze: () => void;
}
export default function HeroSection({ onAnalyze }: HeroSectionProps) {
return (
<section className="relative w-full min-h-screen overflow-hidden">
{/* GridScan — true full-viewport background */}
<div className="absolute inset-0 z-0">
<GridScan
sensitivity={0.5}
lineThickness={1}
linesColor="#2a1a3e"
gridScale={0.1}
scanColor="#a855f7"
scanOpacity={0.45}
enablePost={true}
bloomIntensity={0.7}
bloomThreshold={0.1}
bloomSmoothing={0.2}
chromaticAberration={0.003}
noiseIntensity={0.012}
scanDirection="pingpong"
scanDuration={2.5}
scanDelay={1.2}
scanGlow={0.7}
scanSoftness={2.5}
scanPhaseTaper={0.85}
/>
</div>
{/* Dark purple gradient overlay */}
<div
className="absolute inset-0 z-[1] pointer-events-none"
style={{
background:
'radial-gradient(ellipse 80% 60% at 50% 40%, rgba(88,28,135,0.18) 0%, rgba(10,5,20,0.55) 70%, rgba(5,2,12,0.85) 100%)',
}}
/>
{/* ── Two-column layout: left content / right orb ── */}
<div className="relative z-10 flex items-center min-h-screen pt-16 px-4 md:px-8 max-w-7xl mx-auto w-full">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center w-full min-h-[calc(100vh-4rem)]">
{/* ── LEFT: text + buttons + stats ── */}
<div className="flex flex-col items-start space-y-6 -ml-2 md:-ml-6 lg:-ml-10">
{/* Status badge */}
<div
className="inline-flex items-center gap-2 px-3 py-1.5 rounded-full backdrop-blur-md"
style={{
background: 'rgba(88,28,135,0.3)',
border: '1px solid rgba(168,85,247,0.25)',
}}
>
<span
className="w-2 h-2 rounded-full animate-pulse"
style={{ background: '#a855f7', boxShadow: '0 0 8px #a855f7' }}
/>
<span className="font-bold text-[10px] text-purple-300/80 uppercase tracking-[0.18em]">
AI-Powered Authenticity Engine
</span>
</div>
{/* Headline */}
<h1
className="text-5xl md:text-6xl lg:text-7xl font-black leading-[1.05] tracking-tight"
style={{ textShadow: '0 0 60px rgba(168,85,247,0.2)' }}
>
<span className="text-white">Verify Reality</span>
<br />
<span className="text-white">in </span>
<span
className="text-transparent bg-clip-text"
style={{
backgroundImage:
'linear-gradient(135deg, #c084fc 0%, #a855f7 40%, #7c3aed 70%, #4f46e5 100%)',
}}
>
Real-Time
</span>
</h1>
{/* Subtext */}
<p className="text-base text-purple-200/55 max-w-lg leading-relaxed">
Deploy advanced neural networks to detect deepfakes, synthetic media, and manipulated
data streams with military-grade precision. Establish an unbreakable perimeter of truth.
</p>
{/* CTAs */}
<div className="flex flex-wrap items-center gap-4 pt-2">
<AnalyzeButton onClick={onAnalyze} />
</div>
{/* Stats */}
<div
className="flex items-center gap-8 pt-6 mt-4 border-t w-full max-w-sm"
style={{ borderColor: 'rgba(168,85,247,0.15)' }}
>
<div>
<div
className="text-xl font-black tracking-tight"
style={{ color: '#c084fc', textShadow: '0 0 16px rgba(168,85,247,0.5)' }}
>
99.9%
</div>
<div className="font-bold text-[10px] text-purple-400/50 mt-1 uppercase tracking-widest">
Accuracy Rate
</div>
</div>
<div className="w-px h-8" style={{ background: 'rgba(168,85,247,0.2)' }} />
<div>
<div
className="text-xl font-black tracking-tight"
style={{ color: '#a78bfa', textShadow: '0 0 16px rgba(139,92,246,0.5)' }}
>
&lt;15ms
</div>
<div className="font-bold text-[10px] text-purple-400/50 mt-1 uppercase tracking-widest">
Latency Ping
</div>
</div>
</div>
</div>
{/* ── RIGHT: Orb visualizer ── */}
<div className="relative w-full aspect-square max-w-lg mx-auto flex items-center justify-center lg:justify-end">
{/* Outer ambient glow */}
<div
className="absolute inset-0 rounded-full blur-[60px]"
style={{ background: 'rgba(124,58,237,0.12)' }}
/>
{/* Orb shell */}
<div
className="relative w-4/5 h-4/5 rounded-full flex items-center justify-center"
style={{
background: 'radial-gradient(circle at 40% 35%, rgba(124,58,237,0.15) 0%, rgba(8,4,18,0.7) 100%)',
border: '1px solid rgba(168,85,247,0.15)',
boxShadow: 'inset 0 0 40px rgba(0,0,0,0.7), 0 0 60px rgba(124,58,237,0.15)',
}}
>
{/* Spinning rings */}
<div
className="absolute w-[115%] h-[115%] rounded-full animate-spin-slow"
style={{ border: '1px solid rgba(168,85,247,0.1)' }}
/>
<div
className="absolute w-full h-full rounded-full animate-spin-slow-reverse"
style={{ border: '1px dashed rgba(139,92,246,0.15)' }}
/>
<div
className="absolute w-4/5 h-4/5 rounded-full"
style={{ border: '1px solid rgba(168,85,247,0.06)' }}
/>
{/* Core */}
<div
className="relative w-3/5 h-3/5 rounded-full flex items-center justify-center overflow-hidden"
style={{
background: 'radial-gradient(circle, rgba(124,58,237,0.3) 0%, rgba(8,4,18,0.9) 100%)',
border: '1px solid rgba(168,85,247,0.25)',
boxShadow: '0 0 40px rgba(124,58,237,0.2)',
}}
>
<span
className="material-symbols-outlined"
style={{
fontSize: 100,
color: '#c084fc',
opacity: 0.45,
fontVariationSettings: "'FILL' 1",
filter: 'drop-shadow(0 0 20px rgba(168,85,247,0.9))',
}}
>
radar
</span>
{/* Spinning accent border */}
<div
className="absolute inset-0 rounded-full border-t-2 blur-[2px] animate-spin-fast"
style={{ borderColor: 'rgba(168,85,247,0.6)' }}
/>
<div className="absolute inset-0 bg-gradient-to-t from-[#050210]/60 via-transparent to-transparent" />
</div>
</div>
{/* Floating HUD chips */}
<div
className="absolute top-8 -left-2 px-3 py-1 font-mono text-[10px] backdrop-blur-md rounded-sm"
style={{
background: 'rgba(8,4,18,0.75)',
border: '1px solid rgba(168,85,247,0.3)',
color: '#c084fc',
}}
>
SYS.OPT.OK
</div>
<div
className="absolute bottom-16 -right-2 px-3 py-1 font-mono text-[10px] backdrop-blur-md rounded-sm flex items-center gap-1"
style={{
background: 'rgba(8,4,18,0.75)',
border: '1px solid rgba(139,92,246,0.3)',
color: '#a78bfa',
}}
>
<span className="material-symbols-outlined text-[11px]">sync</span> LIVE
</div>
</div>
</div>
</div>
</section>
);
}