diff --git a/src/App.css b/src/App.css index d3c26f5..2b8c343 100644 --- a/src/App.css +++ b/src/App.css @@ -6,7 +6,7 @@ } .dark .App { - background-color: #0f172a; + background-color: #080613; color: #f1f5f9; } @@ -16,7 +16,7 @@ } .dark { - --app-bg: #0f172a; + --app-bg: #080613; --app-text: #f1f5f9; } diff --git a/src/Components/ImagePreloader.jsx b/src/Components/ImagePreloader.jsx index 9281dd2..2c6aadb 100644 --- a/src/Components/ImagePreloader.jsx +++ b/src/Components/ImagePreloader.jsx @@ -19,7 +19,7 @@ import { useState, useEffect } from "react"; // import home10 from "../assets/home10.jpg"; // Services images -import gasStation from "../assets/Images/gasstation.jpg"; +// import gasStation from "../assets/Images/gasstation.jpg"; // List all critical images that need to be preloaded @@ -42,7 +42,7 @@ const imagesToPreload = [ // home9, // home10, // Services images - gasStation, + // gasStation, ]; diff --git a/src/Components/Sections/Home/Home.jsx b/src/Components/Sections/Home/Home.jsx index 0d10785..aefd77a 100644 --- a/src/Components/Sections/Home/Home.jsx +++ b/src/Components/Sections/Home/Home.jsx @@ -1,279 +1,254 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useRef } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { Element } from "react-scroll"; - -import { FaWhatsapp, FaPhone, FaEnvelope } from "react-icons/fa"; import { useTranslation } from "react-i18next"; import "../../../index.css"; +import companyLogo from "../../../assets/REXNT.png"; -const home1 = "https://i.imgur.com/g4fVyLj.jpg"; -const home1Mobile = "https://i.imgur.com/NNeCIAj.jpg"; - -const home2 = "https://i.imgur.com/d9enpvc.jpg"; -const home2Mobile = "https://i.imgur.com/a85P9Q8.jpg"; - -const home3 = "https://i.imgur.com/nWTJcjz.jpg"; - -const home4 = "https://i.imgur.com/btajXYO.jpg"; -const home4Mobile = "https://i.imgur.com/BZnHa4v.jpg"; - -const home6 = "https://i.imgur.com/gtwlzDA.jpg"; -const home6Mobile = "https://i.imgur.com/xs8OB15.jpg"; - -const home7 = "https://i.imgur.com/kSErZeJ.jpg"; -const home7Mobile = "https://i.imgur.com/02ftPiK.jpg"; - -const home8 = "https://i.imgur.com/0gsQF8L.jpg"; -const home8Mobile = "https://i.imgur.com/vey37dG.jpg"; - - -const containerVariants = { - hidden: { opacity: 0 }, - visible: { - opacity: 1, - transition: { staggerChildren: 0.3, when: "beforeChildren" }, - }, -}; - -const itemVariants = { - hidden: { opacity: 0, y: 20 }, - visible: { opacity: 1, y: 0, transition: { duration: 0.8 } }, -}; +const createStars = (count, config = {}) => + Array.from({ length: count }).map((_, i) => ({ + id: i, + x: Math.random() * 100, + y: Math.random() * 100, + size: Math.random() * (config.maxSize || 3) + (config.minSize || 1), + opacity: Math.random() * (config.maxOpacity || 0.8) + (config.minOpacity || 0.2), + duration: Math.random() * (config.maxDuration || 10) + (config.minDuration || 5), + delay: Math.random() * (config.maxDelay || 2), + })); const Home = () => { const { t } = useTranslation(); - const [currentIndex, setCurrentIndex] = useState(0); - const [menuOpen, setMenuOpen] = useState(false); - const [isMobile, setIsMobile] = useState(false); + const [showLogo, setShowLogo] = useState(false); + const [showTagline, setShowTagline] = useState(false); + const [scrollProgress, setScrollProgress] = useState(0); + const homeRef = useRef(null); - const phrases = t("home.phrases", { returnObjects: true }); + const stars = createStars(120); + const backgroundStars = createStars(80, { + minSize: 0.5, + maxSize: 2, + minOpacity: 0.1, + maxOpacity: 0.5, + }); useEffect(() => { - const updateSize = () => setIsMobile(window.innerWidth < 640); - updateSize(); - window.addEventListener("resize", updateSize); - return () => window.removeEventListener("resize", updateSize); + const logoTimeout = setTimeout(() => setShowLogo(true), 500); + const taglineTimeout = setTimeout(() => setShowTagline(true), 1500); + + const handleScroll = () => { + if (homeRef.current) { + const scrollPosition = window.scrollY; + const windowHeight = window.innerHeight; + const progress = Math.min(scrollPosition / (windowHeight * 0.2), 1); + setScrollProgress(progress); + } + }; + + window.addEventListener("scroll", handleScroll); + + return () => { + clearTimeout(logoTimeout); + clearTimeout(taglineTimeout); + window.removeEventListener("scroll", handleScroll); + }; }, []); - useEffect(() => { - const interval = setInterval(() => { - setCurrentIndex((prev) => (prev + 1) % phrases.length); - }, 4000); - return () => clearInterval(interval); - }, [phrases.length]); + const AnimatedStars = () => ( + <> + {stars.map((star) => ( + + ))} + + ); - const nextPhrase = () => { - setCurrentIndex((prev) => (prev + 1) % phrases.length); - }; - - const prevPhrase = () => { - setCurrentIndex((prev) => (prev - 1 + phrases.length) % phrases.length); - }; - - const getBackgroundImage = () => { - switch (currentIndex) { - case 0: - return isMobile ? home2Mobile : home2; - case 1: - return home3; - case 2: - return isMobile ? home4Mobile : home4; - case 3: - return isMobile ? home6Mobile : home6; - case 4: - return isMobile ? home8Mobile : home8; - case 5: - return isMobile ? home7Mobile : home7; - case 6: - return isMobile ? home1Mobile : home1; - default: - return ""; - } - }; + const StaticStars = () => ( + <> + {backgroundStars.map((star) => ( +
+ ))} + + ); return ( - -
- {/* الخلفية */} -
-
- - {/* المحتوى */} -
- - {/* العنوان المتغير */} - - - - - - - -
- - - {phrases[currentIndex]} - - -
- - - - - - -
- - {/* وصف إضافي */} - -
-

{t("home.subtitle1")}

-

{t("home.subtitle2")}

-
-
- - {/* زر تواصل معنا */} - -
- setMenuOpen((prev) => !prev)} - whileHover={{ scale: 1.05 }} - className="relative inline-flex items-center justify-center px-8 py-2.5 overflow-hidden tracking-tighter text-white bg-[#EB8317] rounded-md group" - style={{ zIndex: 30 }} - > - - - - - - - - - - - - - - {t("home.contactUs")} - - - - {menuOpen && ( - - - - 963965656631 - - - - - 963965656635 - - - - info@TPS-STATIONS.COM - - - )} - -
-
-
+ +
+
+
+ +
+
+ + + +
+ +
+ +
+ +
+ + {showLogo && ( + +
+ + +
+
+ )} +
+ + + {showTagline && ( + + +

+ شريكك الهندسي والتقني الرائد +

+

+ في تنفيذ وإدارة المشاريع الصناعية والسكنية والنفطية +

+

+ والمساهمة في تطوير البنية التحتية والقطاعات الإنتاجية + + عبر حلول حديثة ومستدامة + +

+
+ + + + )} +
+
+ + +
); }; -export default Home; +export default Home; \ No newline at end of file diff --git a/src/assets/Images/gasstation.jpg b/src/assets/Images/gasstation.jpg deleted file mode 100644 index 0e44a51..0000000 Binary files a/src/assets/Images/gasstation.jpg and /dev/null differ diff --git a/src/assets/REXNT.png b/src/assets/REXNT.png new file mode 100644 index 0000000..e44893f Binary files /dev/null and b/src/assets/REXNT.png differ diff --git a/src/assets/TPS-logo.png b/src/assets/TPS-logo.png deleted file mode 100644 index 27b03c1..0000000 Binary files a/src/assets/TPS-logo.png and /dev/null differ diff --git a/src/index.css b/src/index.css index 21353ba..eac21f6 100644 --- a/src/index.css +++ b/src/index.css @@ -3,68 +3,127 @@ @tailwind utilities; @layer base { :root { - --bg-color: #f8fafc; - --surface-color: #ffffff; + --bg-color: #ffffff; + --surface-color: #f8fafc; --text-color: #1e293b; --border-color: #e2e8f0; - --primary-color: #275094; + --primary-color: #5761dd; --secondary-color: #3c3c3c; + --accent-color: #3639a3; } .dark { - --bg-color: #0f172a; - --surface-color: #1e293b; + --bg-color: #080613; + --surface-color: #12143b; --text-color: #f1f5f9; - --border-color: #334155; - --primary-color: #1c3a6b; - --secondary-color: #2a2a2a; + --border-color: #3f446a; + --primary-color: #3639a3; + --secondary-color: #3f446a; + --accent-color: #5761dd; } body { @apply bg-theme text-theme transition-colors duration-300; font-family: system-ui, -apple-system, sans-serif; + background-color: var(--bg-color); + color: var(--text-color); } } @layer components { .theme-container { - @apply bg-theme text-theme transition-colors duration-300; + @apply transition-colors duration-300; + background-color: var(--bg-color); + color: var(--text-color); } .theme-surface { - @apply bg-surface border border-theme rounded-lg p-4 transition-colors duration-300; + @apply border rounded-lg p-4 transition-colors duration-300; + background-color: var(--surface-color); + border-color: var(--border-color); + color: var(--text-color); } .theme-card { - @apply bg-white dark: bg-gray-800 rounded-xl shadow-lg p-6 border border-gray-200 dark: border-gray-700 transition-all duration-300 hover: shadow-xl; + @apply rounded-xl shadow-lg p-6 transition-all duration-300 hover: shadow-xl; + background-color: var(--surface-color); + border: 1px solid var(--border-color); } .theme-btn-primary { - @apply bg-primary hover: bg-primary-light dark: bg-primary-dark dark: hover: bg-primary text-white font-medium py-3 px-6 rounded-lg transition-all duration-200 hover: scale-105 active: scale-95; + @apply font-medium py-3 px-6 rounded-lg transition-all duration-200 hover: scale-105 active: scale-95; + background-color: var(--primary-color); + color: white; + } + .theme-btn-primary:hover { + background-color: var(--accent-color); } .theme-btn-secondary { - @apply bg-secondary hover: bg-secondary-light dark: bg-secondary-dark dark: hover: bg-secondary text-white font-medium py-3 px-6 rounded-lg transition-all duration-200 hover: scale-105 active: scale-95; + @apply font-medium py-3 px-6 rounded-lg transition-all duration-200 hover: scale-105 active: scale-95; + background-color: var(--secondary-color); + color: white; } .theme-input { - @apply w-full px-4 py-3 bg-white dark: bg-gray-800 border border-gray-300 dark: border-gray-600 rounded-lg focus: ring-2 focus: ring-primary focus: border-transparent text-gray-900 dark: text-white placeholder-gray-500 dark: placeholder-gray-400 transition-colors duration-200; + @apply w-full px-4 py-3 rounded-lg focus: ring-2 focus: border-transparent transition-colors duration-200; + background-color: var(--surface-color); + border: 1px solid var(--border-color); + color: var(--text-color); + } + .theme-input:focus { + border-color: var(--primary-color); + box-shadow: 0 0 0 2px rgba(87, 97, 221, 0.1); } .theme-nav { - @apply bg-white dark: bg-gray-800 shadow-md border-b border-gray-200 dark: border-gray-700 transition-colors duration-300; + @apply shadow-md border-b transition-colors duration-300; + background-color: var(--surface-color); + border-color: var(--border-color); } .theme-nav-link { - @apply text-gray-700 dark: text-gray-300 hover: text-primary dark: hover: text-primary-light font-medium transition-colors duration-200 px-4 py-2; + @apply font-medium transition-colors duration-200 px-4 py-2; + color: var(--text-color); + } + .theme-nav-link:hover { + color: var(--primary-color); } .theme-section { - @apply py-12 md: py-16 lg: py-20 px-4 md: px-8 bg-white dark: bg-gray-900 transition-colors duration-300; + @apply py-12 md: py-16 lg: py-20 px-4 md: px-8 transition-colors duration-300; + background-color: var(--bg-color); } .theme-section-alt { - @apply py-12 md: py-16 lg: py-20 px-4 md: px-8 bg-gray-50 dark: bg-gray-800 transition-colors duration-300; + @apply py-12 md: py-16 lg: py-20 px-4 md: px-8 transition-colors duration-300; + background-color: var(--surface-color); } .theme-heading { - @apply text-3xl md: text-4xl lg: text-5xl font-bold text-gray-900 dark: text-white mb-6; + @apply text-3xl md: text-4xl lg: text-5xl font-bold mb-6; + color: var(--text-color); } .theme-subheading { - @apply text-xl md: text-2xl text-gray-600 dark: text-gray-300 mb-8; + @apply text-xl md: text-2xl mb-8; + color: var(--text-color); + opacity: 0.8; } .theme-text { - @apply text-gray-700 dark: text-gray-300 leading-relaxed; + @apply leading-relaxed; + color: var(--text-color); + opacity: 0.9; } .theme-footer { - @apply bg-gray-800 dark: bg-gray-900 text-white py-8 border-t border-gray-700 dark: border-gray-800 transition-colors duration-300; + @apply py-8 border-t transition-colors duration-300; + background-color: var(--surface-color); + border-color: var(--border-color); + color: var(--text-color); + } + .bg-theme { + background-color: var(--bg-color); + } + .text-theme { + color: var(--text-color); + } + .bg-surface { + background-color: var(--surface-color); + } + .border-theme { + border-color: var(--border-color); + } + .bg-primary { + background-color: var(--primary-color); + } + .bg-secondary { + background-color: var(--secondary-color); } } \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js index cbac0e8..ab52806 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,4 +1,3 @@ -/** @type {import('tailwindcss').Config} */ export default { content: [ "./index.html", @@ -8,38 +7,23 @@ export default { theme: { extend: { colors: { - primary: '#275094', - 'primary-light': '#3c6bc9', - 'primary-dark': '#1c3a6b', - - secondary: '#3c3c3c', - 'secondary-light': '#5a5a5a', - 'secondary-dark': '#2a2a2a', - - light: { - bg: '#f8fafc', - surface: '#ffffff', - text: '#1e293b', - border: '#e2e8f0', - accent: '#3b82f6', + theme: { + DEFAULT: 'var(--bg-color)', }, - dark: { - bg: '#0f172a', - surface: '#1e293b', - text: '#f1f5f9', - border: '#334155', - accent: '#60a5fa', + surface: { + DEFAULT: 'var(--surface-color)', + }, + border: { + theme: 'var(--border-color)', + }, + primary: { + light: '#5761dd', + DEFAULT: 'var(--primary-color)', + dark: '#3639a3', + }, + secondary: { + DEFAULT: 'var(--secondary-color)', }, - }, - backgroundColor: { - 'theme': 'var(--bg-color)', - 'surface': 'var(--surface-color)', - }, - textColor: { - 'theme': 'var(--text-color)', - }, - borderColor: { - 'theme': 'var(--border-color)', }, }, },