// 3-layer architecture diagram — the centerpiece visual. // Layer 1: Rules / anomaly detection (deterministic, fast) // Layer 2: AI Model A (first LLM / ML scorer) // Layer 3: AI Model B (second LLM / ML scorer, different model) // ─── HERO variant: perspective-stacked 3 layers with a transaction flowing through. function LayerStack({ animated = true, activeLayer = null }) { const [tick, setTick] = React.useState(0); React.useEffect(() => { if (!animated) return; const t = setInterval(() => setTick(x => x + 1), 2600); return () => clearInterval(t); }, [animated]); // Three evaluations, cycling const samples = [ { id: 'pay_01K5Z0QXM3', amt: '4,820 USDT', dec: 'BLOCK', tone: 'block', score: 92, reason: 'IP on global blocklist · velocity +21%' }, { id: 'pay_01K5Z0PN7C', amt: '180 USDT', dec: 'APPROVE', tone: 'approve', score: 8, reason: 'known client · known IP · in hours' }, { id: 'pay_01K5Z0P4BX', amt: '12,500 USDT', dec: 'REVIEW', tone: 'review', score: 64, reason: 'amount > 2× baseline · new destination' }, ]; const cur = samples[tick % samples.length]; const layers = [ { n: 1, key: 'rules', title: 'Rules & anomaly detection', sub: 'Deterministic · 40+ signals', pills: ['velocity', 'baselines', 'blocklists', 'geo/ISP'], z: 0, color: 'rgba(99,212,230,0.22)', stroke: 'rgba(99,212,230,0.5)' }, { n: 2, key: 'modelA', title: 'AI scoring · Model α', sub: 'Contextual risk in sub-20ms', pills: ['client history', 'behaviour graph', 'time-of-day', 'tx shape'], z: 1, color: 'rgba(147,135,255,0.22)', stroke: 'rgba(147,135,255,0.55)' }, { n: 3, key: 'modelB', title: 'AI reasoning · Model β', sub: 'Second model for disagreement', pills: ['narrative', 'explanation', 'escalation', 'confidence'], z: 2, color: 'rgba(129,168,255,0.22)', stroke: 'rgba(129,168,255,0.55)' }, ]; return (