/* ===== Sotero landing page — sections ===== Reads DS semantic CSS variables (overridden per theme on the app root). Exports section components to window. */ const DS = window.SoteroDesignSystem_d49ec1; const { Button, Badge } = DS; /* Lucide icon helper */ function Icon({ n, s = 20, color, stroke = 2 }) { const r = React.useRef(); React.useEffect(() => { if (r.current && window.lucide && lucide[n]) { r.current.innerHTML = ''; const e = lucide.createElement(lucide[n]); e.setAttribute('width', s); e.setAttribute('height', s); e.setAttribute('stroke-width', stroke); if (color) e.setAttribute('stroke', color); r.current.appendChild(e); } }); return ; } const wrap = { maxWidth: 1120, margin: '0 auto', padding: '0 32px' }; const eyebrow = { fontFamily: 'var(--font-mono)', fontSize: 12, fontWeight: 600, letterSpacing: '0.14em', textTransform: 'uppercase', color: 'var(--accent)', }; const h2Style = { fontFamily: 'var(--font-display)', fontSize: 34, fontWeight: 700, letterSpacing: '-0.02em', color: 'var(--text-primary)', margin: '10px 0 0', lineHeight: 1.12, }; const leadStyle = { fontSize: 17, color: 'var(--text-secondary)', lineHeight: 1.6, maxWidth: 620, margin: '14px 0 0' }; /* ---------- NAV ---------- */ function Nav({ logoSrc, onCta }) { return (
Sotero
); } /* ---------- HERO ---------- */ function Hero({ onCta }) { const promises = [ ['KeyRound', 'Never ask for your secrets', 'No seed phrases, keys, passwords, or remote access.'], ['Wallet', 'Never take custody', 'We never hold your funds or move crypto for you.'], ['BadgeCheck', 'Never guarantee recovery', 'Honest assessment first. If it can\'t be done, we say so — free.'], ['CircleSlash', 'Never "send crypto to recover crypto"', 'That\'s the scam playbook. It is not ours.'], ]; return (

Crisis. Resolved.

Something's gone wrong with your crypto, and most of the "recovery experts" online are scams. Breathe. We'll review your case for free and tell you if we can help. If we can't, you won't be charged.

Free honest assessment. Public pricing. No custody of your funds.
{/* right promise panel */}
The Sotero promise
The trust boundary — the whole point of how we work.
{promises.map(([ic, t, d], i) => (
{t}
{d}
))}
); } /* ---------- GUARDRAILS STRIP ---------- */ function Guardrails() { const items = [ ['KeyRound', 'Never ask for secrets', 'No seed phrases, keys, passwords, 2FA, or remote wallet access. Ever.'], ['Wallet', 'Never take custody', 'We never hold your funds or move crypto on your behalf.'], ['BadgeCheck', 'Never guarantee recovery', 'Honest assessment up front. If it can\'t be recovered, we tell you — for free.'], ['CircleSlash', 'Never "send crypto to recover crypto"', 'That\'s the recovery-scam playbook. It is not ours.'], ]; return (
{items.map(([ic, t, d]) => (
{t}
{d}
))}
); } /* ---------- HOW IT WORKS ---------- */ function HowItWorks() { const steps = [ ['MessageSquareText', 'Tell us what happened', 'Start with the chatbot or a 5-question triage form. Takes two minutes. No account, no card.'], ['Gauge', 'We score recoverability', 'Every case gets an honest recoverability score — not a sales pitch. Impossible cases are told the truth, free.'], ['Route', 'We route you to the right path', 'Self-serve guide, written review, an assigned specialist, or a same-day call with a principal.'], ['ShieldCheck', 'We only charge for real work', 'Assessment is always free. Success fees apply only when recovery is actually possible.'], ]; return (
How it works

From panic to a plan in minutes.

We review every case carefully, so real attention goes to the ones that can actually be solved — and you never pay to be told the truth.

{steps.map(([ic, t, d], i) => (
0{i + 1}
{t}
{d}
))}
); } /* ---------- WHAT WE DO / DON'T ---------- */ function Scope() { const does = [ 'Intake and honest case assessment', 'Transaction review and tracing summaries', 'Evidence organization and case-file preparation', 'Exchange escalation packets (you submit)', 'Wallet troubleshooting and access support', 'Attorney-ready and LE-ready documentation', 'Coaching through support and recovery processes', 'Estate coordination with executors and counsel', ]; const donts = [ 'Never ask for your seed phrase, keys, passwords, or 2FA', 'Never take custody of your funds', 'Never need remote access to your wallet or device', 'Never move or execute transactions for you', 'Never impersonate you to exchanges or authorities', 'Never give legal advice outside licensed counsel', 'Never guarantee recovery', 'Never ask you to send crypto to "recover" crypto', ]; return (
The trust boundary

What we do — and what we never do.

This boundary is visible before any pricing or service detail, because it's the whole point. It's the same text you'll see on the intake form, the engagement letter, and the chatbot's opening line.

What we do
{does.map((d) => (
{d}
))}
What we never do
{donts.map((d) => (
{d}
))}
); } /* ---------- WHO WE ARE ---------- */ function WhoWeAre() { const pillars = [ ['BadgeCheck', 'Veterans, in the open', 'We\'ve been building and operating in crypto for years — publicly. You can see who we are. We\'re not another anonymous page promising the world.'], ['Building2', 'Real exchange contacts', 'We\'ve done deals and built relationships with the major exchanges. When we escalate a case, it reaches actual people — not a ticket queue.'], ['Users', 'We\'ve been in your shoes', 'We use crypto ourselves and have hit frozen accounts, stuck transfers, and scams firsthand. We know the panic, and we know how to move.'], ['ShieldCheck', 'Honest, not just billing', 'If we can help, we will. If we can\'t, we\'ll tell you straight — no padded invoices, no chasing hopeless cases to run up a bill.'], ]; return (
Who we are

You're in experienced hands.

We're not a faceless recovery mill. We're longtime crypto users and operators who've built real relationships across the industry — and we only take a case when we genuinely believe we can help.

{pillars.map(([ic, t, d], i) => (
{t}
{d}
))}
); } window.SoteroSite = Object.assign(window.SoteroSite || {}, { Icon, Nav, Hero, Guardrails, HowItWorks, WhoWeAre, Scope, wrap, eyebrow, h2Style, leadStyle });