+
+ {summary.statusLabel}
+
+
+
+ {formatAmount(summary.amount, summary.currency)}
+
+
+ {/* Metric blocks stacked below the main widget */}
+
+ {summary.metrics.map((metric) => (
+
+ {metric.label}
+ {metric.value}
+
+ ))}
+
+
+ );
+}
+
+export default MobileEscrowWidget;
diff --git a/components/mobile/MobileFeatures.tsx b/components/mobile/MobileFeatures.tsx
new file mode 100644
index 0000000..7f98532
--- /dev/null
+++ b/components/mobile/MobileFeatures.tsx
@@ -0,0 +1,55 @@
+'use client';
+
+import { useMobileFeatures } from '@/hooks/useMobileFeatures';
+
+/**
+ * MobileFeatures — vertically stacked feature cards for mobile (Spatial
+ * Anchoring, Smart Contracts, Immutable Audit). Card text uses
+ * text-gray-100/text-gray-300 against the dark card background to keep
+ * contrast ratios at WCAG AA, and padding is kept tight so cards read well
+ * on narrow screens without overflowing.
+ */
+export function MobileFeatures() {
+ const { features, isLoading, error } = useMobileFeatures();
+
+ if (error) {
+ return (
+
+ {isLoading &&
+ Array.from({ length: 3 }).map((_, index) => (
+
+ ))}
+
+ {!isLoading &&
+ features.map((feature) => (
+
+
+ {feature.icon}
+
+
{feature.title}
+
+ {feature.description}
+
+
+ ))}
+
+ );
+}
+
+export default MobileFeatures;
diff --git a/components/mobile/MobileHero.tsx b/components/mobile/MobileHero.tsx
new file mode 100644
index 0000000..f034f3a
--- /dev/null
+++ b/components/mobile/MobileHero.tsx
@@ -0,0 +1,156 @@
+'use client';
+
+import { useRef, useState } from 'react';
+import { AnimatePresence, motion } from 'framer-motion';
+import { Menu, X } from 'lucide-react';
+import { useMobileHeroContent } from '@/hooks/useMobileHeroContent';
+import { useMobileNavOverlay } from '@/hooks/useMobileNavOverlay';
+
+const NAV_LINKS = ['Product', 'Fleet', 'Pricing', 'Docs'] as const;
+
+function MobileNavOverlay({
+ isOpen,
+ onClose,
+}: {
+ isOpen: boolean;
+ onClose: () => void;
+}) {
+ const overlayRef = useRef