Ordenax landing website — initial release

This commit is contained in:
Ordenax Lead Engineer committed 2026-10-20 01:28:20 +03:00
commit f59f8503eb
10 files changed
+2469

No files matched your search

+724
View File
@@ -0,0 +1,724 @@
/* Ordenax landing — EN/AR i18n, scroll animations, mobile nav and forms. */
const STRINGS = {
en: {
// Nav
"nav.shoppers": "Shoppers",
"nav.stores": "Stores",
"nav.wholesale": "Wholesale",
"nav.contact": "Contact",
"nav.cta": "Get started",
"common.learnMore": "Learn more",
"common.seeHow": "See how it works",
"common.seePricing": "See pricing",
// Footer
"footer.tag": "Marketplace · POS · Wholesale — bilingual by construction.",
"footer.product": "Product",
"footer.company": "Company",
"footer.privacy": "Privacy",
"footer.terms": "Terms",
"footer.legal": "© 2026 Ordenax. Made in Saudi Arabia.",
// Home
"home.hero.eyebrow": "Saudi grocery platform",
"home.hero.title": "Groceries from your local stores, delivered.",
"home.hero.lede": "Shop, sell, and restock on one platform — in Arabic and English, online or offline.",
"home.hero.cta1": "Start shopping",
"home.hero.cta2": "Run your store",
"home.hero.badge1": "Bilingual EN / AR",
"home.hero.badge2": "Works without internet",
"home.hero.badge3": "SAR · VAT included",
"home.pillars.eyebrow": "One platform, three wins",
"home.pillars.title": "Built for every side of grocery",
"home.pillars.m.title": "Shop local",
"home.pillars.m.body": "Fresh groceries from nearby stores, same-day delivery, and stock you can actually trust.",
"home.pillars.p.title": "Sell smarter",
"home.pillars.p.body": "One simple POS for counter sales, app orders, and uninterrupted selling — even when the internet drops.",
"home.pillars.w.title": "Restock wholesale",
"home.pillars.w.body": "Refill shelves straight from suppliers with clear invoices, real-time catalogs, and no inventory traps.",
"home.how.eyebrow": "How it works",
"home.how.title": "From shelf to doorstep in three steps",
"home.how.s1.title": "Order",
"home.how.s1.body": "A shopper picks products from a nearby store — in English or Arabic.",
"home.how.s2.title": "Prepare",
"home.how.s2.body": "The store receives, packs and confirms the order on the Ordenax system.",
"home.how.s3.title": "Deliver",
"home.how.s3.body": "A delivery partner drops it at the door. The store keeps the payment directly.",
"home.stats.s1": "partner stores",
"home.stats.s2": "monthly orders",
"home.stats.s3": "average delivery",
"home.stats.s3suffix": " min",
"home.stats.s4": "languages",
"home.testimonials.eyebrow": "What partners say",
"home.testimonials.title": "Loved by stores. Trusted by shoppers.",
"home.testimonials.t1.body": "\"We doubled our weekly orders within two months. The system is simple and our customers love ordering in Arabic.\"",
"home.testimonials.t1.name": "Abdullah, Al-Salam Market",
"home.testimonials.t2.body": "\"I can shop from the same grocer I visit every week, but now it comes to my door. Same quality, less hassle.\"",
"home.testimonials.t2.name": "Noura, Riyadh",
"home.testimonials.t3.body": "\"Restocking used to take three phone calls. Now we order once and the invoice is ready before delivery.\"",
"home.testimonials.t3.name": "Fahad, Green Cart",
"home.cta.title": "Ready to shop, sell, or supply?",
"home.cta.lede": "Join the grocery platform built for the Kingdom.",
"home.cta.button": "Request a demo",
// Home — deeper content
"home.why.eyebrow": "Why Ordenax",
"home.why.title": "Grocery made simple for everyone.",
"home.why.lede": "We built Ordenax around one idea: your neighborhood store should be as easy to reach as a global app — and just as reliable.",
"home.shoppers.eyebrow": "For shoppers",
"home.shoppers.title": "Your weekly shop, done in minutes.",
"home.shoppers.lede": "No more crowded aisles, sold-out shelves, or wondering when your order will arrive.",
"home.shoppers.b1.title": "Shop stores you already trust",
"home.shoppers.b1.body": "Your favorite neighborhood grocer, bakery, and produce stand — all in one place.",
"home.shoppers.b2.title": "Get it fast",
"home.shoppers.b2.body": "Same-day delivery in as little as 25 minutes, because fresh shouldn't mean waiting.",
"home.shoppers.b3.title": "Never guess stock again",
"home.shoppers.b3.body": "If it's on the app, it's on the shelf. No substitutions you didn't ask for.",
"home.shoppers.b4.title": "Reorder in one tap",
"home.shoppers.b4.body": "Save your weekly basket and repeat it whenever life gets busy.",
"home.owners.eyebrow": "For store owners",
"home.owners.title": "Run your store, not your paperwork.",
"home.owners.lede": "Everything you need to sell more, stress less, and keep every riyal in your account.",
"home.owners.b1.title": "Keep every sale",
"home.owners.b1.body": "No commission. No withheld funds. Customer payments go straight to you.",
"home.owners.b2.title": "One screen, every channel",
"home.owners.b2.body": "Counter sales, app orders, and wholesale restocking — all flowing into one simple system.",
"home.owners.b3.title": "Sell even when offline",
"home.owners.b3.body": "The internet drops. Your sales don't. Everything syncs automatically once you're back online.",
"home.owners.b4.title": "Grow without the guesswork",
"home.owners.b4.body": "Real-time inventory, clear reports, and a direct line to nearby shoppers who want what you sell.",
// Shoppers
"shoppers.hero.eyebrow": "For shoppers",
"shoppers.hero.title": "Your neighborhood store, now in your pocket.",
"shoppers.hero.lede": "Order fresh groceries from trusted local stores and get same-day delivery — in Arabic or English.",
"shoppers.hero.cta": "Download the app",
"shoppers.benefits.eyebrow": "Why shop on Ordenax",
"shoppers.benefits.title": "Fresh, fast and familiar",
"shoppers.benefits.b1.title": "Same-day delivery",
"shoppers.benefits.b1.body": "Get your groceries in as little as 25 minutes from stores you already know.",
"shoppers.benefits.b2.title": "Real stock",
"shoppers.benefits.b2.body": "If it's on the app, it's on the shelf — no more canceled items after checkout.",
"shoppers.benefits.b3.title": "Bilingual by design",
"shoppers.benefits.b3.body": "Switch between Arabic and English anytime. Product names, search and checkout follow you.",
"shoppers.benefits.b4.title": "Support local",
"shoppers.benefits.b4.body": "Every order goes directly to a store in your community — your money stays in the neighborhood.",
"shoppers.benefits.b5.title": "Easy reorder",
"shoppers.benefits.b5.body": "Repeat your weekly list in one tap. Save favorites and scheduled baskets for busy days.",
"shoppers.benefits.b6.title": "Pay with confidence",
"shoppers.benefits.b6.body": "Choose cash on delivery or trusted local payment options. The store handles your payment directly.",
"shoppers.categories.eyebrow": "Everything you need",
"shoppers.categories.title": "From pantry to produce",
"shoppers.categories.lede": "Browse thousands of products across the categories your family uses every day.",
"shoppers.categories.l1": "Fresh fruit and vegetables",
"shoppers.categories.l2": "Dairy, eggs and chilled goods",
"shoppers.categories.l3": "Rice, oil, spices and staples",
"shoppers.categories.l4": "Household and personal care",
"shoppers.categories.l5": "Beverages, snacks and bakery",
"shoppers.faq.title": "Common questions",
"shoppers.faq.q1": "Who delivers my order?",
"shoppers.faq.a1": "Your chosen store prepares the order and a local delivery partner brings it to you. You can track the status in the app.",
"shoppers.faq.q2": "Can I pay with cash?",
"shoppers.faq.a2": "Yes. The store collects your payment directly — cash on delivery or local digital payments, whichever you prefer.",
"shoppers.faq.q3": "What if an item is out of stock?",
"shoppers.faq.a3": "Stores update availability in real time. If something changes, they will contact you to suggest a replacement or refund.",
"shoppers.cta.title": "Your first order is waiting",
"shoppers.cta.lede": "Download the app and shop the stores you already trust.",
"shoppers.cta.button": "Get the app",
// Stores
"stores.hero.eyebrow": "For store owners",
"stores.hero.title": "Turn your counter into a modern grocery business.",
"stores.hero.lede": "Get more orders, simplify daily work, and keep every payment in your own hands.",
"stores.hero.cta": "Request a demo",
"stores.benefits.eyebrow": "Why stores choose Ordenax",
"stores.benefits.title": "Everything you need to grow",
"stores.benefits.b1.title": "More orders",
"stores.benefits.b1.body": "Reach nearby shoppers through the app and turn your store into a local online brand.",
"stores.benefits.b2.title": "Your money, your account",
"stores.benefits.b2.body": "You collect customer payments directly. We never hold your funds or take a slice of every sale.",
"stores.benefits.b3.title": "One simple screen",
"stores.benefits.b3.body": "Counter sales and app orders flow into one place — no switching between apps and notebooks.",
"stores.benefits.b4.title": "Works without internet",
"stores.benefits.b4.body": "Keep ringing sales even when the connection drops. Everything syncs automatically once you're back online.",
"stores.benefits.b5.title": "Bilingual for your team",
"stores.benefits.b5.body": "Your staff can use Arabic or English — labels, receipts, and reports switch instantly.",
"stores.benefits.b6.title": "Restock in minutes",
"stores.benefits.b6.body": "Order wholesale supplies straight from the app, with clear invoices and predictable delivery.",
"stores.pricing.eyebrow": "Pricing",
"stores.pricing.title": "Simple subscriptions, no hidden cuts",
"stores.pricing.lede": "No marketplace commission. Just pick the POS plan that fits your store.",
"stores.pricing.period": "/month",
"stores.pricing.badge": "Most popular",
"stores.pricing.p1.title": "Starter",
"stores.pricing.p1.f1": "1 store location",
"stores.pricing.p1.f2": "Counter POS",
"stores.pricing.p1.f3": "Basic reports",
"stores.pricing.p1.f4": "Email support",
"stores.pricing.p2.title": "Growth",
"stores.pricing.p2.f1": "Up to 3 staff devices",
"stores.pricing.p2.f2": "Counter + app orders",
"stores.pricing.p2.f3": "Live inventory",
"stores.pricing.p2.f4": "Priority support",
"stores.pricing.p3.title": "Enterprise",
"stores.pricing.p3.f1": "Multiple branches",
"stores.pricing.p3.f2": "Advanced analytics",
"stores.pricing.p3.f3": "Wholesale integrations",
"stores.pricing.p3.f4": "Dedicated account manager",
"stores.pricing.cta": "Choose plan",
"stores.testimonials.eyebrow": "Store stories",
"stores.testimonials.title": "Built for Saudi stores",
"stores.testimonials.t1.body": "\"We used to write every order by hand. Now we manage counter, app and wholesale orders in one place.\"",
"stores.testimonials.t1.name": "Khalid, Al-Andalus Market",
"stores.testimonials.t2.body": "\"The bilingual interface made training our staff effortless. Sales kept flowing even during network issues.\"",
"stores.testimonials.t2.name": "Sara, Fresh Corner",
"stores.testimonials.t3.body": "\"Our customers pay us directly, and the subscription is predictable. No surprises at the end of the month.\"",
"stores.testimonials.t3.name": "Omar, Daily Mart",
"stores.cta.title": "Ready to upgrade your store?",
"stores.cta.lede": "Book a 15-minute demo and see how Ordenax fits your counter.",
"stores.cta.button": "Book a demo",
// Wholesale
"wholesale.hero.eyebrow": "For suppliers and distributors",
"wholesale.hero.title": "Supply the stores that feed the Kingdom.",
"wholesale.hero.lede": "A digital wholesale channel that connects your products to neighborhood stores across Saudi Arabia.",
"wholesale.hero.cta": "Become a supplier",
"wholesale.hero.cta2": "For stores",
"wholesale.suppliers.eyebrow": "Why suppliers partner with us",
"wholesale.suppliers.title": "Reach more stores with less overhead",
"wholesale.suppliers.b1.title": "Ready store network",
"wholesale.suppliers.b1.body": "Access hundreds of active grocery stores already ordering through Ordenax.",
"wholesale.suppliers.b2.title": "Demand insights",
"wholesale.suppliers.b2.body": "See what stores are buying, when they restock, and which products move fastest.",
"wholesale.suppliers.b3.title": "Reliable logistics",
"wholesale.suppliers.b3.body": "Coordinate deliveries through your own fleet or our trusted logistics partners.",
"wholesale.suppliers.b4.title": "Clear invoices",
"wholesale.suppliers.b4.body": "Every order generates an invoice with correct VAT breakdown and payment status.",
"wholesale.suppliers.b5.title": "Digital catalog",
"wholesale.suppliers.b5.body": "Publish SKUs, photos and prices once. Stores see updates in real time.",
"wholesale.suppliers.b6.title": "Local support",
"wholesale.suppliers.b6.body": "Work with a Saudi-based team that understands retail, seasons and supply cycles.",
"wholesale.stores.eyebrow": "For stores",
"wholesale.stores.title": "Restock without the runaround",
"wholesale.stores.lede": "Find what you need, compare suppliers, and keep your shelves full — all from one screen.",
"wholesale.stores.f1": "Wide catalog of groceries, household and chilled goods",
"wholesale.stores.f2": "Competitive wholesale prices updated daily",
"wholesale.stores.f3": "Predictable delivery windows you can plan around",
"wholesale.stores.f4": "One invoice per order with clear VAT",
"wholesale.stores.cta": "See store plans",
"wholesale.stores.panel.eyebrow": "How wholesale works",
"wholesale.stores.panel.l1": "Browse catalog",
"wholesale.stores.panel.v1": "1",
"wholesale.stores.panel.l2": "Place order",
"wholesale.stores.panel.v2": "2",
"wholesale.stores.panel.l3": "Receive delivery",
"wholesale.stores.panel.v3": "3",
"wholesale.stores.panel.l4": "Pay invoice",
"wholesale.stores.panel.v4": "4",
"wholesale.faq.title": "Wholesale questions",
"wholesale.faq.q1": "Who can become a supplier?",
"wholesale.faq.a1": "Licensed distributors, manufacturers and importers of food, beverages, household or personal-care products in Saudi Arabia.",
"wholesale.faq.q2": "How do stores pay?",
"wholesale.faq.a2": "Stores pay against the supplier's invoice through agreed payment terms — bank transfer, credit or cash on delivery.",
"wholesale.faq.q3": "Do I need to list my whole catalog?",
"wholesale.faq.a3": "No. Start with your best-moving items and expand as you see demand from the network.",
"wholesale.cta.title": "Grow your wholesale reach",
"wholesale.cta.lede": "Talk to our partnerships team and see how Ordenax fits your distribution business.",
"wholesale.cta.button": "Talk to sales",
// Contact
"contact.hero.eyebrow": "Contact",
"contact.hero.title": "Let's talk grocery.",
"contact.hero.lede": "Request a demo, become a partner store, or join our supplier network.",
"contact.form.eyebrow": "Get in touch",
"contact.form.title": "Send us a message",
"contact.form.lede": "Fill in the form and our team will reply within one business day.",
"contact.form.nameLabel": "Name",
"contact.form.namePlaceholder": "Your name",
"contact.form.emailLabel": "Email",
"contact.form.emailPlaceholder": "you@example.com",
"contact.form.phoneLabel": "Phone",
"contact.form.phonePlaceholder": "+966 50 000 0000",
"contact.form.interestLabel": "I'm interested in",
"contact.form.interest.default": "Select an option",
"contact.form.interest.store": "Running my store on Ordenax",
"contact.form.interest.shopper": "Shopping as a consumer",
"contact.form.interest.supplier": "Supplying products wholesale",
"contact.form.interest.other": "Something else",
"contact.form.messageLabel": "Message",
"contact.form.messagePlaceholder": "Tell us about your business",
"contact.form.submit": "Send message",
"contact.form.success": "Thank you — we'll be in touch soon.",
"contact.form.invalidEmail": "Please enter a valid email address.",
"contact.form.required": "Please fill in all required fields.",
"contact.info.office.title": "Headquarters",
"contact.info.office.body": "Riyadh, Kingdom of Saudi Arabia",
"contact.info.email.title": "Email",
"contact.info.phone.title": "Phone",
"contact.info.hours.title": "Business hours",
"contact.info.hours.body": "Sunday to Thursday, 9:00 AM – 6:00 PM KSA",
"contact.cta.title": "Prefer to talk now?",
"contact.cta.lede": "Call us during business hours or request a callback.",
"contact.cta.button": "Call +966 9200 123 45",
},
ar: {
"nav.shoppers": "المتسوّقون",
"nav.stores": "المتاجر",
"nav.wholesale": "الجملة",
"nav.contact": "تواصل",
"nav.cta": "ابدأ الآن",
"common.learnMore": "اعرف المزيد",
"common.seeHow": "كيف تعمل",
"common.seePricing": "الأسعار",
"footer.tag": "السوق · نقاط البيع · الجملة — ثنائية اللغة من الأساس.",
"footer.product": "المنتج",
"footer.company": "الشركة",
"footer.privacy": "الخصوصية",
"footer.terms": "الشروط",
"footer.legal": "© 2026 أورديناكس. صُنع في المملكة العربية السعودية.",
"home.hero.eyebrow": "منصة بقالة سعودية",
"home.hero.title": "بقالتك من متاجر حيّك، حتى باب البيت.",
"home.hero.lede": "تسوّق، بيع، ووردّد المخزون على منصة واحدة — بالعربية والإنجليزية، متصل أو غير متصل.",
"home.hero.cta1": "ابدأ التسوّق",
"home.hero.cta2": "أدِر متجرك",
"home.hero.badge1": "ثنائية اللغة EN / AR",
"home.hero.badge2": "تعمل دون اتصال",
"home.hero.badge3": "ريال سعودي · الضريبة مشمولة",
"home.trust.label": "ثقة متاجر الأحياء في",
"home.pillars.eyebrow": "منصة واحدة، ثلاثة مكاسب",
"home.pillars.title": "مبنية لكل جانب من البقالة",
"home.pillars.m.title": "تسوّق محليًا",
"home.pillars.m.body": "بقالة طازجة من متاجر قريبة، توصيل في نفس اليوم، ومخزون يمكنك الوثوق به فعلًا.",
"home.pillars.p.title": "بيع بذكاء",
"home.pillars.p.body": "نقطة بيع واحدة تجمع مبيعات الكاشير والطلبات الإلكترونية — تستمر حتى عند انقطاع الإنترنت.",
"home.pillars.w.title": "أعِد التخزين بالجملة",
"home.pillars.w.body": "أعِد ملء الرفوف مباشرة من المورّدين، بفواتير واضحة، كتالوجات لحظية، وبدون تعقيدات المخزون.",
"home.how.eyebrow": "كيف تعمل",
"home.how.title": "من الرف إلى باب البيت في ثلاث خطوات",
"home.how.s1.title": "اطلب",
"home.how.s1.body": "يختار المتسوّق منتجات من متجر قريب — بالعربية أو الإنجليزية.",
"home.how.s2.title": "جهّز",
"home.how.s2.body": "يتلقّى المتجر الطلب ويغلّفه ويؤكّده عبر نظام أورديناكس.",
"home.how.s3.title": "وصّل",
"home.how.s3.body": "يوصل شريك التوصيل الطلب إلى الباب، ويحتفظ المتجر بالمدفوعات مباشرة.",
"home.stats.s1": "متجر شريك",
"home.stats.s2": "طلب شهريًا",
"home.stats.s3": "متوسط التوصيل",
"home.stats.s3suffix": " دقيقة",
"home.stats.s4": "لغات",
"home.testimonials.eyebrow": "ماذا يقول الشركاء",
"home.testimonials.title": "يحبّه المتاجر. ويثق به المتسوّقون.",
"home.testimonials.t1.body": "\"ضاعفنا طلباتنا الأسبوعية في شهرين. النظام بسيط وعملاؤنا يحبّون الطلب بالعربية.\"",
"home.testimonials.t1.name": "عبدالله، سوق السلام",
"home.testimonials.t2.body": "\"أستطيع التسوّق من نفس البقال الذي أزوره كل أسبوع، لكن الآن يصل إلى باب بيتي. نفس الجودة، أقل جهد.\"",
"home.testimonials.t2.name": "نورة، الرياض",
"home.testimonials.t3.body": "\"كان إعادة التخزين يتطلّب ثلاث مكالمات هاتفية. الآن نطلب مرة واحدة والفاتورة جاهزة قبل التوصيل.\"",
"home.testimonials.t3.name": "فهد، العربة الخضراء",
"home.cta.title": "جاهز للتسوّق، البيع، أو التوريد؟",
"home.cta.lede": "انضم إلى منصة البقالة المصممة للمملكة.",
"home.cta.button": "اطلب عرضًا",
// Home — deeper content
"home.why.eyebrow": "لمَ أورديناكس",
"home.why.title": "البقالة أصبحت سهلة للجميع.",
"home.why.lede": "بنينا أورديناكس على فكرة واحدة: متجر حيك يجب أن يكون سهل الوصول كأي تطبيق عالمي — وموثوق مثله.",
"home.shoppers.eyebrow": "للمتسوّقين",
"home.shoppers.title": "تسوّقك الأسبوعي، ينتهي في دقائق.",
"home.shoppers.lede": "لا ممرات مزدحمة، لا رفوف فارغة، ولا تساؤل عن موعد وصول طلبك.",
"home.shoppers.b1.title": "تسوّق من متاجر تثق بها",
"home.shoppers.b1.body": "بقالتك المفضلة، المخبوزات، ومحل الخضروات — كلها في مكان واحد.",
"home.shoppers.b2.title": "احصل عليها بسرعة",
"home.shoppers.b2.body": "توصيل في نفس اليوم خلال 25 دقيقة، لأن الطازج لا يجب أن يعني الانتظار.",
"home.shoppers.b3.title": "لا تخمّن المخزون بعد الآن",
"home.shoppers.b3.body": "إذا كان المنتج في التطبيق فهو على الرف. لا بدائل لم تطلبها.",
"home.shoppers.b4.title": "أعِد الطلب بنقرة واحدة",
"home.shoppers.b4.body": "احفظ سلتك الأسبوعية وكرّرها كلما ازدحم الوقت.",
"home.owners.eyebrow": "لأصحاب المتاجر",
"home.owners.title": "أدِر متجرك، لا أوراقك.",
"home.owners.lede": "كل ما تحتاجه لبيع المزيد، والتوتر الأقل، والحفاظ على كل ريال في حسابك.",
"home.owners.b1.title": "احتفظ بكل بيعة",
"home.owners.b1.body": "لا عمولة. لا أموال محجوزة. مدفوعات العملاء تصل إليك مباشرة.",
"home.owners.b2.title": "شاشة واحدة، كل القنوات",
"home.owners.b2.body": "مبيعات الكاشير، طلبات التطبيق، وإعادة التخزين بالجملة — كلها في نظام واحد بسيط.",
"home.owners.b3.title": "بيع حتى دون اتصال",
"home.owners.b3.body": "الإنترنت ينقطع. المبيعات لا. كل شيء يتزامن تلقائيًا بمجرد عودة الاتصال.",
"home.owners.b4.title": "نمُ دون تخمين",
"home.owners.b4.body": "مخزون لحظي، تقارير واضحة، وخط مباشر مع المتسوّقين القريبين الذين يريدون ما تبيعه.",
"shoppers.hero.eyebrow": "للمتسوّقين",
"shoppers.hero.title": "متجر حيك، الآن في جيبك.",
"shoppers.hero.lede": "اطلب البقالة الطازجة من متاجر محلية موثوقة واحصل على توصيل في نفس اليوم — بالعربية أو الإنجليزية.",
"shoppers.hero.cta": "حمّل التطبيق",
"shoppers.benefits.eyebrow": "لمَ التسوّق عبر أورديناكس",
"shoppers.benefits.title": "طازج، سريع ومألوف",
"shoppers.benefits.b1.title": "توصيل في نفس اليوم",
"shoppers.benefits.b1.body": "احصل على بقالتك في 25 دقيقة فقط من المتاجر التي تعرفها.",
"shoppers.benefits.b2.title": "مخزون حقيقي",
"shoppers.benefits.b2.body": "إذا كان المنتج في التطبيق فهو على الرف — لا مزيد من إلغاء العناصر بعد الدفع.",
"shoppers.benefits.b3.title": "ثنائي اللغة من الأساس",
"shoppers.benefits.b3.body": "بدّل بين العربية والإنجليزية في أي وقت. أسماء المنتجات والبحث والدفع يتبعانك.",
"shoppers.benefits.b4.title": "ادعم المحلي",
"shoppers.benefits.b4.body": "كل طلب يذهب مباشرة إلى متجر في مجتمعك — مالك يبقى في الحي.",
"shoppers.benefits.b5.title": "إعادة الطلب بسهولة",
"shoppers.benefits.b5.body": "كرّر قائمتك الأسبوعية بنقرة واحدة. احفظ المفضلات والسلال المجدولة للأيام المزدحمة.",
"shoppers.benefits.b6.title": "ادفع بثقة",
"shoppers.benefits.b6.body": "اختر الدفع عند الاستلام أو خيارات دفع محلية موثوقة. المتجر يتولّى الدفع مباشرة.",
"shoppers.categories.eyebrow": "كل ما تحتاجه",
"shoppers.categories.title": "من المخزن إلى الخضروات",
"shoppers.categories.lede": "تصفّح آلاف المنتجات في الفئات التي تستخدمها عائلتك يوميًا.",
"shoppers.categories.l1": "فاكهة وخضروات طازجة",
"shoppers.categories.l2": "ألبان، بيض ومنتجات مبردة",
"shoppers.categories.l3": "أرز، زيت، بهارات ومواد أساسية",
"shoppers.categories.l4": "منتجات المنزل والعناية الشخصية",
"shoppers.categories.l5": "مشروبات، خفائف ومخبوزات",
"shoppers.faq.title": "أسئلة شائعة",
"shoppers.faq.q1": "من يوصّل طلبي؟",
"shoppers.faq.a1": "المتجر الذي اخترته يجهّز الطلب وشريك توصيل محلي يأتيك به. يمكنك تتبّع الحالة في التطبيق.",
"shoppers.faq.q2": "هل يمكن الدفع نقدًا؟",
"shoppers.faq.a2": "نعم. يحصّل المتجر المدفوعات مباشرة — الدفع عند الاستلام أو الدفع الرقمي المحلي، حسب رغبتك.",
"shoppers.faq.q3": "ماذا إذا نفذ المنتج من المخزون؟",
"shoppers.faq.a3": "تُحدّث المتاجر التوفر لحظيًا. إذا تغيّر شيء، سيتواصلون معك لاقتراح بديل أو استرداد.",
"shoppers.cta.title": "طلبك الأول بانتظارك",
"shoppers.cta.lede": "حمّل التطبيق وتسوّق من المتاجر التي تثق بها.",
"shoppers.cta.button": "احصل على التطبيق",
"stores.hero.eyebrow": "لأصحاب المتاجر",
"stores.hero.title": "حوّل كاشيرك إلى أعمال بقالة عصرية.",
"stores.hero.lede": "احصل على مزيد من الطلبات، بسّط العمل اليومي، وابقَ المدفوعات في يدك.",
"stores.hero.cta": "اطلب عرضًا",
"stores.benefits.eyebrow": "لمَ تختار المتاجر أورديناكس",
"stores.benefits.title": "كل ما تحتاجه للنمو",
"stores.benefits.b1.title": "مزيد من الطلبات",
"stores.benefits.b1.body": "وصل إلى المتسوّقين القريبين عبر التطبيق وحوّل متجرك إلى علامة محلية إلكترونية.",
"stores.benefits.b2.title": "مالك، حسابك",
"stores.benefits.b2.body": "تحصّل مدفوعات العملاء مباشرة. لا نحتفظ بأموالك ولا نأخذ نسبة من كل بيعة.",
"stores.benefits.b3.title": "شاشة واحدة بسيطة",
"stores.benefits.b3.body": "تتدفق مبيعات الكاشير وطلبات التطبيق في مكان واحد — لا حاجة للتنقل بين التطبيقات والدفاتر.",
"stores.benefits.b4.title": "تعمل دون اتصال",
"stores.benefits.b4.body": "واصل البيع حتى عند انقطاع الاتصال. كل شيء يتزامن تلقائيًا بمجرد عودة الاتصال.",
"stores.benefits.b5.title": "ثنائية اللغة لفريقك",
"stores.benefits.b5.body": "يمكن لموظفيك استخدام العربية أو الإنجليزية — الملصقات والفواتير والتقارير تتبدّل فورًا.",
"stores.benefits.b6.title": "أعِد التخزين في دقائق",
"stores.benefits.b6.body": "اطلب مستلزمات الجملة مباشرة من التطبيق، بفواتير واضحة وتوصيل متوقع.",
"stores.pricing.eyebrow": "الأسعار",
"stores.pricing.title": "اشتراكات بسيطة، بدون عمولات خفية",
"stores.pricing.lede": "لا توجد عمولة سوق. اختر خطة نقاط البيع التي تناسب متجرك.",
"stores.pricing.period": "/شهر",
"stores.pricing.badge": "الأكثر شيوعًا",
"stores.pricing.p1.title": "البداية",
"stores.pricing.p1.f1": "موقع متجر واحد",
"stores.pricing.p1.f2": "نقطة بيع للكاشير",
"stores.pricing.p1.f3": "تقارير أساسية",
"stores.pricing.p1.f4": "دعم عبر البريد",
"stores.pricing.p2.title": "النمو",
"stores.pricing.p2.f1": "حتى 3 أجهزة موظفين",
"stores.pricing.p2.f2": "كاشير + طلبات التطبيق",
"stores.pricing.p2.f3": "مخزون مباشر",
"stores.pricing.p2.f4": "دعم أولوي",
"stores.pricing.p3.title": "المؤسسات",
"stores.pricing.p3.f1": "فروع متعددة",
"stores.pricing.p3.f2": "تحليلات متقدمة",
"stores.pricing.p3.f3": "تكاملات الجملة",
"stores.pricing.p3.f4": "مدير حساب مخصص",
"stores.pricing.cta": "اختر الخطة",
"stores.testimonials.eyebrow": "قصص المتاجر",
"stores.testimonials.title": "مبنية للمتاجر السعودية",
"stores.testimonials.t1.body": "\"كنّا نكتب كل طلب يدويًا. الآن ندير طلبات الكاشير والتطبيق والجملة في مكان واحد.\"",
"stores.testimonials.t1.name": "خالد، سوق الأندلس",
"stores.testimonials.t2.body": "\"الواجهة الثنائية اللغة جعلت تدريب موظفينا سهلًا. المبيعات استمرت حتى أثناء مشاكل الشبكة.\"",
"stores.testimonials.t2.name": "سارة، فريش كورنر",
"stores.testimonials.t3.body": "\"عملاؤنا يدفعون لنا مباشرة، والاشتراك متوقع. لا مفاجآت في نهاية الشهر.\"",
"stores.testimonials.t3.name": "عمر، دايلي مارت",
"stores.cta.title": "جاهز لترقية متجرك؟",
"stores.cta.lede": "احجز عرضًا مدته 15 دقيقة وشاهد كيف تناسب أورديناكس كاشيرك.",
"stores.cta.button": "احجز عرضًا",
"wholesale.hero.eyebrow": "للمورّدين والموزعين",
"wholesale.hero.title": "زوّد المتاجر التي تغذّي المملكة.",
"wholesale.hero.lede": "قناة جملة رقمية تربط منتجاتك بمتاجر الأحياء في جميع أنحاء المملكة العربية السعودية.",
"wholesale.hero.cta": "كن مورّدًا",
"wholesale.hero.cta2": "للمتاجر",
"wholesale.suppliers.eyebrow": "لمَ يتعاون المورّدون معنا",
"wholesale.suppliers.title": "وصل إلى مزيد من المتاجر بتكاليف أقل",
"wholesale.suppliers.b1.title": "شبكة متاجر جاهزة",
"wholesale.suppliers.b1.body": "وصول إلى مئات المتاجر النشطة التي تطلب بالفعل عبر أورديناكس.",
"wholesale.suppliers.b2.title": "رؤى الطلب",
"wholesale.suppliers.b2.body": "اعرف ما تشتريه المتاجر، ومتى تعيد التخزين، والمنتجات الأسرع مبيعًا.",
"wholesale.suppliers.b3.title": "خدمات لوجستية موثوقة",
"wholesale.suppliers.b3.body": "نسّق التوصيلات عبر أسطولك الخاص أو شركائنا اللوجستيين الموثوقين.",
"wholesale.suppliers.b4.title": "فواتير واضحة",
"wholesale.suppliers.b4.body": "يولّد كل طلب فاتورة بتوضيح الضريبة وحالة الدفع.",
"wholesale.suppliers.b5.title": "كتالوج رقمي",
"wholesale.suppliers.b5.body": "انشر الأصناف والصور والأسعار مرة واحدة. ترى المتاجر التحديثات لحظيًا.",
"wholesale.suppliers.b6.title": "دعم محلي",
"wholesale.suppliers.b6.body": "اعمل مع فريق سعودي يفهم التجزئة والمواسم ودورات التوريد.",
"wholesale.stores.eyebrow": "للمتاجر",
"wholesale.stores.title": "أعِد التخزين دون عناء",
"wholesale.stores.lede": "اعثر على ما تحتاجه، قارن بين المورّدين، وابقَ رفوفك ممتلئة — كل ذلك من شاشة واحدة.",
"wholesale.stores.f1": "كتالوج واسع من البقالة والمنزل والمنتجات المبردة",
"wholesale.stores.f2": "أسعار جملة تنافسية تُحدّث يوميًا",
"wholesale.stores.f3": "نوافذ توصيل متوقعة يمكنك التخطيط حولها",
"wholesale.stores.f4": "فاتورة واحدة لكل طلب بضريبة واضحة",
"wholesale.stores.cta": "انظر خطط المتاجر",
"wholesale.stores.panel.eyebrow": "كيف تعمل الجملة",
"wholesale.stores.panel.l1": "تصفّح الكتالوج",
"wholesale.stores.panel.v1": "1",
"wholesale.stores.panel.l2": "قدّم الطلب",
"wholesale.stores.panel.v2": "2",
"wholesale.stores.panel.l3": "استلم التوصيل",
"wholesale.stores.panel.v3": "3",
"wholesale.stores.panel.l4": "ادفع الفاتورة",
"wholesale.stores.panel.v4": "4",
"wholesale.faq.title": "أسئلة الجملة",
"wholesale.faq.q1": "من يمكنه أن يصبح مورّدًا؟",
"wholesale.faq.a1": "موزّعون ومصنّعون ومستوردون مرخّصون لمنتجات غذائية أو مشروبات أو منزلية أو عناية شخصية في المملكة العربية السعودية.",
"wholesale.faq.q2": "كيف تدفع المتاجر؟",
"wholesale.faq.a2": "تدفع المتاجر بناءً على فاتورة المورّد وفق شروط دفع متفق عليها — تحويل بنكي أو ائتمان أو دفع عند الاستلام.",
"wholesale.faq.q3": "هل عليّ إدراج كامل كتالوجي؟",
"wholesale.faq.a3": "لا. ابدأ بأكثر منتجاتك مبيعًا ووسّع مع رؤية الطلب من الشبكة.",
"wholesale.cta.title": "وسّع نطاق جملتك",
"wholesale.cta.lede": "تحدث إلى فريق الشراكات وشاهد كيف تناسب أورديناكس أعمال التوزيع لديك.",
"wholesale.cta.button": "تحدث إلى المبيعات",
"contact.hero.eyebrow": "تواصل",
"contact.hero.title": "لنتحدث عن البقالة.",
"contact.hero.lede": "اطلب عرضًا، كن متجرًا شريكًا، أو انضم إلى شبكة مورّدينا.",
"contact.form.eyebrow": "تواصل معنا",
"contact.form.title": "أرسل لنا رسالة",
"contact.form.lede": "املأ النموذج وسيردّ فريقنا خلال يوم عمل واحد.",
"contact.form.nameLabel": "الاسم",
"contact.form.namePlaceholder": "اسمك",
"contact.form.emailLabel": "البريد الإلكتروني",
"contact.form.emailPlaceholder": "you@example.com",
"contact.form.phoneLabel": "الهاتف",
"contact.form.phonePlaceholder": "+966 50 000 0000",
"contact.form.interestLabel": "أنا مهتم بـ",
"contact.form.interest.default": "اختر خيارًا",
"contact.form.interest.store": "تشغيل متجري على أورديناكس",
"contact.form.interest.shopper": "التسوّق كمستهلك",
"contact.form.interest.supplier": "توريد منتجات بالجملة",
"contact.form.interest.other": "شيء آخر",
"contact.form.messageLabel": "الرسالة",
"contact.form.messagePlaceholder": "أخبرنا عن عملك",
"contact.form.submit": "إرسال الرسالة",
"contact.form.success": "شكرًا لك — سنتواصل معك قريبًا.",
"contact.form.invalidEmail": "يرجى إدخال بريد إلكتروني صحيح.",
"contact.form.required": "يرجى ملء جميع الحقول المطلوبة.",
"contact.info.office.title": "المقر الرئيسي",
"contact.info.office.body": "الرياض، المملكة العربية السعودية",
"contact.info.email.title": "البريد الإلكتروني",
"contact.info.phone.title": "الهاتف",
"contact.info.hours.title": "ساعات العمل",
"contact.info.hours.body": "من الأحد إلى الخميس، 9:00 ص – 6:00 م بتوقيت السعودية",
"contact.cta.title": "تفضّل التحدث الآن؟",
"contact.cta.lede": "اتصل بنا خلال ساعات العمل أو اطلب معاودة الاتصال.",
"contact.cta.button": "اتصل +966 9200 123 45",
},
};
const TITLES = {
home: { en: "Ordenax — Groceries from your local stores, delivered", ar: "أورديناكس — بقالتك من متاجر حيّك، حتى باب البيت" },
shoppers: { en: "For shoppers — Ordenax", ar: "للمتسوّقين — أورديناكس" },
stores: { en: "For stores — Ordenax", ar: "للمتاجر — أورديناكس" },
wholesale: { en: "Wholesale supply — Ordenax", ar: "التوريد بالجملة — أورديناكس" },
contact: { en: "Contact — Ordenax", ar: "تواصل — أورديناكس" },
};
const html = document.documentElement;
const body = document.body;
const toggle = document.getElementById("lang-toggle");
const header = document.querySelector(".site-header");
const menuToggle = document.querySelector(".menu-toggle");
const mobileNav = document.getElementById("mobile-nav");
const page = body.dataset.page || "home";
function applyLang(lang) {
const dict = STRINGS[lang];
html.lang = lang;
html.dir = lang === "ar" ? "rtl" : "ltr";
document.title = (TITLES[page] && TITLES[page][lang]) || TITLES.home[lang];
document.querySelectorAll("[data-i18n]").forEach((el) => {
const key = el.getAttribute("data-i18n");
if (dict[key] !== undefined) el.textContent = dict[key];
});
document.querySelectorAll("[data-i18n-placeholder]").forEach((el) => {
const key = el.getAttribute("data-i18n-placeholder");
if (dict[key] !== undefined) el.setAttribute("placeholder", dict[key]);
});
toggle.textContent = lang === "ar" ? "English" : "العربية";
localStorage.setItem("ordenax-lang", lang);
}
let lang = localStorage.getItem("ordenax-lang") || "en";
applyLang(lang);
function refreshHeroReveal() {
if (!heroTitle || page !== "home") return;
heroTitle.classList.remove("text-reveal");
const text = heroTitle.textContent;
heroTitle.innerHTML = text
.split(/(\s+)/)
.map((word, i) => (word.trim() ? `<span class="word" style="animation-delay: ${0.25 + i * 0.08}s">${word}</span>` : word))
.join("");
heroTitle.classList.add("text-reveal");
}
toggle.addEventListener("click", () => {
body.classList.add("is-switching-lang");
setTimeout(() => {
lang = html.lang === "ar" ? "en" : "ar";
applyLang(lang);
refreshHeroReveal();
body.classList.remove("is-switching-lang");
}, 120);
});
/* Current page nav highlight */
document.querySelectorAll('.nav a[href], .mobile-nav a[href]').forEach((a) => {
const href = a.getAttribute("href").replace('.html', '');
if (href === page || (page === 'home' && href === 'index')) {
a.setAttribute("aria-current", "page");
}
});
/* Mobile nav */
function closeMobileNav() {
mobileNav.classList.remove("is-open");
menuToggle.setAttribute("aria-expanded", "false");
mobileNav.setAttribute("aria-hidden", "true");
body.style.overflow = "";
}
menuToggle.addEventListener("click", () => {
const open = !mobileNav.classList.contains("is-open");
if (open) {
mobileNav.classList.add("is-open");
menuToggle.setAttribute("aria-expanded", "true");
mobileNav.setAttribute("aria-hidden", "false");
body.style.overflow = "hidden";
} else {
closeMobileNav();
}
});
mobileNav.querySelectorAll("a").forEach((a) => a.addEventListener("click", closeMobileNav));
/* Header show/hide on scroll */
let lastScrollY = 0;
let ticking = false;
function onScroll() {
const y = window.scrollY;
if (y > 20) header.classList.add("is-scrolled");
else header.classList.remove("is-scrolled");
if (y > lastScrollY && y > 120) header.classList.add("is-hidden");
else header.classList.remove("is-hidden");
lastScrollY = y;
ticking = false;
}
window.addEventListener("scroll", () => {
if (!ticking) { window.requestAnimationFrame(onScroll); ticking = true; }
}, { passive: true });
/* Hero entrance */
document.querySelectorAll(".hero").forEach((hero) => {
hero.classList.add("is-ready");
});
/* Scroll reveal */
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add("is-visible");
if (entry.target.dataset.animate === "stat") animateCounter(entry.target);
observer.unobserve(entry.target);
}
});
}, { threshold: 0.15, rootMargin: "0px 0px -40px 0px" });
document.querySelectorAll('[data-animate="card"], [data-animate="step"], [data-animate="fade"], [data-animate="stat"]').forEach((el) => {
observer.observe(el);
});
/* Stagger cards within grids */
document.querySelectorAll(".grid").forEach((grid) => {
grid.querySelectorAll(".reveal").forEach((el, i) => {
el.style.transitionDelay = `${i * 80}ms`;
});
});
/* Counter animation */
function animateCounter(stat) {
const numEl = stat.querySelector(".stat-number");
const target = parseInt(numEl.dataset.target, 10);
if (Number.isNaN(target)) return;
let start = 0;
const duration = 1600;
const startTime = performance.now();
function step(now) {
const progress = Math.min((now - startTime) / duration, 1);
const ease = 1 - Math.pow(1 - progress, 3);
numEl.textContent = Math.floor(start + (target - start) * ease).toString();
if (progress < 1) requestAnimationFrame(step);
}
requestAnimationFrame(step);
}
/* Contact form */
const contactForm = document.getElementById("contact-form");
if (contactForm) {
const note = document.getElementById("form-note");
contactForm.addEventListener("submit", (event) => {
event.preventDefault();
const dict = STRINGS[html.lang];
const email = contactForm.email.value.trim();
const name = contactForm.name.value.trim();
const interest = contactForm.interest.value;
if (!name || !email || !interest) {
note.textContent = dict["contact.form.required"];
return;
}
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
note.textContent = dict["contact.form.invalidEmail"];
contactForm.email.focus();
return;
}
note.textContent = dict["contact.form.success"];
contactForm.reset();
});
}
/* Parallax scroll */
const parallaxElements = document.querySelectorAll("[data-parallax]");
if (parallaxElements.length && !window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
let parallaxTicking = false;
function updateParallax() {
const y = window.scrollY;
parallaxElements.forEach((el) => {
const speed = parseFloat(el.dataset.parallax) || 0.1;
const offset = y * speed;
el.style.transform = `translate3d(0, ${offset}px, 0)`;
});
parallaxTicking = false;
}
window.addEventListener("scroll", () => {
if (!parallaxTicking) {
window.requestAnimationFrame(updateParallax);
parallaxTicking = true;
}
}, { passive: true });
}
/* Hero word-by-word reveal on home */
const heroTitle = document.querySelector(".hero-apple .hero-title");
refreshHeroReveal();