// Duyuf design tokens — Brand: ضيوف // Camel, Pastel Brown, Dark Charcoal — Alexandria typography. const DuyufTokens = { // Brand camel: '#C19872', camelDeep: '#A87F5A', camelSoft: '#E8D5C2', camelMist: '#F5EBE0', pastelBrown: '#7F6D5F', ink: '#1F1B17', inkSoft: '#3C342D', charcoal: '#333333', // Surfaces (warm) cream: '#FAF6F1', creamDeep: '#F2EBE2', white: '#FFFFFF', hairline: 'rgba(31,27,23,0.08)', hairlineStrong: 'rgba(31,27,23,0.14)', // Functional — derived strictly from brand palette (camel · pastel brown · charcoal) success: '#7F6D5F', // pastel brown — confirmed / verified warn: '#A87F5A', // camel deep — heads-up / limited seats danger: '#5C3D2E', // dark camel-charcoal blend — cancel / error info: '#7F6D5F', // pastel brown // Dark darkBg: '#15110D', darkSurface: '#1F1A15', darkSurfaceHi: '#2B241D', darkText: '#F2EBE2', darkMuted: 'rgba(242,235,226,0.6)', darkHairline: 'rgba(242,235,226,0.10)', // Radii rXs: 6, rSm: 10, rMd: 14, rLg: 20, rXl: 28, rFull: 999, // Shadows cardShadow: '0 1px 2px rgba(31,27,23,0.06), 0 8px 24px rgba(31,27,23,0.06)', heroShadow: '0 12px 32px rgba(127,109,95,0.18)', }; // Theme-aware palette function useDuyufTheme(t) { const T = DuyufTokens; const dark = t?.dark; return { ...T, isDark: !!dark, bg: dark ? T.darkBg : T.cream, surface: dark ? T.darkSurface : T.white, surfaceAlt: dark ? T.darkSurfaceHi : T.creamDeep, text: dark ? T.darkText : T.ink, textMuted: dark ? T.darkMuted : 'rgba(31,27,23,0.55)', textFaint: dark ? 'rgba(242,235,226,0.4)' : 'rgba(31,27,23,0.35)', hairline: dark ? T.darkHairline : T.hairline, primary: T.camel, primaryDeep: T.camelDeep, accent: T.pastelBrown, }; } // Localized strings (AR | EN | UR) const L = { ar: { appName: 'ضيوف', tagline: 'رحلة ميسّرة إلى بيت الله', welcome: 'أهلاً بضيوف الرحمن', onb1Title: 'باقاتٌ موثوقة', onb1Body: 'احجز عمرتك بالطائرة أو بالحافلة من مزودين موثوقين.', onb2Title: 'فندقٌ وطيران', onb2Body: 'فنادق قرب الحرمين وأفضل أسعار الرحلات.', onb3Title: 'مع تنقّلٍ مريح', onb3Body: 'احجز وسيلة التنقّل وتابع رحلتك برمز QR واحد.', skip: 'تخطّي', next: 'التالي', begin: 'لنبدأ', home: 'الرئيسية', explore: 'استكشف', trips: 'رحلاتي', wallet: 'المحفظة', me: 'حسابي', services: 'الخدمات', umrahFlight: 'عمرة بالطائرة', umrahBus: 'عمرة بالحافلة', flights: 'طيران', hotels: 'فنادق', transport: 'مواصلات', packages: 'باقات', forYou: 'مختارٌ لك', popularPackages: 'الأكثر طلباً', nearHaram: 'قرب الحرم', searchPh: 'ابحث عن وجهة، فندق، أو باقة…', from: 'من', to: 'إلى', depart: 'الذهاب', return_: 'العودة', travelers: 'المسافرون', nights: 'ليالٍ', persons: 'مسافر', search: 'بحث', book: 'احجز الآن', continue_: 'متابعة', confirm: 'تأكيد الحجز', seeAll: 'عرض الكل', from2: 'يبدأ من', perPerson: '/ للفرد', days: 'أيام', stars: 'نجوم', rating: 'تقييم', saved: 'المحفوظات', notifications: 'الإشعارات', referral: 'صديق يدعو صديقاً', promo: 'كود الخصم', mybookings: 'حجوزاتي', upcoming: 'القادمة', completed: 'منتهية', pay: 'ادفع', total: 'الإجمالي', sar: 'ر.س', qrTitle: 'رمز الحجز', qrSub: 'أظهر هذا الرمز عند تسجيل الدخول', bookingRef: 'رقم الحجز', addTraveler: 'إضافة مسافر', savedTravelers: 'مسافرون محفوظون', promoApplied: 'تم تطبيق الكود', wallet: 'المحفظة', balance: 'الرصيد المتاح', topup: 'إضافة رصيد', withdraw: 'سحب', transactions: 'المعاملات', recharged: 'شُحنت المحفظة', refund: 'استرداد', payment: 'دفع', profile: 'الملف الشخصي', settings: 'الإعدادات', language: 'اللغة', theme: 'المظهر', signOut: 'تسجيل الخروج', personalInfo: 'المعلومات الشخصية', paymentMethods: 'وسائل الدفع', help: 'مساعدة', about: 'حول التطبيق', // provider provider: 'لوحة المزوّد', revenue: 'الإيرادات', bookings: 'الحجوزات', scanner: 'الماسح', seats: 'المقاعد', newPackage: 'باقة جديدة', dashboard: 'الملخص', today: 'اليوم', week: 'الأسبوع', month: 'الشهر', confirmed: 'مؤكّد', pending: 'بالانتظار', cancelled: 'ملغى', step: 'خطوة', of: 'من', pkgBasics: 'البيانات الأساسية', pkgItin: 'البرنامج', pkgSeats: 'المقاعد والأسعار', pkgReview: 'مراجعة', pkgName: 'اسم الباقة', pkgType: 'نوع الرحلة', pkgDur: 'المدة', pkgDeparture: 'تاريخ المغادرة', save: 'حفظ', publish: 'نشر', back: 'رجوع', }, en: { appName: 'Duyuf', tagline: 'A guided journey to the holy sites', welcome: 'Welcome, guests of Allah', onb1Title: 'Trusted packages', onb1Body: 'Book Umrah by flight or bus with verified providers.', onb2Title: 'Hotels & flights', onb2Body: 'Stays near the Haram, fairly priced flights.', onb3Title: 'Move with ease', onb3Body: 'Reserve transport and follow your trip with one QR.', skip: 'Skip', next: 'Next', begin: 'Begin', home: 'Home', explore: 'Explore', trips: 'Trips', wallet: 'Wallet', me: 'Profile', services: 'Services', umrahFlight: 'Umrah · Flight', umrahBus: 'Umrah · Bus', flights: 'Flights', hotels: 'Hotels', transport: 'Transport', packages: 'Packages', forYou: 'Picked for you', popularPackages: 'Most booked', nearHaram: 'Near the Haram', searchPh: 'Search destinations, hotels, packages…', from: 'From', to: 'To', depart: 'Depart', return_: 'Return', travelers: 'Travelers', nights: 'nights', persons: 'guests', search: 'Search', book: 'Book now', continue_: 'Continue', confirm: 'Confirm booking', seeAll: 'See all', from2: 'from', perPerson: '/ person', days: 'days', stars: 'stars', rating: 'rating', saved: 'Saved', notifications: 'Notifications', referral: 'Refer & earn', promo: 'Promo code', mybookings: 'My bookings', upcoming: 'Upcoming', completed: 'Completed', pay: 'Pay', total: 'Total', sar: 'SAR', qrTitle: 'Boarding QR', qrSub: 'Show this code at check-in', bookingRef: 'Booking ref', addTraveler: 'Add traveler', savedTravelers: 'Saved travelers', promoApplied: 'Promo applied', balance: 'Available balance', topup: 'Top up', withdraw: 'Withdraw', transactions: 'Transactions', recharged: 'Top-up', refund: 'Refund', payment: 'Payment', profile: 'Profile', settings: 'Settings', language: 'Language', theme: 'Appearance', signOut: 'Sign out', personalInfo: 'Personal info', paymentMethods: 'Payment methods', help: 'Help', about: 'About', provider: 'Provider', revenue: 'Revenue', bookings: 'Bookings', scanner: 'Scanner', seats: 'Seats', newPackage: 'New package', dashboard: 'Dashboard', today: 'Today', week: 'This week', month: 'This month', confirmed: 'Confirmed', pending: 'Pending', cancelled: 'Cancelled', step: 'Step', of: 'of', pkgBasics: 'Basics', pkgItin: 'Itinerary', pkgSeats: 'Seats & pricing', pkgReview: 'Review', pkgName: 'Package name', pkgType: 'Trip type', pkgDur: 'Duration', pkgDeparture: 'Departure', save: 'Save', publish: 'Publish', back: 'Back', }, ur: { appName: 'ضیوف', tagline: 'حرمین کا آسان سفر', welcome: 'اللہ کے مہمانوں کو خوش آمدید', onb1Title: 'قابل اعتماد پیکیجز', onb1Body: 'تصدیق شدہ فراہم کنندگان کے ساتھ پرواز یا بس پر عمرہ بک کریں۔', onb2Title: 'ہوٹل اور پروازیں', onb2Body: 'حرم کے قریب رہائش، مناسب قیمت پر پروازیں۔', onb3Title: 'آسان سفر', onb3Body: 'ٹرانسپورٹ بک کریں اور ایک QR سے سفر کی پیروی کریں۔', skip: 'چھوڑیں', next: 'اگلا', begin: 'شروع کریں', home: 'ہوم', explore: 'دریافت', trips: 'سفر', wallet: 'والٹ', me: 'پروفائل', services: 'خدمات', umrahFlight: 'پرواز سے عمرہ', umrahBus: 'بس سے عمرہ', flights: 'پروازیں', hotels: 'ہوٹل', transport: 'ٹرانسپورٹ', packages: 'پیکیجز', forYou: 'آپ کے لیے', popularPackages: 'مقبول ترین', nearHaram: 'حرم کے قریب', searchPh: 'منزل، ہوٹل یا پیکیج تلاش کریں…', from: 'سے', to: 'تک', depart: 'روانگی', return_: 'واپسی', travelers: 'مسافر', nights: 'راتیں', persons: 'مسافر', search: 'تلاش', book: 'ابھی بک کریں', continue_: 'جاری رکھیں', confirm: 'بکنگ کی تصدیق', seeAll: 'سب دیکھیں', from2: 'سے شروع', perPerson: '/ فی شخص', days: 'دن', stars: 'ستارے', rating: 'درجہ بندی', saved: 'محفوظ', notifications: 'اطلاعات', referral: 'دوست کو دعوت دیں', promo: 'پرومو کوڈ', mybookings: 'میری بکنگز', upcoming: 'آنے والی', completed: 'مکمل', pay: 'ادا کریں', total: 'کل', sar: 'ر.س', qrTitle: 'بکنگ QR', qrSub: 'چیک ان پر یہ کوڈ دکھائیں', bookingRef: 'بکنگ نمبر', addTraveler: 'مسافر شامل کریں', savedTravelers: 'محفوظ مسافر', promoApplied: 'پرومو لاگو ہوا', balance: 'دستیاب بیلنس', topup: 'ٹاپ اپ', withdraw: 'نکالیں', transactions: 'لین دین', recharged: 'ٹاپ اپ', refund: 'واپسی', payment: 'ادائیگی', profile: 'پروفائل', settings: 'سیٹنگز', language: 'زبان', theme: 'تھیم', signOut: 'سائن آؤٹ', personalInfo: 'ذاتی معلومات', paymentMethods: 'ادائیگی کے طریقے', help: 'مدد', about: 'متعلق', provider: 'فراہم کنندہ', revenue: 'آمدنی', bookings: 'بکنگز', scanner: 'اسکینر', seats: 'سیٹیں', newPackage: 'نیا پیکیج', dashboard: 'ڈیش بورڈ', today: 'آج', week: 'اس ہفتے', month: 'اس مہینے', confirmed: 'تصدیق شدہ', pending: 'زیر التواء', cancelled: 'منسوخ', step: 'مرحلہ', of: 'از', pkgBasics: 'بنیادی', pkgItin: 'پروگرام', pkgSeats: 'سیٹیں اور قیمت', pkgReview: 'جائزہ', pkgName: 'پیکیج کا نام', pkgType: 'سفر کی قسم', pkgDur: 'مدت', pkgDeparture: 'روانگی', save: 'محفوظ کریں', publish: 'شائع کریں', back: 'واپس', }, }; const RTL_LANGS = new Set(['ar', 'ur']); const isRTL = (lang) => RTL_LANGS.has(lang); Object.assign(window, { DuyufTokens, useDuyufTheme, L, isRTL });