replace the hero image in MobileAppDevelopment component
This commit is contained in:
27
package-lock.json
generated
27
package-lock.json
generated
@@ -142,6 +142,7 @@
|
|||||||
"integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==",
|
"integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ampproject/remapping": "^2.2.0",
|
"@ampproject/remapping": "^2.2.0",
|
||||||
"@babel/code-frame": "^7.27.1",
|
"@babel/code-frame": "^7.27.1",
|
||||||
@@ -3171,6 +3172,7 @@
|
|||||||
"integrity": "sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==",
|
"integrity": "sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==",
|
||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~7.8.0"
|
"undici-types": "~7.8.0"
|
||||||
}
|
}
|
||||||
@@ -3188,6 +3190,7 @@
|
|||||||
"integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
|
"integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
|
||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/prop-types": "*",
|
"@types/prop-types": "*",
|
||||||
"csstype": "^3.0.2"
|
"csstype": "^3.0.2"
|
||||||
@@ -3199,6 +3202,7 @@
|
|||||||
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
|
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
|
||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@types/react": "^18.0.0"
|
"@types/react": "^18.0.0"
|
||||||
}
|
}
|
||||||
@@ -3291,6 +3295,7 @@
|
|||||||
"integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
|
"integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "6.21.0",
|
"@typescript-eslint/scope-manager": "6.21.0",
|
||||||
"@typescript-eslint/types": "6.21.0",
|
"@typescript-eslint/types": "6.21.0",
|
||||||
@@ -3481,6 +3486,7 @@
|
|||||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"acorn": "bin/acorn"
|
"acorn": "bin/acorn"
|
||||||
},
|
},
|
||||||
@@ -3684,6 +3690,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"caniuse-lite": "^1.0.30001726",
|
"caniuse-lite": "^1.0.30001726",
|
||||||
"electron-to-chromium": "^1.5.173",
|
"electron-to-chromium": "^1.5.173",
|
||||||
@@ -4370,7 +4377,8 @@
|
|||||||
"version": "8.6.0",
|
"version": "8.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz",
|
||||||
"integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==",
|
"integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/embla-carousel-react": {
|
"node_modules/embla-carousel-react": {
|
||||||
"version": "8.6.0",
|
"version": "8.6.0",
|
||||||
@@ -4481,6 +4489,7 @@
|
|||||||
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
|
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.2.0",
|
"@eslint-community/eslint-utils": "^4.2.0",
|
||||||
"@eslint-community/regexpp": "^4.6.1",
|
"@eslint-community/regexpp": "^4.6.1",
|
||||||
@@ -5754,7 +5763,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/on-change/-/on-change-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/on-change/-/on-change-4.0.2.tgz",
|
||||||
"integrity": "sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==",
|
"integrity": "sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
},
|
},
|
||||||
@@ -5913,6 +5921,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nanoid": "^3.3.11",
|
"nanoid": "^3.3.11",
|
||||||
"picocolors": "^1.1.1",
|
"picocolors": "^1.1.1",
|
||||||
@@ -5992,6 +6001,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
|
||||||
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
|
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.1.0"
|
"loose-envify": "^1.1.0"
|
||||||
},
|
},
|
||||||
@@ -6057,6 +6067,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
|
||||||
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
|
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.1.0",
|
"loose-envify": "^1.1.0",
|
||||||
"scheduler": "^0.23.2"
|
"scheduler": "^0.23.2"
|
||||||
@@ -6122,6 +6133,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
|
||||||
"integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
|
"integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/use-sync-external-store": "^0.0.6",
|
"@types/use-sync-external-store": "^0.0.6",
|
||||||
"use-sync-external-store": "^1.4.0"
|
"use-sync-external-store": "^1.4.0"
|
||||||
@@ -6363,7 +6375,8 @@
|
|||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
|
||||||
"integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
|
"integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/redux-thunk": {
|
"node_modules/redux-thunk": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
@@ -6513,8 +6526,7 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
|
||||||
"integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
|
"integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
|
||||||
"license": "MIT",
|
"license": "MIT"
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"node_modules/set-cookie-parser": {
|
"node_modules/set-cookie-parser": {
|
||||||
"version": "2.7.1",
|
"version": "2.7.1",
|
||||||
@@ -6648,7 +6660,8 @@
|
|||||||
"version": "4.1.11",
|
"version": "4.1.11",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
|
||||||
"integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
|
"integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/tailwindcss-animate": {
|
"node_modules/tailwindcss-animate": {
|
||||||
"version": "1.0.7",
|
"version": "1.0.7",
|
||||||
@@ -6833,6 +6846,7 @@
|
|||||||
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
"tsserver": "bin/tsserver"
|
"tsserver": "bin/tsserver"
|
||||||
@@ -6988,6 +7002,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz",
|
||||||
"integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
|
"integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.21.3",
|
"esbuild": "^0.21.3",
|
||||||
"postcss": "^8.4.43",
|
"postcss": "^8.4.43",
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import { Badge } from "../components/ui/badge";
|
|||||||
import { Button } from "../components/ui/button";
|
import { Button } from "../components/ui/button";
|
||||||
import { Card, CardContent } from "../components/ui/card";
|
import { Card, CardContent } from "../components/ui/card";
|
||||||
import { ShimmerButton } from "../components/ui/shimmer-button";
|
import { ShimmerButton } from "../components/ui/shimmer-button";
|
||||||
import heroMockupImage from '../src/images/mobile-app-banner.webp';
|
import heroMockupImage from '../src/images/mobile-app-banner.png';
|
||||||
import { Helmet } from "react-helmet-async";
|
import { Helmet } from "react-helmet-async";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
@@ -88,13 +88,13 @@ const HeroWithCTA = () => {
|
|||||||
`}
|
`}
|
||||||
</script>
|
</script>
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="container mx-auto px-6 lg:px-8 max-w-7xl">
|
<div className="container px-6 mx-auto lg:px-8 max-w-7xl">
|
||||||
<div className="grid lg:grid-cols-2 gap-8 lg:gap-16 items-center min-h-[90vh]">
|
<div className="grid lg:grid-cols-2 gap-8 lg:gap-16 items-center min-h-[90vh]">
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, x: -50 }}
|
initial={{ opacity: 0, x: -50 }}
|
||||||
animate={{ opacity: 1, x: 0 }}
|
animate={{ opacity: 1, x: 0 }}
|
||||||
transition={{ duration: 0.8 }}
|
transition={{ duration: 0.8 }}
|
||||||
className="space-y-8 z-10"
|
className="z-10 space-y-8"
|
||||||
>
|
>
|
||||||
{/* Mobile App Development Label */}
|
{/* Mobile App Development Label */}
|
||||||
<motion.div
|
<motion.div
|
||||||
@@ -104,7 +104,7 @@ const HeroWithCTA = () => {
|
|||||||
>
|
>
|
||||||
<div className="inline-flex items-center gap-2 px-4 py-2 bg-gradient-to-r from-[#E5195E]/20 to-purple-500/20 border border-[#E5195E]/30 rounded-full">
|
<div className="inline-flex items-center gap-2 px-4 py-2 bg-gradient-to-r from-[#E5195E]/20 to-purple-500/20 border border-[#E5195E]/30 rounded-full">
|
||||||
<Smartphone className="w-4 h-4 text-[#E5195E]" />
|
<Smartphone className="w-4 h-4 text-[#E5195E]" />
|
||||||
<span className="text-white/90 text-sm font-medium">Mobile App Development</span>
|
<span className="text-sm font-medium text-white/90">Mobile App Development</span>
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
@@ -115,13 +115,13 @@ const HeroWithCTA = () => {
|
|||||||
transition={{ duration: 0.6, delay: 0.1 }}
|
transition={{ duration: 0.6, delay: 0.1 }}
|
||||||
className="space-y-6"
|
className="space-y-6"
|
||||||
>
|
>
|
||||||
<h1 className="text-4xl md:text-5xl lg:text-6xl font-semibold leading-tight">
|
<h1 className="text-4xl font-semibold leading-tight md:text-5xl lg:text-6xl">
|
||||||
<span className="text-white">From concept to </span>
|
<span className="text-white">From concept to </span>
|
||||||
<span className="text-[#E5195E]">App Store</span>
|
<span className="text-[#E5195E]">App Store</span>
|
||||||
<span className="text-white"> in just 6 weeks.</span>
|
<span className="text-white"> in just 6 weeks.</span>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<p className="text-lg text-gray-300 leading-relaxed max-w-lg">
|
<p className="max-w-lg text-lg leading-relaxed text-gray-300">
|
||||||
Build secure, scalable, high-performance apps for iOS, Android, or cross-platform — fast.
|
Build secure, scalable, high-performance apps for iOS, Android, or cross-platform — fast.
|
||||||
</p>
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -133,23 +133,23 @@ const HeroWithCTA = () => {
|
|||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8, delay: 0.2 }}
|
transition={{ duration: 0.8, delay: 0.2 }}
|
||||||
className="flex flex-col sm:flex-row gap-4 pt-4"
|
className="flex flex-col gap-4 pt-4 sm:flex-row"
|
||||||
>
|
>
|
||||||
<ShimmerButton
|
<ShimmerButton
|
||||||
className="h-14 px-8 text-lg font-medium rounded-lg shadow-lg hover:shadow-xl transition-all duration-300"
|
className="px-8 text-lg font-medium transition-all duration-300 rounded-lg shadow-lg h-14 hover:shadow-xl"
|
||||||
onClick={() => navigate('/start-a-project')}
|
onClick={() => navigate('/start-a-project')}
|
||||||
>
|
>
|
||||||
<div className="inline-flex items-center gap-2">
|
<div className="inline-flex items-center gap-2">
|
||||||
<Calendar className="w-5 h-5 flex-shrink-0" />
|
<Calendar className="flex-shrink-0 w-5 h-5" />
|
||||||
<span>Book a Discovery Call</span>
|
<span>Book a Discovery Call</span>
|
||||||
</div>
|
</div>
|
||||||
</ShimmerButton>
|
</ShimmerButton>
|
||||||
<Button
|
<Button
|
||||||
variant="secondary"
|
variant="secondary"
|
||||||
className="h-14 px-8 text-lg font-medium rounded-lg bg-white/10 hover:bg-white/20 text-white border-white/20 hover:border-white/30 shadow-lg hover:shadow-xl transition-all duration-300"
|
className="px-8 text-lg font-medium text-white transition-all duration-300 rounded-lg shadow-lg h-14 bg-white/10 hover:bg-white/20 border-white/20 hover:border-white/30 hover:shadow-xl"
|
||||||
onClick={() => navigate('/case-studies')}
|
onClick={() => navigate('/case-studies')}
|
||||||
>
|
>
|
||||||
<Eye className="w-5 h-5 flex-shrink-0" />
|
<Eye className="flex-shrink-0 w-5 h-5" />
|
||||||
<span>View our work</span>
|
<span>View our work</span>
|
||||||
</Button>
|
</Button>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -216,24 +216,24 @@ const HorizontalTagScroller = () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="py-32 bg-background relative overflow-hidden">
|
<section className="relative py-32 overflow-hidden bg-background">
|
||||||
{/* Add subtle decorative elements */}
|
{/* Add subtle decorative elements */}
|
||||||
<div className="absolute top-0 left-0 w-full h-full pointer-events-none">
|
<div className="absolute top-0 left-0 w-full h-full pointer-events-none">
|
||||||
<div className="absolute top-20 left-10 w-32 h-32 bg-accent/5 rounded-full blur-2xl"></div>
|
<div className="absolute w-32 h-32 rounded-full top-20 left-10 bg-accent/5 blur-2xl"></div>
|
||||||
<div className="absolute bottom-20 right-10 w-40 h-40 bg-blue-500/5 rounded-full blur-2xl"></div>
|
<div className="absolute w-40 h-40 rounded-full bottom-20 right-10 bg-blue-500/5 blur-2xl"></div>
|
||||||
</div>
|
</div>
|
||||||
<div className="container mx-auto px-6 lg:px-8 relative z-10">
|
<div className="container relative z-10 px-6 mx-auto lg:px-8">
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 30 }}
|
initial={{ opacity: 0, y: 30 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8 }}
|
transition={{ duration: 0.8 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="text-center mb-20"
|
className="mb-20 text-center"
|
||||||
>
|
>
|
||||||
<h2 className="text-4xl lg:text-5xl font-semibold text-foreground mb-8">
|
<h2 className="mb-8 text-4xl font-semibold lg:text-5xl text-foreground">
|
||||||
Apps Built for High-Impact Industries
|
Apps Built for High-Impact Industries
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-2xl text-muted-foreground max-w-4xl mx-auto leading-relaxed">
|
<p className="max-w-4xl mx-auto text-2xl leading-relaxed text-muted-foreground">
|
||||||
Our mobile apps power industries where user trust, speed, and uptime are critical.
|
Our mobile apps power industries where user trust, speed, and uptime are critical.
|
||||||
</p>
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -246,8 +246,8 @@ const HorizontalTagScroller = () => {
|
|||||||
className="relative overflow-hidden"
|
className="relative overflow-hidden"
|
||||||
>
|
>
|
||||||
{/* Gradient overlays for smooth fade effect */}
|
{/* Gradient overlays for smooth fade effect */}
|
||||||
<div className="absolute left-0 top-0 bottom-0 w-20 bg-gradient-to-r from-card to-transparent z-10 pointer-events-none"></div>
|
<div className="absolute top-0 bottom-0 left-0 z-10 w-20 pointer-events-none bg-gradient-to-r from-card to-transparent"></div>
|
||||||
<div className="absolute right-0 top-0 bottom-0 w-20 bg-gradient-to-l from-card to-transparent z-10 pointer-events-none"></div>
|
<div className="absolute top-0 bottom-0 right-0 z-10 w-20 pointer-events-none bg-gradient-to-l from-card to-transparent"></div>
|
||||||
|
|
||||||
{/* Marquee container */}
|
{/* Marquee container */}
|
||||||
<div className="flex animate-marquee hover:animate-marquee-paused">
|
<div className="flex animate-marquee hover:animate-marquee-paused">
|
||||||
@@ -261,9 +261,9 @@ const HorizontalTagScroller = () => {
|
|||||||
whileInView={{ opacity: 1, scale: 1 }}
|
whileInView={{ opacity: 1, scale: 1 }}
|
||||||
transition={{ duration: 0.5, delay: index * 0.01 }}
|
transition={{ duration: 0.5, delay: index * 0.01 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="group flex-shrink-0 mx-3"
|
className="flex-shrink-0 mx-3 group"
|
||||||
>
|
>
|
||||||
<div className="bg-card/20 backdrop-blur-md rounded-2xl border border-white/10 px-8 py-6 hover:border-accent/30 transition-all duration-300 cursor-pointer shadow-lg hover:shadow-xl min-w-fit group-hover:scale-105 group-hover:-translate-y-1">
|
<div className="px-8 py-6 transition-all duration-300 border shadow-lg cursor-pointer bg-card/20 backdrop-blur-md rounded-2xl border-white/10 hover:border-accent/30 hover:shadow-xl min-w-fit group-hover:scale-105 group-hover:-translate-y-1">
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<div className={`w-8 h-8 flex items-center justify-center ${industry.color}`}>
|
<div className={`w-8 h-8 flex items-center justify-center ${industry.color}`}>
|
||||||
<IconComponent className="w-6 h-6" />
|
<IconComponent className="w-6 h-6" />
|
||||||
@@ -287,9 +287,9 @@ const HorizontalTagScroller = () => {
|
|||||||
whileInView={{ opacity: 1, scale: 1 }}
|
whileInView={{ opacity: 1, scale: 1 }}
|
||||||
transition={{ duration: 0.5, delay: (index + industries.length) * 0.1 }}
|
transition={{ duration: 0.5, delay: (index + industries.length) * 0.1 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="group flex-shrink-0 mx-3"
|
className="flex-shrink-0 mx-3 group"
|
||||||
>
|
>
|
||||||
<div className="bg-card/20 backdrop-blur-md rounded-2xl border border-white/10 px-8 py-6 hover:border-accent/30 transition-all duration-300 cursor-pointer shadow-lg hover:shadow-xl min-w-fit group-hover:scale-105 group-hover:-translate-y-1">
|
<div className="px-8 py-6 transition-all duration-300 border shadow-lg cursor-pointer bg-card/20 backdrop-blur-md rounded-2xl border-white/10 hover:border-accent/30 hover:shadow-xl min-w-fit group-hover:scale-105 group-hover:-translate-y-1">
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<div className={`w-8 h-8 flex items-center justify-center ${industry.color}`}>
|
<div className={`w-8 h-8 flex items-center justify-center ${industry.color}`}>
|
||||||
<IconComponent className="w-6 h-6" />
|
<IconComponent className="w-6 h-6" />
|
||||||
@@ -313,9 +313,9 @@ const HorizontalTagScroller = () => {
|
|||||||
whileInView={{ opacity: 1, scale: 1 }}
|
whileInView={{ opacity: 1, scale: 1 }}
|
||||||
transition={{ duration: 0.5, delay: (index + industries.length * 2) * 0.1 }}
|
transition={{ duration: 0.5, delay: (index + industries.length * 2) * 0.1 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="group flex-shrink-0 mx-3"
|
className="flex-shrink-0 mx-3 group"
|
||||||
>
|
>
|
||||||
<div className="bg-card/20 backdrop-blur-md rounded-2xl border border-white/10 px-8 py-6 hover:border-accent/30 transition-all duration-300 cursor-pointer shadow-lg hover:shadow-xl min-w-fit group-hover:scale-105 group-hover:-translate-y-1">
|
<div className="px-8 py-6 transition-all duration-300 border shadow-lg cursor-pointer bg-card/20 backdrop-blur-md rounded-2xl border-white/10 hover:border-accent/30 hover:shadow-xl min-w-fit group-hover:scale-105 group-hover:-translate-y-1">
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<div className={`w-8 h-8 flex items-center justify-center ${industry.color}`}>
|
<div className={`w-8 h-8 flex items-center justify-center ${industry.color}`}>
|
||||||
<IconComponent className="w-6 h-6" />
|
<IconComponent className="w-6 h-6" />
|
||||||
@@ -367,21 +367,21 @@ const SideBySideContentWithIcons = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="py-32 bg-black">
|
<section className="py-32 bg-black">
|
||||||
<div className="container mx-auto px-6 lg:px-8">
|
<div className="container px-6 mx-auto lg:px-8">
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 30 }}
|
initial={{ opacity: 0, y: 30 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8 }}
|
transition={{ duration: 0.8 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="text-center mb-16"
|
className="mb-16 text-center"
|
||||||
>
|
>
|
||||||
{/* Main Heading */}
|
{/* Main Heading */}
|
||||||
<h2 className="text-4xl lg:text-5xl font-semibold text-white leading-tight mb-6">
|
<h2 className="mb-6 text-4xl font-semibold leading-tight text-white lg:text-5xl">
|
||||||
Why Founders and CTOs Trust WDI
|
Why Founders and CTOs Trust WDI
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
{/* Subtext */}
|
{/* Subtext */}
|
||||||
<p className="text-2xl text-gray-300 leading-relaxed">
|
<p className="text-2xl leading-relaxed text-gray-300">
|
||||||
Not just a dev agency. A product partner.
|
Not just a dev agency. A product partner.
|
||||||
</p>
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -392,7 +392,7 @@ const SideBySideContentWithIcons = () => {
|
|||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8, delay: 0.2 }}
|
transition={{ duration: 0.8, delay: 0.2 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 gap-6 max-w-7xl mx-auto"
|
className="grid grid-cols-1 gap-6 mx-auto md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 max-w-7xl"
|
||||||
>
|
>
|
||||||
{trustFactors.map((factor, index) => {
|
{trustFactors.map((factor, index) => {
|
||||||
const IconComponent = factor.icon;
|
const IconComponent = factor.icon;
|
||||||
@@ -405,17 +405,17 @@ const SideBySideContentWithIcons = () => {
|
|||||||
transition={{ duration: 0.5, delay: index * 0.01 }}
|
transition={{ duration: 0.5, delay: index * 0.01 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
whileHover={{ y: -8, scale: 1.02 }}
|
whileHover={{ y: -8, scale: 1.02 }}
|
||||||
className="group cursor-pointer"
|
className="cursor-pointer group"
|
||||||
>
|
>
|
||||||
<Card className="bg-gray-900/50 backdrop-blur-md border-gray-700/50 hover:border-accent/30 transition-all duration-300 shadow-lg hover:shadow-xl rounded-2xl h-full overflow-hidden">
|
<Card className="h-full overflow-hidden transition-all duration-300 shadow-lg bg-gray-900/50 backdrop-blur-md border-gray-700/50 hover:border-accent/30 hover:shadow-xl rounded-2xl">
|
||||||
<CardContent className="p-8 flex flex-col items-center text-center h-full justify-center min-h-[180px]">
|
<CardContent className="p-8 flex flex-col items-center text-center h-full justify-center min-h-[180px]">
|
||||||
{/* Icon - Clean without background */}
|
{/* Icon - Clean without background */}
|
||||||
<div className="mb-6">
|
<div className="mb-6">
|
||||||
<IconComponent className="w-10 h-10 text-accent mx-auto" />
|
<IconComponent className="w-10 h-10 mx-auto text-accent" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Title */}
|
{/* Title */}
|
||||||
<h3 className="text-lg font-semibold text-white leading-tight">
|
<h3 className="text-lg font-semibold leading-tight text-white">
|
||||||
{factor.title}
|
{factor.title}
|
||||||
</h3>
|
</h3>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
@@ -473,18 +473,18 @@ const TabbedServiceDisplay = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="py-32 bg-background">
|
<section className="py-32 bg-background">
|
||||||
<div className="container mx-auto px-6 lg:px-8">
|
<div className="container px-6 mx-auto lg:px-8">
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 30 }}
|
initial={{ opacity: 0, y: 30 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8 }}
|
transition={{ duration: 0.8 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="text-center mb-20"
|
className="mb-20 text-center"
|
||||||
>
|
>
|
||||||
<h2 className="text-4xl lg:text-5xl font-semibold text-white mb-6">
|
<h2 className="mb-6 text-4xl font-semibold text-white lg:text-5xl">
|
||||||
Mobile App Development Services
|
Mobile App Development Services
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-lg text-gray-300 max-w-4xl mx-auto leading-relaxed">
|
<p className="max-w-4xl mx-auto text-lg leading-relaxed text-gray-300">
|
||||||
Comprehensive mobile development services that transform your ideas into powerful, user-friendly applications across all platforms.
|
Comprehensive mobile development services that transform your ideas into powerful, user-friendly applications across all platforms.
|
||||||
</p>
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -494,7 +494,7 @@ const TabbedServiceDisplay = () => {
|
|||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8, delay: 0.2 }}
|
transition={{ duration: 0.8, delay: 0.2 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="grid md:grid-cols-2 lg:grid-cols-3 gap-8"
|
className="grid gap-8 md:grid-cols-2 lg:grid-cols-3"
|
||||||
>
|
>
|
||||||
{services.map((service, index) => {
|
{services.map((service, index) => {
|
||||||
const IconComponent = service.icon;
|
const IconComponent = service.icon;
|
||||||
@@ -506,20 +506,20 @@ const TabbedServiceDisplay = () => {
|
|||||||
transition={{ duration: 0.5, delay: index * 0.01 }}
|
transition={{ duration: 0.5, delay: index * 0.01 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
whileHover={{ y: -5 }}
|
whileHover={{ y: -5 }}
|
||||||
className="group cursor-pointer"
|
className="cursor-pointer group"
|
||||||
onClick={() => navigate(service.link)}
|
onClick={() => navigate(service.link)}
|
||||||
>
|
>
|
||||||
<div className="bg-gray-900/50 backdrop-blur-sm rounded-2xl border border-gray-800 p-8 hover:border-accent/30 transition-all duration-300 shadow-lg hover:shadow-xl h-full">
|
<div className="h-full p-8 transition-all duration-300 border border-gray-800 shadow-lg bg-gray-900/50 backdrop-blur-sm rounded-2xl hover:border-accent/30 hover:shadow-xl">
|
||||||
<div className="flex flex-col items-start space-y-6">
|
<div className="flex flex-col items-start space-y-6">
|
||||||
<div className="w-12 h-12 bg-accent/20 rounded-lg flex items-center justify-center">
|
<div className="flex items-center justify-center w-12 h-12 rounded-lg bg-accent/20">
|
||||||
<IconComponent className="w-6 h-6 text-accent" />
|
<IconComponent className="w-6 h-6 text-accent" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h3 className="text-xl font-semibold text-white mb-4">
|
<h3 className="mb-4 text-xl font-semibold text-white">
|
||||||
{service.title}
|
{service.title}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-gray-400 leading-relaxed">
|
<p className="leading-relaxed text-gray-400">
|
||||||
{service.description}
|
{service.description}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -539,13 +539,13 @@ const InlineCTA = () => {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
return (
|
return (
|
||||||
<section className="py-20 bg-black">
|
<section className="py-20 bg-black">
|
||||||
<div className="container mx-auto px-6 lg:px-8">
|
<div className="container px-6 mx-auto lg:px-8">
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 50 }}
|
initial={{ opacity: 0, y: 50 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8 }}
|
transition={{ duration: 0.8 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="text-center max-w-4xl mx-auto"
|
className="max-w-4xl mx-auto text-center"
|
||||||
>
|
>
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 30 }}
|
initial={{ opacity: 0, y: 30 }}
|
||||||
@@ -565,14 +565,14 @@ const InlineCTA = () => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Main Heading */}
|
{/* Main Heading */}
|
||||||
<h2 className="text-4xl lg:text-5xl font-semibold leading-tight">
|
<h2 className="text-4xl font-semibold leading-tight lg:text-5xl">
|
||||||
<span className="text-foreground">Let's Architect </span>
|
<span className="text-foreground">Let's Architect </span>
|
||||||
<span className="text-[#E5195E]">Intelligence</span>
|
<span className="text-[#E5195E]">Intelligence</span>
|
||||||
<span className="text-foreground"> Into Your App</span>
|
<span className="text-foreground"> Into Your App</span>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
{/* Subtitle */}
|
{/* Subtitle */}
|
||||||
<p className="text-xl text-muted-foreground leading-relaxed max-w-2xl mx-auto">
|
<p className="max-w-2xl mx-auto text-xl leading-relaxed text-muted-foreground">
|
||||||
Schedule a discovery call to explore how AI can give you a strategic edge.
|
Schedule a discovery call to explore how AI can give you a strategic edge.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -583,7 +583,7 @@ const InlineCTA = () => {
|
|||||||
onClick={() => navigate('/start-a-project')}
|
onClick={() => navigate('/start-a-project')}
|
||||||
>
|
>
|
||||||
<div className="inline-flex items-center gap-3">
|
<div className="inline-flex items-center gap-3">
|
||||||
<Brain className="w-6 h-6 flex-shrink-0" />
|
<Brain className="flex-shrink-0 w-6 h-6" />
|
||||||
<span>Book an AI Discovery Call</span>
|
<span>Book an AI Discovery Call</span>
|
||||||
</div>
|
</div>
|
||||||
</ShimmerButton>
|
</ShimmerButton>
|
||||||
@@ -640,19 +640,19 @@ const HireDevelopersSection = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="py-32 bg-background">
|
<section className="py-32 bg-background">
|
||||||
<div className="container mx-auto px-6 lg:px-8">
|
<div className="container px-6 mx-auto lg:px-8">
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 30 }}
|
initial={{ opacity: 0, y: 30 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8 }}
|
transition={{ duration: 0.8 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="text-center mb-20"
|
className="mb-20 text-center"
|
||||||
>
|
>
|
||||||
<h2 className="text-4xl lg:text-5xl font-semibold mb-8">
|
<h2 className="mb-8 text-4xl font-semibold lg:text-5xl">
|
||||||
<span className="text-foreground">Hire Our </span>
|
<span className="text-foreground">Hire Our </span>
|
||||||
<span className="text-[#E5195E]">Mobile App Experts</span>
|
<span className="text-[#E5195E]">Mobile App Experts</span>
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-2xl text-muted-foreground max-w-4xl mx-auto leading-relaxed">
|
<p className="max-w-4xl mx-auto text-2xl leading-relaxed text-muted-foreground">
|
||||||
Get access to top-tier mobile developers who can bring your vision to life with cutting-edge technology and proven expertise.
|
Get access to top-tier mobile developers who can bring your vision to life with cutting-edge technology and proven expertise.
|
||||||
</p>
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -662,7 +662,7 @@ const HireDevelopersSection = () => {
|
|||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.8, delay: 0.2 }}
|
transition={{ duration: 0.8, delay: 0.2 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
className="grid md:grid-cols-2 xl:grid-cols-4 gap-8"
|
className="grid gap-8 md:grid-cols-2 xl:grid-cols-4"
|
||||||
>
|
>
|
||||||
{developers.map((developer, index) => {
|
{developers.map((developer, index) => {
|
||||||
const IconComponent = developer.icon;
|
const IconComponent = developer.icon;
|
||||||
@@ -674,10 +674,10 @@ const HireDevelopersSection = () => {
|
|||||||
transition={{ duration: 0.5, delay: index * 0.01 }}
|
transition={{ duration: 0.5, delay: index * 0.01 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
whileHover={{ y: -8, scale: 1.02 }}
|
whileHover={{ y: -8, scale: 1.02 }}
|
||||||
className="group cursor-pointer"
|
className="cursor-pointer group"
|
||||||
>
|
>
|
||||||
<Card className="bg-card/20 backdrop-blur-md border-white/10 hover:border-accent/30 transition-all duration-300 shadow-lg hover:shadow-xl rounded-2xl overflow-hidden h-full">
|
<Card className="h-full overflow-hidden transition-all duration-300 shadow-lg bg-card/20 backdrop-blur-md border-white/10 hover:border-accent/30 hover:shadow-xl rounded-2xl">
|
||||||
<CardContent className="p-0 flex flex-col h-full">
|
<CardContent className="flex flex-col h-full p-0">
|
||||||
{/* Header with icon and title */}
|
{/* Header with icon and title */}
|
||||||
<div className="p-8 pb-6">
|
<div className="p-8 pb-6">
|
||||||
<div className="flex items-start gap-4 mb-6">
|
<div className="flex items-start gap-4 mb-6">
|
||||||
@@ -685,19 +685,19 @@ const HireDevelopersSection = () => {
|
|||||||
<IconComponent className={`w-6 h-6 ${developer.iconColor}`} />
|
<IconComponent className={`w-6 h-6 ${developer.iconColor}`} />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<div className="text-xs text-muted-foreground mb-2 uppercase tracking-wider">
|
<div className="mb-2 text-xs tracking-wider uppercase text-muted-foreground">
|
||||||
Mobile Development
|
Mobile Development
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3 className="text-xl font-semibold text-foreground mb-4 leading-tight">
|
<h3 className="mb-4 text-xl font-semibold leading-tight text-foreground">
|
||||||
{developer.title}
|
{developer.title}
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Skills section */}
|
{/* Skills section */}
|
||||||
<div className="px-8 pb-6 flex-1">
|
<div className="flex-1 px-8 pb-6">
|
||||||
<div className="flex flex-wrap gap-2">
|
<div className="flex flex-wrap gap-2">
|
||||||
{developer.skills.map((skill) => (
|
{developer.skills.map((skill) => (
|
||||||
<Badge key={skill} variant="secondary" className="text-xs bg-white/10 text-foreground">
|
<Badge key={skill} variant="secondary" className="text-xs bg-white/10 text-foreground">
|
||||||
@@ -710,11 +710,11 @@ const HireDevelopersSection = () => {
|
|||||||
{/* CTA Buttons - Updated with ShimmerButton */}
|
{/* CTA Buttons - Updated with ShimmerButton */}
|
||||||
<div className="p-8 pt-0 mt-auto space-y-3">
|
<div className="p-8 pt-0 mt-auto space-y-3">
|
||||||
<ShimmerButton
|
<ShimmerButton
|
||||||
className="w-full py-3 text-sm rounded-xl shadow-lg hover:shadow-xl"
|
className="w-full py-3 text-sm shadow-lg rounded-xl hover:shadow-xl"
|
||||||
onClick={() => navigate(developer.link)}
|
onClick={() => navigate(developer.link)}
|
||||||
>
|
>
|
||||||
<div className="inline-flex items-center justify-center gap-2">
|
<div className="inline-flex items-center justify-center gap-2">
|
||||||
<UserPlus className="w-4 h-4 flex-shrink-0" />
|
<UserPlus className="flex-shrink-0 w-4 h-4" />
|
||||||
<span className="font-medium">Hire Now</span>
|
<span className="font-medium">Hire Now</span>
|
||||||
</div>
|
</div>
|
||||||
</ShimmerButton>
|
</ShimmerButton>
|
||||||
@@ -780,7 +780,7 @@ export const MobileAppDevelopment = () => {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="dark min-h-screen bg-background">
|
<div className="min-h-screen dark bg-background">
|
||||||
{/* <Navigation /> */}
|
{/* <Navigation /> */}
|
||||||
|
|
||||||
{/* Hero Section */}
|
{/* Hero Section */}
|
||||||
|
|||||||
BIN
src/images/mobile-app-banner.png
Normal file
BIN
src/images/mobile-app-banner.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 77 KiB |
Reference in New Issue
Block a user