+
+
+
);
}
diff --git a/src/components/robotics/FeaturedRobotsShowcase.tsx b/src/components/robotics/FeaturedRobotsShowcase.tsx
index f5df9ba..db2fcdb 100644
--- a/src/components/robotics/FeaturedRobotsShowcase.tsx
+++ b/src/components/robotics/FeaturedRobotsShowcase.tsx
@@ -237,13 +237,15 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
))}
-
-
- View robot
-
-
- Book demo
-
+
+
+
+ View robot
+
+
+ Book demo
+
+
Request price
@@ -287,7 +289,7 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
{r.name}
- Available in UAE
+ UAE available
{isOn && (
@@ -420,9 +422,10 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
color: #ECEEF6;
font-size: 0.6rem;
font-weight: 800;
- letter-spacing: 0.28em;
+ letter-spacing: 0.26em;
text-transform: uppercase;
backdrop-filter: blur(10px);
+ white-space: nowrap;
}
.frs-feat-tag-dot {
width: 6px;
@@ -446,9 +449,10 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
border: 1px solid;
font-size: 0.6rem;
font-weight: 800;
- letter-spacing: 0.28em;
+ letter-spacing: 0.26em;
text-transform: uppercase;
backdrop-filter: blur(10px);
+ white-space: nowrap;
}
.frs-brand-dot {
width: 6px;
@@ -620,23 +624,31 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
.frs-hero-copy-stack {
display: flex;
flex-direction: column;
- gap: 1rem;
+ gap: 0;
+ max-width: 600px;
}
+ .frs-hero-copy-stack > .frs-kicker { margin-top: 0 !important; }
+ .frs-hero-copy-stack > .frs-name { margin-top: 1.5rem !important; }
+ .frs-hero-copy-stack > .frs-tagline { margin-top: 1.75rem !important; }
+ .frs-hero-copy-stack > .frs-chips { margin-top: 3rem !important; margin-bottom: 10px !important; }
+ .frs-hero-copy-stack > .frs-features { margin-top: 3rem !important; }
+ .frs-hero-copy-stack > .frs-cta-block { margin-top: 2.85rem !important; }
.frs-kicker {
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-size: 0.62rem;
font-weight: 800;
- letter-spacing: 0.32em;
+ letter-spacing: 0.3em;
text-transform: uppercase;
color: #DEE0F0;
+ white-space: nowrap;
}
.frs-name {
margin: 0;
font-size: clamp(2.1rem, 5.2vw, 3.6rem);
font-weight: 300;
- line-height: 1.02;
+ line-height: 1.18;
letter-spacing: -0.045em;
color: #FFFFFF;
filter: drop-shadow(0 6px 24px rgba(0, 0, 0, 0.6));
@@ -646,31 +658,38 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
margin: 0;
color: #F2F4FA;
font-size: clamp(1rem, 1.7vw, 1.12rem);
- line-height: 1.6;
- max-width: 540px;
+ line-height: 1.9;
+ max-width: 620px;
text-shadow: 0 2px 16px rgba(0, 0, 0, 0.55);
+ hyphens: none;
+ -webkit-hyphens: none;
+ word-break: normal;
+ overflow-wrap: normal;
+ text-wrap: pretty;
}
.frs-chips {
list-style: none;
- margin: 0;
+ margin: 0 0 10px 0;
padding: 0;
display: flex;
flex-wrap: wrap;
- gap: 0.4rem;
+ gap: 0.55rem;
}
.frs-chip {
display: inline-flex;
align-items: center;
- gap: 0.42rem;
- padding: 0.35rem 0.75rem;
+ gap: 0.45rem;
+ height: 30px;
+ padding: 0 0.85rem;
border-radius: 999px;
border: 1px solid rgba(222, 224, 240, 0.22);
background: rgba(14, 13, 18, 0.55);
font-size: 0.6rem;
- letter-spacing: 0.22em;
+ letter-spacing: 0.2em;
text-transform: uppercase;
font-weight: 700;
color: #DEE0F0;
+ white-space: nowrap;
backdrop-filter: blur(10px);
}
.frs-chip-dot {
@@ -717,31 +736,39 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
padding: 0;
display: flex;
flex-direction: column;
- gap: 0.5rem;
+ gap: 1.35rem;
}
.frs-feature {
display: grid;
grid-template-columns: 14px 1fr;
align-items: start;
- gap: 0.7rem;
+ gap: 0.85rem;
color: #F0F2F8;
- font-size: 0.96rem;
- line-height: 1.55;
+ font-size: 0.97rem;
+ line-height: 1.85;
}
.frs-feature-bullet {
- margin-top: 0.55rem;
+ margin-top: 0.75rem;
width: 6px;
height: 6px;
border-radius: 999px;
background: linear-gradient(135deg, #DEE0F0, #3a55c4);
box-shadow: 0 0 12px rgba(58, 85, 196, 0.55);
}
+ .frs-cta-block {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ align-items: flex-start;
+ }
.frs-cta-row {
display: flex;
flex-wrap: wrap;
- gap: 0.5rem;
- margin-top: 0.4rem;
+ gap: 0.7rem;
+ align-items: center;
+ margin-top: 10px;
}
+ .frs-cta-block :global(.cta-link) { padding-left: 0.25rem; }
.frs-cta-primary {
position: relative;
display: inline-flex;
@@ -863,10 +890,11 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
.frs-tile {
position: relative;
display: grid;
- grid-template-columns: 132px minmax(0, 1fr);
+ grid-template-columns: 116px minmax(0, 1fr);
align-items: center;
- gap: 0.95rem;
- padding: 0.85rem 1rem;
+ gap: 0.9rem;
+ padding: 0.85rem 1rem 0.85rem 0.85rem;
+ min-height: 132px;
border-radius: 20px;
border: 1px solid rgba(222, 224, 240, 0.14);
background:
@@ -907,8 +935,8 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
}
.frs-tile-img-wrap {
position: relative;
- width: 132px;
- height: 116px;
+ width: 116px;
+ height: 108px;
border-radius: 14px;
overflow: hidden;
background:
@@ -916,6 +944,7 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
radial-gradient(ellipse 60% 40% at 50% 25%, rgba(255, 255, 255, 0.06), transparent 70%),
linear-gradient(180deg, rgba(28, 27, 33, 0.7), rgba(10, 10, 12, 0.95));
border: 1px solid rgba(222, 224, 240, 0.12);
+ flex-shrink: 0;
}
.frs-tile-img-wrap :global(img) {
transition: transform 0.4s ease, filter 0.4s ease;
@@ -937,33 +966,42 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
.frs-tile-meta {
display: flex;
flex-direction: column;
- gap: 0.25rem;
+ justify-content: center;
+ gap: 0.3rem;
min-width: 0;
+ padding-right: 28px;
}
.frs-tile-brand {
- font-size: 0.6rem;
- letter-spacing: 0.22em;
+ font-size: 0.58rem;
+ letter-spacing: 0.2em;
text-transform: uppercase;
color: color-mix(in srgb, var(--frs-acc) 80%, white);
font-weight: 700;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.frs-tile-name {
- font-size: 1.02rem;
+ font-size: 1rem;
font-weight: 700;
color: #FFFFFF;
letter-spacing: -0.01em;
- line-height: 1.15;
+ line-height: 1.2;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.frs-tile-avail {
display: inline-flex;
align-items: center;
- gap: 0.38rem;
- margin-top: 0.25rem;
+ gap: 0.4rem;
+ margin-top: 0.15rem;
font-size: 0.56rem;
- letter-spacing: 0.26em;
+ letter-spacing: 0.18em;
text-transform: uppercase;
font-weight: 700;
color: #B5BDDB;
+ white-space: nowrap;
}
.frs-tile-avail-dot {
width: 5px;
@@ -1002,8 +1040,8 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
.frs-utility {
display: grid;
grid-template-columns: minmax(0, 1fr);
- gap: 0.75rem;
- padding: 1rem 1.15rem;
+ gap: 0.85rem;
+ padding: 1rem 1.25rem;
border-radius: 18px;
border: 1px solid rgba(222, 224, 240, 0.12);
background:
@@ -1013,24 +1051,40 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
}
.frs-utility-block {
display: grid;
- grid-template-columns: 28px minmax(0, 1fr);
- gap: 0.65rem;
- align-items: start;
+ grid-template-columns: 32px minmax(0, 1fr);
+ gap: 0.75rem;
+ align-items: center;
color: #ECEEF6;
}
.frs-utility-block :global(svg) {
- margin-top: 4px;
+ width: 16px;
+ height: 16px;
color: #DEE0F0;
+ margin: 0;
+ justify-self: center;
+ }
+ .frs-utility-block > div {
+ display: flex;
+ flex-direction: column;
+ gap: 0.2rem;
+ min-width: 0;
}
- .frs-utility-block > div { display: flex; flex-direction: column; gap: 0.15rem; }
.frs-utility-label {
font-size: 0.58rem;
- letter-spacing: 0.28em;
+ letter-spacing: 0.24em;
text-transform: uppercase;
color: #8891C7;
font-weight: 700;
+ white-space: nowrap;
+ }
+ .frs-utility-value {
+ color: #FFFFFF;
+ font-size: 0.9rem;
+ font-weight: 600;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
- .frs-utility-value { color: #FFFFFF; font-size: 0.9rem; font-weight: 600; }
.frs-utility-link {
position: relative;
display: inline-flex;
@@ -1102,15 +1156,15 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
/* DESKTOP */
@media (min-width: 900px) {
.frs-hero {
- padding: clamp(1.5rem, 2.8vw, 2.25rem) clamp(1.75rem, 3vw, 2.5rem);
+ padding: clamp(1.75rem, 3vw, 2.5rem) clamp(1.75rem, 3vw, 2.5rem);
}
.frs-hero-body {
- grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
- gap: clamp(0.75rem, 1.6vw, 1.25rem);
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
+ gap: clamp(1.5rem, 2.5vw, 2.25rem);
align-items: center;
}
.frs-hero-stage { min-height: clamp(420px, 56vh, 560px); }
- .frs-hero-copy { padding-left: 0; }
+ .frs-hero-copy { padding-left: 0.5rem; }
.frs-utility {
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto;
align-items: center;
@@ -1120,10 +1174,11 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
}
@media (min-width: 1280px) {
.frs-hero-body {
- grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
- gap: clamp(1rem, 1.8vw, 1.5rem);
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr);
+ gap: clamp(2rem, 3vw, 3rem);
}
.frs-hero-stage { min-height: clamp(460px, 58vh, 600px); }
+ .frs-hero-copy { padding-left: 1rem; }
}
@media (min-width: 1200px) {
.frs-rail {
@@ -1133,8 +1188,28 @@ export function FeaturedRobotsShowcase({ robots }: Props) {
@media (max-width: 600px) {
.frs-hero { border-radius: 22px; padding: 1.1rem 1rem; }
.frs-name { font-size: clamp(1.7rem, 8vw, 2.4rem); }
- .frs-tile { grid-template-columns: 84px minmax(0, 1fr); }
- .frs-tile-img-wrap { width: 84px; height: 80px; }
+ .frs-rail {
+ display: flex;
+ grid-template-columns: none;
+ overflow-x: auto;
+ scroll-snap-type: x mandatory;
+ scrollbar-width: none;
+ -webkit-overflow-scrolling: touch;
+ padding-bottom: 0.5rem;
+ margin: 0 calc(-1 * var(--page-pad, 1rem));
+ padding-left: var(--page-pad, 1rem);
+ padding-right: var(--page-pad, 1rem);
+ }
+ .frs-rail::-webkit-scrollbar { display: none; }
+ .frs-tile {
+ flex: 0 0 82%;
+ scroll-snap-align: start;
+ grid-template-columns: 88px minmax(0, 1fr);
+ min-height: 116px;
+ }
+ .frs-tile-img-wrap { width: 88px; height: 92px; }
+ .frs-cta-row :global(.cta-btn) { width: 100%; justify-content: space-between; }
+ .frs-utility { padding: 0.85rem 1rem; }
}
@media (prefers-reduced-motion: reduce) {
.frs-hero-aurora, .frs-hero-sweep, .frs-hero-halo,
diff --git a/src/components/robotics/HowItWorks.tsx b/src/components/robotics/HowItWorks.tsx
deleted file mode 100644
index 7734d5b..0000000
--- a/src/components/robotics/HowItWorks.tsx
+++ /dev/null
@@ -1,250 +0,0 @@
-'use client';
-
-import { useRef } from 'react';
-import { motion, useScroll, useTransform } from 'framer-motion';
-import { Boxes, Cog, ClipboardCheck, GraduationCap, Wrench } from 'lucide-react';
-import type { LucideIcon } from 'lucide-react';
-
-const ease = [0.16, 1, 0.3, 1] as const;
-
-type Step = { n: string; title: string; body: string; Icon: LucideIcon; accent: string };
-
-const STEPS: Step[] = [
- {
- n: '01',
- title: 'Procurement',
- body: 'Exclusive UAE access to Unitree & Pudu lineups.',
- Icon: Boxes,
- accent: '#DEE0F0',
- },
- {
- n: '02',
- title: 'Configuration',
- body: 'Persona, attire, routes, languages, and brand fit.',
- Icon: Cog,
- accent: '#A6B2D8',
- },
- {
- n: '03',
- title: 'Deployment',
- body: 'Venue mapping, installation, and live commissioning.',
- Icon: ClipboardCheck,
- accent: '#7FD6D0',
- },
- {
- n: '04',
- title: 'Training',
- body: 'Staff onboarding and operations handover.',
- Icon: GraduationCap,
- accent: '#F5C089',
- },
- {
- n: '05',
- title: 'Support',
- body: 'Remote diagnostics and on-site service in the UAE.',
- Icon: Wrench,
- accent: '#C9B7E0',
- },
-];
-
-export function HowItWorks() {
- const ref = useRef
(null);
- const { scrollYProgress } = useScroll({
- target: ref,
- offset: ['start 85%', 'end 25%'],
- });
- const lineHeight = useTransform(scrollYProgress, [0, 1], ['0%', '100%']);
-
- return (
-
-
-
-
-
-
- {STEPS.map((s, i) => (
-
-
-
-
-
-
-
-
- {s.n}
-
-
-
-
-
-
-
{s.title}
-
{s.body}
-
-
- ))}
-
-
-
-
- );
-}
diff --git a/src/components/robotics/IndustryUseCases.tsx b/src/components/robotics/IndustryUseCases.tsx
index a72069b..3882f7e 100644
--- a/src/components/robotics/IndustryUseCases.tsx
+++ b/src/components/robotics/IndustryUseCases.tsx
@@ -1,73 +1,339 @@
'use client';
+import { motion } from 'framer-motion';
+import Link from 'next/link';
+import {
+ Building2,
+ Utensils,
+ Hotel,
+ ShoppingBag,
+ HeartPulse,
+ GraduationCap,
+ Shield,
+ Warehouse,
+ Sparkles,
+ Landmark,
+ ArrowRight,
+} from 'lucide-react';
+import type { LucideIcon } from 'lucide-react';
import { INDUSTRIES, type Industry } from '@/data/industries';
-const ICONS: Record = {
- building: 'M3 21V8l9-5 9 5v13h-6v-6h-6v6H3Z',
- utensils: 'M4 2h2v9a2 2 0 1 1-4 0V2h2Zm9 0h2v7l2 2v11h-2v-9h-2Zm-3 0h2v9a2 2 0 1 1-4 0V2h2Z',
- hotel: 'M2 21V7h20v14h-2v-3H4v3H2Zm5-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm5 0V8h8v6h-8Z',
- 'shopping-bag': 'M6 6V5a6 6 0 0 1 12 0v1h3v15H3V6h3Zm2 0h8V5a4 4 0 0 0-8 0v1Z',
- 'heart-pulse': 'M12 21s-7-4.5-9-9a5 5 0 0 1 9-3 5 5 0 0 1 9 3c-2 4.5-9 9-9 9Zm-2-8 2-3 2 5 2-3h3',
- 'graduation-cap': 'M12 3 2 8l10 5 10-5-10-5Zm-7 7v4l7 3 7-3v-4l-7 3-7-3Z',
- shield: 'M12 2 4 5v6c0 5 3.5 9 8 11 4.5-2 8-6 8-11V5l-8-3Z',
- warehouse: 'M3 21V9l9-5 9 5v12H3Zm5-9h8v8H8v-8Z',
- sparkles: 'M12 2l2 6 6 2-6 2-2 6-2-6-6-2 6-2 2-6Zm7 12l1 3 3 1-3 1-1 3-1-3-3-1 3-1 1-3Z',
- landmark: 'M2 21v-2h20v2H2Zm2-4v-8h2v8H4Zm4 0v-8h2v8H8Zm4 0v-8h2v8h-2Zm4 0v-8h2v8h-2ZM12 2l10 5H2l10-5Z',
+const ease = [0.16, 1, 0.3, 1] as const;
+
+const ICON_MAP: Record = {
+ building: Building2,
+ utensils: Utensils,
+ hotel: Hotel,
+ 'shopping-bag': ShoppingBag,
+ 'heart-pulse': HeartPulse,
+ 'graduation-cap': GraduationCap,
+ shield: Shield,
+ warehouse: Warehouse,
+ sparkles: Sparkles,
+ landmark: Landmark,
};
+const SHORT_COPY: Record = {
+ hospitality: 'Service and delivery robots that help hotels, lounges, and guest venues operate smoothly.',
+ restaurants: 'Delivery robots that support faster table service and reduce staff walking time.',
+ hotels: 'Autonomous delivery and concierge-style robotics for premium guest experiences.',
+ malls: 'Cleaning, service, and activation robots for high-traffic retail environments.',
+ healthcare: 'Autonomous transport robots for supplies, meals, and routine internal deliveries.',
+ education: 'Humanoid and quadruped robotics for STEM labs and innovation programs.',
+ security: 'Quadruped robots for patrol, inspection, and perimeter monitoring.',
+ warehousing: 'Inspection and delivery robots for repetitive facility operations.',
+ events: 'Humanoid and service robots that elevate brand activations and live events.',
+ government: 'Smart-city robotics for public spaces, civic programs, and innovation hubs.',
+};
+
+const STATS = [
+ { value: '8+', label: 'Sectors served' },
+ { value: '4', label: 'Robot families' },
+ { value: 'UAE-wide', label: 'Deployment' },
+ { value: 'Dubai', label: 'Local support' },
+] as const;
+
export function IndustryUseCases({ limit }: { limit?: number }) {
const list = limit ? INDUSTRIES.slice(0, limit) : INDUSTRIES;
+
return (
-
- {list.map((i) => (
-
-
-
-
-
Problem
-
{i.problem}
-
-
-
Solution
-
{i.solution}
-
-
-
Benefit
-
{i.benefit}
-
-
-
- ))}
-
+
+ {/* STATS ROW */}
+
+ {STATS.map((s) => (
+
+ {s.value}
+ {s.label}
+
+ ))}
+
+
+ {/* GRID */}
+
+ {list.map((industry, i) => (
+
+ ))}
+
+
+
+
+ );
+}
+
+function IndustryCard({ industry, delay }: { industry: Industry; delay: number }) {
+ const Icon = ICON_MAP[industry.icon];
+ const blurb = SHORT_COPY[industry.id] ?? industry.solution;
+
+ return (
+
+
+
+
+
+
+
+
+ {industry.name}
+
+
+
+
{industry.name}
+
{blurb}
+
+ Learn more
+
+
+
+
+
+
+
+
+
);
}
diff --git a/src/components/robotics/ServicesGrid.tsx b/src/components/robotics/ServicesGrid.tsx
deleted file mode 100644
index 5e1872d..0000000
--- a/src/components/robotics/ServicesGrid.tsx
+++ /dev/null
@@ -1,652 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { Boxes, Cog, ClipboardCheck, GraduationCap, Wrench, ShieldCheck, Activity, Layers } from 'lucide-react';
-import type { LucideIcon } from 'lucide-react';
-import { CTAButton } from '@/components/ui/CTAButton';
-
-const ease = [0.16, 1, 0.3, 1] as const;
-
-/* Abstract Dubai-centered coverage network */
-type Node = { id: string; label: string; angle: number; radius: number };
-const HQ = { x: 50, y: 50 };
-const NODES: Node[] = [
- { id: 'abu-dhabi', label: 'Abu Dhabi', angle: 210, radius: 36 },
- { id: 'sharjah', label: 'Sharjah', angle: 30, radius: 24 },
- { id: 'ajman', label: 'Ajman', angle: 350, radius: 30 },
- { id: 'rak', label: 'Ras Al Khaimah', angle: 320, radius: 40 },
- { id: 'fujairah', label: 'Fujairah', angle: 80, radius: 38 },
-];
-
-const nodePos = (n: Node) => {
- const rad = (n.angle * Math.PI) / 180;
- return { x: HQ.x + Math.cos(rad) * n.radius, y: HQ.y + Math.sin(rad) * n.radius };
-};
-
-type Proof = { value: string; label: string; detail: string; Icon: LucideIcon };
-const PROOFS: Proof[] = [
- { value: '11+', label: 'Robot models', detail: 'Unitree + Pudu portfolio', Icon: Layers },
- { value: 'UAE-wide', label: 'Coverage', detail: 'Deployment from Dubai HQ', Icon: ShieldCheck },
- { value: '1 day', label: 'Response SLA', detail: 'Sales & demo · 7 days a week', Icon: Activity },
-];
-
-type Step = { n: string; label: string; Icon: LucideIcon };
-const STEPS: Step[] = [
- { n: '01', label: 'Procure', Icon: Boxes },
- { n: '02', label: 'Configure', Icon: Cog },
- { n: '03', label: 'Deploy', Icon: ClipboardCheck },
- { n: '04', label: 'Train', Icon: GraduationCap },
- { n: '05', label: 'Support', Icon: Wrench },
-];
-
-export function ServicesGrid() {
- return (
-
-
-
-
-
-
-
-
- UAE Deployment
-
-
- Robotics deployment across the UAE.
-
-
- From Dubai showroom demo to live venue deployment, our team handles procurement, configuration, installation, staff training, and ongoing support.
-
-
-
-
- {/* LEFT — network visual */}
-
- Dubai HQ · Coverage network
-
-
-
-
-
-
- Dubai HQ · Showroom
-
-
-
- Active service regions
-
-
-
-
- {/* RIGHT — proof cards */}
-
- {PROOFS.map((p, i) => (
-
-
-
-
-
- {p.value}
- {p.label}
- {p.detail}
-
-
- ))}
-
-
-
- {/* TIMELINE */}
-
-
- {STEPS.map((s, i) => (
-
-
-
-
- {s.n}
-
-
-
-
- {s.label}
-
-
- ))}
-
-
-
-
- Book a deployment call
-
-
- Browse robots
-
-
-
-
-
- );
-}