diff --git a/.gitignore b/.gitignore index eb797cc..c8b4f92 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +assets/external/ +.states +.web +*.db # Python __pycache__/ *.py[cod] diff --git a/Makefile b/Makefile index 630dc97..c1d49c0 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ install: pre-commit install dev: - python -m reflex run + python33 -m reflex run test: pytest tests/ -v --cov=src --cov-report=html @@ -122,5 +122,5 @@ migrate: alembic upgrade head seed: - python scripts/seed_database.py + python3 scripts/seed_database.py diff --git a/assets/custom.css b/assets/custom.css index 0c4f272..41585a3 100644 --- a/assets/custom.css +++ b/assets/custom.css @@ -13,9 +13,9 @@ body { } @keyframes glow { - 0% { box-shadow: 0 12px 40px rgba(30, 64, 175, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.2); } - 50% { box-shadow: 0 18px 50px rgba(30, 64, 175, 0.8), inset 0 1px 0 rgba(255, 255, 255, 0.3); } - 100% { box-shadow: 0 12px 40px rgba(30, 64, 175, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.2); } + 0% { box-shadow: 0 12px 40px rgba(27, 75, 127, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.2); } + 50% { box-shadow: 0 18px 50px rgba(27, 75, 127, 0.8), inset 0 1px 0 rgba(255, 255, 255, 0.3); } + 100% { box-shadow: 0 12px 40px rgba(27, 75, 127, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.2); } } @keyframes pulse { diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000..b4cea4b Binary files /dev/null and b/assets/logo.png differ diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..b4cea4b Binary files /dev/null and b/logo.png differ diff --git a/src/presentation/web/assets/custom.css b/src/presentation/web/assets/custom.css index 0c4f272..41585a3 100644 --- a/src/presentation/web/assets/custom.css +++ b/src/presentation/web/assets/custom.css @@ -13,9 +13,9 @@ body { } @keyframes glow { - 0% { box-shadow: 0 12px 40px rgba(30, 64, 175, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.2); } - 50% { box-shadow: 0 18px 50px rgba(30, 64, 175, 0.8), inset 0 1px 0 rgba(255, 255, 255, 0.3); } - 100% { box-shadow: 0 12px 40px rgba(30, 64, 175, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.2); } + 0% { box-shadow: 0 12px 40px rgba(27, 75, 127, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.2); } + 50% { box-shadow: 0 18px 50px rgba(27, 75, 127, 0.8), inset 0 1px 0 rgba(255, 255, 255, 0.3); } + 100% { box-shadow: 0 12px 40px rgba(27, 75, 127, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.2); } } @keyframes pulse { diff --git a/src/presentation/web/pages/landing/index.py b/src/presentation/web/pages/landing/index.py index 8379ab8..84e6b2d 100644 --- a/src/presentation/web/pages/landing/index.py +++ b/src/presentation/web/pages/landing/index.py @@ -11,9 +11,9 @@ def navbar() -> rx.Component: return rx.box( rx.hstack( rx.hstack( - rx.image(src="https://i.imgur.com/YOUR_LOGO.png", width="45px", height="45px"), + rx.image(src="/logo.png", width="50px", height="50px"), rx.heading("پیکربند", size="7", - background="linear-gradient(135deg, #1e40af, #3b82f6, #06b6d4)", + background="linear-gradient(135deg, #1B4B7F, #4DB8C4, #6DD7E5)", background_clip="text", style={"-webkit-background-clip": "text", "-webkit-text-fill-color": "transparent"}, letter_spacing="1px", @@ -23,11 +23,11 @@ def navbar() -> rx.Component: ), rx.spacer(), rx.hstack( - rx.link("خدمات", href="#services", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#22d3ee", "transform": "translateY(-2px)"}, transition="all 0.2s"), - rx.link("قیمت‌ها", href="#pricing", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#22d3ee", "transform": "translateY(-2px)"}, transition="all 0.2s"), - rx.link("سرورها", href="#servers", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#22d3ee", "transform": "translateY(-2px)"}, transition="all 0.2s"), - rx.link("نظرات", href="#testimonials", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#22d3ee", "transform": "translateY(-2px)"}, transition="all 0.2s"), - rx.link("تماس", href="#contact", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#22d3ee", "transform": "translateY(-2px)"}, transition="all 0.2s"), + rx.link("خدمات", href="#services", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#6DD7E5", "transform": "translateY(-2px)"}, transition="all 0.2s"), + rx.link("قیمت‌ها", href="#pricing", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#6DD7E5", "transform": "translateY(-2px)"}, transition="all 0.2s"), + rx.link("سرورها", href="#servers", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#6DD7E5", "transform": "translateY(-2px)"}, transition="all 0.2s"), + rx.link("نظرات", href="#testimonials", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#6DD7E5", "transform": "translateY(-2px)"}, transition="all 0.2s"), + rx.link("تماس", href="#contact", color="#E2E8F0", font_weight="600", font_size="16px", _hover={"color": "#6DD7E5", "transform": "translateY(-2px)"}, transition="all 0.2s"), rx.button( rx.hstack( rx.text("شروع رایگان", font_weight="800"), @@ -35,15 +35,15 @@ def navbar() -> rx.Component: spacing="2", align="center", ), - background="linear-gradient(135deg, #1e40af 0%, #3b82f6 50%, #06b6d4 100%)", + background="linear-gradient(135deg, #1B4B7F 0%, #4DB8C4 50%, #6DD7E5 100%)", color="white", border_radius="full", padding="16px 36px", font_size="16px", - box_shadow="0 12px 35px rgba(59, 130, 246, 0.7), 0 0 60px rgba(6, 182, 212, 0.3)", + box_shadow="0 12px 35px rgba(77, 184, 196, 0.7), 0 0 60px rgba(109, 215, 229, 0.3)", _hover={ "transform": "translateY(-4px) scale(1.08)", - "box_shadow": "0 18px 50px rgba(6, 182, 212, 0.9), 0 0 80px rgba(6, 182, 212, 0.5)" + "box_shadow": "0 18px 50px rgba(109, 215, 229, 0.9), 0 0 80px rgba(109, 215, 229, 0.5)" }, transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)", style={"animation": "glow 3s ease-in-out infinite"}, @@ -58,7 +58,7 @@ def navbar() -> rx.Component: width="100%", backdrop_filter="blur(20px) saturate(180%)", background="rgba(5, 10, 20, 0.92)", - border_bottom="1px solid rgba(6, 182, 212, 0.3)", + border_bottom="1px solid rgba(109, 215, 229, 0.3)", padding="20px 8%", z_index="1000", box_shadow="0 8px 32px rgba(0, 0, 0, 0.4)", @@ -87,7 +87,7 @@ def hero() -> rx.Component: ), # rx.badge( # rx.hstack( - # rx.icon("sparkles", size=16, color="#06b6d4"), + # rx.icon("sparkles", size=16, color="#6DD7E5"), # rx.text("هاستینگ، دامین و DevOps", font_weight="600"), # spacing="2", # align="center", @@ -95,16 +95,16 @@ def hero() -> rx.Component: # variant="outline", # padding="12px 24px", # border_radius="full", - # background="linear-gradient(135deg, rgba(59, 130, 246, 0.15), rgba(6, 182, 212, 0.15))", - # border="2px solid rgba(59, 130, 246, 0.5)", + # background="linear-gradient(135deg, rgba(77, 184, 196, 0.15), rgba(109, 215, 229, 0.15))", + # border="2px solid rgba(77, 184, 196, 0.5)", # font_size="15px", - # box_shadow="0 8px 24px rgba(59, 130, 246, 0.3)", + # box_shadow="0 8px 24px rgba(77, 184, 196, 0.3)", # ), rx.heading( "میزبانی وب و زیرساخت ابری ", rx.el.span("حرفه‌ای", style={ - "background": "linear-gradient(135deg, #1e40af, #3b82f6, #06b6d4, #22d3ee)", + "background": "linear-gradient(135deg, #1B4B7F, #4DB8C4, #6DD7E5, #7CE3F2)", "background-clip": "text", "-webkit-background-clip": "text", "-webkit-text-fill-color": "transparent", @@ -118,8 +118,8 @@ def hero() -> rx.Component: margin_top="16px", ), rx.text( - "از هاست وردپرس تا سرورهای اختصاصی، دامین و خدمات DevOps, DataOps و MlOps.", - rx.el.span(" برای حضور قدرتمند شما در اینترنت", style={"color": "#94A3B8"}), + "اولین و تخصصی‌ترین ارائه‌دهنده کلود اختصاصی وردپرس در ایران.", + rx.el.span(" مدیریت پیشرفته و هوشمند سایت‌های وردپرسی شما", style={"color": "#94A3B8"}), color="#E2E8F0", font_size="23px", line_height="1.9", @@ -137,14 +137,14 @@ def hero() -> rx.Component: align="center", ), size="4", - background="linear-gradient(135deg, #1e40af, #3b82f6, #06b6d4)", + background="linear-gradient(135deg, #1B4B7F, #4DB8C4, #6DD7E5)", color="white", border_radius="16px", padding="28px 56px", - box_shadow="0 15px 50px rgba(30, 64, 175, 0.7), 0 0 80px rgba(6, 182, 212, 0.4), inset 0 2px 0 rgba(255, 255, 255, 0.3)", + box_shadow="0 15px 50px rgba(27, 75, 127, 0.7), 0 0 80px rgba(109, 215, 229, 0.4), inset 0 2px 0 rgba(255, 255, 255, 0.3)", _hover={ "transform": "translateY(-6px) scale(1.03)", - "box_shadow": "0 25px 70px rgba(30, 64, 175, 0.9), 0 0 120px rgba(6, 182, 212, 0.6)" + "box_shadow": "0 25px 70px rgba(27, 75, 127, 0.9), 0 0 120px rgba(109, 215, 229, 0.6)" }, transition="all 0.5s cubic-bezier(0.4, 0, 0.2, 1)", style={"animation": "glow 4s ease-in-out infinite"}, @@ -158,18 +158,18 @@ def hero() -> rx.Component: ), size="4", variant="outline", - border="3px solid #1e40af", + border="3px solid #1B4B7F", color="white", border_radius="16px", padding="28px 56px", - background="rgba(30, 64, 175, 0.08)", + background="rgba(27, 75, 127, 0.08)", backdrop_filter="blur(10px)", - box_shadow="0 10px 40px rgba(30, 64, 175, 0.3)", + box_shadow="0 10px 40px rgba(27, 75, 127, 0.3)", _hover={ - "background": "rgba(30, 64, 175, 0.2)", + "background": "rgba(27, 75, 127, 0.2)", "transform": "translateY(-6px) scale(1.03)", - "border": "3px solid #06b6d4", - "box_shadow": "0 20px 60px rgba(6, 182, 212, 0.5)" + "border": "3px solid #6DD7E5", + "box_shadow": "0 20px 60px rgba(109, 215, 229, 0.5)" }, transition="all 0.5s cubic-bezier(0.4, 0, 0.2, 1)", ), @@ -207,7 +207,7 @@ def hero() -> rx.Component: src="https://illustrations.popsy.co/amber/web-design.svg", width="600px", height="auto", - filter="drop-shadow(0 20px 60px rgba(30, 64, 175, 0.3))", + filter="drop-shadow(0 20px 60px rgba(27, 75, 127, 0.3))", ), display=["none", "none", "none", "block"], ), @@ -260,7 +260,7 @@ def wordpress_cloud_highlight() -> rx.Component: text_align=["center", "center", "right"], ), rx.text( - "مدیریت پیشرفته و هوشمند وردپرس بر بستر کلود. با تکنولوژی‌های روز دنیا، سایت شما را به سطح بعدی می‌بریم", + "با کلود اختصاصی وردپرس، سایت شما را با سرعت، امنیت و مدیریت هوشمند تجربه کنید. بدون نگرانی از فنی‌ها، فقط روی کسب‌وکارتان تمرکز کنید", color="#CBD5E1", font_size="20px", line_height="1.8", @@ -311,10 +311,10 @@ def wordpress_cloud_highlight() -> rx.Component: ), rx.hstack( rx.box( - rx.icon("shield", size=24, color="#3b82f6"), + rx.icon("shield", size=24, color="#4DB8C4"), width="48px", height="48px", - background="linear-gradient(135deg, rgba(59, 130, 246, 0.2), rgba(6, 182, 212, 0.2))", + background="linear-gradient(135deg, rgba(77, 184, 196, 0.2), rgba(109, 215, 229, 0.2))", border_radius="12px", display="flex", align_items="center", @@ -392,12 +392,12 @@ def wordpress_cloud_highlight() -> rx.Component: spacing="2", ), rx.vstack( - rx.text("10x", font_size="36px", font_weight="900", color="#3b82f6", line_height="1"), + rx.text("10x", font_size="36px", font_weight="900", color="#4DB8C4", line_height="1"), rx.text("سریع‌تر", font_size="14px", color="#94A3B8", font_weight="600"), align="center", padding="24px", background="rgba(30, 30, 50, 0.8)", - border="2px solid rgba(59, 130, 246, 0.3)", + border="2px solid rgba(77, 184, 196, 0.3)", border_radius="20px", spacing="2", ), @@ -443,7 +443,7 @@ def about_card(icon: str, title: str, desc: str, gradient: str, glow_color: str) rx.text(desc, color="#94A3B8", text_align="center", font_size="17px", line_height="1.7", font_weight="500"), padding="60px 40px", background="linear-gradient(135deg, rgba(30, 30, 50, 0.9), rgba(20, 20, 40, 0.7))", - border="2px solid rgba(30, 64, 175, 0.3)", + border="2px solid rgba(27, 75, 127, 0.3)", border_radius="32px", align="center", min_height="420px", @@ -457,9 +457,9 @@ def about_section() -> rx.Component: rx.vstack( rx.badge( "✨ چرا ما؟", - background="linear-gradient(135deg, rgba(30, 64, 175, 0.2), rgba(59, 130, 246, 0.2))", - border="2px solid rgba(30, 64, 175, 0.4)", - color="#3b82f6", + background="linear-gradient(135deg, rgba(27, 75, 127, 0.2), rgba(77, 184, 196, 0.2))", + border="2px solid rgba(27, 75, 127, 0.4)", + color="#4DB8C4", font_weight="700", font_size="16px", padding="10px 24px", @@ -474,9 +474,9 @@ def about_section() -> rx.Component: font_weight="500", ), rx.hstack( - about_card("zap", "سرعت فوق‌العاده", "سرورهای بهینه‌شده با SSD NVMe و CDN جهانی برای بارگذاری آنی", "linear-gradient(135deg, #1e40af, #4F46E5)", "rgba(30, 64, 175, 0.5)"), - about_card("clock", "پشتیبانی 24/7", "تیم پشتیبانی حرفه‌ای و با تجربه، آماده کمک در هر لحظه", "linear-gradient(135deg, #3b82f6, #7C3AED)", "rgba(59, 130, 246, 0.5)"), - about_card("shield-check", "امنیت پیشرفته", "SSL رایگان، بکاپ اتوماتیک روزانه و محافظت DDoS", "linear-gradient(135deg, #06b6d4, #9333EA)", "rgba(6, 182, 212, 0.5)"), + about_card("zap", "سرعت فوق‌العاده", "سرورهای بهینه‌شده با SSD NVMe و CDN جهانی برای بارگذاری آنی", "linear-gradient(135deg, #1B4B7F, #4F46E5)", "rgba(27, 75, 127, 0.5)"), + about_card("clock", "پشتیبانی 24/7", "تیم پشتیبانی حرفه‌ای و با تجربه، آماده کمک در هر لحظه", "linear-gradient(135deg, #4DB8C4, #7C3AED)", "rgba(77, 184, 196, 0.5)"), + about_card("shield-check", "امنیت پیشرفته", "SSL رایگان، بکاپ اتوماتیک روزانه و محافظت DDoS", "linear-gradient(135deg, #6DD7E5, #9333EA)", "rgba(109, 215, 229, 0.5)"), spacing="9", width="100%", ), @@ -515,7 +515,7 @@ def service_card(title: str, desc: str, icon: str, features: list, color: str) - ), padding="48px 40px", background="linear-gradient(135deg, rgba(30, 30, 50, 0.95), rgba(20, 20, 40, 0.8))", - border="2px solid rgba(30, 64, 175, 0.25)", + border="2px solid rgba(27, 75, 127, 0.25)", border_radius="32px", align="center", min_height="520px", @@ -533,9 +533,9 @@ def services_section() -> rx.Component: rx.vstack( rx.badge( "🚀 خدمات ما", - background="linear-gradient(135deg, rgba(59, 130, 246, 0.2), rgba(6, 182, 212, 0.2))", - border="2px solid rgba(59, 130, 246, 0.4)", - color="#06b6d4", + background="linear-gradient(135deg, rgba(77, 184, 196, 0.2), rgba(109, 215, 229, 0.2))", + border="2px solid rgba(77, 184, 196, 0.4)", + color="#6DD7E5", font_weight="700", font_size="16px", padding="10px 24px", @@ -550,12 +550,12 @@ def services_section() -> rx.Component: font_weight="500", ), rx.grid( - service_card("هاستینگ وردپرس", "میزبانی بهینه‌شده وردپرس با کنترل پنل cPanel", "globe", ["نصب خودکار وردپرس", "SSL رایگان", "بکاپ روزانه", "پشتیبانی فنی"], "#1e40af"), - service_card("فروش دامین", "ثبت دامین‌های بین‌المللی و ایرانی", "tag", [".com, .ir, .net و...", "قیمت‌های رقابتی", "تحویل فوری", "مدیریت DNS"], "#3b82f6"), - service_card("سرور اختصاصی", "VPS و Dedicated Server از بهترین دیتاسنترها", "server", ["DigitalOcean", "Hetzner", "OVH", "Hostinger"], "#06b6d4"), - service_card("DevOps & CI/CD", "اتوماسیون و مدیریت زیرساخت", "code", ["Kubernetes", "Docker", "GitLab/GitHub CI", "Terraform"], "#1e40af"), - service_card("انتقال به کلود", "مهاجرت سایت به محیط ابری", "cloud-upload", ["AWS Migration", "Google Cloud", "Azure", "مشاوره رایگان"], "#3b82f6"), - service_card("مشاوره فنی", "راهنمایی و طراحی معماری", "settings", ["بررسی زیرساخت", "بهینه‌سازی", "امن‌سازی", "پشتیبانی مداوم"], "#06b6d4"), + service_card("وردپرس کلود", "کلود اختصاصی وردپرس با مدیریت هوشمند و پیشرفته", "cloud", ["نصب خودکار وردپرس", "مدیریت چند سایتی", "بکاپ اتوماتیک", "SSL رایگان", "بهینه‌سازی خودکار"], "#1B4B7F"), + service_card("سرورهای ابری", "سرورهای اختصاصی از بهترین دیتاسنترهای دنیا", "server", ["DigitalOcean", "Hetzner", "AWS", "Google Cloud"], "#4DB8C4"), + service_card("مهاجرت به کلود", "انتقال سایت وردپرسی شما به کلود اختصاصی", "cloud-upload", ["مهاجرت بدون توقف", "تست قبل از انتقال", "بهینه‌سازی کامل", "مشاوره رایگان"], "#6DD7E5"), + service_card("DevOps حرفه‌ای", "اتوماسیون و مدیریت زیرساخت کلود", "code", ["Kubernetes", "Docker", "CI/CD Pipeline", "Infrastructure as Code"], "#1B4B7F"), + service_card("فروش دامین", "ثبت دامین‌های بین‌المللی و ایرانی", "tag", [".com, .ir, .net", "قیمت رقابتی", "تحویل فوری", "مدیریت DNS"], "#4DB8C4"), + service_card("پشتیبانی 24/7", "پشتیبانی تخصصی وردپرس و سرور", "headset", ["تیم متخصص", "پاسخگویی سریع", "مشاوره رایگان", "پشتیبانی فارسی"], "#6DD7E5"), columns="3", spacing="9", width="100%", @@ -568,13 +568,13 @@ def services_section() -> rx.Component: id="services", ) -def pricing_card(name: str, price: str, features: list, popular: bool = False, badge_color: str = "#1e40af") -> rx.Component: +def pricing_card(name: str, price: str, features: list, popular: bool = False, badge_color: str = "#1B4B7F") -> rx.Component: return rx.vstack( rx.cond( popular, rx.badge( "⭐ محبوب‌ترین", - background="linear-gradient(135deg, #1e40af, #3b82f6)", + background="linear-gradient(135deg, #1B4B7F, #4DB8C4)", color="white", padding="10px 24px", border_radius="full", @@ -582,7 +582,7 @@ def pricing_card(name: str, price: str, features: list, popular: bool = False, b font_size="15px", position="absolute", top="-18px", - box_shadow="0 8px 30px rgba(30, 64, 175, 0.7)", + box_shadow="0 8px 30px rgba(27, 75, 127, 0.7)", ), rx.box(), ), @@ -593,7 +593,7 @@ def pricing_card(name: str, price: str, features: list, popular: bool = False, b align="baseline", spacing="3", ), - rx.divider(background="rgba(30, 64, 175, 0.3)", margin_y="32px"), + rx.divider(background="rgba(27, 75, 127, 0.3)", margin_y="32px"), rx.vstack( *[rx.hstack( rx.icon("check", size=24, color="#10B981"), @@ -610,24 +610,24 @@ def pricing_card(name: str, price: str, features: list, popular: bool = False, b "انتخاب پلن", width="100%", padding="20px", - background="linear-gradient(135deg, #1e40af, #3b82f6)" if popular else "transparent", - border="2.5px solid #1e40af" if not popular else "none", + background="linear-gradient(135deg, #1B4B7F, #4DB8C4)" if popular else "transparent", + border="2.5px solid #1B4B7F" if not popular else "none", color="white", border_radius="16px", font_weight="800", font_size="18px", - box_shadow="0 10px 35px rgba(30, 64, 175, 0.6)" if popular else "none", - _hover={"transform": "translateY(-4px)", "box_shadow": "0 15px 50px rgba(30, 64, 175, 0.8)"}, + box_shadow="0 10px 35px rgba(27, 75, 127, 0.6)" if popular else "none", + _hover={"transform": "translateY(-4px)", "box_shadow": "0 15px 50px rgba(27, 75, 127, 0.8)"}, transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)", ), padding="56px 48px", - background="linear-gradient(135deg, rgba(30, 64, 175, 0.3), rgba(59, 130, 246, 0.3))" if popular else "linear-gradient(135deg, rgba(30, 30, 50, 0.95), rgba(20, 20, 40, 0.8))", - border=f"3px solid #3b82f6" if popular else "2px solid rgba(30, 64, 175, 0.3)", + background="linear-gradient(135deg, rgba(27, 75, 127, 0.3), rgba(77, 184, 196, 0.3))" if popular else "linear-gradient(135deg, rgba(30, 30, 50, 0.95), rgba(20, 20, 40, 0.8))", + border=f"3px solid #4DB8C4" if popular else "2px solid rgba(27, 75, 127, 0.3)", border_radius="32px", position="relative", min_height="620px", - box_shadow="0 25px 80px rgba(30, 64, 175, 0.5)" if popular else "0 15px 50px rgba(0, 0, 0, 0.4)", - _hover={"transform": "translateY(-16px) scale(1.04)", "box_shadow": "0 35px 100px rgba(30, 64, 175, 0.7)"}, + box_shadow="0 25px 80px rgba(27, 75, 127, 0.5)" if popular else "0 15px 50px rgba(0, 0, 0, 0.4)", + _hover={"transform": "translateY(-16px) scale(1.04)", "box_shadow": "0 35px 100px rgba(27, 75, 127, 0.7)"}, transition="all 0.5s cubic-bezier(0.4, 0, 0.2, 1)", align="center", ) @@ -637,9 +637,9 @@ def pricing_section() -> rx.Component: rx.vstack( rx.badge( "💎 پلن‌های قیمتی", - background="linear-gradient(135deg, rgba(30, 64, 175, 0.2), rgba(59, 130, 246, 0.2))", - border="2px solid rgba(30, 64, 175, 0.4)", - color="#1e40af", + background="linear-gradient(135deg, rgba(27, 75, 127, 0.2), rgba(77, 184, 196, 0.2))", + border="2px solid rgba(27, 75, 127, 0.4)", + color="#1B4B7F", font_weight="700", font_size="16px", padding="10px 24px", @@ -674,7 +674,7 @@ def server_table_row(provider: str, price: str, cpu: str, ram: str, location: st align="center", ) ), - rx.table.cell(rx.text(price, color="#3b82f6", font_weight="700", font_size="17px")), + rx.table.cell(rx.text(price, color="#4DB8C4", font_weight="700", font_size="17px")), rx.table.cell(rx.text(cpu, font_weight="600", font_size="16px")), rx.table.cell(rx.text(ram, font_weight="600", font_size="16px")), rx.table.cell(rx.text(location, color="#94A3B8", font_weight="600")), @@ -682,11 +682,11 @@ def server_table_row(provider: str, price: str, cpu: str, ram: str, location: st rx.button( "سفارش", size="3", - background="linear-gradient(135deg, #1e40af, #3b82f6)", + background="linear-gradient(135deg, #1B4B7F, #4DB8C4)", color="white", border_radius="10px", font_weight="700", - _hover={"transform": "scale(1.08)", "box_shadow": "0 8px 25px rgba(30, 64, 175, 0.6)"}, + _hover={"transform": "scale(1.08)", "box_shadow": "0 8px 25px rgba(27, 75, 127, 0.6)"}, transition="all 0.3s", ) ), @@ -697,9 +697,9 @@ def server_comparison() -> rx.Component: rx.vstack( rx.badge( "🌐 ارائه‌دهندگان", - background="linear-gradient(135deg, rgba(6, 182, 212, 0.2), rgba(59, 130, 246, 0.2))", - border="2px solid rgba(6, 182, 212, 0.4)", - color="#06b6d4", + background="linear-gradient(135deg, rgba(109, 215, 229, 0.2), rgba(77, 184, 196, 0.2))", + border="2px solid rgba(109, 215, 229, 0.4)", + color="#6DD7E5", font_weight="700", font_size="16px", padding="10px 24px", @@ -711,12 +711,12 @@ def server_comparison() -> rx.Component: rx.table.root( rx.table.header( rx.table.row( - rx.table.column_header_cell("ارائه‌دهنده", color="#3b82f6", font_weight="800", font_size="17px"), - rx.table.column_header_cell("قیمت", color="#3b82f6", font_weight="800", font_size="17px"), - rx.table.column_header_cell("CPU", color="#3b82f6", font_weight="800", font_size="17px"), - rx.table.column_header_cell("RAM", color="#3b82f6", font_weight="800", font_size="17px"), - rx.table.column_header_cell("مکان", color="#3b82f6", font_weight="800", font_size="17px"), - rx.table.column_header_cell("", color="#3b82f6", font_weight="800"), + rx.table.column_header_cell("ارائه‌دهنده", color="#4DB8C4", font_weight="800", font_size="17px"), + rx.table.column_header_cell("قیمت", color="#4DB8C4", font_weight="800", font_size="17px"), + rx.table.column_header_cell("CPU", color="#4DB8C4", font_weight="800", font_size="17px"), + rx.table.column_header_cell("RAM", color="#4DB8C4", font_weight="800", font_size="17px"), + rx.table.column_header_cell("مکان", color="#4DB8C4", font_weight="800", font_size="17px"), + rx.table.column_header_cell("", color="#4DB8C4", font_weight="800"), ), ), rx.table.body( @@ -730,11 +730,11 @@ def server_comparison() -> rx.Component: width="100%", ), background="linear-gradient(135deg, rgba(30, 30, 50, 0.9), rgba(20, 20, 40, 0.7))", - border="2px solid rgba(30, 64, 175, 0.3)", + border="2px solid rgba(27, 75, 127, 0.3)", border_radius="28px", padding="40px", box_shadow="0 20px 70px rgba(0, 0, 0, 0.6)", - _hover={"box_shadow": "0 25px 90px rgba(30, 64, 175, 0.3)"}, + _hover={"box_shadow": "0 25px 90px rgba(27, 75, 127, 0.3)"}, transition="all 0.4s", ), max_width="1500px", @@ -757,7 +757,7 @@ def testimonial_card(name: str, role: str, text: str, initial: str, gradient: st display="flex", align_items="center", justify_content="center", - box_shadow="0 12px 40px rgba(30, 64, 175, 0.6)", + box_shadow="0 12px 40px rgba(27, 75, 127, 0.6)", ), rx.vstack( rx.text(name, font_weight="800", color="white", font_size="20px"), @@ -777,12 +777,12 @@ def testimonial_card(name: str, role: str, text: str, initial: str, gradient: st rx.text(text, color="#CBD5E1", line_height="1.8", font_size="17px", font_weight="500"), padding="48px", background="linear-gradient(135deg, rgba(30, 30, 50, 0.95), rgba(20, 20, 40, 0.8))", - border="2px solid rgba(30, 64, 175, 0.25)", + border="2px solid rgba(27, 75, 127, 0.25)", border_radius="28px", align="start", min_height="320px", box_shadow="0 15px 50px rgba(0, 0, 0, 0.5)", - _hover={"transform": "translateY(-10px) scale(1.02)", "border": "2px solid #1e40af", "box_shadow": "0 25px 70px rgba(30, 64, 175, 0.5)"}, + _hover={"transform": "translateY(-10px) scale(1.02)", "border": "2px solid #1B4B7F", "box_shadow": "0 25px 70px rgba(27, 75, 127, 0.5)"}, transition="all 0.5s cubic-bezier(0.4, 0, 0.2, 1)", ) @@ -791,9 +791,9 @@ def testimonials_section() -> rx.Component: rx.vstack( rx.badge( "💬 نظرات مشتریان", - background="linear-gradient(135deg, rgba(30, 64, 175, 0.2), rgba(59, 130, 246, 0.2))", - border="2px solid rgba(30, 64, 175, 0.4)", - color="#1e40af", + background="linear-gradient(135deg, rgba(27, 75, 127, 0.2), rgba(77, 184, 196, 0.2))", + border="2px solid rgba(27, 75, 127, 0.4)", + color="#1B4B7F", font_weight="700", font_size="16px", padding="10px 24px", @@ -807,21 +807,21 @@ def testimonials_section() -> rx.Component: "مدیر فنی شرکت آریا", "سرویس عالی با پشتیبانی فوق‌العاده. مهاجرت سایتمان به VPS خیلی روان انجام شد. کاملا راضی هستیم.", "A", - "linear-gradient(135deg, #1e40af, #4F46E5)" + "linear-gradient(135deg, #1B4B7F, #4F46E5)" ), testimonial_card( "مریم حسینی", "مدیر محصول فروشگاه آنلاین", "هاست وردپرسمون خیلی سریع شد. تیم پشتیبانی هم خیلی دلسوز و حرفه‌ای هستند. پیشنهاد می‌کنم.", "M", - "linear-gradient(135deg, #3b82f6, #7C3AED)" + "linear-gradient(135deg, #4DB8C4, #7C3AED)" ), testimonial_card( "رضا کریمی", "توسعه‌دهنده نرم‌افزار", "خدمات DevOps و راه‌اندازی CI/CD عالی بود. تیم خیلی با تجربه و کارشناس هستند. ممنونم.", "R", - "linear-gradient(135deg, #06b6d4, #9333EA)" + "linear-gradient(135deg, #6DD7E5, #9333EA)" ), spacing="9", width="100%", @@ -840,9 +840,9 @@ def contact_section() -> rx.Component: rx.vstack( rx.badge( "📞 تماس با ما", - background="linear-gradient(135deg, rgba(59, 130, 246, 0.2), rgba(6, 182, 212, 0.2))", - border="2px solid rgba(59, 130, 246, 0.4)", - color="#3b82f6", + background="linear-gradient(135deg, rgba(77, 184, 196, 0.2), rgba(109, 215, 229, 0.2))", + border="2px solid rgba(77, 184, 196, 0.4)", + color="#4DB8C4", font_weight="700", font_size="16px", padding="10px 24px", @@ -861,12 +861,12 @@ def contact_section() -> rx.Component: width="100%", padding="18px", background="rgba(30, 30, 50, 0.8)", - border="2px solid rgba(30, 64, 175, 0.3)", + border="2px solid rgba(27, 75, 127, 0.3)", border_radius="14px", color="white", font_size="17px", font_weight="600", - _focus={"border": "2px solid #1e40af", "box_shadow": "0 0 0 3px rgba(30, 64, 175, 0.2)"}, + _focus={"border": "2px solid #1B4B7F", "box_shadow": "0 0 0 3px rgba(27, 75, 127, 0.2)"}, ), rx.input( placeholder="ایمیل", @@ -876,12 +876,12 @@ def contact_section() -> rx.Component: width="100%", padding="18px", background="rgba(30, 30, 50, 0.8)", - border="2px solid rgba(30, 64, 175, 0.3)", + border="2px solid rgba(27, 75, 127, 0.3)", border_radius="14px", color="white", font_size="17px", font_weight="600", - _focus={"border": "2px solid #1e40af", "box_shadow": "0 0 0 3px rgba(30, 64, 175, 0.2)"}, + _focus={"border": "2px solid #1B4B7F", "box_shadow": "0 0 0 3px rgba(27, 75, 127, 0.2)"}, ), rx.select( ["هاست وردپرس", "دامین", "سرور اختصاصی", "DevOps", "مشاوره", "سایر"], @@ -898,12 +898,12 @@ def contact_section() -> rx.Component: min_height="160px", padding="18px", background="rgba(30, 30, 50, 0.8)", - border="2px solid rgba(30, 64, 175, 0.3)", + border="2px solid rgba(27, 75, 127, 0.3)", border_radius="14px", color="white", font_size="17px", font_weight="600", - _focus={"border": "2px solid #1e40af", "box_shadow": "0 0 0 3px rgba(30, 64, 175, 0.2)"}, + _focus={"border": "2px solid #1B4B7F", "box_shadow": "0 0 0 3px rgba(27, 75, 127, 0.2)"}, ), rx.button( rx.hstack( @@ -915,11 +915,11 @@ def contact_section() -> rx.Component: type="submit", width="100%", padding="22px", - background="linear-gradient(135deg, #1e40af, #3b82f6)", + background="linear-gradient(135deg, #1B4B7F, #4DB8C4)", color="white", border_radius="16px", - box_shadow="0 12px 40px rgba(30, 64, 175, 0.6)", - _hover={"transform": "translateY(-4px)", "box_shadow": "0 18px 60px rgba(30, 64, 175, 0.8)"}, + box_shadow="0 12px 40px rgba(27, 75, 127, 0.6)", + _hover={"transform": "translateY(-4px)", "box_shadow": "0 18px 60px rgba(27, 75, 127, 0.8)"}, transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)", ), spacing="7", @@ -936,24 +936,24 @@ def contact_section() -> rx.Component: rx.icon("mail", size=44, color="white"), width="80px", height="80px", - background="linear-gradient(135deg, #1e40af, #4F46E5)", + background="linear-gradient(135deg, #1B4B7F, #4F46E5)", border_radius="20px", display="flex", align_items="center", justify_content="center", margin_bottom="24px", - box_shadow="0 12px 40px rgba(30, 64, 175, 0.6)", + box_shadow="0 12px 40px rgba(27, 75, 127, 0.6)", ), rx.heading("ایمیل", size="6", font_weight="800"), - rx.text("info@peikarband.ir", color="#3b82f6", font_size="18px", font_weight="700"), + rx.text("info@peikarband.ir", color="#4DB8C4", font_size="18px", font_weight="700"), rx.text("پاسخ در کمتر از ۲ ساعت", font_size="15px", color="#64748B", font_weight="600"), padding="40px", background="linear-gradient(135deg, rgba(30, 30, 50, 0.9), rgba(20, 20, 40, 0.7))", - border="2px solid rgba(30, 64, 175, 0.3)", + border="2px solid rgba(27, 75, 127, 0.3)", border_radius="24px", align="center", width="100%", - _hover={"border": "2px solid #1e40af", "transform": "translateY(-8px)", "box_shadow": "0 20px 60px rgba(30, 64, 175, 0.4)"}, + _hover={"border": "2px solid #1B4B7F", "transform": "translateY(-8px)", "box_shadow": "0 20px 60px rgba(27, 75, 127, 0.4)"}, transition="all 0.4s", ), rx.vstack( @@ -961,24 +961,24 @@ def contact_section() -> rx.Component: rx.icon("message-circle", size=44, color="white"), width="80px", height="80px", - background="linear-gradient(135deg, #3b82f6, #7C3AED)", + background="linear-gradient(135deg, #4DB8C4, #7C3AED)", border_radius="20px", display="flex", align_items="center", justify_content="center", margin_bottom="24px", - box_shadow="0 12px 40px rgba(59, 130, 246, 0.6)", + box_shadow="0 12px 40px rgba(77, 184, 196, 0.6)", ), rx.heading("تلگرام", size="6", font_weight="800"), - rx.text("@peikarband", color="#06b6d4", font_size="18px", font_weight="700"), + rx.text("@peikarband", color="#6DD7E5", font_size="18px", font_weight="700"), rx.text("پشتیبانی آنلاین", font_size="15px", color="#64748B", font_weight="600"), padding="40px", background="linear-gradient(135deg, rgba(30, 30, 50, 0.9), rgba(20, 20, 40, 0.7))", - border="2px solid rgba(59, 130, 246, 0.3)", + border="2px solid rgba(77, 184, 196, 0.3)", border_radius="24px", align="center", width="100%", - _hover={"border": "2px solid #3b82f6", "transform": "translateY(-8px)", "box_shadow": "0 20px 60px rgba(59, 130, 246, 0.4)"}, + _hover={"border": "2px solid #4DB8C4", "transform": "translateY(-8px)", "box_shadow": "0 20px 60px rgba(77, 184, 196, 0.4)"}, transition="all 0.4s", ), rx.vstack( @@ -986,24 +986,24 @@ def contact_section() -> rx.Component: rx.icon("phone", size=44, color="white"), width="80px", height="80px", - background="linear-gradient(135deg, #06b6d4, #9333EA)", + background="linear-gradient(135deg, #6DD7E5, #9333EA)", border_radius="20px", display="flex", align_items="center", justify_content="center", margin_bottom="24px", - box_shadow="0 12px 40px rgba(6, 182, 212, 0.6)", + box_shadow="0 12px 40px rgba(109, 215, 229, 0.6)", ), rx.heading("تلفن", size="6", font_weight="800"), - rx.text("۰۲۱-۱۲۳۴۵۶۷۸", color="#22d3ee", font_size="18px", font_weight="700"), + rx.text("۰۲۱-۱۲۳۴۵۶۷۸", color="#7CE3F2", font_size="18px", font_weight="700"), rx.text("شنبه تا پنجشنبه ۹-۱۸", font_size="15px", color="#64748B", font_weight="600"), padding="40px", background="linear-gradient(135deg, rgba(30, 30, 50, 0.9), rgba(20, 20, 40, 0.7))", - border="2px solid rgba(6, 182, 212, 0.3)", + border="2px solid rgba(109, 215, 229, 0.3)", border_radius="24px", align="center", width="100%", - _hover={"border": "2px solid #06b6d4", "transform": "translateY(-8px)", "box_shadow": "0 20px 60px rgba(6, 182, 212, 0.4)"}, + _hover={"border": "2px solid #6DD7E5", "transform": "translateY(-8px)", "box_shadow": "0 20px 60px rgba(109, 215, 229, 0.4)"}, transition="all 0.4s", ), spacing="7", @@ -1023,12 +1023,12 @@ def contact_section() -> rx.Component: def footer() -> rx.Component: return rx.box( rx.vstack( - rx.divider(background="rgba(30, 64, 175, 0.4)", margin_y="10"), + rx.divider(background="rgba(27, 75, 127, 0.4)", margin_y="10"), rx.hstack( rx.vstack( rx.hstack( - rx.icon("cloud", size=32, color="#3b82f6"), - rx.heading("پیکربند", size="7", color="#3b82f6", font_weight="900"), + rx.icon("cloud", size=32, color="#4DB8C4"), + rx.heading("پیکربند", size="7", color="#4DB8C4", font_weight="900"), spacing="3", ), rx.text( @@ -1049,13 +1049,13 @@ def footer() -> rx.Component: rx.icon("facebook", size=24), width="52px", height="52px", - background="rgba(30, 64, 175, 0.15)", - border="2px solid rgba(30, 64, 175, 0.4)", + background="rgba(27, 75, 127, 0.15)", + border="2px solid rgba(27, 75, 127, 0.4)", border_radius="14px", display="flex", align_items="center", justify_content="center", - _hover={"background": "#1e40af", "border": "2px solid #1e40af", "transform": "translateY(-5px) scale(1.1)"}, + _hover={"background": "#1B4B7F", "border": "2px solid #1B4B7F", "transform": "translateY(-5px) scale(1.1)"}, transition="all 0.3s cubic-bezier(0.4, 0, 0.2, 1)", ), href="#", @@ -1066,13 +1066,13 @@ def footer() -> rx.Component: rx.icon("twitter", size=24), width="52px", height="52px", - background="rgba(59, 130, 246, 0.15)", - border="2px solid rgba(59, 130, 246, 0.4)", + background="rgba(77, 184, 196, 0.15)", + border="2px solid rgba(77, 184, 196, 0.4)", border_radius="14px", display="flex", align_items="center", justify_content="center", - _hover={"background": "#3b82f6", "border": "2px solid #3b82f6", "transform": "translateY(-5px) scale(1.1)"}, + _hover={"background": "#4DB8C4", "border": "2px solid #4DB8C4", "transform": "translateY(-5px) scale(1.1)"}, transition="all 0.3s cubic-bezier(0.4, 0, 0.2, 1)", ), href="#", @@ -1083,13 +1083,13 @@ def footer() -> rx.Component: rx.icon("message-circle", size=24), width="52px", height="52px", - background="rgba(6, 182, 212, 0.15)", - border="2px solid rgba(6, 182, 212, 0.4)", + background="rgba(109, 215, 229, 0.15)", + border="2px solid rgba(109, 215, 229, 0.4)", border_radius="14px", display="flex", align_items="center", justify_content="center", - _hover={"background": "#06b6d4", "border": "2px solid #06b6d4", "transform": "translateY(-5px) scale(1.1)"}, + _hover={"background": "#6DD7E5", "border": "2px solid #6DD7E5", "transform": "translateY(-5px) scale(1.1)"}, transition="all 0.3s cubic-bezier(0.4, 0, 0.2, 1)", ), href="https://t.me/peikarband", @@ -1101,7 +1101,7 @@ def footer() -> rx.Component: align="center", padding_y="40px", ), - rx.divider(background="rgba(30, 64, 175, 0.3)", margin_y="8"), + rx.divider(background="rgba(27, 75, 127, 0.3)", margin_y="8"), rx.text( "© ۱۴۰۳ پیکربند. تمامی حقوق محفوظ است.", color="#64748B", @@ -1115,7 +1115,7 @@ def footer() -> rx.Component: ), width="100%", background="linear-gradient(180deg, rgba(10, 10, 26, 0.95) 0%, rgba(5, 5, 16, 1) 100%)", - border_top="2px solid rgba(30, 64, 175, 0.4)", + border_top="2px solid rgba(27, 75, 127, 0.4)", ) def floating_chat() -> rx.Component: @@ -1124,13 +1124,13 @@ def floating_chat() -> rx.Component: rx.icon("message-circle", size=40, color="white"), width="76px", height="76px", - background="linear-gradient(135deg, #1e40af, #3b82f6)", + background="linear-gradient(135deg, #1B4B7F, #4DB8C4)", border_radius="full", display="flex", align_items="center", justify_content="center", - box_shadow="0 18px 60px rgba(30, 64, 175, 0.7)", - _hover={"transform": "scale(1.2) rotate(10deg)", "box_shadow": "0 25px 80px rgba(30, 64, 175, 0.9)"}, + box_shadow="0 18px 60px rgba(27, 75, 127, 0.7)", + _hover={"transform": "scale(1.2) rotate(10deg)", "box_shadow": "0 25px 80px rgba(27, 75, 127, 0.9)"}, transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)", ), href="https://t.me/peikarband",