'use client' import { useState } from 'react' import { Language } from '@/lib/types' import GradientText from '../ui/GradientText' import FadeInView from '../ui/FadeInView' interface USPSlideProps { lang: Language } const MONO: React.CSSProperties = { fontFamily: '"JetBrains Mono","SF Mono",ui-monospace,monospace', fontVariantNumeric: 'tabular-nums', } const CSS_KF = ` @keyframes uspFlowR { 0%{stroke-dashoffset:0} 100%{stroke-dashoffset:-14px} } @keyframes uspSpin { from{transform:rotate(0deg)} to{transform:rotate(360deg)} } @keyframes uspPulse { 0%,100% { box-shadow: 0 0 38px rgba(167,139,250,.55), 0 0 80px rgba(167,139,250,.2), inset 0 3px 0 rgba(255,255,255,.35), inset 0 -6px 12px rgba(0,0,0,.35); } 50% { box-shadow: 0 0 58px rgba(167,139,250,.85), 0 0 110px rgba(167,139,250,.35), inset 0 3px 0 rgba(255,255,255,.4), inset 0 -6px 12px rgba(0,0,0,.35); } } @keyframes uspPulseLight { 0%,100% { box-shadow: 0 0 28px rgba(167,139,250,.4), 0 0 56px rgba(167,139,250,.15), inset 0 3px 0 rgba(255,255,255,.5), inset 0 -6px 12px rgba(0,0,0,.2); } 50% { box-shadow: 0 0 44px rgba(167,139,250,.65), 0 0 80px rgba(167,139,250,.25), inset 0 3px 0 rgba(255,255,255,.55), inset 0 -6px 12px rgba(0,0,0,.2); } } @keyframes uspHeading { 0%,100% { text-shadow: 0 0 22px rgba(167,139,250,.3); } 50% { text-shadow: 0 0 36px rgba(167,139,250,.55); } } ` // ── Light mode hook ─────────────────────────────────────────────────────────── export default function USPSlide({ lang }: USPSlideProps) { const de = lang === 'de' const isLight = useIsLight() const details = getDetails(de) const [detail, setDetail] = useState(null) const open = (k: string) => setDetail(details[k]) const close = () => setDetail(null) return (

USP

{de ? 'Compliance und Code — in einer Plattform, immer synchron' : 'Compliance and code — one platform, always in sync'}

{/* ── MAIN CANVAS ───────────────────────────────────────────────── */}
{/* Ambient glow — dark only */} {!isLight && (
)} {/* Interaction hint */}
{de ? 'Element anklicken' : 'Click any element'}
{/* Bridge */}
{/* LEFT — Compliance */}
open('rfq')} active={detail?.title === details.rfq.title} />
open('process')} active={detail?.title === details.process.title} />
{/* CENTER hub */}
open('hub')} style={{ cursor: 'pointer', transition: 'transform .25s, filter .25s' }} onMouseEnter={e => { (e.currentTarget as HTMLDivElement).style.transform = 'scale(1.05)'; (e.currentTarget as HTMLDivElement).style.filter = 'brightness(1.15)' }} onMouseLeave={e => { (e.currentTarget as HTMLDivElement).style.transform = 'scale(1)'; (e.currentTarget as HTMLDivElement).style.filter = 'brightness(1)' }} >
{/* RIGHT — Code */}
open('bidir')} active={detail?.title === details.bidir.title} />
open('cont')} active={detail?.title === details.cont.title} />
{/* Under the Hood */}
{de ? 'Unter der Haube' : 'Under the Hood'}
open('trace')} active={detail?.title === details.trace.title} Ticker={TickTrace} /> open('engine')} active={detail?.title === details.engine.title} Ticker={TickEngine} /> open('opt')} active={detail?.title === details.opt.title} Ticker={TickOptimizer} /> open('stack')} active={detail?.title === details.stack.title} Ticker={TickStack} />
{/* MOAT card */}
MOAT
{de ? 'Jeder kann sagen, was verboten ist. Kaum jemand kann sagen, wie weit du maximal gehen kannst. Das ist unser Produkt.' : 'Anyone can say what\'s forbidden. Almost no one can tell you how far you can actually go. That\'s our product.'}
) }