- of Robotics
+
+ of Robotics
Meet the G1 Humanoid Robot. Fully customizable, enterprise-ready, designed for the world of tomorrow.
@@ -199,11 +199,11 @@ export function ScrollOverlays() {
{/* 3. Head Reveal */}
-
-
+
+
Intelligent by Design
-
+
Vision That Understands
@@ -211,12 +211,12 @@ export function ScrollOverlays() {
-
360°
-
Field of View
+
360°
+
Field of View
-
{'<'}50ms
-
Response Time
+
{'<'}50ms
+
Response Time
@@ -224,11 +224,11 @@ export function ScrollOverlays() {
{/* 4. Customization */}
-
-
+
+
Your Identity
-
+
Dress for Any Mission
@@ -252,9 +252,9 @@ export function ScrollOverlays() {
padding: '0.6rem 1.25rem',
borderRadius: '2rem',
background: 'rgba(255, 255, 255, 0.5)',
- border: '1px solid rgba(196, 162, 101, 0.3)',
+ border: '1px solid rgba(39, 63, 148, 0.3)',
fontSize: '0.75rem',
- color: '#0a0907',
+ color: '#0a0a0c',
letterSpacing: '0.1em',
fontWeight: 600,
cursor: 'pointer',
@@ -268,11 +268,11 @@ export function ScrollOverlays() {
e.currentTarget.style.background = 'var(--color-gold)';
e.currentTarget.style.color = '#ffffff';
e.currentTarget.style.transform = 'translateY(-2px)';
- e.currentTarget.style.boxShadow = '0 6px 16px rgba(196, 162, 101, 0.3)';
+ e.currentTarget.style.boxShadow = '0 6px 16px rgba(39, 63, 148, 0.3)';
}}
onMouseOut={(e) => {
e.currentTarget.style.background = 'rgba(255, 255, 255, 0.5)';
- e.currentTarget.style.color = '#0a0907';
+ e.currentTarget.style.color = '#0a0a0c';
e.currentTarget.style.transform = 'translateY(0)';
e.currentTarget.style.boxShadow = '0 4px 12px rgba(0,0,0,0.05)';
}}
@@ -286,11 +286,11 @@ export function ScrollOverlays() {
{/* 5. Mobility */}
-
-
+
+
Advanced Mobility
-
+
23 Degrees of Freedom
@@ -298,12 +298,12 @@ export function ScrollOverlays() {
-
2m/s
-
Max Speed
+
2m/s
+
Max Speed
-
127kg
-
Payload
+
127kg
+
Payload
@@ -325,7 +325,7 @@ export function ScrollOverlays() {
opacity: useTransform(scrollYProgress, [0, 0.05], [1, 0]),
}}
>
-
+
Scroll to Explore
diff --git a/src/components/ScrollScene.tsx b/src/components/ScrollScene.tsx
index 3f2b328..bda18e2 100644
--- a/src/components/ScrollScene.tsx
+++ b/src/components/ScrollScene.tsx
@@ -163,13 +163,13 @@ function LightOrbs() {
{/* Orbiting gold point light (no visible mesh) */}
-
+
{/* Halo ring above head - visible during close-up */}
-
+
>
);
@@ -220,7 +220,7 @@ function ScrollLighting() {
return (
<>
-
+
@@ -236,12 +236,12 @@ function Loader() {
-
+
{progress.toFixed(0)}%
diff --git a/src/components/SnapshotButton.tsx b/src/components/SnapshotButton.tsx
index 16d36ce..0b66b80 100644
--- a/src/components/SnapshotButton.tsx
+++ b/src/components/SnapshotButton.tsx
@@ -47,7 +47,7 @@ function SnapshotButtonInner({ gl, scene, camera, filename = 'g1-robot', onSnaps
backgroundColor: 'rgba(59, 130, 246, 0.1)',
border: '1px solid rgba(59, 130, 246, 0.3)',
borderRadius: '0.5rem',
- color: '#f5f1e8',
+ color: '#FBFBFD',
cursor: isCapturing ? 'wait' : 'pointer',
fontSize: '0.875rem',
fontWeight: 500,
diff --git a/src/components/checkout/ConfirmationStep.tsx b/src/components/checkout/ConfirmationStep.tsx
index cf1ddd3..a6028cf 100644
--- a/src/components/checkout/ConfirmationStep.tsx
+++ b/src/components/checkout/ConfirmationStep.tsx
@@ -39,10 +39,10 @@ export function ConfirmationStep() {
-
+
Order Confirmed!
-
+
Thank you for your order. Your G1 Robot is being prepared.
@@ -54,7 +54,7 @@ export function ConfirmationStep() {
background: 'rgba(59, 130, 246, 0.04)',
border: '1px solid rgba(59, 130, 246, 0.2)',
}}>
-
+
Order ID
@@ -72,16 +72,16 @@ export function ConfirmationStep() {
textAlign: 'left',
}}>
- Configuration
+ Configuration
{personaSummary}
- Ship to
+ Ship to
{shipping.name}, {shipping.city}
Total Paid
- AED {formatAED(orderTotal)}
+ AED {formatAED(orderTotal)}
diff --git a/src/components/checkout/PaymentStep.tsx b/src/components/checkout/PaymentStep.tsx
index 4e76f40..6782ac3 100644
--- a/src/components/checkout/PaymentStep.tsx
+++ b/src/components/checkout/PaymentStep.tsx
@@ -32,7 +32,7 @@ export function PaymentStep() {
return (
-
+
Payment Details
diff --git a/src/components/checkout/ReviewStep.tsx b/src/components/checkout/ReviewStep.tsx
index 4d2cf4a..1d9b6f2 100644
--- a/src/components/checkout/ReviewStep.tsx
+++ b/src/components/checkout/ReviewStep.tsx
@@ -97,7 +97,7 @@ export function ReviewStep() {
return (
-
+
Review Your Order
@@ -124,8 +124,8 @@ export function ReviewStep() {
{shipping.name}
{shipping.address}
{shipping.city}, {shipping.country} {shipping.postalCode}
- {shipping.email}
- {shipping.phone}
+ {shipping.email}
+ {shipping.phone}
@@ -137,7 +137,7 @@ export function ReviewStep() {
alignItems: 'center',
}}>
Total
-
+
AED {formatAED(orderTotal)}
@@ -195,7 +195,7 @@ function SummarySection({ title, children }: { title: string; children: React.Re
- {label}
+ {label}
{value}
);
diff --git a/src/components/checkout/ShippingStep.tsx b/src/components/checkout/ShippingStep.tsx
index 30edc0f..bdf723f 100644
--- a/src/components/checkout/ShippingStep.tsx
+++ b/src/components/checkout/ShippingStep.tsx
@@ -9,7 +9,7 @@ const inputStyle: React.CSSProperties = {
borderRadius: '0.375rem',
border: '1px solid rgba(0, 0, 0, 0.08)',
background: 'rgba(255, 255, 255, 0.8)',
- color: '#0a0907',
+ color: '#0a0a0c',
fontSize: '0.8rem',
outline: 'none',
transition: 'border-color 0.2s ease',
@@ -18,7 +18,7 @@ const inputStyle: React.CSSProperties = {
const labelStyle: React.CSSProperties = {
fontSize: '0.7rem',
fontWeight: 500,
- color: '#94908a',
+ color: '#8891C7',
marginBottom: '0.3rem',
display: 'block',
};
@@ -80,7 +80,7 @@ export function ShippingStep() {
return (
-
+
Shipping Information
diff --git a/src/components/robotics/BentoGrid.tsx b/src/components/robotics/BentoGrid.tsx
index dcd44e8..514a5ee 100644
--- a/src/components/robotics/BentoGrid.tsx
+++ b/src/components/robotics/BentoGrid.tsx
@@ -21,7 +21,7 @@ export function BentoGrid() {
gridAutoRows: 'minmax(180px, auto)',
}}
>
-
+
Unitree G1 humanoid — live in our Dubai showroom.
-
+
Configure persona, attire, and accessories. Then book a live demo.
@@ -46,41 +46,41 @@ export function BentoGrid() {
-
+
Sales & demos
Fast quotes for UAE businesses.
-
+
Tell us your use case — we respond within one business day with availability and pricing.
-
+
End-to-end
Procurement, deployment, support.
-
+
Local team handles import, setup, training, and ongoing service across the UAE.
-
+
Exclusive UAE access
Unitree · Pudu — one Dubai team.
-
+
10+ industries
Hospitality, security, healthcare, retail.
-
+
Configurator
3D persona builder for the G1.
@@ -92,7 +92,7 @@ export function BentoGrid() {
display: 'inline-flex',
alignItems: 'center',
gap: '0.4rem',
- color: '#8b6f47',
+ color: '#8891C7',
fontSize: '0.78rem',
letterSpacing: '0.18em',
textTransform: 'uppercase',
diff --git a/src/components/robotics/BrandShowcase.tsx b/src/components/robotics/BrandShowcase.tsx
index d2d872e..dd019f9 100644
--- a/src/components/robotics/BrandShowcase.tsx
+++ b/src/components/robotics/BrandShowcase.tsx
@@ -24,7 +24,7 @@ export function BrandShowcase() {
style={{
padding: '1.75rem',
textDecoration: 'none',
- color: '#f5f1e8',
+ color: '#FBFBFD',
display: 'flex',
flexDirection: 'column',
gap: '1rem',
@@ -65,7 +65,7 @@ export function BrandShowcase() {
{count} model{count === 1 ? '' : 's'}
-
+
{brand.tagline}
+
+
+
+
+
+ Brand · Culture · Storytelling
+
+
+
+ Meet Bu Sunaidah.
+
+
+
+ An Emirati culture-inspired robotics character — Bu Sunaidah is YS Lootah Robotics' community and storytelling ambassador. Designed to celebrate UAE heritage at media events, exhibitions, and innovation programs, Bu Sunaidah shows what intelligent automation looks like when it speaks the language of the region.
+
+
+ {[
+ 'Emirati-inspired robotics persona',
+ 'Media presence and event activations across the UAE',
+ 'Community engagement and innovation storytelling',
+ 'A modern face for advanced robotics in our region',
+ ].map((b) => (
+
+
+
+
+ {b}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+ Emirati-inspired persona
+
+
+ Bu Sunaidah
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/robotics/CompanyStory.tsx b/src/components/robotics/CompanyStory.tsx
new file mode 100644
index 0000000..6b66873
--- /dev/null
+++ b/src/components/robotics/CompanyStory.tsx
@@ -0,0 +1,61 @@
+'use client';
+
+const PILLARS = [
+ { title: 'Artificial intelligence', body: 'AI applications tailored for UAE government and private sector clients.' },
+ { title: 'Robotics', body: 'Humanoid, quadruped, service, and delivery robotics deployed across Dubai and the UAE.' },
+ { title: 'Digital transformation', body: 'Automation systems and smart projects that modernize operations end to end.' },
+ { title: 'Training & enablement', body: 'Coding and robotics training programs that prepare the next generation of talent.' },
+];
+
+export function CompanyStory() {
+ return (
+
+
+
About YS Lootah Robotics
+
+
+ A trusted UAE technology and robotics partner.
+
+
+
+ YS Lootah Robotics is part of the Yousuf Saeed Lootah Investment Group . We help organizations innovate, automate, and deploy intelligent robotic solutions across artificial intelligence, robotics, digital transformation, automation systems, and smart projects — for government and private sector clients alike.
+
+
+ Beyond hardware, we also run coding and robotics training programs that prepare the UAE's next generation of talent for an automated future.
+
+
+ In Tech We Innovate · In Trust We Lead
+
+
+
+
+ {PILLARS.map((p, i) => (
+
+
+ 0{i + 1}
+
+
{p.title}
+
{p.body}
+
+ ))}
+
+
+ );
+}
diff --git a/src/components/robotics/ConfigureCTA.tsx b/src/components/robotics/ConfigureCTA.tsx
index bc12370..5933a9c 100644
--- a/src/components/robotics/ConfigureCTA.tsx
+++ b/src/components/robotics/ConfigureCTA.tsx
@@ -26,8 +26,8 @@ export function ConfigureCTA({
padding: 'clamp(1.75rem, 4vw, 2.75rem)',
borderRadius: '1.5rem',
background:
- 'radial-gradient(ellipse 80% 80% at 100% 0%, rgba(196, 162, 101,0.16), transparent 60%), linear-gradient(135deg, rgba(15, 12, 8,0.85), rgba(5, 5, 5,0.95))',
- border: '1px solid rgba(196, 162, 101,0.28)',
+ 'radial-gradient(ellipse 80% 80% at 100% 0%, rgba(39, 63, 148,0.16), transparent 60%), linear-gradient(135deg, rgba(15, 12, 8,0.85), rgba(5, 5, 5,0.95))',
+ border: '1px solid rgba(39, 63, 148,0.28)',
overflow: 'hidden',
boxShadow: '0 20px 80px rgba(0, 0, 0,0.55)',
}}
@@ -38,7 +38,7 @@ export function ConfigureCTA({
position: 'absolute',
inset: 0,
background:
- 'linear-gradient(rgba(196, 162, 101,0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(196, 162, 101,0.05) 1px, transparent 1px)',
+ 'linear-gradient(rgba(39, 63, 148,0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(39, 63, 148,0.05) 1px, transparent 1px)',
backgroundSize: '40px 40px',
maskImage: 'radial-gradient(ellipse 60% 80% at 80% 30%, #000 30%, transparent 80%)',
WebkitMaskImage: 'radial-gradient(ellipse 60% 80% at 80% 30%, #000 30%, transparent 80%)',
@@ -50,7 +50,7 @@ export function ConfigureCTA({
{title}
- {description}
+ {description}
diff --git a/src/components/robotics/DemoCTA.tsx b/src/components/robotics/DemoCTA.tsx
index e5e7d8f..4f9248b 100644
--- a/src/components/robotics/DemoCTA.tsx
+++ b/src/components/robotics/DemoCTA.tsx
@@ -27,8 +27,8 @@ export function DemoCTA({
padding: 'clamp(2rem, 5vw, 4rem)',
overflow: 'hidden',
background:
- 'radial-gradient(ellipse 60% 80% at 20% 20%, rgba(196, 162, 101,0.18), transparent 60%), radial-gradient(ellipse 70% 80% at 80% 100%, rgba(139, 111, 71,0.18), transparent 60%), linear-gradient(135deg, rgba(15, 12, 8,0.9), rgba(5, 5, 5,0.95))',
- border: '1px solid rgba(196, 162, 101,0.18)',
+ 'radial-gradient(ellipse 60% 80% at 20% 20%, rgba(39, 63, 148,0.18), transparent 60%), radial-gradient(ellipse 70% 80% at 80% 100%, rgba(136, 145, 199,0.18), transparent 60%), linear-gradient(135deg, rgba(15, 12, 8,0.9), rgba(5, 5, 5,0.95))',
+ border: '1px solid rgba(39, 63, 148,0.18)',
boxShadow: '0 30px 100px rgba(0, 0, 0,0.6), inset 0 1px 0 rgba(255,255,255,0.04)',
}}
>
@@ -37,7 +37,7 @@ export function DemoCTA({
position: 'absolute',
inset: 0,
background:
- 'linear-gradient(rgba(196, 162, 101,0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(196, 162, 101,0.05) 1px, transparent 1px)',
+ 'linear-gradient(rgba(39, 63, 148,0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(39, 63, 148,0.05) 1px, transparent 1px)',
backgroundSize: '48px 48px',
maskImage: 'radial-gradient(ellipse 60% 80% at 50% 30%, #000 30%, transparent 80%)',
WebkitMaskImage: 'radial-gradient(ellipse 60% 80% at 50% 30%, #000 30%, transparent 80%)',
@@ -58,7 +58,7 @@ export function DemoCTA({
>
{title}
-
+
{description}
diff --git a/src/components/robotics/ExclusiveAccessSection.tsx b/src/components/robotics/ExclusiveAccessSection.tsx
index f2955a2..63369b3 100644
--- a/src/components/robotics/ExclusiveAccessSection.tsx
+++ b/src/components/robotics/ExclusiveAccessSection.tsx
@@ -12,9 +12,9 @@ export function ExclusiveAccessSection() {
padding: 'clamp(2rem, 5vw, 4rem)',
overflow: 'hidden',
background:
- 'radial-gradient(ellipse 60% 80% at 0% 0%, rgba(224,200,150,0.18), transparent 60%), radial-gradient(ellipse 70% 80% at 100% 100%, rgba(139,111,71,0.22), transparent 60%), linear-gradient(135deg, rgba(20,17,11,0.92), rgba(5,5,5,0.97))',
- border: '1px solid rgba(196,162,101,0.32)',
- boxShadow: '0 30px 100px rgba(0,0,0,0.7), inset 0 1px 0 rgba(255,240,200,0.06)',
+ 'radial-gradient(ellipse 60% 80% at 0% 0%, rgba(222, 224, 240,0.18), transparent 60%), radial-gradient(ellipse 70% 80% at 100% 100%, rgba(136, 145, 199,0.22), transparent 60%), linear-gradient(135deg, rgba(28, 27, 33,0.92), rgba(5,5,5,0.97))',
+ border: '1px solid rgba(39, 63, 148,0.32)',
+ boxShadow: '0 30px 100px rgba(0,0,0,0.7), inset 0 1px 0 rgba(222, 224, 240,0.06)',
}}
>
-
+
Exclusive UAE Access
@@ -60,7 +60,7 @@ export function ExclusiveAccessSection() {
-
+
YS Lootah Robotics holds exclusive sales rights in the UAE for selected Unitree and Pudu Robotics solutions. We deliver advanced robots to businesses, venues, and innovators across Dubai and the UAE — from inquiry to live deployment.
@@ -71,8 +71,8 @@ export function ExclusiveAccessSection() {
'Curated portfolio across humanoid, quadruped, service, and delivery robots.',
'End-to-end procurement, training, and ongoing support.',
].map((b) => (
-
-
+
+
{b}
@@ -87,8 +87,8 @@ export function ExclusiveAccessSection() {
-
-
+
+
@@ -108,9 +108,9 @@ function BrandTile({ name, sub, href, accent }: { name: string; sub: string; hre
gap: '0.6rem',
padding: '1.25rem',
borderRadius: 16,
- background: `linear-gradient(135deg, rgba(20,17,11,0.85), rgba(5,5,5,0.95))`,
+ background: `linear-gradient(135deg, rgba(28, 27, 33,0.85), rgba(5,5,5,0.95))`,
border: `1px solid ${accent}44`,
- color: '#f5f1e8',
+ color: '#FBFBFD',
textDecoration: 'none',
position: 'relative',
overflow: 'hidden',
@@ -131,7 +131,7 @@ function BrandTile({ name, sub, href, accent }: { name: string; sub: string; hre
}}
/>
{name}
-
{sub}
+
{sub}
Available in UAE
@@ -145,8 +145,8 @@ function Stat({ value, label }: { value: string; label: string }) {
style={{
padding: '1.25rem',
borderRadius: 16,
- background: 'linear-gradient(135deg, rgba(20,17,11,0.7), rgba(5,5,5,0.92))',
- border: '1px solid rgba(196,162,101,0.22)',
+ background: 'linear-gradient(135deg, rgba(28, 27, 33,0.7), rgba(5,5,5,0.92))',
+ border: '1px solid rgba(39, 63, 148,0.22)',
display: 'flex',
flexDirection: 'column',
gap: '0.4rem',
@@ -157,7 +157,7 @@ function Stat({ value, label }: { value: string; label: string }) {
{value}
-
{label}
+
{label}
);
}
diff --git a/src/components/robotics/FloatingTechPanel.tsx b/src/components/robotics/FloatingTechPanel.tsx
index 920ea5f..142ecbc 100644
--- a/src/components/robotics/FloatingTechPanel.tsx
+++ b/src/components/robotics/FloatingTechPanel.tsx
@@ -40,15 +40,15 @@ export function FloatingTechPanel() {
width: 60,
height: 60,
borderRadius: '50%',
- background: `radial-gradient(circle, ${['#e0c896', '#c4a265', '#8b6f47', '#e0c896'][i % 4]}33, transparent 70%)`,
+ background: `radial-gradient(circle, ${['#DEE0F0', '#273F94', '#8891C7', '#DEE0F0'][i % 4]}33, transparent 70%)`,
pointerEvents: 'none',
}}
/>
-
{s.label}
+
{s.label}
{s.value}
- {s.sub &&
{s.sub} }
+ {s.sub &&
{s.sub} }
))}
diff --git a/src/components/robotics/FounderSection.tsx b/src/components/robotics/FounderSection.tsx
new file mode 100644
index 0000000..03e8e14
--- /dev/null
+++ b/src/components/robotics/FounderSection.tsx
@@ -0,0 +1,88 @@
+'use client';
+
+export function FounderSection() {
+ return (
+
+
+
+
+
+
Leadership · YS Lootah Group
+
+
+ Mr. Yousif Bin Saeed Al Lootah
+
+
+
+ Founder · Yousuf Saeed Lootah Investment Group
+
+
+ Under the leadership of Mr. Yousif Bin Saeed Al Lootah, the group has championed innovation, trust, and long-term value creation across the UAE — from technology and robotics to investment and enterprise. YS Lootah Robotics carries that vision into the future of intelligent automation.
+
+
+ “Innovating today for a smarter tomorrow.”
+
+
+
+
+
+
+ );
+}
+
+function Pillar({ value, label }: { value: string; label: string }) {
+ return (
+
+
+ {value}
+
+ {label}
+
+ );
+}
diff --git a/src/components/robotics/Hero3DRobotics.tsx b/src/components/robotics/Hero3DRobotics.tsx
index b8d7d91..050a193 100644
--- a/src/components/robotics/Hero3DRobotics.tsx
+++ b/src/components/robotics/Hero3DRobotics.tsx
@@ -8,9 +8,9 @@ import { CursorSpotlight } from '@/components/ui/CursorSpotlight';
import { FEATURED_ROBOTS } from '@/data/robots';
const HERO_STATS = [
- { value: 'Exclusive', label: 'UAE access' },
- { value: '2', label: 'Premier brands' },
- { value: 'Dubai', label: 'Showroom & demo' },
+ { value: 'Exclusive', label: 'UAE Access' },
+ { value: 'Unitree + Pudu', label: 'Premier brands' },
+ { value: 'Dubai', label: 'Showroom & Demo' },
];
type LabelPos = {
@@ -22,12 +22,27 @@ type LabelPos = {
right?: string;
};
-const FLOATING_LABELS: LabelPos[] = [
- { text: 'Exclusive UAE Access', top: '10%', left: '5%', delay: 0 },
- { text: 'Unitree Robotics', top: '22%', right: '4%', delay: 0.3 },
- { text: 'Pudu Service Robots', bottom: '28%', left: '4%', delay: 0.6 },
- { text: 'Demo & Sales · Dubai', bottom: '12%', right: '6%', delay: 0.9 },
-];
+/* Labels keyed to active robot brand/category for accuracy */
+function getLabelsFor(brand: string, category: string): LabelPos[] {
+ const brandLabel = brand === 'unitree' ? 'Unitree Robotics' : 'Pudu Robotics';
+ const categoryLabel =
+ category === 'humanoid'
+ ? 'Humanoid Platform'
+ : category === 'quadruped'
+ ? 'Quadruped Patrol'
+ : category === 'delivery'
+ ? 'Delivery Automation'
+ : category === 'service'
+ ? 'Service Robotics'
+ : category === 'cleaning'
+ ? 'Cleaning Automation'
+ : 'Advanced Robotics';
+ return [
+ { text: brandLabel, top: '11%', right: '4%', delay: 0.15 },
+ { text: categoryLabel, bottom: '32%', left: '4%', delay: 0.4 },
+ { text: 'Demo & Sales · Dubai', bottom: '11%', right: '6%', delay: 0.65 },
+ ];
+}
export function Hero3DRobotics() {
const wrapRef = useRef(null);
@@ -43,7 +58,7 @@ export function Hero3DRobotics() {
const rect = el.getBoundingClientRect();
const x = (e.clientX - rect.left) / rect.width - 0.5;
const y = (e.clientY - rect.top) / rect.height - 0.5;
- setTilt({ rx: -y * 9, ry: x * 14 });
+ setTilt({ rx: -y * 8, ry: x * 12 });
};
const onLeave = () => setTilt({ rx: 0, ry: 0 });
el.addEventListener('mousemove', onMove);
@@ -55,11 +70,12 @@ export function Hero3DRobotics() {
}, []);
useEffect(() => {
- const t = setInterval(() => setActiveIdx((i) => (i + 1) % FEATURED_ROBOTS.length), 5400);
+ const t = setInterval(() => setActiveIdx((i) => (i + 1) % FEATURED_ROBOTS.length), 5600);
return () => clearInterval(t);
}, []);
const robot = FEATURED_ROBOTS[activeIdx];
+ const labels = getLabelsFor(robot.brand, robot.category);
return (
-
+
+
+ {/* Royal-blue beams */}
-
+
Exclusive UAE Access · Dubai
@@ -117,15 +135,31 @@ export function Hero3DRobotics() {
fontWeight: 300,
}}
>
-
Advanced robotics.
-
+ Advanced robotics.
+
Exclusive UAE access.
-
+
YS Lootah Robotics is the exclusive UAE sales destination for selected Unitree and Pudu Robotics solutions — helping businesses explore, configure, book demos, and deploy advanced robots across Dubai and the UAE.
+
+ In Tech We Innovate · In Trust We Lead
+
Explore exclusive robots
@@ -137,18 +171,28 @@ export function Hero3DRobotics() {
style={{
display: 'grid',
gridTemplateColumns: 'repeat(3, minmax(0, 1fr))',
- gap: 'clamp(0.5rem, 2vw, 1.25rem)',
- paddingTop: '1.25rem',
- marginTop: '0.5rem',
- borderTop: '1px solid rgba(196,162,101,0.18)',
+ gap: 'clamp(0.75rem, 2.4vw, 1.75rem)',
+ paddingTop: '1.75rem',
+ paddingBottom: '0.5rem',
+ marginTop: '0.75rem',
+ marginBottom: 'clamp(0.5rem, 2vw, 1.5rem)',
+ borderTop: '1px solid rgba(136,145,199,0.22)',
}}
>
{HERO_STATS.map((s) => (
-
-
+
+
{s.value}
-
+
{s.label}
@@ -160,18 +204,36 @@ export function Hero3DRobotics() {
ref={wrapRef}
style={{
position: 'relative',
- perspective: '1500px',
- minHeight: 'clamp(420px, 56vw, 620px)',
+ perspective: '1600px',
+ minHeight: 'clamp(440px, 58vw, 660px)',
width: '100%',
}}
>
+ {/* Outer blue glow */}
+
+ {/* Floor halo */}
+
@@ -182,26 +244,28 @@ export function Hero3DRobotics() {
position: 'relative',
width: '100%',
height: '100%',
- minHeight: 'clamp(420px, 56vw, 620px)',
+ minHeight: 'clamp(440px, 58vw, 660px)',
borderRadius: '1.75rem',
background:
- 'linear-gradient(180deg, rgba(20,17,11,0.7) 0%, rgba(5,5,5,0.92) 100%)',
- border: '1px solid rgba(196,162,101,0.28)',
- backdropFilter: 'blur(18px)',
+ 'linear-gradient(180deg, rgba(28,27,33,0.78) 0%, rgba(10,10,12,0.95) 100%)',
+ border: '1px solid rgba(136,145,199,0.32)',
+ backdropFilter: 'blur(20px)',
boxShadow:
- '0 30px 100px rgba(0,0,0,0.75), inset 0 1px 0 rgba(255,240,200,0.08), 0 0 60px rgba(196,162,101,0.15)',
+ '0 30px 100px rgba(0,0,0,0.8), inset 0 1px 0 rgba(222,224,240,0.1), 0 0 70px rgba(39,63,148,0.22)',
transform: `rotateX(${tilt.rx}deg) rotateY(${tilt.ry}deg)`,
- transition: 'transform 0.25s ease-out',
+ transition: 'transform 0.3s cubic-bezier(0.16,1,0.3,1)',
overflow: 'hidden',
+ transformStyle: 'preserve-3d',
}}
>
+ {/* Grid floor */}
+ {/* Royal-blue stage spotlight behind robot */}
+ {/* Light beam from top */}
+
+
+ {/* Robot image — main (enlarged ~12%) */}
{FEATURED_ROBOTS.map((r, idx) => (
+ ))}
+
+ {/* Stronger drop-shadow ellipse under robot */}
+
+
+ {/* Floor reflection (mirror image, faded, blue-tinted) */}
+ {FEATURED_ROBOTS.map((r, idx) => (
+
))}
+ {/* Floor line */}
+
+
+ {/* Edge glass glare — silver/blue rim light */}
+
+
+
+ {/* Floating labels — keyed to active robot + parallax */}
- {FLOATING_LABELS.map((l) => (
-
- {l.text}
-
- ))}
+ {labels.map((l, i) => {
+ /* labels drift opposite to tilt for parallax depth */
+ const depth = (i + 1) * 0.6;
+ const dx = tilt.ry * depth;
+ const dy = tilt.rx * depth;
+ return (
+
+ {l.text}
+
+ );
+ })}
+ {/* Featured card + dot nav */}
-
+
Featured · {robot.brandLabel}
{robot.name}
-
+
@@ -328,11 +535,13 @@ export function Hero3DRobotics() {
onClick={() => setActiveIdx(idx)}
aria-label={`Show ${r.name}`}
style={{
- width: idx === activeIdx ? 24 : 8,
+ width: idx === activeIdx ? 26 : 8,
height: 8,
borderRadius: 999,
border: 'none',
- background: idx === activeIdx ? r.accent : 'rgba(196,162,101,0.3)',
+ background: idx === activeIdx
+ ? 'linear-gradient(90deg, #DEE0F0, #3a55c4)'
+ : 'rgba(136,145,199,0.4)',
cursor: 'pointer',
transition: 'all 0.4s ease',
}}
diff --git a/src/components/robotics/HowItWorks.tsx b/src/components/robotics/HowItWorks.tsx
index aad11ce..f124f24 100644
--- a/src/components/robotics/HowItWorks.tsx
+++ b/src/components/robotics/HowItWorks.tsx
@@ -5,19 +5,19 @@ const STEPS = [
n: '01',
title: 'Discover',
body: 'Tell us about your venue and use case. We recommend a brand and model — humanoid, quadruped, service, delivery, cleaning, or commercial.',
- accent: '#e0c896',
+ accent: '#DEE0F0',
},
{
n: '02',
title: 'Demo & configure',
body: 'Book a live demo at our Dubai showroom or your venue. Configure your robot’s persona, attire, and accessories in our 3D configurator.',
- accent: '#c4a265',
+ accent: '#273F94',
},
{
n: '03',
title: 'Deploy & support',
body: 'We handle procurement, setup, training, and ongoing service across the UAE — so your team can run, not maintain.',
- accent: '#8b6f47',
+ accent: '#8891C7',
},
];
@@ -78,7 +78,7 @@ export function HowItWorks() {
Step {i + 1}
{s.title}
- {s.body}
+ {s.body}
))}
diff --git a/src/components/robotics/IndustryUseCases.tsx b/src/components/robotics/IndustryUseCases.tsx
index 8348d0a..a72069b 100644
--- a/src/components/robotics/IndustryUseCases.tsx
+++ b/src/components/robotics/IndustryUseCases.tsx
@@ -54,11 +54,11 @@ export function IndustryUseCases({ limit }: { limit?: number }) {
-
Problem
-
{i.problem}
+
Problem
+
{i.problem}
-
Solution
+
Solution
{i.solution}
diff --git a/src/components/robotics/InquiryForm.tsx b/src/components/robotics/InquiryForm.tsx
index 5905014..810b754 100644
--- a/src/components/robotics/InquiryForm.tsx
+++ b/src/components/robotics/InquiryForm.tsx
@@ -63,9 +63,9 @@ export function InquiryForm({ defaultRobot = '', defaultCategory = '', intent =
width: '100%',
padding: '0.875rem 1rem',
borderRadius: '0.75rem',
- border: '1px solid rgba(196, 162, 101,0.18)',
+ border: '1px solid rgba(39, 63, 148,0.18)',
background: 'rgba(15, 12, 8,0.55)',
- color: '#f5f1e8',
+ color: '#FBFBFD',
fontSize: '0.95rem',
outline: 'none',
boxSizing: 'border-box',
@@ -77,7 +77,7 @@ export function InquiryForm({ defaultRobot = '', defaultCategory = '', intent =
fontSize: '0.72rem',
letterSpacing: '0.18em',
textTransform: 'uppercase',
- color: '#94908a',
+ color: '#8891C7',
fontWeight: 600,
};
@@ -90,7 +90,7 @@ export function InquiryForm({ defaultRobot = '', defaultCategory = '', intent =
)}
{status === 'error' && (
- Something went wrong. Please try again, or email info@yslootahtech.com.
+ Something went wrong. Please try again, or email info@yslootahrobotics.com.
)}
diff --git a/src/components/robotics/MarqueeStrip.tsx b/src/components/robotics/MarqueeStrip.tsx
index a780062..00a6b95 100644
--- a/src/components/robotics/MarqueeStrip.tsx
+++ b/src/components/robotics/MarqueeStrip.tsx
@@ -9,12 +9,12 @@ type Item = {
};
const DEFAULT_ITEMS: Item[] = [
- { label: 'Exclusive UAE Access', sub: 'YS Lootah Robotics', accent: '#e0c896' },
- { label: 'Unitree', sub: 'Quadruped · Humanoid', accent: '#c4a265' },
- { label: 'Pudu Robotics', sub: 'Service · Delivery · Cleaning', accent: '#8b6f47' },
- { label: 'Dubai · UAE', sub: 'Sales · Demo · Configure', accent: '#e0c896' },
- { label: 'Showroom', sub: 'City Bay Business Center', accent: '#c4a265' },
- { label: '10+ Industries', sub: 'Hospitality · Security · Healthcare', accent: '#8b6f47' },
+ { label: 'Exclusive UAE Access', sub: 'YS Lootah Robotics', accent: '#DEE0F0' },
+ { label: 'Unitree', sub: 'Quadruped · Humanoid', accent: '#273F94' },
+ { label: 'Pudu Robotics', sub: 'Service · Delivery · Cleaning', accent: '#8891C7' },
+ { label: 'Dubai · UAE', sub: 'Sales · Demo · Configure', accent: '#DEE0F0' },
+ { label: 'Showroom', sub: 'City Bay Business Center', accent: '#273F94' },
+ { label: '10+ Industries', sub: 'Hospitality · Security · Healthcare', accent: '#8891C7' },
];
export function MarqueeStrip({ items = DEFAULT_ITEMS, speed = 38 }: { items?: Item[]; speed?: number }) {
@@ -28,8 +28,8 @@ export function MarqueeStrip({ items = DEFAULT_ITEMS, speed = 38 }: { items?: It
maskImage: 'linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent)',
WebkitMaskImage: 'linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent)',
padding: '1.25rem 0',
- borderTop: '1px solid rgba(196, 162, 101,0.12)',
- borderBottom: '1px solid rgba(196, 162, 101,0.12)',
+ borderTop: '1px solid rgba(39, 63, 148,0.12)',
+ borderBottom: '1px solid rgba(39, 63, 148,0.12)',
background:
'linear-gradient(180deg, rgba(15, 12, 8,0.4), rgba(5, 5, 5,0.6))',
}}
@@ -59,8 +59,8 @@ export function MarqueeStrip({ items = DEFAULT_ITEMS, speed = 38 }: { items?: It
width: 8,
height: 8,
borderRadius: 999,
- background: it.accent ?? '#e0c896',
- boxShadow: `0 0 12px ${it.accent ?? '#e0c896'}88`,
+ background: it.accent ?? '#DEE0F0',
+ boxShadow: `0 0 12px ${it.accent ?? '#DEE0F0'}88`,
}}
/>
{it.sub}
diff --git a/src/components/robotics/ProductFilterTabs.tsx b/src/components/robotics/ProductFilterTabs.tsx
index d134be3..79f09a0 100644
--- a/src/components/robotics/ProductFilterTabs.tsx
+++ b/src/components/robotics/ProductFilterTabs.tsx
@@ -15,7 +15,7 @@ export function ProductFilterTabs({ tabs, activeId, onChange, title }: Props) {
return (
{title && (
-
+
{title}
)}
@@ -39,9 +39,9 @@ export function ProductFilterTabs({ tabs, activeId, onChange, title }: Props) {
border: '1px solid',
cursor: 'pointer',
transition: 'all 0.2s',
- background: active ? (t.accent ? `${t.accent}1F` : 'rgba(196, 162, 101,0.18)') : 'rgba(15, 12, 8,0.55)',
- borderColor: active ? (t.accent ?? '#e0c896') : 'rgba(196, 162, 101,0.2)',
- color: active ? (t.accent ?? '#e0c896') : '#cbc4b3',
+ background: active ? (t.accent ? `${t.accent}1F` : 'rgba(39, 63, 148,0.18)') : 'rgba(15, 12, 8,0.55)',
+ borderColor: active ? (t.accent ?? '#DEE0F0') : 'rgba(39, 63, 148,0.2)',
+ color: active ? (t.accent ?? '#DEE0F0') : '#DEE0F0',
}}
>
{t.label}
diff --git a/src/components/robotics/ProductGallery.tsx b/src/components/robotics/ProductGallery.tsx
index ccd037f..faae35d 100644
--- a/src/components/robotics/ProductGallery.tsx
+++ b/src/components/robotics/ProductGallery.tsx
@@ -22,7 +22,7 @@ export function ProductGallery({ images, accent }: Props) {
overflow: 'hidden',
background:
`radial-gradient(ellipse 70% 60% at 50% 50%, ${accent}33, transparent 60%), linear-gradient(180deg, rgba(15, 12, 8,0.7), rgba(5, 5, 5,0.95))`,
- border: '1px solid rgba(196, 162, 101,0.18)',
+ border: '1px solid rgba(39, 63, 148,0.18)',
boxShadow: '0 30px 100px rgba(0, 0, 0,0.6)',
}}
>
@@ -32,7 +32,7 @@ export function ProductGallery({ images, accent }: Props) {
position: 'absolute',
inset: 0,
background:
- 'linear-gradient(rgba(196, 162, 101,0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(196, 162, 101,0.05) 1px, transparent 1px)',
+ 'linear-gradient(rgba(39, 63, 148,0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(39, 63, 148,0.05) 1px, transparent 1px)',
backgroundSize: '40px 40px',
maskImage: 'radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 80%)',
WebkitMaskImage: 'radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 80%)',
@@ -64,7 +64,7 @@ export function ProductGallery({ images, accent }: Props) {
overflow: 'hidden',
cursor: 'pointer',
background: 'rgba(15, 12, 8,0.6)',
- border: `1px solid ${idx === active ? accent : 'rgba(196, 162, 101,0.2)'}`,
+ border: `1px solid ${idx === active ? accent : 'rgba(39, 63, 148,0.2)'}`,
padding: 4,
transition: 'all 0.2s',
}}
diff --git a/src/components/robotics/ProductSpecTable.tsx b/src/components/robotics/ProductSpecTable.tsx
index cce0f2c..d51e59b 100644
--- a/src/components/robotics/ProductSpecTable.tsx
+++ b/src/components/robotics/ProductSpecTable.tsx
@@ -4,24 +4,24 @@ import type { RobotSpec } from '@/data/robots';
export function ProductSpecTable({ specs }: { specs: RobotSpec[] }) {
return (
-
+
{specs.map((s) => (
-
+
{s.label}
- {s.value}
+ {s.value}
))}
diff --git a/src/components/robotics/RobotCategoryGrid.tsx b/src/components/robotics/RobotCategoryGrid.tsx
index 04de2e0..c0619bc 100644
--- a/src/components/robotics/RobotCategoryGrid.tsx
+++ b/src/components/robotics/RobotCategoryGrid.tsx
@@ -7,49 +7,49 @@ const CATEGORY_META: { id: RobotCategory; description: string; accent: string; i
{
id: 'humanoid',
description: 'Bipedal robots for events, education, hospitality, and research.',
- accent: '#e0c896',
+ accent: '#DEE0F0',
iconPath: 'M12 2a4 4 0 0 1 4 4v2h-8V6a4 4 0 0 1 4-4Zm-6 8h12v4l-2 2v6h-3v-5h-2v5H8v-6l-2-2v-4Z',
},
{
id: 'quadruped',
description: 'Four-legged robots for inspection, security, and field operations.',
- accent: '#c4a265',
+ accent: '#273F94',
iconPath: 'M3 11l3-3h4l2-2 2 2h4l3 3v3l-2 1v3h-3v-3h-3l-1 2-1-2H8v3H5v-3l-2-1v-3Z',
},
{
id: 'service',
description: 'Customer-facing robots that greet, guide, and assist.',
- accent: '#8b6f47',
+ accent: '#8891C7',
iconPath: 'M12 2a5 5 0 0 1 5 5v3a5 5 0 0 1-10 0V7a5 5 0 0 1 5-5Zm-7 17a7 7 0 0 1 14 0v3H5v-3Z',
},
{
id: 'delivery',
description: 'Autonomous delivery for restaurants, hotels, and back-of-house.',
- accent: '#e0c896',
+ accent: '#DEE0F0',
iconPath: 'M3 6h11v9H3V6Zm14 3h3l2 3v3h-2a2 2 0 1 1-4 0h-1V9h2ZM6 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm12 0a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z',
},
{
id: 'hospitality',
description: 'Premium hospitality robotics for hotels, resorts, and venues.',
- accent: '#8b6f47',
+ accent: '#8891C7',
iconPath: 'M4 7h16v3H4V7Zm0 5h16v8h-3v-3H7v3H4v-8Z',
},
{
id: 'cleaning',
description: 'Commercial cleaning robots for malls, airports, and offices.',
- accent: '#c4a265',
+ accent: '#273F94',
iconPath: 'M5 4h6v8H5V4Zm0 10h6v2H5v-2Zm-2 4h10v3H3v-3Zm12-14h3l3 9v9h-3v-7h-3V4Z',
},
{
id: 'commercial',
description: 'Commercial automation for warehouses, sites, and facilities.',
- accent: '#e0c896',
+ accent: '#DEE0F0',
iconPath: 'M3 21V8l9-5 9 5v13h-6v-6h-6v6H3Z',
},
{
id: 'inspection',
description: 'Inspection robots for energy, utilities, and industrial sites.',
- accent: '#c4a265',
+ accent: '#273F94',
iconPath: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 4a6 6 0 1 1 0 12 6 6 0 0 1 0-12Zm0 3a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z',
},
];
@@ -73,7 +73,7 @@ export function RobotCategoryGrid() {
style={{
padding: '1.5rem',
textDecoration: 'none',
- color: '#f5f1e8',
+ color: '#FBFBFD',
display: 'flex',
flexDirection: 'column',
gap: '0.875rem',
@@ -102,7 +102,7 @@ export function RobotCategoryGrid() {
{count} models
-
+
{cat.description}
diff --git a/src/components/robotics/RobotProductCard.tsx b/src/components/robotics/RobotProductCard.tsx
index 18a138f..c0ca756 100644
--- a/src/components/robotics/RobotProductCard.tsx
+++ b/src/components/robotics/RobotProductCard.tsx
@@ -19,7 +19,7 @@ export function RobotProductCard({ robot, priority = false }: Props) {
display: 'flex',
flexDirection: 'column',
height: '100%',
- color: '#f5f1e8',
+ color: '#FBFBFD',
}}
>
@@ -104,11 +104,11 @@ export function RobotProductCard({ robot, priority = false }: Props) {
-
+
{robot.name}
-
+
{robot.shortDescription}
@@ -118,10 +118,10 @@ export function RobotProductCard({ robot, priority = false }: Props) {
key={u}
style={{
fontSize: '0.7rem',
- color: '#94908a',
+ color: '#8891C7',
padding: '0.2rem 0.5rem',
borderRadius: 999,
- border: '1px solid rgba(196, 162, 101,0.18)',
+ border: '1px solid rgba(39, 63, 148,0.18)',
background: 'rgba(15, 12, 8,0.5)',
letterSpacing: '0.04em',
}}
@@ -135,7 +135,7 @@ export function RobotProductCard({ robot, priority = false }: Props) {
style={{
marginTop: 'auto',
paddingTop: '0.75rem',
- borderTop: '1px solid rgba(196, 162, 101,0.1)',
+ borderTop: '1px solid rgba(39, 63, 148,0.1)',
display: 'flex',
flexWrap: 'wrap',
gap: '0.4rem',
@@ -176,8 +176,8 @@ export function RobotProductCard({ robot, priority = false }: Props) {
padding: '0.55rem 0.75rem',
borderRadius: 10,
background: 'transparent',
- border: '1px solid rgba(196, 162, 101,0.2)',
- color: '#cbc4b3',
+ border: '1px solid rgba(39, 63, 148,0.2)',
+ color: '#DEE0F0',
fontSize: '0.72rem',
fontWeight: 600,
letterSpacing: '0.1em',
@@ -198,8 +198,8 @@ export function RobotProductCard({ robot, priority = false }: Props) {
padding: '0.55rem 0.75rem',
borderRadius: 10,
background: 'transparent',
- border: '1px solid rgba(196, 162, 101,0.2)',
- color: '#cbc4b3',
+ border: '1px solid rgba(39, 63, 148,0.2)',
+ color: '#DEE0F0',
fontSize: '0.72rem',
fontWeight: 600,
letterSpacing: '0.1em',
diff --git a/src/components/robotics/ServicesGrid.tsx b/src/components/robotics/ServicesGrid.tsx
new file mode 100644
index 0000000..e7bfd60
--- /dev/null
+++ b/src/components/robotics/ServicesGrid.tsx
@@ -0,0 +1,101 @@
+'use client';
+
+type Service = { title: string; body: string; icon: string };
+
+const SERVICES: Service[] = [
+ {
+ title: 'Autonomous Robotics & Intelligent Automation',
+ body: 'End-to-end deployment of autonomous robotic systems for industrial, commercial, and public sector operations.',
+ icon: 'M12 2a8 8 0 0 1 8 8v3l2 4-2 1v3a3 3 0 0 1-3 3h-2v-3h-2v3H9v-3H7v3H5a3 3 0 0 1-3-3v-3l-2-1 2-4v-3a8 8 0 0 1 8-8Z',
+ },
+ {
+ title: 'Autonomous Site Inspection & Patrolling',
+ body: 'Quadruped patrol robots for facility, infrastructure, and security inspection across UAE sites.',
+ icon: 'M3 11l3-3h4l2-2 2 2h4l3 3v3l-2 1v3h-3v-3h-3l-1 2-1-2H8v3H5v-3l-2-1v-3Z',
+ },
+ {
+ title: 'Smart Service & Delivery Robots',
+ body: 'Hospitality, retail, and back-of-house delivery robots configured for UAE venues.',
+ icon: 'M3 6h11v9H3V6Zm14 3h3l2 3v3h-2a2 2 0 1 1-4 0h-1V9h2ZM6 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z',
+ },
+ {
+ title: 'Collaborative & Flexible Robotics Integration',
+ body: 'Integration of robotic systems into existing workflows — collaborative, flexible, business-friendly.',
+ icon: 'M12 2v6m0 8v6M4.93 4.93l4.24 4.24m5.66 5.66 4.24 4.24M2 12h6m8 0h6M4.93 19.07l4.24-4.24m5.66-5.66 4.24-4.24',
+ },
+ {
+ title: 'Custom Robot Motion Programming',
+ body: 'Tailored motion sequences and choreography for events, demos, and brand activations.',
+ icon: 'M3 12h4l3-7 4 14 3-7h4',
+ },
+ {
+ title: 'Cloud-Based Robot Program Repository',
+ body: 'Centralized program repository for storing, versioning, and deploying robot behaviors.',
+ icon: 'M7 18a4 4 0 0 1-1.4-7.8 5 5 0 0 1 9.6-1.6A4.5 4.5 0 0 1 21 13.5 4.5 4.5 0 0 1 16.5 18H7Z',
+ },
+ {
+ title: 'Algorithm Customization & Optimization',
+ body: 'Tuning of perception, planning, and control algorithms for venue-specific performance.',
+ icon: 'M4 6h16M4 12h10m-6 6h12',
+ },
+ {
+ title: 'Remote System Monitoring & Diagnostics',
+ body: 'Live monitoring, alerts, and remote diagnostics keep your robot fleet running.',
+ icon: 'M2 12h4l3-9 4 18 3-9h6',
+ },
+ {
+ title: 'Hardware-Software Co-Design Consultation',
+ body: 'Co-design across hardware, sensors, software, and integration for custom robotics programs.',
+ icon: 'M4 4h7v7H4Zm9 0h7v7h-7Zm-9 9h7v7H4Zm9 0h7v7h-7Z',
+ },
+ {
+ title: 'Robotics Software Development Kit',
+ body: 'SDK access for partners and developers building on top of our deployed robots.',
+ icon: 'M8 3 3 8l5 5m8-10 5 5-5 5M14 3l-4 18',
+ },
+ {
+ title: 'Data Analytics Dashboard',
+ body: 'Centralized dashboards turning robot telemetry into actionable business insight.',
+ icon: 'M3 21V8h4v13H3Zm7 0V3h4v18h-4Zm7 0v-9h4v9h-4Z',
+ },
+];
+
+const ACCENTS = ['#DEE0F0', '#273F94', '#8891C7'];
+
+export function ServicesGrid() {
+ return (
+
+ {SERVICES.map((s, i) => {
+ const accent = ACCENTS[i % ACCENTS.length];
+ return (
+
+
+
{s.title}
+
{s.body}
+
+ );
+ })}
+
+ );
+}
diff --git a/src/components/robotics/WhyUs.tsx b/src/components/robotics/WhyUs.tsx
index befad6a..d627656 100644
--- a/src/components/robotics/WhyUs.tsx
+++ b/src/components/robotics/WhyUs.tsx
@@ -4,25 +4,25 @@ const REASONS = [
{
title: 'Exclusive UAE portfolio',
body: 'Selected Unitree and Pudu Robotics solutions — available exclusively in the UAE through YS Lootah Robotics for hospitality, security, education, and industry.',
- accent: '#e0c896',
+ accent: '#DEE0F0',
icon: 'M3 3h7v7H3V3Zm0 11h7v7H3v-7Zm11-11h7v7h-7V3Zm0 11h7v7h-7v-7Z',
},
{
title: 'Dubai sales and support',
body: 'A local Dubai team manages your inquiry, demo, deployment, and on-the-ground support — not just a website with a contact form.',
- accent: '#c4a265',
+ accent: '#273F94',
icon: 'M12 2 2 7v6c0 5 4 9 10 11 6-2 10-6 10-11V7l-10-5Z',
},
{
title: 'Custom configuration',
body: 'Configure persona, attire, and accessories for humanoid robots — visualize your deployment before you order with our 3D configurator.',
- accent: '#8b6f47',
+ accent: '#8891C7',
icon: 'M12 4a4 4 0 0 1 4 4v1h5v6h-5v1a4 4 0 0 1-8 0v-1H3V9h5V8a4 4 0 0 1 4-4Z',
},
{
title: 'End-to-end deployment',
body: 'From procurement and configuration to delivery, installation, training, and ongoing support — we handle the full lifecycle.',
- accent: '#e0c896',
+ accent: '#DEE0F0',
icon: 'M3 12h4l3-7 4 14 3-7h4',
},
];
@@ -55,7 +55,7 @@ export function WhyUs() {
{r.title}
- {r.body}
+ {r.body}
))}
diff --git a/src/components/sections/robotics-scroll-showcase.tsx b/src/components/sections/robotics-scroll-showcase.tsx
new file mode 100644
index 0000000..f6e3740
--- /dev/null
+++ b/src/components/sections/robotics-scroll-showcase.tsx
@@ -0,0 +1,184 @@
+'use client';
+
+import Image from 'next/image';
+import Link from 'next/link';
+import { ArrowRight, BadgeCheck, Cpu, MapPin, Sparkles, Bot, Truck } from 'lucide-react';
+import { ContainerScroll } from '@/components/ui/container-scroll-animation';
+
+const SHOWROOM_ROBOTS = [
+ {
+ name: 'Unitree G1',
+ slug: 'unitree-g1',
+ image: '/images/robots/unitree-g1.png',
+ category: 'Humanoid',
+ accent: '#DEE0F0',
+ },
+ {
+ name: 'Unitree Go2',
+ slug: 'unitree-go2',
+ image: '/images/robots/unitree-go2.png',
+ category: 'Quadruped',
+ accent: '#BFC3E2',
+ },
+ {
+ name: 'Pudu BellaBot',
+ slug: 'pudu-bellabot',
+ image: '/images/robots/pudu-bellabot.svg',
+ category: 'Delivery',
+ accent: '#8891C7',
+ },
+];
+
+const TABS = [
+ { label: 'All', icon: Sparkles, active: true },
+ { label: 'Unitree', icon: Bot },
+ { label: 'Pudu', icon: Truck },
+ { label: 'Humanoid', icon: BadgeCheck },
+ { label: 'Quadruped', icon: Cpu },
+];
+
+export function RoboticsScrollShowcase() {
+ return (
+
+
+
+
+ Exclusive UAE Robotics Showroom
+
+
+ Advanced robotics.
+
+ Exclusive UAE access.
+
+
+ Built for Dubai's next generation of automation.
+
+
+
+ Explore selected Unitree and Pudu Robotics solutions through an immersive showroom experience built for UAE businesses, venues, and innovators.
+
+
+ }
+ >
+
+
+
+ );
+}
+
+function ConsoleInterior() {
+ return (
+
+ {/* left sidebar — category rail */}
+
+
+ {/* main display */}
+
+ {/* top breadcrumb */}
+
+ Robots · Exclusive UAE Portfolio
+ 11 Models · 2 Brands · Dubai
+
+
+ {/* product grid */}
+
+ {SHOWROOM_ROBOTS.map((r) => (
+
+
+
+
+ {r.category}
+
+
+
+
+ Available in UAE
+
+
{r.name}
+
+
+ ))}
+
+
+ {/* CTA strip */}
+
+
+
+ Book demo
+
+
+
+ Configure solution
+
+
+
+ Request UAE quotation
+
+
+
+ Dubai · UAE
+
+
+
+
+ );
+}
diff --git a/src/components/sections/robotics-spline-showcase.tsx b/src/components/sections/robotics-spline-showcase.tsx
new file mode 100644
index 0000000..ffb4303
--- /dev/null
+++ b/src/components/sections/robotics-spline-showcase.tsx
@@ -0,0 +1,117 @@
+'use client';
+
+import { SplineScene } from '@/components/ui/spline-scene';
+import { Card } from '@/components/ui/card';
+import { Spotlight } from '@/components/ui/spotlight';
+import { ArrowRight, BadgeCheck, Cpu, MapPin } from 'lucide-react';
+import Link from 'next/link';
+
+const SPLINE_SCENE = 'https://prod.spline.design/kZDDjO5HuC9GJUM2/scene.splinecode';
+
+export function RoboticsSplineShowcase() {
+ return (
+
+
+
+
+
+
+
+
+
+ {/* Left: copy + CTA */}
+
+
+
+ Exclusive UAE Access
+
+
+
+ Advanced robotics.
+
+ Built for UAE innovation.
+
+
+
+
+ YS Lootah Robotics is the exclusive UAE sales destination for selected Unitree and Pudu Robotics solutions — helping businesses explore, configure, book demos, and deploy advanced robots across Dubai and the UAE.
+
+
+
+
+ Explore robots
+
+
+
+
+ Configure your solution
+
+
+
+
+
+ {[
+ { icon: BadgeCheck, label: 'Exclusive UAE', value: 'Access' },
+ { icon: Cpu, label: 'Unitree + Pudu', value: 'Robotics' },
+ { icon: MapPin, label: 'Dubai', value: 'Showroom & Demo' },
+ ].map((item) => (
+
+
+
{item.label}
+
+ {item.value}
+
+
+ ))}
+
+
+
+ In Tech We Innovate · In Trust We Lead
+
+
+
+ {/* Right: Spline 3D scene */}
+
+
+
+ Interactive Robot Scene
+
+
+
+ YS Lootah Robotics
+
+
In Tech We Innovate
+
+
+
+
+ {/* Replacement note (visible only in dev) */}
+
+ Interactive 3D scene — placeholder Spline reference robot for development. Replace
+ with approved YS Lootah Robotics custom Spline scene when available.
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/ui/CursorSpotlight.tsx b/src/components/ui/CursorSpotlight.tsx
index bb575d8..5f58470 100644
--- a/src/components/ui/CursorSpotlight.tsx
+++ b/src/components/ui/CursorSpotlight.tsx
@@ -8,7 +8,7 @@ type Props = {
className?: string;
};
-export function CursorSpotlight({ color = 'rgba(196, 162, 101, 0.18)', size = 520, className = '' }: Props) {
+export function CursorSpotlight({ color = 'rgba(39, 63, 148, 0.18)', size = 520, className = '' }: Props) {
const ref = useRef(null);
const [pos, setPos] = useState<{ x: number; y: number } | null>(null);
const [enabled, setEnabled] = useState(false);
diff --git a/src/components/ui/GlassPanel.tsx b/src/components/ui/GlassPanel.tsx
index 7d6fe4f..64a9240 100644
--- a/src/components/ui/GlassPanel.tsx
+++ b/src/components/ui/GlassPanel.tsx
@@ -16,7 +16,7 @@ export function GlassPanel({ className = '', children, glow = false, style }: Pr
style={{
borderRadius: '1.25rem',
padding: '1.5rem',
- boxShadow: glow ? '0 12px 60px rgba(0, 0, 0,0.5), 0 0 60px rgba(196, 162, 101,0.18)' : undefined,
+ boxShadow: glow ? '0 12px 60px rgba(0, 0, 0,0.5), 0 0 60px rgba(39, 63, 148,0.18)' : undefined,
...style,
}}
>
diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx
new file mode 100644
index 0000000..ef7351e
--- /dev/null
+++ b/src/components/ui/card.tsx
@@ -0,0 +1,63 @@
+import * as React from 'react';
+import { cn } from '@/lib/utils';
+
+const Card = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+Card.displayName = 'Card';
+
+const CardHeader = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardHeader.displayName = 'CardHeader';
+
+const CardTitle = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardTitle.displayName = 'CardTitle';
+
+const CardDescription = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardDescription.displayName = 'CardDescription';
+
+const CardContent = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardContent.displayName = 'CardContent';
+
+const CardFooter = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardFooter.displayName = 'CardFooter';
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
diff --git a/src/components/ui/container-scroll-animation.tsx b/src/components/ui/container-scroll-animation.tsx
new file mode 100644
index 0000000..d01b3e1
--- /dev/null
+++ b/src/components/ui/container-scroll-animation.tsx
@@ -0,0 +1,158 @@
+'use client';
+
+import React, { useRef } from 'react';
+import { useScroll, useTransform, motion, type MotionValue } from 'framer-motion';
+import { cn } from '@/lib/utils';
+
+type Props = {
+ titleComponent: React.ReactNode;
+ children: React.ReactNode;
+ className?: string;
+};
+
+export function ContainerScroll({ titleComponent, children, className }: Props) {
+ const containerRef = useRef(null);
+ const { scrollYProgress } = useScroll({
+ target: containerRef,
+ offset: ['start end', 'end start'],
+ });
+
+ const [isMobile, setIsMobile] = React.useState(false);
+
+ React.useEffect(() => {
+ const check = () => setIsMobile(window.innerWidth <= 768);
+ check();
+ window.addEventListener('resize', check);
+ return () => window.removeEventListener('resize', check);
+ }, []);
+
+ const scaleDimensions = (): [number, number] => (isMobile ? [0.86, 0.96] : [1.04, 1]);
+
+ const rotate = useTransform(scrollYProgress, [0, 0.55], [22, 0]);
+ const scale = useTransform(scrollYProgress, [0, 0.55], scaleDimensions());
+ const translate = useTransform(scrollYProgress, [0, 0.55], [0, -90]);
+ const titleOpacity = useTransform(scrollYProgress, [0, 0.3], [0.6, 1]);
+ const titleY = useTransform(scrollYProgress, [0, 0.4], [40, 0]);
+
+ return (
+
+ );
+}
+
+function Header({
+ titleComponent,
+ opacity,
+ y,
+}: {
+ titleComponent: React.ReactNode;
+ opacity: MotionValue;
+ y: MotionValue;
+}) {
+ return (
+
+ {titleComponent}
+
+ );
+}
+
+function DisplayFrame({
+ rotate,
+ scale,
+ translate,
+ children,
+}: {
+ rotate: MotionValue;
+ scale: MotionValue;
+ translate: MotionValue;
+ children: React.ReactNode;
+}) {
+ return (
+
+ {/* outer frame chrome */}
+
+ {/* corner taps */}
+
+ {/* inner content stage */}
+
+ {/* grid floor + blue glow */}
+
+
+ {/* status bar */}
+
+
+
+
+
+
+
+ YS Lootah Robotics · Showroom Console
+
+
+ Live · UAE
+
+
+
{children}
+
+
+ );
+}
+
+function CornerTaps() {
+ return (
+ <>
+ {[
+ 'top-2 left-2',
+ 'top-2 right-2',
+ 'bottom-2 left-2',
+ 'bottom-2 right-2',
+ ].map((pos) => (
+
+ ))}
+ >
+ );
+}
diff --git a/src/components/ui/spline-scene.tsx b/src/components/ui/spline-scene.tsx
new file mode 100644
index 0000000..408d7eb
--- /dev/null
+++ b/src/components/ui/spline-scene.tsx
@@ -0,0 +1,29 @@
+'use client';
+
+import { Suspense, lazy } from 'react';
+import { cn } from '@/lib/utils';
+
+const Spline = lazy(() => import('@splinetool/react-spline'));
+
+interface SplineSceneProps {
+ scene: string;
+ className?: string;
+}
+
+export function SplineScene({ scene, className }: SplineSceneProps) {
+ return (
+
+
+
+ }
+ >
+
+
+ );
+}
diff --git a/src/components/ui/spotlight.tsx b/src/components/ui/spotlight.tsx
new file mode 100644
index 0000000..e17df3b
--- /dev/null
+++ b/src/components/ui/spotlight.tsx
@@ -0,0 +1,83 @@
+'use client';
+
+import React, { useRef, useState, useCallback, useEffect } from 'react';
+import { motion, useSpring, useTransform, type SpringOptions } from 'framer-motion';
+import { cn } from '@/lib/utils';
+
+type SpotlightProps = {
+ className?: string;
+ size?: number;
+ springOptions?: SpringOptions;
+};
+
+export function Spotlight({
+ className,
+ size = 280,
+ springOptions = { bounce: 0, stiffness: 120, damping: 18 },
+}: SpotlightProps) {
+ const containerRef = useRef(null);
+ const [isHovered, setIsHovered] = useState(false);
+ const [parentElement, setParentElement] = useState(null);
+
+ const mouseX = useSpring(0, springOptions);
+ const mouseY = useSpring(0, springOptions);
+
+ const spotlightLeft = useTransform(mouseX, (x) => `${x - size / 2}px`);
+ const spotlightTop = useTransform(mouseY, (y) => `${y - size / 2}px`);
+
+ useEffect(() => {
+ if (containerRef.current) {
+ const parent = containerRef.current.parentElement;
+ if (parent) {
+ parent.style.position = 'relative';
+ parent.style.overflow = 'hidden';
+ setParentElement(parent);
+ }
+ }
+ }, []);
+
+ const handleMouseMove = useCallback(
+ (event: MouseEvent) => {
+ if (!parentElement) return;
+ const { left, top } = parentElement.getBoundingClientRect();
+ mouseX.set(event.clientX - left);
+ mouseY.set(event.clientY - top);
+ },
+ [mouseX, mouseY, parentElement]
+ );
+
+ useEffect(() => {
+ if (!parentElement) return;
+
+ const handleEnter = () => setIsHovered(true);
+ const handleLeave = () => setIsHovered(false);
+
+ parentElement.addEventListener('mousemove', handleMouseMove);
+ parentElement.addEventListener('mouseenter', handleEnter);
+ parentElement.addEventListener('mouseleave', handleLeave);
+
+ return () => {
+ parentElement.removeEventListener('mousemove', handleMouseMove);
+ parentElement.removeEventListener('mouseenter', handleEnter);
+ parentElement.removeEventListener('mouseleave', handleLeave);
+ };
+ }, [parentElement, handleMouseMove]);
+
+ return (
+
+ );
+}
diff --git a/src/data/industries.ts b/src/data/industries.ts
index 67aa260..318fb13 100644
--- a/src/data/industries.ts
+++ b/src/data/industries.ts
@@ -21,7 +21,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Service and delivery robots that greet, deliver, and assist around the clock.',
benefit: 'Consistent guest experience, lower turnover impact, premium brand positioning.',
matchCategories: ['hospitality', 'service', 'delivery'],
- accent: '#e0c896',
+ accent: '#DEE0F0',
icon: 'hotel',
},
{
@@ -32,7 +32,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Delivery robots like BellaBot and KettyBot move food fast and reliably.',
benefit: 'Faster table turns, happier staff, instagrammable brand moment.',
matchCategories: ['delivery', 'service', 'hospitality'],
- accent: '#8b6f47',
+ accent: '#8891C7',
icon: 'utensils',
},
{
@@ -43,7 +43,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Multi-floor delivery robots and humanoid concierge experiences.',
benefit: 'Faster service, lower overhead, signature guest moments.',
matchCategories: ['delivery', 'hospitality', 'service'],
- accent: '#c4a265',
+ accent: '#273F94',
icon: 'hotel',
},
{
@@ -54,7 +54,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Cleaning robots, service robots, and humanoid activations for retail floors.',
benefit: 'Cleaner venues, memorable customer experiences, modern positioning.',
matchCategories: ['cleaning', 'service', 'humanoid'],
- accent: '#e0c896',
+ accent: '#DEE0F0',
icon: 'shopping-bag',
},
{
@@ -65,7 +65,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Autonomous delivery robots for medications, meals, and supplies.',
benefit: 'More clinician time at the bedside, lower contamination risk, predictable logistics.',
matchCategories: ['delivery', 'service'],
- accent: '#c4a265',
+ accent: '#273F94',
icon: 'heart-pulse',
},
{
@@ -76,7 +76,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Unitree humanoids and quadrupeds for STEM labs and innovation programs.',
benefit: 'Future-ready students, signature programs, and stronger STEM outcomes.',
matchCategories: ['humanoid', 'service'],
- accent: '#8b6f47',
+ accent: '#8891C7',
icon: 'graduation-cap',
},
{
@@ -87,7 +87,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Quadruped robots like Unitree Go2 and B2 patrol autonomously.',
benefit: 'Continuous coverage, audit trails, and consistent perimeter monitoring.',
matchCategories: ['quadruped', 'commercial'],
- accent: '#e0c896',
+ accent: '#DEE0F0',
icon: 'shield',
},
{
@@ -98,7 +98,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Quadruped inspection robots and autonomous delivery platforms.',
benefit: 'Higher throughput, fewer errors, and accurate facility monitoring.',
matchCategories: ['quadruped', 'delivery', 'commercial'],
- accent: '#c4a265',
+ accent: '#273F94',
icon: 'warehouse',
},
{
@@ -109,7 +109,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'Humanoid and quadruped robot showcases configured for your brand.',
benefit: 'Press coverage, viral content, and unmistakable premium positioning.',
matchCategories: ['humanoid', 'quadruped'],
- accent: '#8b6f47',
+ accent: '#8891C7',
icon: 'sparkles',
},
{
@@ -120,7 +120,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'A multi-robot fleet across cleaning, delivery, and patrol functions.',
benefit: 'Single operational system, predictable costs, future-ready facility.',
matchCategories: ['cleaning', 'commercial', 'delivery'],
- accent: '#e0c896',
+ accent: '#DEE0F0',
icon: 'building',
},
{
@@ -131,7 +131,7 @@ export const INDUSTRIES: Industry[] = [
solution: 'A curated multi-brand robotics portfolio with full local support.',
benefit: 'Visible innovation leadership and a UAE-supported deployment model.',
matchCategories: ['humanoid', 'quadruped', 'service'],
- accent: '#c4a265',
+ accent: '#273F94',
icon: 'landmark',
},
];
diff --git a/src/data/robots.ts b/src/data/robots.ts
index 31be1ff..eef4ded 100644
--- a/src/data/robots.ts
+++ b/src/data/robots.ts
@@ -36,9 +36,9 @@ export interface Robot {
}
/* Gold spectrum for accents (no cyan/blue/violet) */
-const GOLD_CHAMPAGNE = '#e0c896';
-const GOLD_BRAND = '#c4a265';
-const GOLD_BRONZE = '#8b6f47';
+const GOLD_CHAMPAGNE = '#DEE0F0';
+const GOLD_BRAND = '#273F94';
+const GOLD_BRONZE = '#8891C7';
export const BRANDS: Record = {
unitree: {
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
new file mode 100644
index 0000000..2819a83
--- /dev/null
+++ b/src/lib/utils.ts
@@ -0,0 +1,6 @@
+import { clsx, type ClassValue } from 'clsx';
+import { twMerge } from 'tailwind-merge';
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/src/store/usePersonaStore.ts b/src/store/usePersonaStore.ts
index e21104f..e4d623d 100644
--- a/src/store/usePersonaStore.ts
+++ b/src/store/usePersonaStore.ts
@@ -35,7 +35,7 @@ export const DEFAULT_PERSONAS: PersonaOption[] = [
id: 'emarati-kandura',
label: 'Emarati Kandura',
description: 'Traditional white robe attire',
- colors: { torso: '#f5f1e8', legs: '#f5f1e8' },
+ colors: { torso: '#FBFBFD', legs: '#FBFBFD' },
},
{
id: 'industrial-vest',