diff --git a/frontend/wallet/app/globals.css b/frontend/wallet/app/globals.css index d0c5e738..9ac5c8be 100644 --- a/frontend/wallet/app/globals.css +++ b/frontend/wallet/app/globals.css @@ -315,6 +315,39 @@ body { border-top-color: var(--off-white); } +/* ── Biometric pulse ring (landing / create screen) ─────────────────── */ +@keyframes pulse-ring { + 0% { transform: scale(0.92); opacity: 0.7; } + 70% { transform: scale(1.18); opacity: 0; } + 100% { transform: scale(0.92); opacity: 0; } +} +@keyframes pulse-ring-2 { + 0% { transform: scale(0.92); opacity: 0.4; } + 70% { transform: scale(1.36); opacity: 0; } + 100% { transform: scale(0.92); opacity: 0; } +} +.biometric-pulse { + position: relative; + display: flex; + align-items: center; + justify-content: center; +} +.biometric-pulse::before, +.biometric-pulse::after { + content: ''; + position: absolute; + inset: -12px; + border-radius: 50%; + border: 1.5px solid rgba(253, 218, 36, 0.55); + pointer-events: none; +} +.biometric-pulse::before { + animation: pulse-ring 2.4s var(--ease) infinite; +} +.biometric-pulse::after { + animation: pulse-ring-2 2.4s var(--ease) 0.8s infinite; +} + /* ── Wallet shell layout ─────────────────────────────────────────────── */ .wallet-shell { min-height: 100dvh; diff --git a/frontend/wallet/app/page.tsx b/frontend/wallet/app/page.tsx index ba189832..a4bb7ac3 100644 --- a/frontend/wallet/app/page.tsx +++ b/frontend/wallet/app/page.tsx @@ -133,97 +133,119 @@ export default function OnboardingPage() { <>
{showTutorial && } -
-
- - {/* Logo + wordmark */} -
-
- -
-
-

- VEIL -

-

- Your passkey is your wallet -

-
-
+
+
+ + {/* ── Hero ── */} +
+ + {/* Biometric pulse ring */} +
+ +
- {/* Main card */} - - - - {step === 'landing' && ( -
- - - {error && ( -

- {error} + {/* Headline + lede */} +

+

+ Your passkey is{' '} + + your wallet. + +

+

+ No seed phrase. No password. Just your biometric — securing a smart contract wallet on Stellar.

- )} +
- )} - {(step === 'registering' || step === 'deploying') && ( -
-
-
+ {/* ── CTAs ── */} + {step === 'landing' && ( +
+ + + {error && ( +

+ {error} +

+ )}
-

- {step === 'registering' ? 'Waiting for biometric...' : 'Deploying wallet on-chain...'} -

-

- {step === 'registering' - ? 'Approve the passkey prompt on your device' - : `Broadcasting to ${network.displayName}`} -

-
- )} - - {step === 'done' && address && ( -
-
- - - - -

- Wallet created + )} + + {/* ── In-progress states ── */} + {(step === 'registering' || step === 'deploying') && ( +

+
+
+
+

+ {step === 'registering' ? 'Waiting for biometric...' : 'Deploying wallet on-chain...'} +

+

+ {step === 'registering' + ? 'Approve the passkey prompt on your device' + : `Broadcasting to ${network.displayName}`}

+ )} + + {/* ── Success ── */} + {step === 'done' && address && ( +
+
+ + + + +

+ Wallet created +

+
-
-

- YOUR WALLET ADDRESS -

-
- {address.slice(0, 8)}...{address.slice(-8)} +
+

+ YOUR WALLET ADDRESS +

+
+ {address.slice(0, 8)}...{address.slice(-8)} +
+ +
+ )} + + {/* ── WebAuthn footnote ── */} +

+ Secured by{' '} + WebAuthn + {' '}on{' '} + Stellar +

- -
- )} - - {/* Footer */} -

- No seed phrase. No private key. Powered by{' '} - Stellar Soroban -

- +
-
)