From fbc3f108b0837090047eedd27dc0473a9e2debcb Mon Sep 17 00:00:00 2001 From: JeffEmmett <20747463-JeffEmmett@users.noreply.replit.com> Date: Wed, 7 May 2025 03:37:44 +0000 Subject: [PATCH] Enhance the visual design with new colors and Islamic-inspired elements Adds Islamic patterns and color themes to the hero section and feature cards using new UI components and CSS classes. Replit-Commit-Author: Agent Replit-Commit-Session-Id: acaf01d7-65a7-4fc5-901d-853488e196e8 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/af8dabca-e746-4e53-9c29-d8d4d9cf30f5/0c99a732-a747-4909-ac7a-aedc0fba1b90.jpg --- client/src/components/home/feature-card.tsx | 34 +++- client/src/components/home/hero-section.tsx | 41 +++-- client/src/components/ui/islamic-patterns.tsx | 104 +++++++++++ client/src/components/ui/section-divider.tsx | 166 ++++++++++++++++++ client/src/index.css | 49 ++++++ 5 files changed, 379 insertions(+), 15 deletions(-) create mode 100644 client/src/components/ui/islamic-patterns.tsx create mode 100644 client/src/components/ui/section-divider.tsx diff --git a/client/src/components/home/feature-card.tsx b/client/src/components/home/feature-card.tsx index 7f603c3..ec0d827 100644 --- a/client/src/components/home/feature-card.tsx +++ b/client/src/components/home/feature-card.tsx @@ -13,26 +13,50 @@ export function FeatureCard({ title, description, icon, color }: FeatureCardProp bg: "bg-teal-light", iconBg: "bg-teal", text: "text-teal", + pattern: "islamic-pattern-teal", }, purple: { bg: "bg-purple-light", iconBg: "bg-purple", text: "text-purple", + pattern: "islamic-pattern", }, rose: { bg: "bg-rose-light", iconBg: "bg-rose", text: "text-rose", + pattern: "islamic-pattern-rose", }, }; return ( -
-
- +
+
+
+ + {/* Icon container with geometric border */} +
+
+ +
+ + {/* Decorative elements */} +
+ + + +
-

{title}

-

{description}

+ +

{title}

+

{description}

); } diff --git a/client/src/components/home/hero-section.tsx b/client/src/components/home/hero-section.tsx index d990b67..41f6362 100644 --- a/client/src/components/home/hero-section.tsx +++ b/client/src/components/home/hero-section.tsx @@ -1,18 +1,30 @@ import { Link } from "wouter"; +import { IslamicPattern, ArabesquePattern, SectionDividerBottom } from "@/components/ui/section-divider"; export function HeroSection() { return ( -
-
-
+
+ + +
+
+ بسم الله +

Find Balance, Strength & Inner Peace

-
+ +
+
+
+
+
+

Transform your body and mind through the art of Pilates. Join our serene studio for personalized sessions that promote harmony, flexibility, and strength.

+
-
- Woman practicing pilates in a bright, airy studio + +
+
+
+ Woman practicing pilates in a bright, airy studio +
+
+ +
+ +
); } diff --git a/client/src/components/ui/islamic-patterns.tsx b/client/src/components/ui/islamic-patterns.tsx new file mode 100644 index 0000000..aaa2374 --- /dev/null +++ b/client/src/components/ui/islamic-patterns.tsx @@ -0,0 +1,104 @@ +import React from "react"; + +interface PatternProps { + className?: string; + fillColor?: string; +} + +export function GeometricPattern({ className = "", fillColor = "#0c8991" }: PatternProps) { + return ( +
+ + + + + + + + +
+ ); +} + +export function ArabicArch({ className = "", fillColor = "#0c8991" }: PatternProps) { + return ( +
+ + + + +
+ ); +} + +export function CrescentMoon({ className = "", fillColor = "#0c8991" }: PatternProps) { + return ( +
+ + + +
+ ); +} + +export function DividerPattern({ className = "", fillColor = "#0c8991" }: PatternProps) { + return ( +
+
+
+ + + + +
+
+
+ ); +} + +export function ArabicPattern({ className = "", fillColor = "#0c8991" }: PatternProps) { + return ( +
+ + + + + + +
+ ); +} \ No newline at end of file diff --git a/client/src/components/ui/section-divider.tsx b/client/src/components/ui/section-divider.tsx new file mode 100644 index 0000000..724f0dd --- /dev/null +++ b/client/src/components/ui/section-divider.tsx @@ -0,0 +1,166 @@ +import React from "react"; + +interface SectionDividerProps { + color?: "teal" | "purple" | "rose"; + className?: string; + withPattern?: boolean; +} + +export function SectionDivider({ + color = "teal", + className = "", + withPattern = false +}: SectionDividerProps) { + + const colors = { + teal: "#0c8991", + purple: "#9D5E9B", + rose: "#B55076" + }; + + const fillColor = colors[color]; + const patternClass = withPattern ? `islamic-pattern-${color}` : ""; + + return ( +
+
+ + + + +
+ + {withPattern &&
} +
+ ); +} + +export function SectionDividerBottom({ + color = "teal", + className = "", + withPattern = false +}: SectionDividerProps) { + + const colors = { + teal: "#0c8991", + purple: "#9D5E9B", + rose: "#B55076" + }; + + const fillColor = colors[color]; + const patternClass = withPattern ? `islamic-pattern-${color}` : ""; + + return ( +
+
+ + + + +
+ + {withPattern &&
} +
+ ); +} + +export function IslamicPattern({ + color = "teal", + className = "", + opacity = 10 +}: { + color?: "teal" | "purple" | "rose"; + className?: string; + opacity?: number; +}) { + const patternClass = color === "teal" + ? "islamic-pattern-teal" + : color === "purple" + ? "islamic-pattern" + : "islamic-pattern-rose"; + + return
; +} + +export function ArabesquePattern({ + color = "teal", + className = "", + opacity = 10 +}: { + color?: "teal" | "purple" | "rose"; + className?: string; + opacity?: number; +}) { + const patternClass = color === "teal" + ? "arabesque-pattern" + : color === "purple" + ? "arabesque-pattern-purple" + : "arabesque-pattern-rose"; + + return
; +} + +export function CrescentDivider({ + color = "teal", + className = "" +}: { + color?: "teal" | "purple" | "rose"; + className?: string; +}) { + const colors = { + teal: "#0c8991", + purple: "#9D5E9B", + rose: "#B55076" + }; + + const fillColor = colors[color]; + + return ( +
+
+
+ + + + +
+
+
+ ); +} + +export function StarDivider({ + color = "teal", + className = "" +}: { + color?: "teal" | "purple" | "rose"; + className?: string; +}) { + const colors = { + teal: "#0c8991", + purple: "#9D5E9B", + rose: "#B55076" + }; + + const fillColor = colors[color]; + + return ( +
+
+
+ + + +
+
+
+ ); +} \ No newline at end of file diff --git a/client/src/index.css b/client/src/index.css index 1b6e13a..427d9db 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -72,6 +72,55 @@ background-image: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z' fill='%239d5e9b' fill-opacity='0.05' fill-rule='evenodd'/%3E%3C/svg%3E"); } +.islamic-pattern-teal { + background-image: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z' fill='%230c8991' fill-opacity='0.05' fill-rule='evenodd'/%3E%3C/svg%3E"); +} + +.islamic-pattern-rose { + background-image: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z' fill='%23b55076' fill-opacity='0.05' fill-rule='evenodd'/%3E%3C/svg%3E"); +} + +.arabesque-pattern { + background-image: url("data:image/svg+xml,%3Csvg width='52' height='26' viewBox='0 0 52 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%230c8991' fill-opacity='0.05'%3E%3Cpath d='M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6h-2c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); +} + +.arabesque-pattern-purple { + background-image: url("data:image/svg+xml,%3Csvg width='52' height='26' viewBox='0 0 52 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%239d5e9b' fill-opacity='0.05'%3E%3Cpath d='M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6h-2c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); +} + +.arabesque-pattern-rose { + background-image: url("data:image/svg+xml,%3Csvg width='52' height='26' viewBox='0 0 52 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23b55076' fill-opacity='0.05'%3E%3Cpath d='M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6h-2c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); +} + +.islamic-arch-divider { + position: relative; + height: 60px; + margin: -30px 0; + overflow: hidden; + z-index: 10; +} + +.islamic-arch-top { + position: relative; + overflow: hidden; +} + +.islamic-arch-top svg { + display: block; + width: 100%; +} + +.islamic-arch-bottom { + position: relative; + overflow: hidden; +} + +.islamic-arch-bottom svg { + display: block; + width: 100%; + transform: rotate(180deg); +} + .teal-bg { background-color: #0c8991; }