Compare commits

..

No commits in common. "1309840e6f1217cf83cb531aa946504a4db389dd" and "620457e6fb77eb4cbda716d14d374d614d4961a0" have entirely different histories.

9 changed files with 113 additions and 385 deletions

47
package-lock.json generated
View File

@ -12,8 +12,7 @@
"lucide-react": "^0.541.0", "lucide-react": "^0.541.0",
"react": "^19.1.1", "react": "^19.1.1",
"react-dom": "^19.1.1", "react-dom": "^19.1.1",
"react-router-dom": "^7.8.2", "react-router-dom": "^7.8.2"
"react-router-hash-link": "^2.4.3"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.33.0", "@eslint/js": "^9.33.0",
@ -2691,6 +2690,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/js-yaml": { "node_modules/js-yaml": {
@ -2820,18 +2820,6 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
"bin": {
"loose-envify": "cli.js"
}
},
"node_modules/lru-cache": { "node_modules/lru-cache": {
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@ -3002,6 +2990,7 @@
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
@ -3338,17 +3327,6 @@
"node": ">= 0.8.0" "node": ">= 0.8.0"
} }
}, },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.13.1"
}
},
"node_modules/punycode": { "node_modules/punycode": {
"version": "2.3.1", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@ -3401,12 +3379,6 @@
"react": "^19.1.1" "react": "^19.1.1"
} }
}, },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
"node_modules/react-refresh": { "node_modules/react-refresh": {
"version": "0.17.0", "version": "0.17.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
@ -3455,19 +3427,6 @@
"react-dom": ">=18" "react-dom": ">=18"
} }
}, },
"node_modules/react-router-hash-link": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/react-router-hash-link/-/react-router-hash-link-2.4.3.tgz",
"integrity": "sha512-NU7GWc265m92xh/aYD79Vr1W+zAIXDWp3L2YZOYP4rCqPnJ6LI6vh3+rKgkidtYijozHclaEQTAHaAaMWPVI4A==",
"license": "MIT",
"dependencies": {
"prop-types": "^15.7.2"
},
"peerDependencies": {
"react": ">=15",
"react-router-dom": ">=4"
}
},
"node_modules/read-cache": { "node_modules/read-cache": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",

View File

@ -14,8 +14,7 @@
"lucide-react": "^0.541.0", "lucide-react": "^0.541.0",
"react": "^19.1.1", "react": "^19.1.1",
"react-dom": "^19.1.1", "react-dom": "^19.1.1",
"react-router-dom": "^7.8.2", "react-router-dom": "^7.8.2"
"react-router-hash-link": "^2.4.3"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.33.0", "@eslint/js": "^9.33.0",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 KiB

After

Width:  |  Height:  |  Size: 917 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 917 KiB

View File

@ -1,26 +1,10 @@
import { BrowserRouter as Router, Routes, Route, useLocation } from "react-router-dom"; import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import { useEffect } from "react";
import Navbar from "./components/Navbar";
import Home from "./pages/Home"; import Home from "./pages/Home";
import About from "./pages/About"; import About from "./pages/About";
function ScrollHandler() {
const { pathname } = useLocation();
useEffect(() => {
// tiap kali route berubah, scroll ke atas
window.scrollTo(0, 0);
}, [pathname]);
return null;
}
export default function App() { export default function App() {
return ( return (
<Router> <Router>
<ScrollHandler />
<Navbar />
<Routes> <Routes>
<Route path="/" element={<Home />} /> <Route path="/" element={<Home />} />
<Route path="/about" element={<About />} /> <Route path="/about" element={<About />} />

View File

@ -1,94 +0,0 @@
import { Phone, Mail, Earth, Link as LinkIcon } from "lucide-react";
import { Link } from "react-router-dom"; // ini untuk routing
export default function Footer({ footerRef }) {
return (
<footer
id="footer"
ref={footerRef}
className="bg-[#5C739B] text-white py-10 px-6">
<div className="max-w-7xl mx-auto grid grid-cols-1 md:grid-cols-12 gap-8">
{/* Logo + Deskripsi */}
<div className="md:col-span-4">
<img src="/WTell.png" alt="Walanja Logo" className="w-32 mb-4" />
<p className="text-sm leading-relaxed">
PT. Jaringan Citra Mandiri adalah Perusahaan Swasta yang bergerak di bidang Penyedia
Layanan Teknologi Telekomunikasi Berbasis fiber optik.
</p>
</div>
{/* Alamat */}
<div className="md:col-span-4">
<h3 className="font-bold text-lg mb-4 relative inline-block">
Alamat
</h3>
<p className="text-sm leading-relaxed">
Kantor Administrasi:
<br />
Jl. Paledang No. 236, Kec. Campaka, Kel. Andir Bandung 40184
</p>
<br />
<p className="text-sm leading-relaxed">
Kantor Teknis:
<br />
Parahyangan Business Park, The Suites Blok E5-E7
Jl. Soekarno Hatta No. 693, Bandung,
Jawa Barat 40286, Indonesia
</p>
</div>
{/* Explore */}
<div className="md:col-span-2">
<h3 className="font-bold text-lg mb-2 relative inline-block">
Explore
</h3>
<ul className="space-y-3 text-sm">
<li className="flex items-center gap-2">
<LinkIcon className="w-4 h-4" />
<Link to="/">Home</Link>
</li>
<li className="flex items-center gap-2">
<LinkIcon className="w-4 h-4" />
<Link to="/portfolio">Portofolio</Link>
</li>
<li className="flex items-center gap-2">
<LinkIcon className="w-4 h-4" />
<Link to="/about">About Us</Link>
</li>
<li className="flex items-center gap-2">
<LinkIcon className="w-4 h-4" />
<Link to="/#footer">Contact Us</Link>
</li>
</ul>
</div>
{/* Kontak Kami */}
<div className="md:col-span-2">
<h3 className="font-bold text-lg mb-2 relative inline-block">
Kontak Kami
</h3>
<ul className="space-y-2 text-sm">
<li className="flex items-center gap-2">
<Phone className="w-4 h-4"/> 0821 2062 3712
</li>
<li className="flex items-center gap-2">
<Mail className="w-4 h-4"/> cs@wtell.id
</li>
<li className="flex items-center gap-2">
<Earth className="w-4 h-4"/> https://www.wtell.id/
</li>
</ul>
</div>
</div>
{/* Copyright */}
<div className="border-t border-gray-400 mt-8 pt-4 text-center text-sm">
© 2025 Walanja Telekomunikasi.
</div>
</footer>
);
}

View File

@ -1,23 +1,24 @@
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { ChevronDown, Menu, X } from "lucide-react"; import { ChevronDown } from "lucide-react";
import { HashLink } from "react-router-hash-link"; import { Link } from "react-router-dom";
export default function Navbar() { export default function Navbar() {
const [isOpen, setIsOpen] = useState(false); // dropdown portfolio const [isOpen, setIsOpen] = useState(false);
const [mobileMenu, setMobileMenu] = useState(false); // toggle mobile
const [scrolled, setScrolled] = useState(false); const [scrolled, setScrolled] = useState(false);
// Deteksi scroll // Deteksi scroll
useEffect(() => { useEffect(() => {
const handleScroll = () => { const handleScroll = () => {
setScrolled(window.scrollY > 50); if (window.scrollY > 50) {
setScrolled(true);
} else {
setScrolled(false);
}
}; };
window.addEventListener("scroll", handleScroll); window.addEventListener("scroll", handleScroll);
return () => window.removeEventListener("scroll", handleScroll); return () => window.removeEventListener("scroll", handleScroll);
}, []); }, []);
const linkClass = `block px-4 py-2 hover:text-yellow-400 transition-colors`;
return ( return (
<header <header
className={`fixed w-full top-0 z-20 transition-all duration-300 ${ className={`fixed w-full top-0 z-20 transition-all duration-300 ${
@ -33,24 +34,30 @@ export default function Navbar() {
scrolled ? "text-black" : "text-white" scrolled ? "text-black" : "text-white"
}`} }`}
> >
WTell WALANJA
</span> </span>
</div> </div>
{/* Menu Desktop */} {/* Menu */}
<ul <ul
className={`hidden md:flex items-center space-x-8 font-medium transition-colors duration-300 ${ className={`flex items-center space-x-8 font-medium transition-colors duration-300 ${
scrolled ? "text-black" : "text-white" scrolled ? "text-black" : "text-white"
}`} }`}
> >
{/* Home */}
<li> <li>
<HashLink smooth to="/#" className="hover:text-yellow-400"> <Link
to="/"
className={`hover:text-yellow-400 ${
!scrolled ? "border-b-2 border-yellow-400 pb-1" : ""
}`}
>
Home Home
</HashLink> </Link>
</li> </li>
{/* Dropdown Portofolio */} {/* Dropdown Portofolio */}
<li className="relative group"> <li className="relative">
<button <button
onClick={() => setIsOpen(!isOpen)} onClick={() => setIsOpen(!isOpen)}
className="hover:text-yellow-400 flex items-center gap-1" className="hover:text-yellow-400 flex items-center gap-1"
@ -67,155 +74,56 @@ export default function Navbar() {
{isOpen && ( {isOpen && (
<ul className="absolute left-0 mt-2 w-48 bg-white rounded-lg shadow-lg text-black"> <ul className="absolute left-0 mt-2 w-48 bg-white rounded-lg shadow-lg text-black">
<li> <li>
<HashLink to="/sdm" className={linkClass}> <Link
to="/sdm"
className="block px-4 py-2 hover:bg-yellow-100"
>
SDM SDM
</HashLink> </Link>
</li> </li>
<li> <li>
<HashLink to="/alat-kerja" className={linkClass}> <Link
to="/alat-kerja"
className="block px-4 py-2 hover:bg-yellow-100"
>
Alat Kerja Alat Kerja
</HashLink> </Link>
</li> </li>
<li> <li>
<HashLink to="/produksi" className={linkClass}> <Link
to="/produksi"
className="block px-4 py-2 hover:bg-yellow-100"
>
Produksi Produksi
</HashLink> </Link>
</li> </li>
<li> <li>
<HashLink to="/pengalaman" className={linkClass}> <Link
to="/pengalaman"
className="block px-4 py-2 hover:bg-yellow-100"
>
Pengalaman Pengalaman
</HashLink> </Link>
</li> </li>
</ul> </ul>
)} )}
</li> </li>
{/* About Us */}
<li> <li>
<HashLink to="/about" className="hover:text-yellow-400"> <Link to="/about" className="hover:text-yellow-400">
About Us About Us
</HashLink> </Link>
</li> </li>
{/* Contact Us */}
<li> <li>
<HashLink smooth to="/#footer" className="hover:text-yellow-400"> <Link to="/contact" className="hover:text-yellow-400">
Contact Us Contact Us
</HashLink> </Link>
</li> </li>
</ul> </ul>
{/* Hamburger Mobile */}
<button
onClick={() => setMobileMenu(!mobileMenu)}
className={`md:hidden text-2xl focus:outline-none transition-colors duration-300 ${
scrolled ? "text-black" : "text-white"
}`}
>
{mobileMenu ? <X /> : <Menu />}
</button>
</nav> </nav>
{/* Menu Mobile */}
{mobileMenu && (
<div
className={`md:hidden fixed top-0 right-0 w-2/3 h-screen bg-white shadow-lg z-30 transform transition-transform duration-300 ${
mobileMenu ? "translate-x-0" : "translate-x-full"
}`}
>
<div className="flex justify-end p-4">
<button onClick={() => setMobileMenu(false)}>
<X size={28} />
</button>
</div>
<ul className="flex flex-col space-y-4 px-6 font-medium text-gray-800">
<li>
<HashLink
smooth
to="/#"
onClick={() => setMobileMenu(false)}
className={linkClass}
>
Home
</HashLink>
</li>
{/* Dropdown Portofolio di Mobile */}
<li>
<button
onClick={() => setIsOpen(!isOpen)}
className="w-full flex justify-between items-center px-4 py-2 hover:bg-gray-100 rounded-lg"
>
Portofolio
<ChevronDown
size={18}
className={`transition-transform ${
isOpen ? "rotate-180" : ""
}`}
/>
</button>
{isOpen && (
<ul className="ml-4 mt-2 space-y-2 text-sm">
<li>
<HashLink
to="/sdm"
className="block px-4 py-2 hover:text-yellow-400 rounded"
onClick={() => setMobileMenu(false)}
>
SDM
</HashLink>
</li>
<li>
<HashLink
to="/alat-kerja"
className="block px-4 py-2 hover:text-yellow-400 rounded"
onClick={() => setMobileMenu(false)}
>
Alat Kerja
</HashLink>
</li>
<li>
<HashLink
to="/produksi"
className="block px-4 py-2 hover:text-yellow-400 rounded"
onClick={() => setMobileMenu(false)}
>
Produksi
</HashLink>
</li>
<li>
<HashLink
to="/pengalaman"
className="block px-4 py-2 hover:text-yellow-400 rounded"
onClick={() => setMobileMenu(false)}
>
Pengalaman
</HashLink>
</li>
</ul>
)}
</li>
<li>
<HashLink
to="/about"
onClick={() => setMobileMenu(false)}
className={linkClass}
>
About Us
</HashLink>
</li>
<li>
<HashLink
smooth
to="/#footer"
onClick={() => setMobileMenu(false)}
className={linkClass}
>
Contact Us
</HashLink>
</li>
</ul>
</div>
)}
</header> </header>
); );
} }

View File

@ -1,7 +1,4 @@
"use client"; // kalau pakai Next.js, taruh di baris paling atas
import Navbar from "../components/Navbar"; import Navbar from "../components/Navbar";
import Footer from "../components/Footer"; // <- tambahkan ini
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import { CheckCircle } from "lucide-react"; import { CheckCircle } from "lucide-react";
@ -15,66 +12,58 @@ export default function About() {
<section className="py-20 bg-gray-50 min-h-screen"> <section className="py-20 bg-gray-50 min-h-screen">
<div className="max-w-6xl mx-auto px-6 lg:px-20"> <div className="max-w-6xl mx-auto px-6 lg:px-20">
{/* Logo & Deskripsi */} {/* Logo & Deskripsi */}
<motion.section <motion.div
className="grid grid-cols-1 md:grid-cols-2 items-center gap-10"
initial={{ opacity: 0, y: 40 }} initial={{ opacity: 0, y: 40 }}
whileInView={{ opacity: 1, y: 0 }} whileInView={{ opacity: 1, y: 0 }}
transition={{ duration: 0.7 }} transition={{ duration: 0.7 }}
viewport={{ once: true }} viewport={{ once: true }}
> className="text-center"
{/* Logo di kiri */} >
<div className="flex justify-center md:justify-start"> <img
<img src="/WTell.png"
src="/WTell_logo.png" alt="Logo Walanja"
alt="Logo Walanja" className="mx-auto w-32 mb-6"
className="w-45 md:w-45" />
/> <p className="text-gray-700 max-w-3xl mx-auto leading-relaxed">
</div> <span className="font-semibold">PT. Jaringan Citra Mandiri</span>{" "}
adalah Perusahaan Swasta yang bergerak di bidang Penyedia Layanan
Teknologi Telekomunikasi Berbasis Fiber Optic.
</p>
<p className="mt-4 text-gray-700 max-w-3xl mx-auto leading-relaxed">
Berdiri sejak tahun 2018,{" "}
<span className="font-semibold text-blue-700">WTELL</span>{" "}
berkomitmen menjadi{" "}
<span className="font-bold">
Penyedia Layanan Teknologi Telekomunikasi Berbasis Fiber Optic
yang Handal dan Profesional.
</span>
</p>
</motion.div>
{/* Deskripsi di kanan */}
<div>
<p className="text-gray-700 leading-relaxed mb-4">
<span className="font-semibold">PT. Jaringan Citra Mandiri</span>{" "}
adalah Perusahaan Swasta yang bergerak di bidang Penyedia Layanan
Teknologi Telekomunikasi Berbasis Fiber Optic.
</p>
<p className="text-gray-700 leading-relaxed">
Berdiri sejak tahun 2018,{" "}
<span className="font-semibold text-blue-700">WTELL</span>{" "}
berkomitmen menjadi{" "}
<span className="font-bold">
Penyedia Layanan Teknologi Telekomunikasi Berbasis Fiber Optic
yang Handal dan Profesional.
</span>
</p>
</div>
</motion.section>
{/* Visi & Misi */} {/* Visi & Misi */}
<div className="grid grid-cols-1 md:grid-cols-2 gap-10 mt-16"> <div className="grid grid-cols-1 md:grid-cols-2 gap-10 mt-16">
{/* Visi */} {/* Visi */}
<motion.section <motion.div
className="bg-white shadow-lg rounded-2xl p-8"
whileHover={{ scale: 1.05 }}
initial={{ opacity: 0, x: -50 }} initial={{ opacity: 0, x: -50 }}
whileInView={{ opacity: 1, x: 0 }} whileInView={{ opacity: 1, x: 0 }}
transition={{ duration: 0.7 }} transition={{ duration: 0.7 }}
viewport={{ once: true }} viewport={{ once: true }}
className="bg-white shadow-lg rounded-2xl p-8"
> >
<h3 className="text-2xl font-bold text-center mb-6">VISI</h3> <h3 className="text-2xl font-bold text-center mb-6">VISI</h3>
<p className="text-gray-700 text-center leading-relaxed"> <p className="text-gray-700 text-center leading-relaxed">
Menjadi Penyedia Jaringan Kabel Serat Optik Terbaik yang Menjadi Penyedia Jaringan Kabel Serat Optik Terbaik yang
Menghubungkan Seluruh Wilayah di Indonesia. Menghubungkan Seluruh Wilayah di Indonesia.
</p> </p>
</motion.section> </motion.div>
{/* Misi */} {/* Misi */}
<motion.section <motion.div
className="bg-white shadow-lg rounded-2xl p-8"
whileHover={{ scale: 1.05 }}
initial={{ opacity: 0, x: 50 }} initial={{ opacity: 0, x: 50 }}
whileInView={{ opacity: 1, x: 0 }} whileInView={{ opacity: 1, x: 0 }}
transition={{ duration: 0.7 }} transition={{ duration: 0.7 }}
viewport={{ once: true }} viewport={{ once: true }}
className="bg-white shadow-lg rounded-2xl p-8"
> >
<h3 className="text-2xl font-bold text-center mb-6">MISI</h3> <h3 className="text-2xl font-bold text-center mb-6">MISI</h3>
<ul className="space-y-4 text-gray-700"> <ul className="space-y-4 text-gray-700">
@ -94,13 +83,10 @@ export default function About() {
Fiber Optic. Fiber Optic.
</li> </li>
</ul> </ul>
</motion.section> </motion.div>
</div> </div>
</div> </div>
</section> </section>
{/* Footer */}
<Footer />
</div> </div>
); );
} }

View File

@ -1,20 +1,8 @@
import Navbar from "../components/Navbar"; import Navbar from "../components/Navbar";
import Footer from "../components/Footer";
import { useEffect, useRef } from "react";
import { useLocation } from "react-router-dom";
import { MapPin, Wifi, Network, Cog } from "lucide-react"; import { MapPin, Wifi, Network, Cog } from "lucide-react";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
export default function Home() { export default function Home() {
const footerRef = useRef(null);
const location = useLocation();
useEffect(() => {
if (location.hash === "#footer") {
footerRef.current?.scrollIntoView({ behavior: "smooth" });
}
}, [location]);
return ( return (
<div className="font-sans"> <div className="font-sans">
{/* Navbar */} {/* Navbar */}
@ -34,12 +22,13 @@ export default function Home() {
<div className="absolute inset-0 bg-black/50"></div> <div className="absolute inset-0 bg-black/50"></div>
<div className="relative z-10 flex flex-col justify-center h-full px-6 lg:px-20 text-white max-w-3xl"> <div className="relative z-10 flex flex-col justify-center h-full px-6 lg:px-20 text-white max-w-3xl">
<header className="text-4xl md:text-6xl font-bold leading-tight mt-2"> <p className="text-lg">Mari menjadi bagian dari kami</p>
<h1 className="text-4xl md:text-6xl font-bold leading-tight mt-2">
WALANJA <br /> TELEKOMUNIKASI WALANJA <br /> TELEKOMUNIKASI
</header>
<h1 className="mt-4 text-2xl md:text-3xl">
Always Connected
</h1> </h1>
<p className="mt-4 text-lg">
Bergabung bersama kami untuk mewujudkan Indonesia Emas 2045
</p>
</div> </div>
</section> </section>
@ -133,7 +122,7 @@ export default function Home() {
{/* Title */} {/* Title */}
<div className="text-center mb-12"> <div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold flex items-center justify-center gap-2 text-blue-900"> <h2 className="text-3xl md:text-4xl font-bold flex items-center justify-center gap-2 text-blue-900">
<MapPin className="w-8 h-8 text-blue-600" />
Cakupan Area Cakupan Area
</h2> </h2>
<p className="mt-3 text-gray-600 max-w-2xl mx-auto"> <p className="mt-3 text-gray-600 max-w-2xl mx-auto">
@ -145,38 +134,35 @@ export default function Home() {
</div> </div>
{/* Content */} {/* Content */}
<div className="max-w-6xl mx-auto flex flex-col md:flex-row items-stretch gap-12 px-6"> <div className="max-w-6xl mx-auto flex flex-col md:flex-row items-center gap-12 px-6">
{/* Map */} {/* Map with hover animation */}
<motion.div <motion.div
whileHover={{ scale: 1.05 }} whileHover={{ scale: 1.05 }}
className="flex-1 flex justify-center" className="flex-1 flex justify-center"
> >
<img <img
src="/map-bandung.jpg" src="/map-bandung.jpg"
alt="Map Bandung" alt="Map Bandung"
className="w-full max-w-md rounded-2xl shadow-xl border-4 border-blue-100 object-cover" className="w-full max-w-md rounded-2xl shadow-xl border-4 border-blue-100"
/> />
</motion.div> </motion.div>
{/* List Area */} {/* List Area */}
<div className="flex-1 bg-white/70 p-12 rounded-2xl shadow-lg flex flex-col justify-center"> <div className="flex-1 bg-white/70 p-6 rounded-2xl shadow-lg">
<h2 className="text-2xl text-center font-semibold mb-6 text-blue-600"> <h3 className="text-xl font-semibold mb-4 text-blue-600">
Fokus Layanan Fokus Layanan
</h2> </h3>
<ul className="space-y-3 text-gray-700"> <ul className="space-y-3 text-gray-700">
<li>📍 Bandung Kota</li> <li>📍 Bandung Kota</li>
<li>📍 Cimahi</li> <li>📍 Cimahi</li>
<li>📍 Cileunyi</li> <li>📍 Cileunyi</li>
<li>📍 Ngamprah</li> <li>📍 Ngamprah</li>
<li>📍 Desa 3T sekitar Bandung</li> <li>📍 Desa 3T sekitar Bandung</li>
</ul> </ul>
</div>
</div> </div>
</div> </div>
</div>
</section> </section>
{/* Footer */} </div>
<Footer footerRef={footerRef} />
</div>
); );
} }