/* Resort Car Care — Salla Raed shared shell v9. Home uses 01-home.html only; internal pages use this injected shell. */ (() => { 'use strict'; document.documentElement.classList.add('resort-custom-booting'); const cleanPath = () => (location.pathname || '/').replace(/\/+$/, '') || '/'; const isHome = () => cleanPath() === '/'; const isCheckoutFlow = () => /\/(checkout|payment|thank-you|order-success)(?:\/|$)/i.test(cleanPath()); const PPF_CATEGORY_PATH = '/ppf-car-protection/c1864076076'; const SHELL = "
\n
\n
\n \n \n\n \n
\n \n \"شعار\n \n
\n\n \n
\n
\n \n \n \n
\n\n \n\n
\n \n \n
\n
\n
\n
\n\n \n \n \n \n
\n
\n
\n
\n \n \n واتساب\n \n\n \n \n\n\n
"; function dedupeCustomRoots() { const roots = [...document.querySelectorAll('#resort-salla-landing')]; if (roots.length > 1) roots.slice(1).forEach(node => node.remove()); return roots[0] || null; } function markReady(root) { if (!root) return; document.documentElement.classList.add('resort-shared-active','resort-custom-header-ready','resort-custom-footer-ready'); document.body?.classList.add('resort-shared-active','resort-custom-header-ready','resort-custom-footer-ready'); root.dataset.resortMounted = '1'; } function mountInternal() { if (isHome() || isCheckoutFlow()) { const root = dedupeCustomRoots(); if (root) markReady(root); return; } const existing = dedupeCustomRoots(); if (existing) { markReady(existing); return; } const nativeMain = document.querySelector('main#main-content, main'); if (!nativeMain || !document.body) { setTimeout(mountInternal, 80); return; } const holder = document.createElement('div'); holder.innerHTML = SHELL; const root = holder.firstElementChild; if (!root) return; nativeMain.parentNode.insertBefore(root, nativeMain); const nativeSlot = root.querySelector('#resortNativeContent'); if (nativeSlot) nativeSlot.appendChild(nativeMain); // move, never clone: Salla bindings stay on the same nodes. markReady(root); } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', mountInternal, { once:true }); else mountInternal(); })(); /* انسخ المحتوى كاملًا في خانة JavaScript المخصص في سلة (دون وسوم script) */ (() => { 'use strict'; let bootTries = 0; function bootResortSalla() { const root = document.querySelector('#resort-salla-landing'); if (!root) { if (bootTries++ < 120) setTimeout(bootResortSalla, 250); return; } if (root.dataset.resortBundleReady === '1') return; root.dataset.resortBundleReady = '1'; /* 1. إعدادات المتجر والروابط المعتمدة */ window.RESORT_CONFIG = Object.freeze({ storeBase: 'https://resort.sa', loyaltyUrl: 'https://resortcarcare.com/loyalty/', warrantyUrl: 'https://resort-warranty-registration.vercel.app/', ppfAdditionalUrl: 'https://resort.sa/?resort_page=extra-protection', phone: '0565317009', phoneIntl: '+966565317009', whatsapp: 'https://wa.me/966565317009', email: 'resortcarcare@gmail.com', reviewUrl: 'https://g.page/r/Cfm5bqOJwVGdEAE/review', directionsUrl: 'https://www.google.com/maps/dir/?api=1&destination=21.494621%2C39.3500506&travelmode=driving', maps: 'https://maps.app.goo.gl/X23AMbgy5irykHfM9', discountCode: 'AA', showAllArchivePayments: false }); /* 2. قاموس الترجمة المدمج لدعم العربية والإنجليزية */ window.RESORT_TRANSLATIONS = Object.freeze(Object.assign({"1200 ر س": "1200 SAR", "1600 ر س": "1600 SAR", "5 من 5 نجوم": "5 out of 5 stars", "600 ر س": "600 SAR", "800 ر س": "800 SAR", "آراء العملاء": "Customer reviews", "أكمل الطلب في سلة": "Complete your order in Salla", "أن تصبح ريزورت كار كير علامة سعودية متكاملة في حماية السيارات والعناية بها، تقود تطوير أفلام حماية الطلاء PPF المصممة لأجواء المملكة واحتياجات مستخدميها": "To become a fully integrated Saudi car protection and care brand, leading the development of PPF designed for the Kingdom's climate and drivers' needs", "إتمام الدفع لا يعني توفر موعد فوري أو إمكانية تسليم السيارة مباشرة دون حجز مسبق،": "Payment does not guarantee an immediate appointment or vehicle drop-off without prior coordination", "إجابة سريعة ورابط السياسة": "A clear answer and a link to the full policy", "إرسال": "Send", "إرسال السؤال": "Send question", "إغلاق القائمة": "Close menu", "إغلاق مستشار العناية": "Close the Care Advisor", "إكسسوارات العناية": "Care accessories", "إكسسوارات العناية بالسيارات": "Car care accessories", "إكسسوارات العناية بالسيارات | ريزورت كار كير": "Car Care Accessories | Resort Car Care", "إلى ريزورت": "to Resort", "إمكان": "Emkan", "ابدأ الاتجاهات": "Get directions", "ابدأ الاستشارة": "Start a consultation", "ابدأ باحتياجك أو اسأل مستشار العناية": "Start with your needs or ask the Care Advisor", "ابدأ رحلتك": "Start your journey", "اختر البداية": "Find the right starting point", "اختر الخدمة": "Choose a service", "اختر العناية المناسبة لسيارتك وراجع تفاصيل الباقة داخل المتجر": "Choose the care your car needs and review the package details in the store", "اختر حجم السيارة ونطاق الخدمة المناسب": "Select your vehicle size and the scope of service", "اختيار الخدمة، الشراء، والمعلومات": "Service guidance, purchasing and information", "اسأل المستشار": "Ask the advisor", "اسأل عن الموقع": "Ask about our location", "اسأل عن خدمة، الشراء أو الضمان": "Ask about a service, purchase or warranty", "اسأل مستشار العناية": "Ask the Care Advisor", "اسأل مستشار العناية عن الخدمات والشراء والسياسات، واستكشف موقع ريزورت على الخريطة": "Ask the Care Advisor about services, purchasing and policies, and find Resort on the interactive map", "استعرض الخيارات": "Explore options", "استعرض تفاصيل الخدمة ثم اختر الباقة وفئة السيارة داخل المتجر": "Review the service, then choose your package and vehicle category in the store", "استكشف أفلام الحماية": "Explore protection films", "استكشف الخدمة": "Explore this service", "استكشف خدمات ريزورت": "Explore Resort services", "استكشف خدماتنا": "Explore our services", "استكشف موقع المركز على الخريطة، وابدأ الاتجاهات من موقعك إلى الوجهة المعتمدة في جدة": "Explore the centre on the map and start directions from your location to our verified address in Jeddah", "افتح الموقع على Google Maps": "Open in Google Maps", "اقرأ سياسة الضمان": "Read the warranty policy", "اكتب تقييمك": "Write a review", "اكتب سؤالك للمستشار": "Type your question for the advisor", "الأنسب لسيارتك": "for your car", "الاستبدال والاسترجاع": "Returns and exchanges", "الاستبدال والاسترجاع | ريزورت كار كير": "Returns and Exchanges | Resort Car Care", "الاستثمار": "Investment", "الاستخدام والخصوصية": "Terms and privacy", "الاستخدام والخصوصية | ريزورت كار كير": "Terms and Privacy | Resort Car Care", "الامتياز التجاري": "Franchising", "الامتياز والشراكات والاستثمار": "Franchising, Partnerships and Investment", "الامتياز والشراكات والاستثمار | ريزورت كار كير": "Franchising, Partnerships and Investment | Resort Car Care", "الباقات": "Packages", "الباقات والخيارات": "Packages and options", "الباقة المناسبة": "The right package", "التحويل البنكي": "Bank transfer", "التصنيع السعودي الكامل هو هدفنا المستقبلي، ونسعى لبناء المعرفة والكفاءات والشراكات اللازمة لتحقيقه": "Complete Saudi manufacturing is our future goal, and we are building the expertise, capabilities and partnerships needed to achieve it", "التطوير المستمر": "Continuous development", "التعرف على احتياجك": "Understanding your needs", "التغطية والشروط والتسجيل": "Coverage, terms and registration", "التفاصيل الصغيرة": "The small details", "التقييمات": "Reviews", "التلميع الساطع": "Bright Polishing", "التلميع الساطع الخارجي": "Exterior Bright Polishing", "التلميع الساطع الداخلي": "Interior Bright Polishing", "التلميع الساطع الداخلي والخارجي": "Interior and Exterior Bright Polishing", "التلميع الساطع مناسب لاستعادة النظافة واللمعان وتحسين مظهر البهتان والتشهيب السطحي تعتمد النتيجة على حالة الطلاء، ويحدد الفحص الخدمة المناسبة قبل البدء، خصوصًا للدهان المتضرر أو المعاد رشه": "Bright Polishing helps restore cleanliness and shine and improve superficial dullness; results depend on paint condition, so inspection comes first, especially for damaged or repainted panels", "التلميع المائي": "Wet Polishing", "التلميع المائي مناسب للسيارات التي تحتاج تجديد النظافة واللمعة وتحسين آثار الاستخدام اليومية نبدأ بفحص الدهان وحالة السطح لتحديد الخدمة الأنسب للسيارة": "Wet Polishing is for cars that need renewed cleanliness and shine and care for everyday wear; we inspect the paint and surface before recommending suitable treatment", "الحماية PPF": "PPF Protection", "الخدمات": "Services", "الخدمة": "Service", "الخريطة التفاعلية لموقع ريزورت كار كير": "Interactive map of Resort Car Care", "الدقة في العناية": "Precision in care", "الرئيسية": "Home", "الرقم الضريبي": "VAT number", "الزجاج الأمامي غير مشمول في باقات حماية البودي": "Windshield protection is not included in body PPF packages", "السجل التجاري": "Commercial registration", "السعر الحالي": "Current price", "السعر بحسب الباقة وفئة السيارة قد يشمل أقل سعر خيار خدمة جزئية أو تركيب فقط؛ راجع التفاصيل والسعر النهائي داخل المتجر": "Prices depend on package and vehicle category; the lowest price may cover a partial service or installation only, so review the final details in the store", "السعر قبل التخفيض": "Price before discount", "السعر والتوفر النهائيان يؤكدان في متجر ريزورت عند إتمام الطلب": "Final price and availability are confirmed at checkout in the Resort store", "السياسات": "Policies", "الشراء": "Purchasing", "الشراء عبر متجر ريزورت": "Shop through the Resort store", "الشراكات": "Partnerships", "الشكاوى والاقتراحات": "Complaints and suggestions", "الشكاوى والاقتراحات | ريزورت كار كير": "Complaints and Suggestions | Resort Car Care", "الضمان": "Warranty", "العازل الحراري": "Window Tint", "العناية تظهر": "Care shows", "الفاتورة والاستمارة": "Invoice and vehicle registration", "الموقع": "Location", "الموقع والاتجاهات": "Location and directions", "النانو سيراميك": "Nano Ceramic", "الولاء": "Loyalty", "انتعاش يبان": "A fresh look you can see", "باب الاستثمار والشراكات مفتوح الآن للمساهمة في تحقيق هذا الطموح": "We are welcoming investor and partnership interest now to help achieve this ambition", "باحتياجنا ومن أجوائنا": "inspired by our needs and climate", "باقات الحماية الإضافية": "Additional protection packages", "باقات الحماية الإضافية | ريزورت كار كير": "Additional Protection Packages | Resort Car Care", "باقات المركز": "Our packages", "بدء الاستشارة من جديد": "Restart the consultation", "برنامج الولاء": "Loyalty programme", "بسيارتك": "your car", "بعد": "After", "تابعنا على": "Follow us", "تابي": "Tabby", "تجديد المظهر": "Refresh the appearance", "تجربتي الأولى مع المغسلة وكانت صراحةً ممتازة جدًا، والمغسلة نظيفة ومرتبة 👌🏻 وأحب أشكر الموظف محمد بشير على تعامله الحلو وابتسامته الدائمة، ما شاء الله عليه": "My first visit was excellent; the car wash is clean and organised 👌🏻 Special thanks to Mohammed Bashir for his lovely manner and constant smile", "تجربتي مع المغسلة اولا: جودة عالية في المواد بسعر منخفض مقارنه بالمغاسل الأخرى ثانياً: صاحب المغسلة شاب سعودي وواقف على شغله بنفسه": "My experience: high-quality materials at a lower price than other car washes, and the owner is a young Saudi who personally oversees the work", "تحسين النظافة واللمعة وتقليل مظهر البهتان والتشهيب الخفيف": "Improve cleanliness and shine and reduce the appearance of light dullness", "تحسين مظهر الطلاء وإعادة الحيوية للون السيارة": "Refresh the paint and bring its colour to life", "تحسين مظهر الطلاء واللمعة وتقليل آثار البهتان والتشهيب السطحي وفق حالة السيارة": "Improve paint appearance and shine and reduce superficial dullness according to condition", "تحقق من نقاطك": "Check your points", "تحقق من نقاطك ومكافآتك": "Check your points and rewards", "تركيب الحماية": "Install the protection", "تركيب الحماية فقط": "Protection installation only", "تركيب فقط": "Installation only", "تفاصيل الخدمات والمنتجات": "Service and product details", "تفاصيل المنتج والتوفر وإتمام الشراء عبر المتجر": "Product details, availability and checkout in the store", "تقدم الاستشارة": "Consultation progress", "تقدم مستشار العناية": "Care Advisor progress", "تقليل التصاق الأوساخ وتسهيل الغسيل والتنظيف الدوري": "Reduce dirt adhesion and make routine washing easier", "تقييمات العملاء": "Customer reviews", "تقييمات العملاء | ريزورت كار كير": "Customer Reviews | Resort Car Care", "تكمل عنايتك": "complete your care", "تلميع مائي خارجي فقط": "Exterior Wet Polishing", "تلميع مائي خارجي و داخلي": "Interior and Exterior Wet Polishing", "تليق بسيارتك بجودة فاخرة واحترافية": "for your car, with premium care and professional workmanship", "تمارا": "Tamara", "تنظيف وتجديد المقصورة ضمن الباقة الداخلية والخارجية": "Interior cleaning and refresh with the interior and exterior package", "تنظيف وتجديد المقصورة مع تحسين مظهر البودي الخارجي وإعادة اللمعة والانتعاش للسيارة": "Refresh the cabin and improve the exterior's appearance and shine", "تنظيف وتجديد المقصورة والعناية بالمقاعد والطبلون والكونسول والتفاصيل": "Refresh the cabin, including seats, dashboard, console and details", "تنظيف وتجديد المقصورة، بما يشمل المقاعد والطبلون والكونسول والأبواب والتفاصيل الداخلية": "Clean and refresh the cabin, including seats, dashboard, console, doors and interior details", "تواصل مباشر مع ريزورت عبر واتساب": "Contact Resort directly on WhatsApp", "توجّه للمتجر": "Visit the store", "توطين المعرفة والتصنيع": "Local expertise and manufacturing", "جدة": "Jeddah", "جدّد حضورها": "Renew its presence", "جميع الحقوق محفوظة © 2026 ريزورت كار كير": "All rights reserved © 2026 Resort Car Care", "حافظ على طلائها": "Preserve the paint", "حجم السيارة": "Vehicle size", "حدد سيارتك وباقتك": "Select your car and package", "حرارة مرتفعة وتعرض مستمر للشمس وغبار واستخدام يومي متنوع، هذه الظروف هي نقطة البداية لطموحنا في تطوير حماية تتناسب مع البيئة السعودية": "High heat, prolonged sunshine, dust and varied daily use are the starting point for our ambition to develop protection suited to Saudi conditions", "حقوقك وقواعد استخدام المتجر": "Your rights and the store's terms of use", "حماية إضافية": "Additional protection", "حماية الزجاج الأمامي خدمة منفصلة، ولا تدخل ضمن تغطية باقات PPF للبودي": "Windshield protection is a separate service and is not part of body PPF packages", "حماية الشمعات الأمامية PPF": "Headlight PPF Protection", "حماية تحافظ على المظهر الأصلي": "Protection that preserves the original look", "حماية شفافة للأجزاء الأكثر تعرضًا للخدوش وآثار الطريق اختر التغطية التي تناسب سيارتك، من الربع إلى كامل البودي": "Clear film for areas exposed to scratches and road debris; choose from quarter coverage to full-body protection", "حماية مقابض وأطراف الأبواب PPF": "Door Handle and Edge PPF Protection", "خارجي فقط": "Exterior only", "خدمات ريزورت": "Resort services", "خفف إحساس حرارة الشمس داخل المقصورة، واختر مظهر الزجاج المناسب لسيارتك مع تركيب احترافي ونظيف": "Reduce the feeling of solar heat in the cabin and choose suitable window styling with careful, clean installation", "خيارات للتلميع الداخلي والخارجي وتحسين مظهر الطلاء والمقصورة، حسب احتياج سيارتك وحالة الدهان": "Interior and exterior polishing options to improve paint and cabin appearance according to your car's needs and paint condition", "داخلي وخارجي": "Interior and exterior", "درع حماية الزجاج الأمامي": "Windshield Protection", "ر س": "SAR", "رؤية ريزورت كار كير ورسالتها وهدفها": "Resort Car Care's vision, mission and goal", "رؤيتنا": "Our vision", "راجع الخيارات والسعر ثم أتمم الدفع": "Review the options and price, then complete payment", "راحة تبدأ": "Comfort starts", "ربع السيارة": "Quarter coverage", "رحلة اختيار وشراء وتنفيذ الخدمة": "Choosing, purchasing and receiving your service", "رسالتنا": "Our mission", "رقم الجوال": "Mobile number", "رقم الطلب أو الفاتورة، إن وجد": "Order or invoice number, if available", "روابط مهمة": "Useful links", "ريزورت": "Resort", "ريزورت كار كير": "Resort Car Care", "ريزورت كار كير علامة سعودية متخصصة في العناية بالسيارات وحلول حماية الطلاء والعزل الحراري، تنطلق من فهم احتياج العميل السعودي وطبيعة أجوائنا": "Resort Car Care is a Saudi brand specialising in car care, paint protection and window tint, built around the needs of Saudi drivers and our climate", "ريزورت كار كير — الرئيسية": "Resort Car Care — Home", "سجّل اهتمامك": "Register your interest", "سجّل ضمانك": "Register Warranty", "سياسة الاسترجاع": "Returns policy", "سياسة الخصوصية": "Privacy policy", "سياسة الضمان": "Warranty policy", "شاركنا اهتمامك": "Share your interest", "شراكات تبني المستقبل": "Partnerships for the future", "شعار ريزورت كار كير": "Resort Car Care logo", "صغيرة": "Small", "صور الأجزاء المحمية": "Photos of protected parts", "طبقة حماية شفافة تعزز عمق اللون ونعومة الطلاء، وتساعد على طرد المياه وتقليل التصاق الأوساخ": "A clear coating that enhances colour depth and surface smoothness and helps repel water and reduce dirt adhesion", "طبقة حماية شفافة للشمعات الأمامية، تساعد على تقليل آثار الخدوش السطحية والعوامل اليومية مع المحافظة على مظهرها": "Clear headlight film that helps reduce surface scratches and everyday wear while preserving appearance", "طرد الماء": "Water repellency", "طموحنا سعودي": "Our ambition is Saudi", "عادل محمد المطيري": "Adel Mohammed Al-Mutairi", "عبدالله الحربي": "Abdullah Al-Harbi", "عبدالمحسن الجامعي": "Abdulmohsen Al-Jami", "عن ريزورت كار كير": "About Resort Car Care", "عناية أسهل": "Easier care", "عناية بالتفاصيل": "Attention to detail", "عناية بالتنظيف والتجديد وتحسين اللمعة، بخيار خارجي أو داخلي وخارجي، وفق حالة السيارة والباقة المختارة": "Cleaning, renewal and improved shine, with exterior or interior and exterior options according to vehicle condition and package", "عناية بالداخلية": "Interior care", "عناية براحتك داخل المقصورة": "for your comfort in the cabin", "عناية تليق": "Care worthy of", "عناية على قدّ احتياجك": "Care for your needs", "عناية متكاملة": "Complete care", "عناية نثق بها": "Care you can trust", "فتح مستشار العناية": "Open the Care Advisor", "فرشة تنظيف الجنوط – يد مريحة وشعيرات كثيفة": "Wheel Cleaning Brush — Comfortable Grip and Dense Bristles", "فهم تحديات الحرارة والشمس والغبار في بيئتنا، وتحويلها إلى متطلبات تطوير واختبار واضحة، وبناء المعرفة والكفاءات والشراكات التي تسهم في توطين مواد الحماية وتصنيعها": "Understand our heat, sunshine and dust exposure, turn those needs into clear development and testing requirements, and build the expertise and partnerships needed to localise protection materials and manufacturing", "في": "At", "في التجربة": "through experience", "في كل خطوة": "at every step", "فيزا": "Visa", "قبل إتمام طلبك": "Before you place your order", "قبل التخفيض": "Before discount", "قسيمة بلس": "Qasima Plus", "قفاز غسيل سيارات مايكروفايبر – رمادي": "Microfibre Car Wash Mitt — Grey", "قنوات الدفع والتقسيط": "Payments and instalments", "كار كير": "Car Care", "كامل السيارة": "Full-body coverage", "كبيرة": "Large", "كرتون شفرات مشرط FD-13A – 9 مم × 0.4 مم - 100 شفرة": "FD-13A Snap-off Blades — 9 mm × 0.4 mm, 100 Blades", "كرتون شفرات مشرط FD-14 – 9 مم × 0.4 مم - 100 شفرة": "FD-14 Snap-off Blades — 9 mm × 0.4 mm, 100 Blades", "كل التقييمات": "All reviews", "كل عناية": "Every detail of care", "للشكاوى والاقتراحات": "Complaints and suggestions", "لمعان أعمق وحماية إضافية": "Deeper shine and extra care", "لمعان يلفت النظر": "A shine that stands out", "لها تفاصيلها": "has its details", "م": "M", "ماستركارد": "Mastercard", "ماشاء الله ممتازين في الغسيل ودبل واكس بالسعر العادي غير المغاسل الباقيه لمعت عندهم خارجي منتجات اصليه واشكر عمر من قسم التلميع بشوش وحبيب": "Excellent washing and double wax at the regular price; I also had exterior polishing with genuine products; special thanks to Omar from polishing for his friendly service", "ماشاءالله تبارك الله غسيلهم ممتاز والتمسيح فنان وسعرهم بعد بطل انصح تجونهم مغسل دبل واكس ٢٥ ريال والله يرزقه يارب ويباركله": "Excellent washing and drying at a great price; I recommend them; my double-wax wash was 25 SAR, wishing the owner every success", "محادثة مستشار العناية": "Care Advisor conversation", "محمد الغامدي": "Mohammed Al-Ghamdi", "مختارات من تجارب عملاء ريزورت كار كير": "Selected experiences from Resort Car Care customers", "مدفوع": "Madfu", "مدى": "Mada", "مستشار العناية": "Care Advisor", "مستشار ريزورت كار كير": "Resort Car Care Advisor", "مشرط LC 390N للعناية وحماية السيارات": "LC-390N Car Care and Protection Cutter", "معلومات واضحة": "Clear information", "مغسلة تستحق الف نجمة وليس خمسة نجوم للامانه ما اغسل الا عندهم والعمالة محترفين وبدون ما اتكلم يغسلون جميع الاماكن اللي ماتخطر على بال احد ومهتمين في ادق التفاصيل بالغسيل": "This car wash deserves a thousand stars, not five; I only wash here; professional staff clean every area without being asked and take care of the smallest details", "من افضل المغاسل عندي في حي الحرزات اشكرهم على شغلهم الجبار أجيهم في الأسبوع مرتين صراحة شغلهم مبدع وكويس": "One of my favourite car washes in Al-Harazat; excellent work, I visit twice a week and they always do a great job", "من الخام إلى الفيلم": "From raw material to film", "من المواد والخامات": "From raw materials", "من النظافة إلى الحماية": "From clean to protected", "من النظافة إلى الحماية خدمات متكاملة وتفاصيل تصنع الفرق في كل مرة": "From cleaning to protection, complete services and careful details that make a difference every time", "من النظافة إلى الحماية،": "From cleaning to protection,", "من زجاج سيارتك": "with your windows", "من نحن": "About us", "منتجات مختارة للغسيل والتنظيف والتجفيف وأعمال التركيب، مع تفاصيل المنتج والشراء عبر متجر ريزورت": "Selected products for washing, cleaning, drying and installation, with product details and checkout in the Resort store", "منشفة مايكروفايبر بوجهين ومقاس 40×60 سم، مخصصة لتنظيف الزجاج والمرايا": "Double-sided 40×60 cm microfibre towel for cleaning glass and mirrors", "منشفة مايكروفايبر بوجهين ومقاس 50×60 سم، لأعمال التنظيف والتجفيف والتشطيب": "Double-sided 50×60 cm microfibre towel for cleaning, drying and finishing", "منشفة مايكروفايبر رمادية بمقاس 40×40 سم، لأعمال العناية والتنظيف والتجفيف": "Grey 40×40 cm microfibre towel for care, cleaning and drying", "منشفة مايكروفايبر رمادية بمقاس 40×60 سم، لأعمال العناية والتنظيف والتجفيف": "Grey 40×60 cm microfibre towel for care, cleaning and drying", "منشفة مايكروفايبر للزجاج 40×60 سم – وجهين مخصص للزجاج": "Glass Microfibre Towel 40×60 cm — Double-Sided", "منشفة مايكروفايبر للسيارات 40×40 سم – رمادي": "Car Microfibre Towel 40×40 cm — Grey", "منشفة مايكروفايبر للسيارات 40×60 سم – رمادي": "Car Microfibre Towel 40×60 cm — Grey", "منشفة مايكروفايبر للسيارات وجهين 50×60 سم": "Double-Sided Car Microfibre Towel 50×60 cm", "مواضيع المستشار": "Advisor topics", "موقع المركز": "Centre location", "نؤمن أن الثقة تبدأ بالدقة في الوعد وجودة التنفيذ، وطموح التصنيع السعودي الكامل مشروع نسعى إلى تحقيقه عبر التطوير والاختبار وبناء الشراكات": "Trust starts with accurate promises and quality work; complete Saudi manufacturing is an ambition we are pursuing through development, testing and partnerships", "نانو سيراميك": "Nano ceramic", "نبدأ من أجوائنا": "Start with our climate", "نرتكز في رحلتنا على ثلاث ركائز تربط جودة العناية اليوم بطموح الصناعة غدًا": "Our journey rests on three principles that connect quality care today with our manufacturing ambition for tomorrow", "نساعدك تختار": "We help you choose", "نساعدك تختار الخدمة": "We help you find the right service", "نساعدك ونوجهك": "Here to help and guide you", "نستقبل الآن اهتمام المستثمرين والشركاء وأصحاب الخبرات الصناعية والتقنية، إلى جانب طلبات الامتياز التجاري، لدراسة فرص التعاون التي تخدم نمو العلامة وطموح التوطين": "We welcome interest from investors, partners and industrial and technical specialists, alongside franchise enquiries, to explore opportunities supporting brand growth and localisation", "نستهدف أفلامًا تجمع الوضوح البصري والحفاظ على مظهر الطلاء وسهولة العناية، مع دراسة واختبار الأداء في ظروفنا المحلية ضمن رحلة التطوير": "Our goal is films combining optical clarity, paint appearance and easier care, with research and testing under local conditions throughout development", "نسّق التنفيذ والعناية": "Arrange service and aftercare", "نصف السيارة": "Half-front coverage", "نصنع لمستقبلنا": "Building our future", "نطاق الخدمة": "Service scope", "نطوّر لما نحتاجه": "Developing for our needs", "نقدم خدمات العناية والحماية، ونطمح إلى تطوير وتصنيع أفلام حماية الطلاء PPF سعودية بالكامل تحت علامتنا، من المواد والخامات إلى المنتج النهائي": "We provide care and protection services and aspire to develop and manufacture PPF entirely in Saudi Arabia under our brand, from raw materials to the finished product", "نقدم عناية متكاملة": "We provide complete care", "نيو ليتر": "Neo Later", "هدفنا": "Our goal", "واتساب": "WhatsApp", "واستعد لمعانها": "and restore its shine", "واستمتع بكل رحلة": "and enjoy every journey", "وسط": "Medium", "وسط أو كبيرة": "Medium or large", "وطموح نصنعه هنا": "and an ambition we build here", "وعناية أسهل": "and easier care", "ولمعة تتجدد": "with renewed shine", "يبدأ من": "From", "يساعدك تختار الخدمة المناسبة لسيارتك": "helps you choose the right care for your car", "يمتد هدفنا إلى المواد والخامات والمعرفة الفنية والتصنيع، لبناء منتج سعودي متكامل يحمل هوية ريزورت كار كير ويلبي احتياجات العميل هنا": "Our goal includes raw materials, technical expertise and manufacturing, to build a complete Saudi product carrying the Resort Car Care identity and meeting local needs", "يُنسق الموعد حسب المتاح ثم يبدأ الفحص والتجهيز والتنفيذ والمراجعة": "An available appointment is coordinated, followed by inspection, preparation, service and final checks", "SUV كبير مثل لاندكروزر / إكسبدشن": "Large SUV, such as Land Cruiser / Expedition", "أبغى الخيار المناسب": "Help me choose the right option", "أبغى حماية وعناية شاملة": "Complete protection and care", "أدوات التنظيف والغسيل": "Cleaning and washing tools", "أدوات تركيب الحماية": "Protection installation tools", "أساعدك تختار الخدمة وخياراتها، وأجاوبك عن الشراء والموقع والسياسات والضمان ابدأ بالاختيارات أو اكتب سؤالك بالأسفل": "I can help you choose a service and its options, and answer questions about purchasing, location, policies and warranties; use the choices below or type your question", "أقدر أساعدك في الخدمات والباقات والشراء والسياسات والموقع والضمان والولاء اختر الموضوع الأقرب لسؤالك": "I can help with services, packages, purchasing, policies, location, warranties and loyalty; choose the topic closest to your question", "أهلاً بك في": "Welcome to", "أو": "or", "أين تحتاج السيارة العناية أكثر؟": "Where does your car need the most care?", "إرشاد المستشار": "Advisor guidance", "اختر الخدمة أولًا، ثم حجم سيارتك ونطاق الباقة سأوضح لك الخيارات المطلوبة في صفحة المنتج راجع السعر الحالي واختر الخيارات داخل سلة، ثم أضف المنتج للسلة وأكمل الدفع بعد الشراء يُنسق موعد تنفيذ الخدمة حسب المتاح؛ إتمام الدفع لا يعني توفر موعد فوري": "Choose a service, vehicle size and package scope; review the current price and select the options on the Salla product page, then add it to your basket and complete payment; service appointments are coordinated afterwards according to availability, and payment does not guarantee an immediate slot", "اختر الشكل الأقرب، أو اكتب اسم الشركة والطراز:": "Choose the closest body type or enter the make and model:", "اختر المنتج المناسب لك:": "Choose a suitable product:", "اختر الموضوع لأوضح لك أهم النقاط وأفتح لك السياسة الكاملة": "Choose a topic for a clear explanation and a link to the full policy", "اختيار أدوات العناية": "Choosing care tools", "اختيار خدمة": "Choose a service", "استعلم عن رصيدك برقم جوالك في صفحة الولاء كل ريال يقابله نقطة، وصلاحية النقاط ١٢ شهرًا كل ٢٥٠ نقطة تمنح غسيلًا مجانيًا كاملًا وفق قواعد البرنامج، والاستبدال عند كاشير المركز لا يمكنني قراءة رصيدك من داخل هذه المحادثة": "Check your balance on the loyalty page using your mobile number; each SAR earns one point and points are valid for 12 months; 250 points earn a free complete wash under the programme rules, redeemable at the centre's cashier; I cannot access your balance within this chat", "استكشف الباقات": "Explore packages", "استكشف الخدمات": "Explore services", "اسم الشركة والطراز": "Vehicle make and model", "اطلع على تفاصيل المنتج والسعر الحالي والتوفر داخل متجر ريزورت قبل إتمام الشراء": "Review product details, the current price and availability in the Resort store before purchasing", "اطلع على مختارات من تجارب العملاء في صفحة التقييمات، وشاركنا تجربتك من خلال رابط تقييم المركز": "Read selected customer experiences on the reviews page and share your own using the centre's review link", "افتح Google Maps": "Open Google Maps", "افتح المتجر": "Open the store", "افتح نموذج تسجيل الضمان": "Open warranty registration", "اقرأ سياسة الاستخدام والخصوصية": "Read the terms and privacy policy", "اكتب اسم الشركة والطراز، مثال:": "Enter the make and model, for example:", "اكتب الشركة والطراز": "Enter make and model", "الإكسسوارات وأدوات العناية": "Accessories and care tools", "الاستبدال والاسترجاع — ريزورت كار كير معلومات المركز وسياساته المنشورة": "Returns and exchanges — Resort Car Care information and published policies", "الاستخدام والخصوصية — ريزورت كار كير معلومات المركز وسياساته المنشورة": "Terms and privacy — Resort Car Care information and published policies", "التصنيف الإرشادي لـ": "Indicative classification for", "التصنيف النهائي حسب فئات المركز": "Final classification follows the centre's categories", "التلميع أم النانو أم PPF؟": "Polishing, nano ceramic or PPF?", "التلميع المائي الخارجي": "Exterior Wet Polishing", "التلميع المائي الداخلي والخارجي": "Interior and Exterior Wet Polishing", "التلميع يحسن النظافة والمظهر واللمعة حسب حالة السيارة النانو طبقة تعزز لمعان السطح وطرد الماء وتسهّل العناية PPF فيلم شفاف يغطي أجزاء محددة للمساعدة في تقليل آثار الاستخدام والخدوش السطحية الحماية لا تصلح تلف الدهان السابق، والفحص يحدد الملاءمة": "Polishing improves cleanliness, appearance and shine according to condition; nano ceramic enhances gloss and water repellency and makes care easier; PPF is a clear film over selected parts to help reduce daily wear and surface scratches; protection does not repair existing paint damage, and inspection determines suitability", "الحكات والآثار تحتاج تقييم قبل تحديد الباقة المناسبة حتى لا يتم توجيهك لخدمة غير مناسبة": "Scratches and marks need assessment before choosing a package, so you are not directed to an unsuitable service", "الخريطة التفاعلية": "Interactive map", "الخريطة التفاعلية لمركز ريزورت كار كير والاتجاهات ومعلومات خدمة العملاء": "Resort Car Care's interactive map, directions and customer care information", "الداخل والخارج": "Interior and exterior", "الداخلية": "Interior", "الدفع والتقسيط": "Payment and instalments", "الدهان مرشوش أو فيه تلف": "Repainted or damaged paintwork", "الرئيسية التعريفية": "Our introduction", "الراحة والخصوصية": "Comfort and privacy", "السعر والتوفر النهائيان يؤكدان داخل سلة": "Final price and availability are confirmed in Salla", "السيارة من الحرارة": "Protection from heat", "السياسات والمعلومات": "Policies and information", "السياسة الكاملة": "Read the full policy", "الشراء والدفع": "Purchasing and payment", "الشكاوى والاقتراحات — ريزورت كار كير معلومات المركز وسياساته المنشورة": "Complaints and suggestions — Resort Car Care information and published policies", "الضمان والتسجيل": "Warranty and registration", "الطلاء الخارجي": "Exterior paintwork", "الطلاء الخارجي PPF أو نانو": "Exterior paint — PPF or nano ceramic", "الطلاء باهت وأبغى لمعة": "Dull paint that needs more shine", "الغسيل الداخلي والخارجي": "Interior and exterior wash", "الغسيل الدوري مناسب للتنظيف المعتاد الغسيل ليس ضمن باقات الشراء الإلكترونية الظاهرة حاليًا، لذلك لا أعرض لك رابط شراء لخدمة مختلفة يمكن الاطلاع على موقع المركز أو اختيار عناية بالتفاصيل": "Routine washing is for regular cleaning; it is not currently listed among our online purchase packages, so I will not direct you to a different service; view the centre's location or choose more detailed care", "الفحص المباشر للدهان يحدد ملاءمة التلميع وحدود النتيجة لا يمكن الجزم بإزالة خدش أو معالجة دهان متضرر دون فحص PPF والنانو لا يصلحان عيوب الطلاء السابقة": "An in-person paint inspection determines polishing suitability and likely results; scratch removal or treatment of damaged paint cannot be confirmed remotely, and PPF and nano ceramic do not repair existing defects", "الفرق بين التلميع والحماية": "Polishing versus protection", "الكبوت كاملًا والرفرفان الأماميان كاملان، والأكتاف الأمامية والمرايات الجانبية الأبواب غير مشمولة": "Full bonnet and both front fenders, front shoulder areas and side mirrors; doors are not included", "المنتج المناسب": "A suitable product", "اهتمام بالداخلية": "Focus on the interior", "باب استقبال الاهتمام مفتوح الآن نطمح إلى تصنيع PPF سعودي بالكامل، من المواد والخامات إلى المنتج النهائي، ليلائم أجواء المملكة واحتياجاتنا اختر الامتياز التجاري أو الشراكات أو الاستثمار، وأرسل بياناتك وفكرتك من النموذج ليراجعها الفريق ويتواصل معك تُناقش التفاصيل حسب كل فرصة": "We are welcoming expressions of interest now; our ambition is to manufacture PPF entirely in Saudi Arabia, from raw materials to the finished product, for our climate and needs; choose franchising, partnership or investment and send your details and idea through the form for review; terms are discussed for each opportunity", "باب الاستثمار والشراكات والامتياز التجاري مفتوح في ريزورت كار كير، وطموحنا تصنيع PPF سعودي بالكامل يلائم أجواء المملكة واحتياجاتنا": "Resort Car Care welcomes investor, partnership and franchise interest, with an ambition to manufacture PPF entirely in Saudi Arabia for our climate and needs", "بدقة، لذلك ما راح أخمّن وأرسل لك رابط غلط": "accurately, so I will not guess or send you to the wrong product", "بقية السياسات": "Other policies", "بهتان سطحي وأحتاج تجديد المظهر": "Superficial dullness that needs refreshing", "بيانات المركز على Google Maps": "Centre details on Google Maps", "تابع الشراء في سلة": "Continue to Salla checkout", "تجارب عملاء ريزورت": "Resort customer experiences", "تجديد": "Refresh", "تحديد الأولوية": "Setting your priorities", "تحديد الفئة": "Identify the category", "تحديد فئة السيارة": "Identifying vehicle size", "تحديد مستوى الحماية": "Choosing protection level", "تحديد نطاق الحماية": "Choosing coverage", "تحديد نوع العناية": "Choosing the type of care", "تحقق من توفر هذا الخيار داخل المتجر قبل إتمام الطلب": "Check availability of this option in the store before ordering", "تسجيل الضمان وشروطه": "Warranty registration and terms", "تعتمد المعالجة على نوع الطلب وحالته للخدمات والحجوزات المؤكدة والعروض شروط منشورة، مع حفظ الحقوق النظامية المنتجات المادية تخضع لحالتها وطبيعتها وإثبات الشراء راجع النص الكامل قبل الدفع؛ لا أؤكد قبول استرجاع لحالة محددة من خلال المستشار": "The outcome depends on the order type and status; services, confirmed bookings and offers have published terms while statutory rights remain protected; physical products are assessed according to their condition, nature and proof of purchase; read the full policy before payment, as I cannot approve a particular return here", "تعرف علينا": "Meet our brand", "تعرّف على رؤيتنا": "Discover our vision", "تفاصيل المنتج والشراء": "Product details and purchase", "تفاصيل برنامج الولاء": "Loyalty programme details", "تفضّل حماية PPF لأي جزء؟": "Which PPF coverage would you prefer?", "تقليل الحرارة": "Reduce heat", "تقليل الحرارة والتظليل": "Heat control and window tint", "تقليل حرارة الشمس": "Reduce solar heat", "تقييم": "Assessment", "تقييم الحكات وآثار الطلاء": "Scratch and paint assessment", "تلميع وتحسين المظهر": "Polishing and appearance care", "تم اختيار فئة السيارة:": "Selected vehicle category:", "تنظيف": "Cleaning", "تنظيف وغسيل": "Cleaning and washing", "توضح السياسة قواعد استخدام المتجر والتسجيل وحماية بيانات الحساب والتواصل الإلكتروني أسئلتك في هذا المستشار تعالج داخل الصفحة، ولا تُرسل إلى نموذج ضمان أو حساب عميل": "The policy explains store use, registration, account information protection and electronic communications; your questions in this advisor are processed within the page and are not submitted to a warranty form or customer account", "تويوتا كامري": "Toyota Camry", "جديدة أو شبه جديدة": "New or nearly new", "جهّز الاسم الثلاثي وبيانات المركبة ورقم اللوحة والهيكل، وصورة الفاتورة والاستمارة، وصور الأجزاء المحمية حسب باقة PPF اعتماد الضمان يكون بعد مراجعة المستندات مدة ١٠ سنوات تخص الباقات المعلن عنها بذلك والمثبتة بالفاتورة والشهادة؛ ولا تشمل تلقائيًا الحمايات الإضافية أو الغسيل والتلميع ينتهي الضمان التجاري عند انتقال ملكية المركبة": "Prepare your full name, vehicle details, plate and VIN, invoice and registration photos, and photos of protected parts according to your PPF package; approval follows document review; the 10-year term applies only to advertised qualifying packages stated on the invoice and certificate, not automatically to additional protection, washing or polishing; the commercial warranty ends when vehicle ownership transfers", "حكات وآثار سطحية": "Surface scratches and marks", "حماية": "Protection", "حماية PPF": "PPF protection", "حماية PPF لربع السيارة": "Quarter PPF coverage", "حماية PPF لكامل البودي": "Full-body PPF coverage", "حماية PPF لنصف السيارة": "Half-front PPF coverage", "حماية السيارة والطلاء": "Vehicle and paint protection", "حماية الشمعات الأمامية": "Headlight protection", "حماية الطلاء": "Paint protection", "حماية شفافة للأجزاء التي تحددها باقتك، من ربع السيارة إلى كامل البودي اختر التغطية وراجع تفاصيلها في المتجر": "Clear protection for your selected areas, from quarter coverage to the full body; review the package coverage in the store", "حماية شفافة للطلاء PPF": "Clear paint protection film — PPF", "حماية مقابض وأطراف الأبواب": "Door handle and edge protection", "حماية ولمعة بالنانو سيراميك": "Nano ceramic protection and shine", "خارجي": "Exterior", "خطوات الشراء": "How to buy", "خلّني أوجهك للموضوع المناسب": "Let me guide you to the right topic", "خيار تركيب الحماية فقط راجع متطلبات هذا الخيار والمواد المشمولة في صفحة المنتج قبل إتمام الشراء": "Installation-only protection option; review its requirements and included materials on the product page before buying", "خيار مناسب للعناية الدورية وتنظيف السيارة من الداخل والخارج": "Suitable for routine interior and exterior cleaning", "خيارات العناية": "Care options", "خياراتك جاهزة": "Your options are ready", "داخل وخارج": "Inside and out", "داخلية": "Interior", "درع الزجاج الأمامي": "Windshield protection", "دهان وكالة بحالة جيدة، أحتاج لمعة": "Original factory paint in good condition; I want more shine", "راجع بيانات المركز المحدثة على Google Maps للتأكد من ساعات العمل في يوم زيارتك": "Check our current Google Maps listing for opening hours on the day of your visit", "راحة": "Comfort", "ربع السيارة — المقدمة": "Quarter coverage — front", "ربع الكبوت وربع الرفرفين الأماميين، والواجهة الأمامية والشمعات والصدام، والمرايات والأكتاف الأمامية والمقابض وأطراف الأبواب حسب تفاصيل الباقة": "Quarter bonnet and both front fenders, front fascia, headlights, bumper, mirrors, front shoulder areas, door handles and edges according to package details", "رشوش / قشر برتقال / آثار في البودي": "Repaint, orange peel or bodywork marks", "ريزورت كار كير علامة سعودية للعناية بالسيارات وحلول الحماية والعزل الحراري في جدة رؤيتنا علامة سعودية متكاملة، ورسالتنا تطوير حلول تنطلق من حرارة أجوائنا والشمس والغبار واحتياجات العميل السعودي هدفنا المستقبلي تصنيع PPF سعودي بالكامل، من المواد والخامات إلى الفيلم والمنتج النهائي نستقبل الآن اهتمام المستثمرين والشركاء وطلبات الامتياز التجاري للمساهمة في هذا الطموح": "Resort Car Care is a Saudi brand for car care, protection and window tint in Jeddah; our vision is a fully integrated Saudi brand, developing solutions for our heat, sunshine, dust and local drivers' needs; our future goal is fully Saudi-made PPF, from raw materials to the finished film; we welcome investor, partner and franchise interest to help achieve this ambition", "ساعات العمل": "Opening hours", "ساعدني أختار": "Help me choose", "ساعدني أختار الخدمة": "Help me choose a service", "سيارة صغيرة": "Small car", "سيارة كبيرة": "Large vehicle", "سيارة وسط": "Medium vehicle", "سيدان مثل كامري / سوناتا": "Sedan, such as Camry / Sonata", "صفحة الشكاوى والاقتراحات": "Complaints and suggestions page", "طرق الدفع": "Payment methods", "طلاء": "Paint", "عازل حراري": "Window tint", "عازل حراري للعناية براحة المقصورة وتقليل أثر حرارة الشمس": "Window tint for cabin comfort and reduced solar heat exposure", "عناية": "Care", "عناية بتحسين النظافة واللمعة وتجديد المظهر، بخيار خارجي أو داخلي وخارجي وفق حالة السيارة يحدد فحص الدهان ملاءمة الخدمة": "Care to improve cleanliness, shine and appearance, with exterior or interior and exterior options according to condition; paint inspection determines suitability", "عناية داخلية وخارجية": "Interior and exterior care", "عناية دورية": "Routine care", "عناية وحماية للطلاء مع لمعان ومظهر غني": "Paint care and protection with a rich, glossy finish", "عندي حكات أو مشكلة في المظهر": "Scratches or an appearance concern", "غسيل دوري": "Routine wash", "غير متأكد": "Not sure", "غير متأكد وأبغى اقتراح شامل": "Not sure; I would like an overall recommendation", "فحص الدهان": "Paint inspection", "فهم حالة السيارة": "Understanding your car's condition", "في صفحة المنتج اختر الخيارات التالية، ثم راجع السعر والتوفر وأكمل الطلب تحديد الخيارات يتم داخل سلة": "Choose the following options on the product page, review price and availability, then complete your order; selections are made within Salla", "كامل البودي حسب تفاصيل الباقة الزجاج الأمامي غير مشمول": "Full body according to package details; windshield is excluded", "كروس أوفر مثل RAV4 / توسان / سبورتاج": "Crossover, such as RAV4 / Tucson / Sportage", "كيف أكمل الشراء؟": "How do I complete the purchase?", "كيف أكمل الطلب؟": "How do I complete my order?", "كيف تكمل طلبك؟": "How to complete your order", "لا أعرف، أحتاج تقييم": "I am not sure; I need an assessment", "لا توجد صفحة حجز موعد معتمدة ضمن الروابط الحالية بعد شراء الخدمة يُنسق موعد تسليم المركبة حسب المتاح، وإتمام الدفع لا يضمن موعدًا فوريًا": "There is no approved appointment-booking page among the current links; vehicle drop-off is coordinated after purchase according to availability, and payment does not guarantee an immediate appointment", "لتقديم شكوى رسمية جهّز رقم الطلب أو الفاتورة، وتاريخ الخدمة، وشرح الملاحظة وما يدعمها من صور يمكنك إرسالها إلى البريد الرسمي resortcarcare@gmail.com هذا المستشار يوضح الخطوات، ولا يحفظ أو يرسل شكوى إلى الإدارة": "For a formal complaint, prepare the order or invoice number, service date, a description and supporting photos; email resortcarcare@gmail.com; this advisor explains the process and does not submit a complaint to management", "للتواصل المباشر مع المركز يوجد زر واحد أسفل يسار الصفحة وأقدر هنا أساعدك في اختيار الخدمة والشراء والموقع والسياسات": "For direct contact, use the single button at the bottom left; I can help here with service selection, purchasing, location and policies", "لمعان": "Shine", "لمعة": "Gloss", "لمعة ومظهر أفضل": "More shine and a better appearance", "ما أعرف التصنيف": "I am not sure of the category", "ما الأدوات التي تحتاجها؟": "Which tools do you need?", "ما الأولوية بالنسبة لك؟": "What is your priority?", "ما الذي تريد حمايته بالدرجة الأولى؟": "What do you most want to protect?", "ما الشيء الذي تريد أن تلاحظه بعد الخدمة؟": "What would you most like to notice after the service?", "ما الملاحظة الأقرب على السيارة؟": "Which concern best describes your car?", "ما الهدف الأساسي من زيارتك؟": "What brings you to Resort today?", "ما تصنيف سيارتك؟ سأوضح لك الخيارات المطلوبة في صفحة المنتج": "What is your vehicle category? I will explain the required product options", "ما حالة السيارة تقريباً؟": "How would you describe your car's condition?", "ما حالة دهان البودي؟": "What condition is the paint in?", "ما قدرت أحدد فئة": "I could not identify the category of", "متطلبات تسجيل الضمان": "Warranty registration requirements", "مثال: تويوتا كامري": "Example: Toyota Camry", "مساعدة في تصنيف السيارة": "Vehicle category help", "مستخدمة وتحتاج عناية واضحة": "Used and needs noticeable care", "مستخدمة وحالتها جيدة": "Used and in good condition", "مظهر": "Appearance", "معالجة": "Treatment", "معلومات العناية والشراء": "Care and purchasing information", "ملاحظاتك تساعدنا نتحسن": "Your feedback helps us improve", "مناسب إذا كان تركيزك على تنظيف وتجديد المقصورة الداخلية": "Suitable when your focus is cleaning and refreshing the cabin", "مناسب لتحسين مظهر الطلاء وإعادة اللمعة للسطح الخارجي": "Suitable for improving paint appearance and restoring exterior shine", "موعد تنفيذ الخدمة": "Service appointment", "موقع المركز للفحص": "Visit the centre for inspection", "موقع المركز والاتجاهات": "Centre location and directions", "موقع ريزورت كار كير": "Resort Car Care location", "نطاق": "Coverage", "نظافة واضحة": "A clearly cleaner car", "نقاط ولائك": "Your loyalty points", "هل تبحث عن غسيل دوري أم عناية أدق بالتفاصيل؟": "Are you looking for routine washing or more detailed care?", "هيونداي توسان": "Hyundai Tucson", "↻ ابدأ الاستشارة من جديد": "↻ Restart the consultation", "التبديل إلى الإنجليزية": "Switch to English", "الوضع الفاتح": "Light mode", "صغيرة وسط كبيرة": "Small · Medium · Large", "الخريطة والاتجاهات": "Map & Directions", "تابي — حتى 12 دفعة": "Tabby — up to 12 payments", "تمارا — حتى 4 دفعات": "Tamara — up to 4 payments", "مزايا التقسيط": "Installment benefits", "معلومات الموقع والتواصل": "Location & contact information", "الاتصال على 0565317009": "Call 0565317009", "الخريطة التفاعلية لموقع ريزورت كار كير — جدة حي الحرازات": "Interactive map of Resort Car Care — Jeddah Al-Harazat", "ريزورت كار كير — عناية وحماية متكاملة لسيارتك": "Resort Car Care — Complete Care & Protection for Your Car", "استكشف أقسام وباقات ريزورت كار كير": "Explore Resort Car Care categories and packages", "البانر الرئيسي الأول": "First main banner", "رأس الصفحة الرئيسي": "Main page header", "روابط سريعة": "Quick links", "تبديل المظهر الفاتح / الداكن": "Toggle light / dark mode", "تفعيل الوضع الفاتح": "Switch to light mode", "تفعيل الوضع الداكن": "Switch to dark mode", "مثال: Toyota Crown / تويوتا كراون": "Example: Toyota Crown", "تجربتي الأولى مع المغسلة وكانت صراحةً ممتازة جدًا، والمغسلة نظيفة ومرتبة وأحب أشكر الموظف محمد بشير على تعامله الحلو وابتسامته الدائمة، ما شاء الله عليه": "My first visit was honestly excellent; the car wash is clean and well-organized. Special thanks to Mohammed Bashir for his wonderful attitude and constant smile.", "ماشاءالله تبارك الله غسيلهم ممتاز والتمسيح فنان وسعرهم بعد بطل انصح تجونهم مغسل دبل واكس 25 ريال والله يرزقه يارب ويباركله": "Excellent washing and drying at a great price; I recommend visiting them, double-wax wash for 25 SAR, wishing the owner every success.", "نوع الغمارة (مطلوب لتحديد المقاس)": "Cab Type (Required for size)", "عدد صفوف المقاعد / الفئة (مطلوب)": "Seat Rows / Trim (Required)", "اختر الفئة أو عدد الصفوف لتحديد المقاس بدقة": "Select trim or seat rows to determine accurate size", "قياسي / ستاندر — سيدان (فئة صغيرة)": "Standard — Sedan (Small Category)", "نص فل — سيدان (فئة صغيرة)": "Mid-Trim — Sedan (Small Category)", "فل كامل — سيدان (فئة صغيرة)": "Full Option — Sedan (Small Category)", "قياسي / ستاندر — صفان 5 ركاب (فئة وسط)": "Standard — 2 Rows / 5 Seats (Medium Category)", "نص فل — صفان 5 ركاب (فئة وسط)": "Mid-Trim — 2 Rows / 5 Seats (Medium Category)", "فل كامل — صفان 5 ركاب (فئة وسط)": "Full Option — 2 Rows / 5 Seats (Medium Category)", "قياسي / ستاندر — 3 صفوف / 6+ ركاب (فئة كبيرة)": "Standard — 3 Rows / 6+ Seats (Large Category)", "نص فل — 3 صفوف / 6+ ركاب (فئة كبيرة)": "Mid-Trim — 3 Rows / 6+ Seats (Large Category)", "فل كامل — 3 صفوف / 6+ ركاب (فئة كبيرة)": "Full Option — 3 Rows / 6+ Seats (Large Category)", "غمارة واحدة (صف مقاعد واحد — فئة صغيرة)": "Single Cab (1 Row — Small Category)", "غمارتين (صفان / 5 ركاب — فئة وسط)": "Double Cab (2 Rows / 5 Seats — Medium Category)", "فئة صفين مقاعد / 5 ركاب (فئة وسط)": "2-Row Trim / 5 Seats (Medium Category)", "فئة 3 صفوف مقاعد / 6 ركاب فأكثر (فئة كبيرة)": "3-Row Trim / 6+ Seats (Large Category)", "سيدان أو بيك أب غمارة واحدة (فئة صغيرة)": "Sedan or Single-Cab Pickup (Small Category)", "صفان مقاعد (5 ركاب) أو بيك أب غمارتين (فئة وسط)": "2-Row (5 Seats) or Double-Cab Pickup (Medium Category)", "3 صفوف مقاعد أو أكثر من 6 ركاب (فئة كبيرة)": "3-Row or 6+ Seats (Large Category)", "تصنيف ريزورت المعتمد لسيارتك": "Approved Resort Classification for Your Vehicle", "تصنف ضمن فئة السيارات الصغيرة لدى ريزورت (سيارات السيدان والبيك أب غمارة واحدة)": "Classified under Resort Small Vehicle Category (Sedans & single-cab pickups)", "تصنف ضمن فئة السيارات الوسط لدى ريزورت (السيارات ذات صفين من المقاعد أو 5 ركاب، والبيك أب غمارتين)": "Classified under Resort Medium Vehicle Category (2-row / 5-seat vehicles & double-cab pickups)", "تصنف ضمن فئة السيارات الكبيرة لدى ريزورت (السيارات ذات 3 صفوف من المقاعد أو أكثر من 6 ركاب)": "Classified under Resort Large Vehicle Category (3-row / 6+ passenger vehicles)", "اعتمد المقاس في مستشار العناية": "Use Size in Care Advisor", "معلومة مطلوبة": "Required Information", "يرجى تحديد الفئة / عدد الصفوف": "Please Select Trim / Seat Rows", "هذا الطراز يختلف تصنيفه حسب الفئة أو عدد صفوف المقاعد / الغمارات اختر الفئة من الحقل أعلاه لتحديد المقاس المعتمد دون تخمين": "This model varies by trim, seat rows, or cab type. Please select the configuration above so we do not guess.", "طراز غير موجود بالقائمة": "Model not listed", "أخرى / غير موجودة": "Other / Not Listed", "نقاط الولاء": "Loyalty Points", "أقسام المتجر": "Store Categories", "فتح قائمة الأقسام": "Open categories menu", "ابحث في المتجر": "Search store", "ابحث عن خدمة أو منتج...": "Search for a service or product...", "ابحث عن خدمة أو منتج": "Search for a service or product", "بحث": "Search", "تسجيل الدخول": "Sign In", "حسابي": "My Account", "سلة المشتريات": "Shopping Cart", "السلة": "Cart", "أقسام المتجر الرئيسية": "Main Store Categories", "الحماية الأساسية والإضافية": "Primary & Additional Protection (PPF)", "↳ باقات الحماية الإضافية": "↳ Additional Protection Packages", "+ باقات الحماية الإضافية": "+ Additional Protection Packages", "ضمن قسم الحماية": "Within Protection Category", "تبحث عن حماية الشمعات الأمامية أو مقابض وأطراف الأبواب أو درع الزجاج الأمامي؟": "Looking for headlight protection, door handle & edge guards, or windshield protection?", "تصفّح باقات الحماية الإضافية": "Browse Additional Protection Packages", "الحماية الأساسية": "Primary PPF Protection", "الحماية الأساسية والإضافية — PPF": "Primary & Additional Protection — PPF", "حماية شفافة للأجزاء الأكثر تعرضًا للخدوش وآثار الطريق اختر التغطية التي تناسب سيارتك، من الربع إلى كامل البودي، أو أضف باقات الحماية الإضافية للشمعات والمقابض والزجاج الأمامي": "Clear protection for the areas most exposed to scratches and road debris. Choose coverage from front-quarter to full body, or add additional protection for headlights, door handles, and windshield.", "التنقل السريع والسياسات": "Quick Navigation & Policies", "اعرف مقاس سيارتك": "Know Your Car Size", "اختيار السيارة والمقاس": "Choosing Your Car & Size", "أوضح وأسهل": "Clearer & Easier", "اختر الشركة والطراز والفئة وسنة الصنع (1980–2028)، لنحدد لك فئة سيارتك المعتمدة في باقات ريزورت دون تخمين": "Select make, model, trim/rows, and year (1980–2028) to identify your approved Resort vehicle category without guessing", "صغيرة · وسط · كبيرة": "Small · Medium · Large", "اختر الشركة والطراز والفئة (التجهيز / عدد الصفوف أو الغمارات) والسنة إذا كان التصنيف يختلف حسب الفئة أو عدد صفوف المقاعد، سنطلب منك تحديدها بدقة بدل التخمين": "Select make, model, trim (configuration / seat rows or cab type), and year. When classification varies by trim or number of seat rows, we ask you to specify it rather than guessing.", "سياسة تصنيف أحجام السيارات": "Vehicle Size Classification Policy", "سيارات السيدان (مثل كامري وأكورد وسوناتا) والبيك أب غمارة واحدة": "Sedans (such as Camry, Accord, Sonata) and single-cab pickups", "السيارات ذات صفين من المقاعد أو 5 ركاب (مثل راف فور وسبورتاج وتوسان) وهايلكس غمارتين": "2-row / 5-passenger vehicles (such as RAV4, Sportage, Tucson) and Hilux double-cab", "السيارات ذات 3 صفوف أو أكثر من 6 ركاب (مثل إكسبديشن ولاندكروزر وسكويا وفورتشنر)": "3-row / 6+ passenger vehicles (such as Expedition, Land Cruiser, Sequoia, Fortuner)", "الشركة": "Make", "اختر الشركة": "Select Make", "الطراز": "Model", "اختر الطراز": "Select Model", "الفئة / عدد الصفوف": "Trim / Seat Rows", "اختر الفئة أو التجهيز": "Select Trim or Configuration", "سنة الصنع": "Model Year", "اختر السنة": "Select Year", "اكتب اسم الطراز غير الموجود بالقائمة": "Enter the model name not listed", "اعرف مقاس سيارتي": "Find My Car Size", "اعتمد المقاس في المستشار": "Use Size in Care Advisor", "شاهد الباقات": "View Packages", "اكتب تقييمك على Google": "Write a Review on Google", "قيّم المركز على Google": "Rate Us on Google", "استكشف موقع المركز على الخريطة، وابدأ الاتجاهات من موقعك إلى الوجهة المعتمدة في جدة — حي الحرازات": "Explore our center on the map and get directions from your location to our address in Jeddah — Al-Harazat District", "جدة — حي الحرازات": "Jeddah — Al-Harazat District", "رقم التواصل": "Contact Number", "البروفايل التعريفي": "Brand Profile", "الموقع والاتجاهات (جدة — حي الحرازات)": "Location & Directions (Jeddah — Al-Harazat)", "تابي:": "Tabby:", "قسّمها حتى 12 دفعة": "Split up to 12 payments", "تمارا:": "Tamara:", "قسّمها حتى 4 دفعات": "Split up to 4 payments", "تتحدد وسائل الدفع المتاحة فعليًا وأهلية التقسيط لطلبك داخل سلة عند إتمام الشراء": "Available payment methods and installment eligibility for your order are confirmed at Salla checkout", "خصمك مفاجأة مع كود": "Your surprise discount with code", "في سلة": "in Salla", "الإسهام في تأسيس علامة وطنية سعودية جديدة لمواد حماية السيارات، من الخامات إلى المنتج النهائي، بتقنيات تلائم أجواء المملكة": "Contributing to establishing a new Saudi national brand for car protection materials, from raw materials to the finished product, with technologies suited to the Kingdom's climate", "تصفّح ريزورت": "Browse Resort", "اختر العناية المناسبة": "Choose the Right Care", "لسيارتك": "for Your Car", "ستة أقسام رئيسية تجمع الحماية والعزل والتلميع والعناية — ادخل للقسم وشاهد الباقات والمنتجات مباشرة": "Six main categories bringing together protection, window tint, polishing, and care — enter any category to view packages and products directly", "قنوات الدفع والتقسيط المعروضة في الموقع: مدى، فيزا، ماستركارد، Apple Pay، STC Pay، التحويل البنكي، تابي، تمارا، ومدفوع خيارات الدفع المتاحة فعليًا لطلبك تتضح داخل سلة عند إتمام الشراء تظهر أهلية التقسيط وعدد الدفعات والإجمالي النهائي داخل سلة حسب الطلب ومزود الدفع خصمك مفاجأة عند استخدام كود AA في سلة قبل السداد تابي حتى ١٢ دفعة وتمارا حتى ٤ دفعات، وفق الأهلية والخيارات الظاهرة عند الدفع": "Payment and installment channels displayed: Mada, Visa, Mastercard, Apple Pay, STC Pay, Bank Transfer, Tabby, Tamara, and Madfu. The payment options active for your order appear at Salla checkout. Installment eligibility, number of payments, and final total depend on your order and payment provider. Enjoy a surprise discount with code AA at Salla checkout. Tabby up to 12 payments and Tamara up to 4 payments, subject to eligibility at checkout."}, window.RESORT_TRANSLATIONS || {})); /* 3. لا توجد جداول أسعار أو معرفات خيارات مؤرشفة في v8؛ بيانات الشراء تقرأ من مكونات سلة الحية. */ /* 4. تفعيل عزل الصفحة الرئيسية وتوسيع الحاوية الأب في سلة */ document.documentElement.classList.add('resort-landing-active','resort-shared-active','resort-custom-header-ready','resort-custom-footer-ready'); document.body.classList.add('resort-landing-active','resort-shared-active','resort-custom-header-ready','resort-custom-footer-ready'); const important = (el, prop, value) => { if (el && el.style) el.style.setProperty(prop, value, 'important'); }; let lastLandingWidth = 0; const widenLandingShell = () => { const vw = document.documentElement.clientWidth || window.innerWidth; if (vw === lastLandingWidth) return; lastLandingWidth = vw; root.style.setProperty('--resort-vw', vw + 'px'); important(root, 'width', vw + 'px'); important(root, 'max-width', vw + 'px'); important(root, 'margin-inline', `calc(50% - ${vw / 2}px)`); important(root, 'padding', '0'); let p = root.parentElement, depth = 0; while (p && p !== document.body && depth < 8) { if (!p.matches('header,nav,footer')) { important(p, 'max-width', 'none'); important(p, 'padding-inline', '0'); important(p, 'margin-top', '0'); important(p, 'margin-bottom', '0'); } p = p.parentElement; depth++; } }; /* 5. منع تكرار البانر الأول إذا كان مضافًا أيضًا كعنصر مستقل في سلة */ const deduplicateFirstBanner = () => { const inlineBanner = root.querySelector('#resort-first-banner'); const targetId = 'ce06e098-e711-40de-8c69-1880a6eba2ee'; const externalImgs = [...document.querySelectorAll('img')].filter( img => !root.contains(img) && !img.closest('header,nav,footer') && (img.src || '').includes(targetId) ); if (externalImgs.length > 0 && inlineBanner) { // إذا كان البانر الأول مضافًا كعنصر أصلي في سلة فوق الكود، نجعله بعرض كامل ونخفي النسخة المدمجة لمنع التكرار externalImgs.forEach(img => { const block = img.closest('section,.s-block,[class*="s-block"],[class*="banner"],div') || img; if (block && !block.contains(root)) { important(block, 'width', '100vw'); important(block, 'max-width', '100vw'); important(block, 'margin-inline', 'calc(50% - 50vw)'); important(block, 'margin-top', '0'); important(block, 'margin-bottom', '0'); important(block, 'padding', '0'); } important(img, 'width', '100%'); important(img, 'height', 'auto'); important(img, 'display', 'block'); }); inlineBanner.hidden = true; } else if (inlineBanner) { inlineBanner.hidden = false; } }; /* 6. منع تكرار زر واتساب وتثبيته أسفل اليسار بينما المستشار أسفل اليمين */ const syncFloatingWhatsapp = () => { const fallbackWa = root.querySelector('#resortFallbackWhatsapp'); const externalWaCandidates = [...document.querySelectorAll( 'a[href*="wa.me"], a[href*="api.whatsapp.com"], [class*="whatsapp"]:not(#resortFallbackWhatsapp), [id*="whatsapp"]:not(#resortFallbackWhatsapp)' )].filter(el => !root.contains(el) && !el.closest('footer, header, .store-footer, .store-header')); if (externalWaCandidates.length > 0) { // إبقاء زر واتساب الأصلي في سلة أسفل اليسار وإخفاء الزر الاحتياطي لمنع التكرار const primaryWa = externalWaCandidates[0]; important(primaryWa, 'position', 'fixed'); important(primaryWa, 'left', '20px'); important(primaryWa, 'right', 'auto'); important(primaryWa, 'bottom', '20px'); important(primaryWa, 'z-index', '2147482995'); externalWaCandidates.slice(1).forEach(dup => important(dup, 'display', 'none')); if (fallbackWa) fallbackWa.hidden = true; } else if (fallbackWa) { fallbackWa.hidden = false; } }; /* 7. التحقق من قنوات الدفع المفعلة فعليًا في فوتر سلة الأصلي قبل إخفائه */ const syncSallaPayments = () => { const showAll = !!window.RESORT_CONFIG.showAllArchivePayments; const nativeFooter = document.querySelector('footer.store-footer, .store-footer'); const nativeText = nativeFooter ? (nativeFooter.innerHTML || '').toLowerCase() : ''; root.querySelectorAll('#resortFooterPayments [data-requires-salla-active="true"]').forEach(badge => { const key = (badge.dataset.paymentKey || '').toLowerCase(); const keyVariants = [key, key.replace('-', '_'), key.replace('-', '')]; const isPresentInSalla = keyVariants.some(k => k && nativeText.includes(k)); badge.hidden = !(showAll || isPresentInSalla); }); document.body.classList.add('resort-custom-footer-ready'); }; /* 8. ربط الهيدر المخصص بوظائف سلة الحقيقية (القائمة، البحث، تسجيل الدخول، السلة والمبلغ بالريال) */ const initSallaHeaderBridge = () => { // أ) قائمة الأقسام الجانبية (3 شرطات) const menuBtn = root.querySelector('#resortMenuToggle'); const drawer = root.querySelector('#resort-drawer-menu'); const closeBtn = root.querySelector('#resortMenuClose'); const openDrawer = () => { if (!drawer) return; if (typeof drawer.showModal === 'function' && !drawer.open) drawer.showModal(); else drawer.setAttribute('open', ''); menuBtn?.setAttribute('aria-expanded', 'true'); }; const closeDrawer = () => { if (!drawer) return; if (typeof drawer.close === 'function' && drawer.open) drawer.close(); else drawer.removeAttribute('open'); menuBtn?.setAttribute('aria-expanded', 'false'); }; menuBtn?.addEventListener('click', openDrawer); closeBtn?.addEventListener('click', closeDrawer); drawer?.addEventListener('click', e => { if (e.target === drawer) closeDrawer(); }); root.querySelectorAll('[data-drawer-close]').forEach(link => { link.addEventListener('click', () => closeDrawer()); }); // ب) خانة البحث البيضاوية المربوطة ببحث سلة const searchForm = root.querySelector('#resortHeaderSearchForm'); const searchInput = root.querySelector('#resortHeaderSearchInput'); searchForm?.addEventListener('submit', e => { e.preventDefault(); const q = (searchInput?.value || '').trim(); if (!q) { searchInput?.focus(); return; } // محاولة استخدام عنصر بحث سلة الأصلي إن وُجد أو التوجيه لصفحة بحث المتجر الحقيقية const nativeSearchInput = document.querySelector( 'header.store-header salla-search input, header.store-header input[name="q"], header.store-header input[type="search"], salla-search input' ); if (nativeSearchInput && nativeSearchInput !== searchInput) { nativeSearchInput.value = q; nativeSearchInput.dispatchEvent(new Event('input', { bubbles: true })); nativeSearchInput.dispatchEvent(new Event('change', { bubbles: true })); const nativeForm = nativeSearchInput.closest('form'); if (nativeForm) { nativeForm.submit(); return; } } const base = window.location.hostname.includes('resort.sa') ? window.location.origin : window.RESORT_CONFIG.storeBase; window.location.href = `${base.replace(/\/$/, '')}/search?q=${encodeURIComponent(q)}`; }); // ج) زر تسجيل الدخول المربوط بوظيفة دخول سلة الحقيقية const loginBtn = root.querySelector('#resortHeaderLoginBtn'); const loginText = root.querySelector('#resortHeaderLoginText'); const findNativeUserTrigger = () => document.querySelector( 'header.store-header .s-user-menu-trigger, header.store-header salla-user-menu button, header.store-header salla-user-menu a, header.store-header [data-modal-trigger*="login"], .s-user-menu-trigger' ); const syncUserState = () => { const nativeUser = findNativeUserTrigger(); const isLogged = !!( window.salla?.config?.get?.('user.id') || document.body.classList.contains('user-logged-in') || (nativeUser && nativeUser.closest('salla-user-menu')?.hasAttribute('is-authenticated')) ); if (isLogged && loginText) { const lang = document.documentElement.lang === 'en' ? 'en' : 'ar'; const accountText = lang === 'en' ? 'My Account' : 'حسابي'; if (loginText.textContent !== accountText) loginText.textContent = accountText; } }; loginBtn?.addEventListener('click', e => { if (window.salla?.event?.dispatch) { try { e.preventDefault(); const nativeTrigger = findNativeUserTrigger(); if (nativeTrigger) { nativeTrigger.click(); return; } window.salla.event.dispatch('login::open'); return; } catch (_err) {} } const nativeTrigger = findNativeUserTrigger(); if (nativeTrigger) { e.preventDefault(); nativeTrigger.click(); } }); // د) زر السلة وإجمالي المبلغ بالريال المربوط بسلة المشتريات الحقيقية const cartBtn = root.querySelector('#resortHeaderCartBtn'); const cartCountEl = root.querySelector('#resortHeaderCartCount'); const cartAmountEl = root.querySelector('#resortHeaderCartAmount'); const parseNumberFromText = (str) => { if (!str) return null; const normalized = String(str).replace(/[٠-٩]/g, d => String(d.charCodeAt(0) - 0x0660)).replace(/,/g, ''); const match = normalized.match(/\d+(?:\.\d+)?/); return match ? match[0] : null; }; const updateCartDisplay = (countVal, totalVal) => { if (cartCountEl && countVal !== undefined && countVal !== null) { if (cartCountEl.textContent !== String(countVal)) cartCountEl.textContent = String(countVal); } if (cartAmountEl && totalVal !== undefined && totalVal !== null) { const cleanAmount = parseNumberFromText(totalVal); const amountText = cleanAmount !== null ? cleanAmount : String(totalVal); if (cartAmountEl.textContent !== amountText) cartAmountEl.textContent = amountText; } }; const syncCartFromDOMAndSalla = () => { // 1) القراءة من عناصر سلة الأصلية في الصفحة const nativeTotalEl = document.querySelector( '.s-cart-summary-total, header.store-header [data-cart-total], salla-cart-summary .s-cart-summary-total' ); const nativeCountEl = document.querySelector( '.s-cart-summary-count, header.store-header [data-cart-count], salla-cart-summary .s-cart-summary-count, header.store-header .cart-badge' ); if (nativeCountEl && nativeCountEl.textContent.trim()) { updateCartDisplay(parseNumberFromText(nativeCountEl.textContent) || '0', null); } if (nativeTotalEl && nativeTotalEl.textContent.trim()) { updateCartDisplay(null, nativeTotalEl.textContent.trim()); } }; // الاستماع لأحداث سلة الحية عند تحديث السلة if (window.salla?.cart?.event?.onUpdated) { try { window.salla.cart.event.onUpdated(data => { if (data) { updateCartDisplay(data.count ?? data.items?.length, data.total ?? data.sub_total); } }); } catch (_err) {} } document.addEventListener('salla:cart.updated', e => { const detail = e.detail || {}; updateCartDisplay(detail.count, detail.total); setTimeout(syncCartFromDOMAndSalla, 80); }); cartBtn?.addEventListener('click', e => { const nativeCartTrigger = document.querySelector( 'header.store-header salla-cart-summary a, header.store-header salla-cart-summary button, header.store-header .s-cart-summary-wrapper, .s-cart-summary-icon' ); if (nativeCartTrigger) { e.preventDefault(); nativeCartTrigger.click(); return; } if (window.salla?.event?.dispatch) { try { e.preventDefault(); window.salla.event.dispatch('cart::open'); return; } catch (_err) {} } }); syncUserState(); syncCartFromDOMAndSalla(); return { syncUserState, syncCartFromDOMAndSalla }; }; const headerBridge = initSallaHeaderBridge(); const refreshLayoutAndBridges = () => { widenLandingShell(); deduplicateFirstBanner(); syncFloatingWhatsapp(); syncSallaPayments(); headerBridge?.syncUserState(); headerBridge?.syncCartFromDOMAndSalla(); }; refreshLayoutAndBridges(); window.addEventListener('load', refreshLayoutAndBridges, { once: true }); window.addEventListener('resize', widenLandingShell, { passive: true }); const domObserver = new MutationObserver(records => { // Ignore our own custom root, dialogs, and script/style tags to keep INP/TBT near 0ms. const hasExternalLayoutChange = records.some(record => { const t = record.target; if (!t || root.contains(t)) return false; const el = t.nodeType === 1 ? t : t.parentElement; if (!el || el.closest('#resortWelcomeAA, #resort-ai-widget, script, style, link')) return false; return record.addedNodes.length > 0 || record.removedNodes.length > 0; }); if (!hasExternalLayoutChange) return; clearTimeout(domObserver._timer); domObserver._timer = setTimeout(refreshLayoutAndBridges, 220); }); domObserver.observe(document.body, { childList: true, subtree: true }); /* 9. دعم المظهر الفاتح والداكن + دعم العربية والإنجليزية والاتجاه المناسب */ const initPreferences = () => { const dictionary = window.RESORT_TRANSLATIONS || {}; const originals = new WeakMap(); const attributes = new WeakMap(); const localizedAttrs = ['alt', 'title', 'placeholder', 'aria-label']; const cleanKey = val => String(val).replace(/(https?:\/\/[^\s<]+|[\w.+-]+@[\w.-]+\.[A-Za-z]{2,}|\d+\.\d+)|[.…·•]/g, (m, keep) => keep || '').replace(/\s+/g, ' ').trim(); const toLatinDigits = val => String(val).replace(/[٠-٩۰-۹]/g, c => String(c.charCodeAt(0) - (c <= '٩' ? 0x660 : 0x6f0))); let language = 'ar'; let theme = 'dark'; try { const savedLang = localStorage.getItem('resort-language'); const savedTheme = localStorage.getItem('resort-theme'); if (savedLang === 'en' || savedLang === 'ar') language = savedLang; else if (document.documentElement.lang === 'en') language = 'en'; if (savedTheme === 'light' || savedTheme === 'dark') theme = savedTheme; } catch (_e) {} const translateString = (raw) => { const key = cleanKey(raw); if (language !== 'en') return raw; if (Object.prototype.hasOwnProperty.call(dictionary, key)) return dictionary[key]; const sarMatch = key.match(/^([\d٠-٩۰-۹]+(?:\.\d+)?)\s*ر\.?\s*س$/); if (sarMatch) return toLatinDigits(sarMatch[1]) + ' SAR'; return raw; }; const shouldSkip = el => !el || !!el.closest('script, style, noscript, textarea, [data-i18n-ignore], .message.user:not([data-localize])'); const processTextNode = node => { if (shouldSkip(node.parentElement) || !node.data.trim()) return; let rec = originals.get(node); if (!rec || node.data !== rec.rendered) rec = { source: node.data }; const lead = (rec.source.match(/^\s*/) || [''])[0]; const trail = (rec.source.match(/\s*$/) || [''])[0]; const tr = translateString(rec.source); const rendered = language === 'en' && tr !== rec.source ? lead + tr + trail : rec.source; rec.rendered = rendered; originals.set(node, rec); if (node.data !== rendered) node.data = rendered; }; const processElementAttrs = el => { if (shouldSkip(el)) return; let map = attributes.get(el); if (!map) { map = new Map(); attributes.set(el, map); } localizedAttrs.forEach(attr => { if (!el.hasAttribute(attr)) return; const cur = el.getAttribute(attr); let rec = map.get(attr); if (!rec || cur !== rec.rendered) rec = { source: cur }; const rendered = translateString(rec.source); rec.rendered = rendered; map.set(attr, rec); if (cur !== rendered) el.setAttribute(attr, rendered); }); }; const translateSubtree = container => { if (!container) return; const walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT); let node; while ((node = walker.nextNode())) { if (node.nodeType === 3) processTextNode(node); else if (node.nodeType === 1) processElementAttrs(node); } }; const updatePreferenceButtons = () => { const isEn = language === 'en'; root.querySelectorAll('[data-theme-toggle]').forEach(btn => { const label = theme === 'dark' ? (isEn ? 'Switch to light mode' : 'تفعيل الوضع الفاتح') : (isEn ? 'Switch to dark mode' : 'تفعيل الوضع الداكن'); btn.setAttribute('aria-label', label); btn.title = label; }); root.querySelectorAll('[data-language-toggle]').forEach(btn => { const span = btn.querySelector('span') || btn; span.textContent = isEn ? 'العربية' : 'English'; const label = isEn ? 'Switch to Arabic' : 'التبديل إلى الإنجليزية'; btn.setAttribute('aria-label', label); btn.title = label; }); }; const applyTheme = (nextTheme, persist = true) => { theme = nextTheme === 'light' ? 'light' : 'dark'; root.dataset.theme = theme; document.documentElement.style.colorScheme = theme; document.documentElement.dataset.theme = theme; if (persist) { try { localStorage.setItem('resort-theme', theme); } catch (_e) {} } updatePreferenceButtons(); }; const applyLanguage = (nextLang, persist = true) => { language = 'ar'; const dir = language === 'en' ? 'ltr' : 'rtl'; root.lang = language; root.dir = dir; root.dataset.language = language; document.documentElement.lang = language; document.documentElement.dir = dir; translateSubtree(root); updatePreferenceButtons(); if (persist) { try { localStorage.setItem('resort-language', language); } catch (_e) {} try { document.cookie = `s-lang=${language};path=/;max-age=31536000;SameSite=Lax`; } catch (_e) {} } document.dispatchEvent(new CustomEvent('resort:languagechange', { detail: { language, dir } })); }; root.querySelectorAll('[data-theme-toggle]').forEach(btn => { btn.addEventListener('click', () => applyTheme(theme === 'dark' ? 'light' : 'dark')); }); root.querySelectorAll('[data-language-toggle]').forEach(btn => { btn.addEventListener('click', () => applyLanguage(language === 'ar' ? 'en' : 'ar')); }); applyTheme(theme, false); applyLanguage(language, false); window.ResortPreferences = Object.freeze({ setTheme: applyTheme, setLanguage: applyLanguage, getTheme: () => theme, getLanguage: () => language, translate: translateString, refresh: () => { translateSubtree(root); } }); }; initPreferences(); /* 10. تحديد المقاس من الشركة والطراز وسنة الصنع */ const initVehicleSizeFinder = () => { const VEHICLES = { 'تويوتا Toyota': [ ['Yaris / يارس', 'small'], ['Corolla / كورولا', 'small'], ['Camry / كامري', 'small'], ['Avalon / أفالون', 'small'], ['Crown / كراون', 'small'], ['Supra / سوبرا', 'small'], ['86 / GR86', 'small'], ['Corolla Cross / كورولا كروس', 'medium'], ['C-HR', 'medium'], ['RAV4 / راف فور', 'medium'], ['Hilux / هايلكس', 'pickup_var'], ['Tacoma / تاكوما', 'pickup_var'], ['Prado / برادو', 'suv_var'], ['Fortuner / فورتشنر', 'large'], ['Highlander / هايلاندر', 'large'], ['Land Cruiser / لاندكروزر', 'large'], ['Sequoia / سيكويا', 'large'], ['Innova / إينوفا', 'large'], ['Tundra / تندرا', 'pickup_var'] ], 'لكزس Lexus': [ ['IS', 'small'], ['ES', 'small'], ['GS', 'small'], ['LS', 'small'], ['RC', 'small'], ['LC', 'small'], ['UX', 'medium'], ['NX', 'medium'], ['RX', 'suv_var'], ['RZ', 'medium'], ['GX', 'large'], ['LX', 'large'] ], 'نيسان Nissan': [ ['Sunny / صني', 'small'], ['Sentra / سنترا', 'small'], ['Altima / التيما', 'small'], ['Maxima / مكسيما', 'small'], ['Z', 'small'], ['Kicks / كيكس', 'medium'], ['Qashqai / قشقاي', 'medium'], ['X-Trail / اكس تريل', 'suv_var'], ['Navara / نافارا (ددسن)', 'pickup_var'], ['Pathfinder / باثفايندر', 'large'], ['Terra / تيرا', 'large'], ['Patrol / باترول', 'large'], ['Armada / أرمادا', 'large'], ['Titan / تيتان', 'pickup_var'] ], 'إنفينيتي Infiniti': [ ['Q50', 'small'], ['Q60', 'small'], ['Q30', 'small'], ['QX30', 'medium'], ['QX50', 'medium'], ['QX55', 'medium'], ['QX70', 'medium'], ['QX60', 'large'], ['QX80', 'large'] ], 'هوندا Honda': [ ['City / سيتي', 'small'], ['Civic / سيفيك', 'small'], ['Accord / أكورد', 'small'], ['HR-V', 'medium'], ['ZR-V', 'medium'], ['CR-V', 'suv_var'], ['Passport', 'medium'], ['Pilot / بايلوت', 'large'], ['Odyssey / أوديسي', 'large'] ], 'هيونداي Hyundai': [ ['Accent / اكسنت', 'small'], ['Elantra / النترا', 'small'], ['Sonata / سوناتا', 'small'], ['Azera / أزيرا', 'small'], ['Veloster', 'small'], ['Venue', 'medium'], ['Kona / كونا', 'medium'], ['Creta / كريتا', 'medium'], ['Tucson / توسان', 'medium'], ['Santa Fe / سنتافي', 'suv_var'], ['Palisade / باليسيد', 'large'], ['Staria / ستاريا', 'large'] ], 'كيا Kia': [ ['Pegas / بيجاس', 'small'], ['Rio / ريو', 'small'], ['Cerato / سيراتو', 'small'], ['K3', 'small'], ['K5', 'small'], ['K8', 'small'], ['Stinger', 'small'], ['Sonet', 'medium'], ['Seltos / سيلتوس', 'medium'], ['Sportage / سبورتاج', 'medium'], ['Sorento / سورينتو', 'suv_var'], ['Carens / كارينز', 'suv_var'], ['Telluride / تيلورايد', 'large'], ['Carnival / كرنفال', 'large'] ], 'مازدا Mazda': [ ['Mazda 2', 'small'], ['Mazda 3', 'small'], ['Mazda 6', 'small'], ['MX-5', 'small'], ['CX-3', 'medium'], ['CX-30', 'medium'], ['CX-5', 'medium'], ['CX-50', 'medium'], ['CX-60', 'medium'], ['CX-8', 'large'], ['CX-9', 'large'], ['CX-90', 'large'], ['BT-50', 'pickup_var'] ], 'ميتسوبيشي Mitsubishi': [ ['Attrage / أتراج', 'small'], ['Lancer / لانسر', 'small'], ['ASX', 'medium'], ['Eclipse Cross', 'medium'], ['Outlander / أوتلاندر', 'suv_var'], ['Pajero / باجيرو', 'suv_var'], ['Montero Sport / مونتيرو سبورت', 'large'], ['Xpander / إكسباندر', 'large'], ['L200', 'pickup_var'] ], 'إيسوزو Isuzu': [ ['D-Max / ديماكس', 'pickup_var'], ['MU-X', 'large'] ], 'فورد Ford': [ ['Figo', 'small'], ['Focus / فوكس', 'small'], ['Fusion / فيوجن', 'small'], ['Taurus / تورس', 'small'], ['Mustang / موستنج', 'small'], ['EcoSport', 'medium'], ['Territory / تيريتوري', 'medium'], ['Escape / إسكايب', 'medium'], ['Bronco Sport', 'medium'], ['Edge / إيدج', 'medium'], ['Bronco / برونكو', 'suv_var'], ['Explorer / إكسبلورر', 'large'], ['Expedition / إكسبدشن', 'large'], ['Ranger / رينجر', 'pickup_var'], ['F-150', 'pickup_var'] ], 'لينكون Lincoln': [ ['MKZ', 'small'], ['Continental', 'small'], ['Corsair', 'medium'], ['Nautilus', 'medium'], ['Aviator', 'large'], ['Navigator / نافيجيتور', 'large'] ], 'شفروليه Chevrolet': [ ['Spark', 'small'], ['Aveo', 'small'], ['Cruze', 'small'], ['Malibu / ماليبو', 'small'], ['Impala / إمبالا', 'small'], ['Camaro', 'small'], ['Equinox', 'medium'], ['Blazer', 'medium'], ['Trailblazer', 'medium'], ['Captiva / كابتيفا', 'suv_var'], ['Traverse / ترافيرس', 'large'], ['Tahoe / تاهو', 'large'], ['Suburban / سوبربان', 'large'], ['Silverado / سلفرادو', 'pickup_var'] ], 'جي إم سي GMC': [ ['Terrain', 'medium'], ['Acadia / أكاديا', 'large'], ['Yukon / يوكن', 'large'], ['Yukon XL / يوكن XL', 'large'], ['Canyon', 'pickup_var'], ['Sierra / سييرا', 'pickup_var'] ], 'كاديلاك Cadillac': [ ['ATS', 'small'], ['CT4', 'small'], ['CTS', 'small'], ['CT5', 'small'], ['CT6', 'small'], ['XT4', 'medium'], ['XT5', 'medium'], ['Lyriq', 'medium'], ['XT6', 'large'], ['Escalade / إسكاليد', 'large'] ], 'جيب Jeep': [ ['Renegade', 'medium'], ['Compass / كومباس', 'medium'], ['Cherokee', 'medium'], ['Wrangler / رانجلر', 'suv_var'], ['Grand Cherokee / جراند شيروكي', 'suv_var'], ['Grand Wagoneer', 'large'], ['Gladiator', 'pickup_var'] ], 'دودج Dodge': [ ['Dart', 'small'], ['Charger / تشارجر', 'small'], ['Challenger / تشالنجر', 'small'], ['Hornet', 'medium'], ['Durango / دورانجو', 'large'] ], 'رام RAM': [ ['RAM 1500', 'pickup_var'], ['RAM 2500 / 3500', 'pickup_var'] ], 'كرايسلر Chrysler': [ ['200', 'small'], ['300 / 300C', 'small'], ['Pacifica', 'large'] ], 'مرسيدس Mercedes-Benz': [ ['A-Class', 'small'], ['C-Class', 'small'], ['E-Class', 'small'], ['S-Class', 'small'], ['CLA', 'small'], ['CLS', 'small'], ['AMG GT', 'small'], ['GLA', 'medium'], ['GLC', 'medium'], ['GLB', 'suv_var'], ['GLE', 'suv_var'], ['EQE SUV', 'suv_var'], ['G-Class / G63', 'suv_var'], ['GLS', 'large'], ['EQS SUV', 'large'] ], 'بي إم دبليو BMW': [ ['1 Series', 'small'], ['2 Series', 'small'], ['3 Series', 'small'], ['4 Series', 'small'], ['5 Series', 'small'], ['7 Series', 'small'], ['8 Series', 'small'], ['Z4', 'small'], ['X1', 'medium'], ['X2', 'medium'], ['X3', 'medium'], ['X4', 'medium'], ['X6', 'medium'], ['XM', 'medium'], ['X5', 'suv_var'], ['X7', 'large'] ], 'أودي Audi': [ ['A3', 'small'], ['A4', 'small'], ['A5', 'small'], ['A6', 'small'], ['A7', 'small'], ['A8', 'small'], ['TT', 'small'], ['Q2', 'medium'], ['Q3', 'medium'], ['Q4 e-tron', 'medium'], ['Q5', 'medium'], ['Q6 e-tron', 'medium'], ['Q8', 'medium'], ['Q7', 'large'] ], 'فولكس واجن Volkswagen': [ ['Polo', 'small'], ['Golf', 'small'], ['Jetta', 'small'], ['Passat', 'small'], ['Arteon', 'small'], ['T-Roc', 'medium'], ['Touareg', 'medium'], ['Tiguan', 'suv_var'], ['Teramont / Atlas', 'large'] ], 'بورش Porsche': [ ['718', 'small'], ['911', 'small'], ['Taycan', 'small'], ['Panamera', 'small'], ['Macan', 'medium'], ['Cayenne', 'medium'] ], 'لاند روفر Land Rover': [ ['Evoque', 'medium'], ['Velar', 'medium'], ['Discovery Sport', 'suv_var'], ['Defender 90', 'suv_var'], ['Defender 110', 'suv_var'], ['Range Rover Sport', 'suv_var'], ['Range Rover', 'suv_var'], ['Discovery', 'large'], ['Defender 130', 'large'] ], 'فولفو Volvo': [ ['S60', 'small'], ['S90', 'small'], ['V60', 'small'], ['V90', 'small'], ['XC40', 'medium'], ['XC60', 'medium'], ['XC90', 'large'] ], 'تسلا Tesla': [ ['Model 3', 'small'], ['Model S', 'small'], ['Model Y', 'suv_var'], ['Model X', 'suv_var'], ['Cybertruck', 'pickup_var'] ], 'جينيسس Genesis': [ ['G70', 'small'], ['G80', 'small'], ['G90', 'small'], ['GV60', 'medium'], ['GV70', 'medium'], ['GV80', 'suv_var'] ], 'إم جي MG': [ ['MG3', 'small'], ['MG5', 'small'], ['MG6', 'small'], ['MG7', 'small'], ['ZS', 'medium'], ['HS', 'medium'], ['RX5', 'medium'], ['One', 'medium'], ['Whale', 'medium'], ['RX8', 'large'], ['T60', 'pickup_var'] ], 'جيلي Geely': [ ['Emgrand / إمجراند', 'small'], ['Preface / بريفيس', 'small'], ['Coolray / كولراي', 'medium'], ['Geometry C', 'medium'], ['Monjaro / مونجارو', 'medium'], ['Okavango / أوكافانجو', 'large'] ], 'شانجان Changan': [ ['Alsvin / السفين', 'small'], ['Eado Plus / إيدو بلس', 'small'], ['UNI-V', 'small'], ['CS35 Plus', 'medium'], ['CS55 Plus', 'medium'], ['UNI-T', 'medium'], ['UNI-K', 'medium'], ['CS75 Plus', 'medium'], ['CS95', 'large'], ['Hunter / هنتر', 'pickup_var'] ], 'هافال و تانك Haval & TANK': [ ['Jolion / جوليون', 'medium'], ['H6', 'medium'], ['Dargo / دارجو', 'medium'], ['TANK 300', 'medium'], ['H9', 'large'], ['TANK 500', 'large'], ['TANK 700', 'large'], ['Great Wall Poer / باور', 'pickup_var'], ['Wingle / وينجل', 'pickup_var'] ], 'جيتور Jetour': [ ['X50', 'medium'], ['T2', 'medium'], ['X70 / X70 Plus', 'suv_var'], ['X90 Plus', 'suv_var'] ], 'شيري و إكسيد Chery & Exeed': [ ['Arrizo 5 / أريزو 5', 'small'], ['Arrizo 6 / أريزو 6', 'small'], ['Arrizo 8 / أريزو 8', 'small'], ['Tiggo 4', 'medium'], ['Tiggo 7', 'medium'], ['Exeed LX', 'medium'], ['Exeed TXL', 'medium'], ['Exeed RX', 'medium'], ['Tiggo 8', 'suv_var'], ['Exeed VX', 'large'] ], 'بي واي دي BYD': [ ['Qin', 'small'], ['Seal', 'small'], ['Han', 'small'], ['Dolphin', 'small'], ['Atto 3', 'medium'], ['Song Plus', 'medium'], ['Tang', 'large'] ], 'جي إيه سي GAC': [ ['Empow', 'small'], ['GA4', 'small'], ['GA6', 'small'], ['GA8', 'small'], ['GS3', 'medium'], ['GS4', 'medium'], ['GS5', 'medium'], ['GS8', 'large'] ], 'أخرى / غير موجودة': [ ['طراز غير موجود بالقائمة', 'unknown'] ] }; const makeEl = root.querySelector('#resortCarMake'); const modelEl = root.querySelector('#resortCarModel'); const yearEl = root.querySelector('#resortCarYear'); const unknownWrap = root.querySelector('#resortUnknownModel'); const unknownInput = root.querySelector('#resortCarModelText'); const calcBtn = root.querySelector('#resortSizeCalc'); const resultEl = root.querySelector('#resortSizeResult'); if (!makeEl || !modelEl || !yearEl || !calcBtn || !resultEl) return; // يعمل أيضًا عند إبقاء HTML السابق؛ تزال الخانة بالكامل من الصفحة. const intro = root.querySelector('.size-intro'); if (intro) intro.textContent = 'اختر الشركة والطراز وسنة الصنع لمعرفة مقاس سيارتك. تظهر نسخ الطراز التي يختلف حجمها ضمن قائمة الطراز نفسها.'; const headingCopy = root.querySelector('.decision-zone-head > p:last-child'); if (headingCopy) headingCopy.textContent = 'اختر الشركة والطراز وسنة الصنع (1980–2028)، لنحدد لك مقاس سيارتك في باقات ريزورت.'; const SIZE_AR = { small: 'صغيرة', medium: 'وسط', large: 'كبيرة' }; const SIZE_COPY = { small: 'تصنف ضمن السيارات الصغيرة لدى ريزورت: السيدان والبيك أب غمارة واحدة.', medium: 'تصنف ضمن السيارات الوسط لدى ريزورت: سيارات الصفين والبيك أب غمارتين.', large: 'تصنف ضمن السيارات الكبيرة لدى ريزورت: السيارات ذات 3 صفوف أو أكثر من 6 ركاب.' }; // ننقل الفروق المؤثرة في الحجم إلى اسم الطراز، دون إضافة حقل آخر أو افتراض نسخة معينة. const modelChoices = (name, type) => { if (type === 'pickup_var') return [ [name + ' — بيك أب غمارة', 'small'], [name + ' — بيك أب غمارتين', 'medium'] ]; if (type === 'suv_var') return [ [name + ' — نسخة صفين', 'medium'], [name + ' — نسخة 3 صفوف', 'large'] ]; return [[name, type]]; }; const escapeText = value => String(value).replace(/[&<>"']/g, c => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); const clearResult = () => { resultEl.hidden = true; resultEl.innerHTML = ''; }; makeEl.innerHTML = ''; modelEl.innerHTML = ''; modelEl.disabled = true; yearEl.innerHTML = ''; yearEl.disabled = true; if (unknownWrap) unknownWrap.hidden = true; Object.keys(VEHICLES).forEach(make => { const opt = document.createElement('option'); opt.value = make; opt.textContent = make; makeEl.appendChild(opt); }); for (let y = 2028; y >= 1980; y--) { const opt = document.createElement('option'); opt.value = String(y); opt.textContent = String(y); yearEl.appendChild(opt); } makeEl.addEventListener('change', () => { modelEl.innerHTML = ''; modelEl.disabled = !makeEl.value; yearEl.value = ''; yearEl.disabled = true; if (unknownWrap) unknownWrap.hidden = true; if (unknownInput) unknownInput.value = ''; clearResult(); (VEHICLES[makeEl.value] || []).forEach(([name, type]) => { modelChoices(name, type).forEach(([label, size]) => { const opt = document.createElement('option'); opt.value = label; opt.textContent = label; opt.dataset.modelType = size; modelEl.appendChild(opt); }); }); window.ResortPreferences?.refresh?.(); }); modelEl.addEventListener('change', () => { const modelType = modelEl.options[modelEl.selectedIndex]?.dataset?.modelType || ''; clearResult(); yearEl.value = ''; yearEl.disabled = !modelType; if (unknownWrap) unknownWrap.hidden = modelType !== 'unknown'; if (unknownInput) unknownInput.value = ''; if (modelType === 'unknown') unknownInput?.focus(); }); yearEl.addEventListener('change', clearResult); unknownInput?.addEventListener('input', clearResult); calcBtn.addEventListener('click', () => { const make = makeEl.value; const model = modelEl.value; const size = modelEl.options[modelEl.selectedIndex]?.dataset?.modelType || ''; const year = yearEl.value; if (!make) { makeEl.focus(); return; } if (!model) { modelEl.focus(); return; } if (size === 'unknown' && !unknownInput?.value.trim()) { unknownInput?.focus(); return; } if (!year) { yearEl.focus(); return; } resultEl.hidden = false; if (!SIZE_AR[size]) { resultEl.innerHTML = '
الطراز غير مسجل

لا يتوفر تصنيف محفوظ لهذا الطراز بعد. تواصل معنا لتأكيد المقاس.

تواصل عبر واتساب
'; window.ResortPreferences?.refresh?.(); return; } resultEl.innerHTML = `
تصنيف ريزورت المعتمد لسيارتك
${SIZE_AR[size]}${escapeText(make)} · ${escapeText(model)} · ${escapeText(year)}
شاهد الباقات
`; window.ResortPreferences?.refresh?.(); resultEl.querySelector('[data-use-size]')?.addEventListener('click', () => { try { localStorage.setItem('resort-vehicle-size', JSON.stringify({ make, model, year, size })); } catch (_e) {} root.querySelector('#packages')?.scrollIntoView({ behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth', block: 'start' }); }); }); }; initVehicleSizeFinder(); /* بانرات الخدمات أصبحت ثابتة ومباشرة في HTML (.rr26-rail) منذ v1/v2 */ /* توحيد عناوين الأقسام المستقلة دون تغيير بانرات الخدمات */ root.querySelectorAll('.section-head, .category-browser-head, .decision-zone-head, #services > .section-intro').forEach(head => { const title = head.querySelector('h2'); if (!title) return; head.classList.add('resort-centered-heading'); if (!title.querySelector('.resort-title-text')) { title.querySelectorAll('br').forEach(br => br.replaceWith(document.createTextNode(' '))); const text = document.createElement('span'); text.className = 'resort-title-text'; while (title.firstChild) text.appendChild(title.firstChild); title.appendChild(text); } }); /* 11. التمرير السلس للروابط الداخلية وتأثيرات الظهور */ root.querySelectorAll('a[href^="#"]').forEach(link => { link.addEventListener('click', e => { const href = link.getAttribute('href'); if (!href || href === '#') return; const target = root.querySelector(href); if (!target) return; e.preventDefault(); target.scrollIntoView({ behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth', block: 'start' }); }); }); /* 12. أُلغي مستشار العناية المنبثق في v8؛ لا نوافذ/بروفايل خارجي. */ } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', bootResortSalla, { once: true }); } else { bootResortSalla(); } })(); /* Resort Car Care — internal pages, product tabs, cart/static styling hooks and live PPF binding v8 */ (() => { 'use strict'; const $=(s,c=document)=>c.querySelector(s), $$=(s,c=document)=>[...c.querySelectorAll(s)]; const norm=s=>String(s||'').normalize('NFKD').replace(/[أإآ]/g,'ا').replace(/ة/g,'ه').replace(/ى/g,'ي').replace(/[ـًٌٍَُِّْ]/g,'').replace(/\s+/g,' ').trim().toLowerCase(); const lang=()=>window.ResortPreferences?.getLanguage?.() || (document.documentElement.lang==='en'?'en':'ar'); const say=(ar,en)=>lang()==='en'?en:ar; function pageHooks(){ const root=$('#resort-salla-landing'); if(!root) return; const path=(location.pathname||'/').replace(/\/+$/,'')||'/'; const native=$('#resortNativeContent',root) || $('.r7-native-content',root); if(/\/cart(?:\/|$)/i.test(path)){root.classList.add('resort-cart-page'); native?.classList.add('r7-cart-scope');} if(/\/page-\d+(?:\/|$)/i.test(path)){root.classList.add('resort-static-page'); native?.classList.add('r7-static-page');} if(/\/p\d+(?:\/|$)/i.test(path) || $('[data-testid="store-product-form"]',root)) root.classList.add('resort-product-page'); } const INSTALL_MAP={ ppf:[['الفحص والتجهيز','فحص الطلاء وتنظيف السطح وإزالة الملوثات.','Inspect & prepare','Inspect the paint, clean the surface and remove contaminants.'],['القص والمحاذاة','تجهيز الفيلم وضبطه بحسب الأجزاء المشمولة وحوافها.','Cut & align','Prepare and align the film for the covered panels and edges.'],['التركيب والتشطيب','تطبيق الفيلم وإخراج محلول التركيب والهواء وتثبيت الحواف.','Install & finish','Apply the film, remove solution and air, then finish the edges.'],['مراجعة الجودة والتسليم','فحص التغطية والحواف وتسليم تعليمات العناية.','Quality check','Inspect coverage and edges, then explain aftercare.']], tint:[['معاينة الزجاج','مراجعة الزجاج والدرجة المطلوبة قبل البدء.','Glass inspection','Review the glass and selected shade before work starts.'],['التنظيف والتجهيز','تنظيف الزجاج بعناية لعزل أي شوائب عن الفيلم.','Clean & prepare','Clean the glass carefully to keep contaminants away from the film.'],['القص والتركيب','قص الفيلم وضبطه ثم تركيبه بدون تجاعيد أو فقاعات.','Cut & install','Shape and install the film without creases or trapped bubbles.'],['فحص الحواف والتسليم','التأكد من الحواف والرؤية وشرح فترة الجفاف والعناية.','Final check','Check edges and visibility, then explain curing and aftercare.']], nano:[['الفحص والغسيل','فحص حالة الطلاء ثم غسيل وتجفيف السيارة جيدًا.','Inspect & wash','Inspect the paint, then wash and dry the vehicle thoroughly.'],['تجهيز الطلاء','إزالة الملوثات وتصحيح السطح حسب حالته قبل الطلاء.','Paint preparation','Decontaminate and correct the surface as needed before coating.'],['تطبيق النانو','توزيع طبقة النانو سيراميك على الأجزاء المشمولة وفق المنتج.','Apply coating','Apply the nano-ceramic coating to the included surfaces.'],['المعالجة والتسليم','مراجعة اللمعان والتغطية وشرح تعليمات ما بعد التطبيق.','Cure & handover','Check coverage and gloss, then explain post-application care.']], bright:[['فحص الحالة','تحديد الخدوش والبهتان ومستوى المعالجة المناسب.','Condition check','Assess swirls, defects and the required correction level.'],['التنظيف والتجهيز','غسيل وتجفيف وإزالة الملوثات قبل التلميع.','Clean & prepare','Wash, dry and decontaminate before polishing.'],['التلميع التدريجي','معالجة السطح على مراحل للوصول للصفاء واللمعان المطلوب.','Machine polishing','Polish in controlled stages for clarity and gloss.'],['الفحص والإنهاء','مراجعة النتيجة تحت الإضاءة وتنظيف البقايا قبل التسليم.','Final inspection','Inspect under lighting and remove residues before handover.']], water:[['الفحص والغسيل','فحص الرشوش السابقة أو البهتان ثم تنظيف السيارة وتجهيزها.','Inspect & wash','Assess previous paintwork or fading, then clean and prepare the vehicle.'],['المعالجة المائية','استخدام المعالجة المائية المناسبة لرفع الملوثات وتحسين السطح.','Water treatment','Use the appropriate water-based treatment to improve the surface.'],['استعادة اللمعان','تلميع السطح بما يناسب حالته دون إجهاد الطلاء.','Restore gloss','Polish appropriately for the paint condition without overworking it.'],['المراجعة والتسليم','فحص النتيجة وتنظيف التفاصيل ثم تسليم تعليمات العناية.','Review & handover','Review the finish, detail the vehicle and explain aftercare.']], extra:[['الفحص والتنظيف','فحص الجزء وتنظيفه وتجهيزه قبل الحماية.','Inspect & clean','Inspect, clean and prepare the part before protection.'],['القياس والقص','تجهيز مادة الحماية بالمقاس المناسب للجزء.','Measure & cut','Prepare the protection material to the required size.'],['التركيب','تطبيق الحماية بعناية وتفريغ الهواء والسوائل.','Install','Apply the protection carefully and remove trapped air or solution.'],['التشطيب والمراجعة','إغلاق الحواف وفحص النتيجة قبل التسليم.','Finish & inspect','Finish the edges and inspect the result before handover.']], general:[['الفحص','مراجعة حالة السيارة وتأكيد نطاق الخدمة المطلوبة.','Inspect','Review the vehicle and confirm the service scope.'],['التجهيز','تجهيز الأجزاء المشمولة بالطريقة المناسبة للخدمة.','Prepare','Prepare the included areas for the selected service.'],['التنفيذ','تنفيذ الخدمة وفق الإجراء والمواد المعتمدة لدى ريزورت.','Perform','Carry out the service using Resort-approved process and materials.'],['المراجعة والتسليم','فحص النتيجة وشرح أي تعليمات عناية مهمة.','Review & handover','Inspect the result and explain important aftercare.']] }; function installationType(){ const known={'1379792190':'ppf','487081217':'nano','596280354':'tint','252643921':'bright','1219147970':'water'}; const id=(location.pathname.match(/\/p(\d+)/)||[])[1]; if(known[id])return known[id]; const hay=norm((location.pathname||'')+' '+($('[data-testid="store-product-title"]')?.textContent||document.title)); if(/ppf|حمايه|شمعات|مقابض|زجاج امامي/.test(hay)) return /شمعات|مقابض|زجاج امامي/.test(hay)?'extra':'ppf'; if(/عازل|تظليل|tint/.test(hay)) return 'tint'; if(/نانو|nano|ceramic/.test(hay)) return 'nano'; if(/مائي|water/.test(hay)) return 'water'; if(/ساطع|تلميع|polish/.test(hay)) return 'bright'; return 'general'; } function timelineMarkup(){ const steps=INSTALL_MAP[installationType()]||INSTALL_MAP.general; return `
    ${steps.map((x,i)=>`
  1. ${String(i+1).padStart(2,'0')}

    ${say(x[0],x[2])}

    ${say(x[1],x[3])}

  2. `).join('')}
`; } function initProductPage(){ const root=$('#resort-salla-landing'); if(!root || !root.classList.contains('resort-product-page')) return; const container=$('.container--product-details',root) || $('.container--product-details'); const form=$('[data-testid="store-product-form"]',root) || $('[data-testid="store-product-form"]'); if(!container || !form || $('#resortProductTabs',root)) return; container.classList.add('r7-product-layout'); const title=$('[data-testid="store-product-title"], .main-content h1',container); title?.classList.add('r7-product-title'); let desc=$('[data-testid="store-product-description"], .product__description',container) || $('[data-testid="store-product-description"], .product__description',root); const section=document.createElement('section'); section.id='resortProductTabs'; section.className='r7-product-tabs'; section.innerHTML=`
`; container.insertAdjacentElement('afterend',section); const descPanel=$('#r7-panel-description',section); if(desc){ desc.classList.add('r7-moved-description'); desc.removeAttribute('style'); $$('.article--main,[class*="line-clamp"],[style*="max-height"]',desc).forEach(el=>{el.style.maxHeight='none';el.style.overflow='visible';el.classList.remove('line-clamp-3','line-clamp-4','line-clamp-5');}); $$('button',desc).filter(b=>/عرض المزيد|show more/i.test(b.textContent||'')).forEach(b=>b.hidden=true); descPanel.appendChild(desc); // move original description: no duplication. } else descPanel.innerHTML=`

${say('لا يوجد وصف منشور لهذا المنتج حاليًا.','No published description is available for this product.')}

`; const tabs=$$('[role="tab"]',section), panels=$$('.r7-tabpanel',section); const activate=(tab,focus=false)=>{tabs.forEach(t=>{const on=t===tab;t.setAttribute('aria-selected',String(on));t.tabIndex=on?0:-1;});panels.forEach(p=>p.hidden=p.id!==tab.getAttribute('aria-controls')); if(focus) tab.focus();}; tabs.forEach((tab,index)=>{tab.addEventListener('click',()=>activate(tab));tab.addEventListener('keydown',e=>{let n=index;if(e.key==='ArrowDown'||e.key==='ArrowLeft')n=(index+1)%tabs.length;else if(e.key==='ArrowUp'||e.key==='ArrowRight')n=(index-1+tabs.length)%tabs.length;else if(e.key==='Home')n=0;else if(e.key==='End')n=tabs.length-1;else return;e.preventDefault();activate(tabs[n],true);});}); } function boot(){pageHooks();initProductPage();} if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',boot,{once:true});else boot(); window.addEventListener('load',boot,{once:true}); })(); /* v12: service navigation and compact category headings. Keep native product controls. */ (function(){ 'use strict'; const products={ '1864076076':'/ppf-car-protection-jeddah/p1379792190', '954247725':'/nano-ceramic-car-protection/p487081217', '181258542':'/car-window-heat-insulation/p596280354', '1688922159':'/bright-car-polishing-jeddah/p252643921', '913831720':'/water-polishing-car-jeddah/p1219147970' }; function enhance(){ const root=document.getElementById('resort-salla-landing');if(!root)return; if(/\/c\d+\/?$/.test(location.pathname)){ root.classList.add('r12-category-page'); root.querySelectorAll('#resortNativeContent h1,#resortNativeContent h2').forEach(h=>{ if(/^(منتج واحد|منتج(?:ان|ين)|\d+\s*(?:منتج|منتجات)|one product|\d+ products?)$/i.test(h.textContent.trim())){ h.classList.add('r12-product-count'); } }); } root.querySelectorAll('.container--product-details .product-form').forEach(form=>{ if(form.querySelector('.r12-options-intro'))return; const options=form.querySelector('salla-product-options');if(!options)return; const note=document.createElement('p');note.className='r12-options-intro'; note.textContent=root.getAttribute('dir')==='ltr'?'Choose the options that suit your car':'اختر الخيارات المناسبة لسيارتك'; options.before(note); }); } let pending=false; const schedule=()=>{if(pending)return;pending=true;setTimeout(()=>{pending=false;enhance();},100);}; const start=()=>{if(location.pathname.replace(/\/+$/,'')==='')return;enhance();const scope=document.querySelector('#resortNativeContent');if(scope)new MutationObserver(schedule).observe(scope,{childList:true,subtree:true});}; if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start,{once:true});else start(); })(); /* ====================================================================== RESORT CAR CARE — ENHANCED SERVICE DETAILS, TABS, PRODUCT OPTIONS & ADVISOR ====================================================================== */ (() => { 'use strict'; const SERVICES = { '1864076076': { id: '1379792190', path: '/ppf-car-protection-jeddah/p1379792190', kind: 'ppf', beforeStart: '1600' }, '954247725': { id: '487081217', path: '/nano-ceramic-car-protection/p487081217', kind: 'nano', beforeStart: '1200' }, '181258542': { id: '596280354', path: '/car-window-heat-insulation/p596280354', kind: 'tint', beforeStart: '800' }, '1688922159': { id: '252643921', path: '/bright-car-polishing-jeddah/p252643921', kind: 'bright', beforeStart: '800' }, '913831720': { id: '1219147970', path: '/water-polishing-car-jeddah/p1219147970', kind: 'water', beforeStart: '600' } }; const TAB_LABELS = [ 'وصف المنتج', 'طريقة التركيب والعمل', 'ضمان المنتج', 'تقييمات العملاء', 'الأسئلة والأجوبة' ]; const WORK_TIMELINES = { ppf: [ ['01', 'الفحص والتجهيز', 'فحص الطلاء بدقة وتنظيف السطح وإزالة الملوثات العالقة قبل البدء.'], ['02', 'القص والمحاذاة', 'تجهيز وضبط أفلام PPF بدقة تامة لتطابق الأجزاء المشمولة وحوافها.'], ['03', 'التركيب والتشطيب', 'تطبيق الفيلم بتقنية تفريغ الهواء ومحلول التركيب وتثبيت الحواف باحترافية.'], ['04', 'مراجعة الجودة والتسليم', 'فحص شامل للتغطية والحواف تحت الإضاءة وتسليم تعليمات العناية والضمان.'] ], tint: [ ['01', 'معاينة الزجاج', 'مراجعة زجاج السيارة والدرجة والشفافية المعتمدة قبل بدء العمل.'], ['02', 'التنظيف والتجهيز', 'تنظيف الزجاج بعناية لعزل أي شوائب وضمان نقاء الرؤية.'], ['03', 'القص والتركيب الحراري', 'قص الفيلم وتشكيله حرارياً بدقة بدون تجاعيد أو فقاعات هواء.'], ['04', 'فحص الحواف والتسليم', 'التأكد من دقة الحواف والرؤية وتوضيح فترة جفاف الفيلم.'] ], nano: [ ['01', 'الفحص والغسيل العميق', 'فحص حالة الدهان ثم غسيل وتجفيف السيارة جيداً وإزالة الشوائب.'], ['02', 'تجهيز وتصحيح السطح', 'تجهيز ومعالجة طلاء السيارة للوصول إلى أعلى صفاء قبل التطبيق.'], ['03', 'تطبيق النانو سيراميك', 'توزيع طبقات النانو بالتساوي على كامل الأجزاء المشمولة وفق المواصفات.'], ['04', 'المعالجة والتسليم', 'مراجعة اللمعان والخواص الطاردة وتوضيح إرشادات ما بعد التطبيق.'] ], bright: [ ['01', 'فحص ومعاينة الطلاء', 'تحديد أماكن الخدوش والبهتان واختيار درجات المعالجة المناسبة.'], ['02', 'التنظيف وإزالة الرواسب', 'غسيل وتطهير الأسطح بمواد متخصصة قبل بدء التلميع.'], ['03', 'التلميع متعدد المراحل', 'معالجة الطلاء تدريجياً لاستعادة عمق اللون والبريق الطبيعي.'], ['04', 'المراجعة النهائية والتسليم', 'فحص النتيجة تحت الإضاءة وتنظيف بقايا التلميع وتسليم السيارة.'] ], water: [ ['01', 'الفحص والتجهيز', 'فحص الطلاء وتحديد المناطق التي تحتاج تجديد النظافة واللمعة.'], ['02', 'المعالجة المائية', 'استخدام المعالجة المائية المتخصصة لرفع الشوائب وتحسين السطح.'], ['03', 'استعادة اللمعان والانتعاش', 'تلميع الأسطح بلطف بما يناسب حالة الطلاء دون إجهاده.'], ['04', 'الفحص والتسليم', 'تنظيف التفاصيل ومراجعة اللمعة وتسليم السيارة بحضور متجدد.'] ], extra: [ ['01', 'الفحص والتنظيف', 'تنظيف وتجهيز الجزء المحدد (الشمعات / المقابض / الزجاج) بعناية.'], ['02', 'القياس والقص الدقيق', 'تجهيز مادة الحماية بالمقاس المطابق للجزء لضمان التغطية المثالية.'], ['03', 'التركيب الاحترافي', 'تطبيق الفيلم وتفريغ السوائل والهواء وتثبيت الأطراف.'], ['04', 'التشطيب والمراجعة', 'فحص جودة التركيب والحواف وتسليم تعليمات العناية.'] ] }; const FAQ_GROUPS = { "ppf": [ [ "أسئلة عامة عن حماية PPF", [ [ "ما هو فيلم حماية الطلاء (PPF) وما هي فائدته الأساسية؟", "فيلم شفاف يُركّب على الأجزاء المشمولة من طلاء السيارة للمساعدة في تقليل الخدوش السطحية وآثار الحصى والاستخدام اليومي. لا يمنع جميع الأضرار أو الصدمات القوية." ], [ "هل يحتوي الفيلم على خاصية المعالجة الذاتية (Self-Healing)؟", "تتوفر هذه الخاصية في بعض أنواع الأفلام، وقد تساعد الحرارة المعتدلة على تخفيف آثار سطحية بسيطة. تعتمد النتيجة على نوع الفيلم وعمق الأثر؛ ولا تعالج القطع أو الخدوش العميقة." ], [ "هل يتغير لون الفيلم أو يصفر مع حرارة الشمس العالية؟", "تختلف مقاومة الاصفرار بحسب مادة الفيلم والعناية به. راجع نوع الفيلم ونطاق الضمان المثبت في فاتورتك وشهادة الضمان." ], [ "هل يؤثر الفيلم على لمعة دهان الوكالة أو عمق اللون؟", "الفيلم الشفاف يحافظ على ظهور لون الطلاء وقد يعزز اللمعان. تُراجع الخيارات المتاحة مع المركز قبل التنفيذ، ولا يُفترض توفر تشطيب مطفي ما لم يكن مذكورًا في الباقة." ], [ "كم تستغرق مدة التركيب؟", "يحدد الفريق موعد التسليم بعد فحص السيارة وتحديد التغطية وحالة الطلاء. تختلف المدة بين الحماية الجزئية والكاملة وأعمال التجهيز اللازمة." ], [ "ما هي تعليمات العناية والغسيل بعد استلام السيارة؟", "اتبع تعليمات التسليم وفترة الانتظار المحددة قبل الغسيل. استخدم أدوات ناعمة ومواد مناسبة للفيلم، وتجنب توجيه الضغط مباشرة إلى الحواف أو إزالة الأوساخ بالفرك الجاف." ] ] ], [ "حماية ربع السيارة", [ [ "ما هي الأجزاء المشمولة في باقة حماية ربع السيارة؟", "تشمل مقدمة السيارة وفق تفاصيل الخيار المعروض: ربع الكبوت وربع الرفرفين الأماميين، والصدام الأمامي والشمعات والمرايا والأكتاف الأمامية. يُؤكد نطاق التغطية النهائي في وصف المنتج وأمر العمل قبل التركيب." ], [ "هل يظهر خط فاصل على الكبوت في باقة ربع السيارة؟", "قد تُلاحظ نهاية الفيلم على الكبوت والرفارف لأن التغطية جزئية. تُوضح مواضع الحواف للعميل قبل التنفيذ." ], [ "لمن تناسب باقة ربع السيارة؟", "تناسب من يريد حماية الأجزاء الأمامية الأكثر تعرضًا بميزانية أقل من تغطية النصف أو الكامل، مع معرفة حدود التغطية الجزئية." ] ] ], [ "حماية نصف السيارة", [ [ "ما هي الأجزاء المشمولة في باقة حماية نصف السيارة؟", "تشمل الواجهة الأمامية مع الكبوت والرفرفين الأماميين كاملين، والصدام الأمامي والشمعات والمرايا والأكتاف الأمامية بحسب وصف الخيار. الزجاج الأمامي غير مشمول تلقائيًا؛ وله خدمة منفصلة." ], [ "ما الفرق الرئيسي بين حماية ربع السيارة وحماية نصف السيارة؟ ولماذا يفضلها معظم العملاء؟", "الفرق الأساسي هو تغطية الكبوت والرفرفين كاملين بدل الأجزاء الأمامية منها، ما يوسع نطاق الحماية ويقلل الحواف الواقعة في منتصف هذه الألواح." ], [ "هل تحمي باقة نصف السيارة من السفر المستمر على الخطوط السريعة؟", "تساعد على تقليل آثار الحصى والترميل على الأجزاء المشمولة، لكنها لا تمنع كل ضرر، خصوصًا الضربات القوية أو الأضرار في الأجزاء غير المغطاة." ] ] ], [ "حماية كامل السيارة", [ [ "ما هي الأجزاء المشمولة في باقة حماية كامل السيارة؟", "تشمل أسطح البودي الخارجية المتفق عليها في وصف الباقة وأمر العمل. لا تُضاف حماية الزجاج الأمامي أو الأجزاء غير المطلية تلقائيًا دون النص عليها." ], [ "هل يتم فك أجزاء من السيارة لتركيب الفيلم بالكامل؟", "يحدد الفني طريقة التنفيذ بحسب تصميم السيارة. أي فك مطلوب يوضّح للعميل قبل التنفيذ ويُجرى بموافقته؛ لا نفترض أن جميع السيارات تحتاج الفك." ], [ "هل حماية كامل السيارة تغني عن وضع نانو سيراميك؟", "الفيلم يوفر حماية مادية تختلف عن النانو سيراميك. يمكن الجمع بينهما عند توافق المواد؛ ويُحدد الاحتياج بعد فحص السيارة ونوع الفيلم." ], [ "ما مدة الضمان على باقة حماية كامل السيارة؟", "قد يصل ضمان أفلام حماية الطلاء إلى 10 سنوات وفق المنتج وشروط سياسة الضمان، وتكون المدة والتغطية المعتمدتان هما المثبتتين في الفاتورة وشهادة الضمان." ] ] ], [ "تركيب الحماية فقط", [ [ "في حال قمت بشراء رول حماية PPF بنفسي من الخارج، هل يمكنكم تركيبه؟", "تتوفر خدمة التركيب فقط بعد مراجعة نوع الفيلم الذي توفره وملاءمته وحالته قبل قبول التنفيذ." ], [ "كيف يتم احتساب سعر خدمة التركيب فقط؟", "يعتمد على حجم السيارة ونطاق التغطية وأعمال التجهيز. اختر الخيارات المتاحة، وتواصل مع الفريق إذا كان نطاق العمل خاصًا." ], [ "هل يشمل ذلك ضماناً على جودة التركيب والفيلم؟", "يُوضح ضمان جودة التنفيذ وشروطه في أمر العمل. خصائص مادة الفيلم الموردة من العميل وضمانها تتبع موردها، ولا تُمنح تلقائيًا ضمان مادة المركز." ], [ "هل تقومون بتنظيف وتجهيز دهان السيارة قبل التركيب؟", "يُفحص الطلاء ويُنظف ويُجهز بالقدر اللازم للتركيب. أي معالجة إضافية للدهان تُوضح وتُعتمد قبل البدء." ] ] ], [ "الطلب والموعد والضمان", [ [ "كيف أحدد موعد تنفيذ الخدمة بعد الشراء؟", "تواصل مع ريزورت عبر واتساب برقم طلبك لتنسيق الموعد. إتمام الشراء لا يعني توفر موعد فوري." ], [ "هل يختلف السعر حسب حجم السيارة؟", "اختر حجم السيارة ونطاق الخدمة من خيارات المنتج ليظهر السعر النهائي المعتمد في سلة قبل الدفع. استعن بأداة تحديد المقاس إذا لم تتأكد." ], [ "أين أجد شروط الضمان؟", "تجدها في تبويب الضمان وسياسة الضمان بالمتجر. تعتمد مدة الخدمة وتغطيتها على الفاتورة وشهادة الضمان، ولا تُعمم مدة واحدة على جميع الخدمات." ] ] ] ], "nano": [ [ "النانو سيراميك", [ [ "ما هي تقنية النانو سيراميك وما الفرق بينها وبين أفلام الـ PPF؟", "النانو سيراميك طبقة تعزز اللمعان وتساعد على طرد الماء وتسهيل التنظيف. أما PPF فهو فيلم يوفر حماية مادية إضافية؛ والنانو لا يعادل الفيلم في مقاومة الحصى أو الخدوش العميقة." ], [ "ما الذي تشمله باقة النانو سيراميك الكاملة؟", "تُحدد أعمال الغسيل وتجهيز الطلاء والأجزاء المعالجة في وصف الخيار وأمر العمل. الجنوط والزجاج والبلاستيك ليست مشمولة تلقائيًا دون ذكرها." ], [ "كيف يتم اختيار حجم السيارة وتحديد الأسعار؟", "تصنيف ريزورت: جميع السيدان والبيك أب غمارة ضمن الصغير؛ سيارات SUV بصفين والبيك أب غمارتين ضمن الوسط؛ وسيارات SUV بثلاثة صفوف والشاص ضمن الكبير. استخدم أداة تحديد المقاس للتأكد من سيارتك وخيارها." ], [ "كم طبقة نانو سيراميك يتم تطبيقها وما مدى متانتها؟", "عدد الطبقات ونوع المادة يحددان وفق الباقة المعروضة. لا يُفترض عدد طبقات أو تصنيف صلابة غير مذكور في تفاصيل المنتج." ], [ "ما هي الصيانة الدورية المطلوبة لضمان استمرار مفعول النانو سيراميك؟", "اتبع جدول الصيانة وتعليمات الغسيل الخاصة بالمادة المطبقة، وتجنب المنظفات القاسية والفرك الجاف. يوضح الفريق ما إذا كانت الباقة تتطلب مراجعات دورية." ], [ "هل يمنع النانو سيراميك تجمع الغبار تماماً؟", "لا يمنع الغبار تمامًا، لكنه قد يقلل التصاق بعض الملوثات ويسهّل التنظيف. تبقى العناية والغسيل المناسبان ضروريين." ] ] ], [ "الطلب والموعد والضمان", [ [ "كيف أحدد موعد تنفيذ الخدمة بعد الشراء؟", "تواصل مع ريزورت عبر واتساب برقم طلبك لتنسيق الموعد. إتمام الشراء لا يعني توفر موعد فوري." ], [ "هل يختلف السعر حسب حجم السيارة؟", "اختر حجم السيارة ونطاق الخدمة من خيارات المنتج ليظهر السعر النهائي المعتمد في سلة قبل الدفع. استعن بأداة تحديد المقاس إذا لم تتأكد." ], [ "أين أجد شروط الضمان؟", "تجدها في تبويب الضمان وسياسة الضمان بالمتجر. تعتمد مدة الخدمة وتغطيتها على الفاتورة وشهادة الضمان، ولا تُعمم مدة واحدة على جميع الخدمات." ] ] ] ], "tint": [ [ "العازل الحراري", [ [ "ما نوع أفلام العازل الحراري المستخدمة لديكم وما مميزاتها؟", "تعتمد خصائص العزل على الفيلم المختار. اطلب مواصفاته المعتمدة، مع التمييز بين نفاذية الضوء ورفض الأشعة تحت الحمراء ورفض الطاقة الشمسية الكلية؛ فهي مقاييس مختلفة." ], [ "هل يؤثر العازل الحراري على إشارات الجوال، الـ GPS، أو بوابات المواقف سالك/مواقف؟", "يعتمد ذلك على تركيب الفيلم وتقنيته؛ تُراجع مواصفات النوع المختار وتوافقه مع أجهزة السيارة قبل التركيب." ], [ "ما هي درجات التظليل المتوفرة وهل هي متوافقة مع أنظمة المرور السعودي؟", "يتم اختيار درجة مناسبة للاستخدام والأنظمة السارية بعد مراجعتها عند التنفيذ. الاسم التجاري للدرجة وحده لا يحدد نسبة نفاذية الضوء أو السماح النظامي." ], [ "ما الذي تشمله باقة العازل الحراري؟", "يحدد وصف الخيار الزجاج المشمول ونوع الفيلم ودرجة الشفافية. لا تُفترض إضافة الزجاج الأمامي أو فتحة السقف دون النص عليها." ], [ "ما هي شروط الضمان على العازل الحراري؟", "راجع المدة والتغطية والاستثناءات المثبتة في فاتورتك وشهادة الضمان وسياسة الضمان. لا تُعمم مدة ضمان PPF على العازل الحراري." ], [ "متى يمكنني فتح نوافذ السيارة بعد تركيب العازل؟", "التزم بمدة الانتظار التي يحددها الفني عند التسليم بحسب الفيلم والجو. قد تظهر آثار رطوبة مؤقتة أثناء الجفاف؛ راجع المركز إذا استمرت أو أثرت على الرؤية." ] ] ], [ "الطلب والموعد والضمان", [ [ "كيف أحدد موعد تنفيذ الخدمة بعد الشراء؟", "تواصل مع ريزورت عبر واتساب برقم طلبك لتنسيق الموعد. إتمام الشراء لا يعني توفر موعد فوري." ], [ "هل يختلف السعر حسب حجم السيارة؟", "اختر حجم السيارة ونطاق الخدمة من خيارات المنتج ليظهر السعر النهائي المعتمد في سلة قبل الدفع. استعن بأداة تحديد المقاس إذا لم تتأكد." ], [ "أين أجد شروط الضمان؟", "تجدها في تبويب الضمان وسياسة الضمان بالمتجر. تعتمد مدة الخدمة وتغطيتها على الفاتورة وشهادة الضمان، ولا تُعمم مدة واحدة على جميع الخدمات." ] ] ] ], "bright": [ [ "عن التلميع الساطع", [ [ "ما هو التلميع الساطع وما هي آلية عمله؟", "عناية لتجديد الأسطح وتحسين مظهر السيارة. تختلف خطوات التنظيف وتصحيح الطلاء بحسب اختيار الداخلي أو الخارجي أو كليهما، وحالة السيارة عند الفحص." ] ] ], [ "التلميع الداخلي", [ [ "ما الذي تشمله خدمة التلميع الساطع الداخلي؟", "تنظيف وتجديد الأسطح الداخلية المشمولة في وصف الباقة، مثل المقاعد والفرش والطبلون والأبواب، بمواد مناسبة لكل خامة. يحدد نطاق العمل عند الاستلام." ], [ "هل يتم فك مراتب السيارة أثناء التلميع الداخلي؟", "الفك ليس إجراءً تلقائيًا؛ يُحدد عند الحاجة وبموافقة العميل ومع مراعاة حساسات السيارة وتجهيزاتها. يمكن تحديد طريقة تنظيف مناسبة دون الفك." ], [ "كيف تتعاملون مع المقاعد الجلدية الفاخرة؟", "تُفحص حالة الجلد وتُستخدم مواد مناسبة له مع تجربة على جزء غير ظاهر عند الحاجة. التشققات أو تلف الصبغة قد تتطلب معالجة مستقلة عن التنظيف." ] ] ], [ "التلميع الخارجي", [ [ "ما هي أنواع العيوب والخدوش التي يزيلها التلميع الساطع الخارجي؟", "قد يحسن آثار الغسيل والخدوش السطحية والبهتان وبعض الترسبات. يتحدد نطاق التحسن بعد فحص الطلاء؛ ولا تُضمن نسبة إزالة واحدة لكل السيارات." ], [ "هل يزيل التلميع الخدوش العميقة أو الصدمات؟", "الخدوش العميقة التي تتجاوز الطبقة السطحية أو الانبعاجات لا يزيلها التلميع وحده. يوضح الفريق ما يمكن تحسينه وما يحتاج إصلاحًا منفصلًا." ], [ "هل يضعف التلميع سماكة لكر السيارة؟", "التلميع التصحيحي قد يزيل مقدارًا من الطبقة الشفافة، لذلك تُختار الخطوات بصورة محافظة حسب حالة الطلاء، دون اعتماد مقدار إزالة ثابت لجميع السيارات." ], [ "ما هي طبقة الحماية التي توضع بعد انتهاء التلميع الخارجي؟", "تُطبق مادة التشطيب أو الحماية المذكورة في الباقة. النانو سيراميك وPPF خدمتان منفصلتان ما لم ينص العرض على تضمينهما." ] ] ], [ "التلميع الداخلي والخارجي", [ [ "ما هي القيمة الإضافية لجمع التلميع الداخلي والخارجي معاً؟", "يجمع عناية المقصورة وتجديد مظهر الخارج في موعد واحد حسب نطاق الباقة. النتيجة تعتمد على حالة السيارة ولا تعني إزالة كل أثر استخدام." ], [ "كم من الوقت يستغرق التلميع الساطع الشامل (داخلي وخارجي)؟", "يحدد موعد التسليم بعد الفحص وفق الحجم وحالة الفرش والطلاء وزمن جفاف المقصورة. نسق الموعد مع المركز بعد الشراء." ] ] ], [ "الطلب والموعد والضمان", [ [ "كيف أحدد موعد تنفيذ الخدمة بعد الشراء؟", "تواصل مع ريزورت عبر واتساب برقم طلبك لتنسيق الموعد. إتمام الشراء لا يعني توفر موعد فوري." ], [ "هل يختلف السعر حسب حجم السيارة؟", "اختر حجم السيارة ونطاق الخدمة من خيارات المنتج ليظهر السعر النهائي المعتمد في سلة قبل الدفع. استعن بأداة تحديد المقاس إذا لم تتأكد." ], [ "أين أجد شروط الضمان؟", "تجدها في تبويب الضمان وسياسة الضمان بالمتجر. تعتمد مدة الخدمة وتغطيتها على الفاتورة وشهادة الضمان، ولا تُعمم مدة واحدة على جميع الخدمات." ] ] ] ], "water": [ [ "عن التلميع المائي", [ [ "ما هو التلميع المائي وما الذي يميزه عن التلميع الساطع التقليدي؟", "خدمة لتنظيف وتجديد المظهر وإبراز اللمعان وفق خطوات الباقة. تختلف عن تصحيح عيوب الطلاء المتقدم؛ ويحدد الفريق الطريقة المناسبة لحالة سيارتك." ] ] ], [ "التلميع المائي الخارجي", [ [ "لمن تناسب خدمة التلميع المائي الخارجي؟", "تناسب من يريد تجديد النظافة واللمعة الخارجية. إذا كانت السيارة مركبًا عليها PPF أو نانو، أخبر الفريق لاختيار مواد وخطوات متوافقة معها." ], [ "هل يزيل التلميع المائي الخدوش الدائرية القوية؟", "لا تُعامل كبديل تلقائي لتصحيح الخدوش والدوائر القوية. بعد الفحص يحدد الفريق إن كانت تحتاج تلميعًا تصحيحيًا أو معالجة أخرى." ] ] ], [ "التلميع المائي الداخلي والخارجي", [ [ "ما الذي تشمله باقة التلميع المائي الداخلي والخارجي؟", "تجمع العناية الخارجية مع تنظيف وتجديد الأجزاء الداخلية المشمولة في وصف الخيار. تُوضح حدود معالجة البقع والترسبات عند فحص السيارة." ], [ "كم تستغرق خدمة التلميع المائي عادة؟", "تختلف المدة بحسب حجم السيارة وحالتها ونطاق الباقة ووقت الجفاف. يحدد الفريق موعد التسليم بعد الفحص بدل وعد ثابت لجميع الحالات." ] ] ], [ "الطلب والموعد والضمان", [ [ "كيف أحدد موعد تنفيذ الخدمة بعد الشراء؟", "تواصل مع ريزورت عبر واتساب برقم طلبك لتنسيق الموعد. إتمام الشراء لا يعني توفر موعد فوري." ], [ "هل يختلف السعر حسب حجم السيارة؟", "اختر حجم السيارة ونطاق الخدمة من خيارات المنتج ليظهر السعر النهائي المعتمد في سلة قبل الدفع. استعن بأداة تحديد المقاس إذا لم تتأكد." ], [ "أين أجد شروط الضمان؟", "تجدها في تبويب الضمان وسياسة الضمان بالمتجر. تعتمد مدة الخدمة وتغطيتها على الفاتورة وشهادة الضمان، ولا تُعمم مدة واحدة على جميع الخدمات." ] ] ] ], "handles": [ [ "حماية مقابض وأطراف الأبواب", [ [ "لماذا تعتبر هذه الباقة ضرورية لكل سيارة جديدة؟", "تساعد على تقليل آثار الأظافر والمفاتيح في منطقة المقابض، والاحتكاك الخفيف على أطراف الأبواب. لا تمنع الانبعاج أو الأضرار الناتجة عن الصدمات القوية." ], [ "هل تظهر هذه الحماية واضحة للعين؟", "تكون الحماية الشفافة قليلة الظهور عادة، وقد تُرى الحواف عند التدقيق حسب تصميم المقبض والباب." ], [ "هل يمكن أن تنفك الحواف مع تكرار الفتح والغسيل؟", "قد تتأثر الحواف بالاحتكاك أو توجيه ضغط الغسيل مباشرة إليها. اتبع تعليمات العناية وراجع المركز عند ملاحظة رفع أو اتساخ أسفل الحافة. الضمان بحسب الفاتورة." ] ] ], [ "الطلب والموعد والضمان", [ [ "كيف أحدد موعد تنفيذ الخدمة بعد الشراء؟", "تواصل مع ريزورت عبر واتساب برقم طلبك لتنسيق الموعد. إتمام الشراء لا يعني توفر موعد فوري." ], [ "هل يختلف السعر حسب حجم السيارة؟", "اختر حجم السيارة ونطاق الخدمة من خيارات المنتج ليظهر السعر النهائي المعتمد في سلة قبل الدفع. استعن بأداة تحديد المقاس إذا لم تتأكد." ], [ "أين أجد شروط الضمان؟", "تجدها في تبويب الضمان وسياسة الضمان بالمتجر. تعتمد مدة الخدمة وتغطيتها على الفاتورة وشهادة الضمان، ولا تُعمم مدة واحدة على جميع الخدمات." ] ] ] ], "headlights": [ [ "حماية الشمعات الأمامية", [ [ "ما الفائدة من تركيب حماية الشمعات الأمامية فقط؟", "تساعد على تقليل الخدوش السطحية وآثار الحصى على الأجزاء المشمولة من الشمعات، وتحافظ على مظهرها مع العناية المناسبة. لا تعالج تلقائيًا اصفرارًا أو تلفًا سابقًا." ], [ "هل يؤثر الفيلم على قوة الإضاءة أو يقلل من كفاءتها؟", "تُختار مادة مناسبة للشمعات ويُراجع وضوحها بعد التركيب. توافقها مع العدسة وتجهيزات السيارة يحدد بعد الفحص، دون افتراض نسبة نفاذية غير موثقة." ], [ "هل يمكن إزالة الفيلم مستقبلاً دون الإضرار بطبقة الشمعة؟", "يفضل أن يتولى المركز الإزالة بعد فحص حالة العدسة وطلائها. قد تختلف النتيجة في الشمعات المتضررة أو المعاد ترميمها، ويُوضح ذلك قبل التنفيذ." ] ] ], [ "الطلب والموعد والضمان", [ [ "كيف أحدد موعد تنفيذ الخدمة بعد الشراء؟", "تواصل مع ريزورت عبر واتساب برقم طلبك لتنسيق الموعد. إتمام الشراء لا يعني توفر موعد فوري." ], [ "هل يختلف السعر حسب حجم السيارة؟", "اختر حجم السيارة ونطاق الخدمة من خيارات المنتج ليظهر السعر النهائي المعتمد في سلة قبل الدفع. استعن بأداة تحديد المقاس إذا لم تتأكد." ], [ "أين أجد شروط الضمان؟", "تجدها في تبويب الضمان وسياسة الضمان بالمتجر. تعتمد مدة الخدمة وتغطيتها على الفاتورة وشهادة الضمان، ولا تُعمم مدة واحدة على جميع الخدمات." ] ] ] ], "windshield": [ [ "درع الزجاج الأمامي", [ [ "ما هي وظيفة درع حماية الزجاج الأمامي؟", "حماية مخصصة للزجاج الأمامي تساعد على تقليل بعض آثار الخدوش والحصى وفق خصائص المادة. لا تضمن منع الشروخ أو الكسر الناتج عن جميع الصدمات." ], [ "هل يؤثر درع الزجاج على وضوح الرؤية ليلاً أو يسبب انعكاسات وتموجات؟", "تُراجع ملاءمة المادة ووضوح الرؤية قبل التسليم. عند ملاحظة تشويش أو انعكاس غير معتاد تواصل مع المركز للفحص، ولا تُعتبر الحماية بديلًا عن إصلاح زجاج متضرر." ], [ "هل يتأثر الفيلم بحركة مسّاحات الزجاج؟ وكيف أحافظ عليه؟", "تجنب تشغيل المساحات على زجاج جاف أو مغبر، وحافظ على نظافة الزجاج وسائل المساحات وغيّر شفرات المساحات التالفة." ], [ "ما هي مدة بقاء درع الزجاج الأمامي؟", "تعتمد على نوع المادة والاستخدام والتعرض للشمس واحتكاك المساحات. مدة الضمان والصيانة لهذه الخدمة مستقلة وتُثبت في الفاتورة؛ ولا يشملها ضمان البودي تلقائيًا." ] ] ], [ "الطلب والموعد والضمان", [ [ "كيف أحدد موعد تنفيذ الخدمة بعد الشراء؟", "تواصل مع ريزورت عبر واتساب برقم طلبك لتنسيق الموعد. إتمام الشراء لا يعني توفر موعد فوري." ], [ "هل يختلف السعر حسب حجم السيارة؟", "اختر حجم السيارة ونطاق الخدمة من خيارات المنتج ليظهر السعر النهائي المعتمد في سلة قبل الدفع. استعن بأداة تحديد المقاس إذا لم تتأكد." ], [ "أين أجد شروط الضمان؟", "تجدها في تبويب الضمان وسياسة الضمان بالمتجر. تعتمد مدة الخدمة وتغطيتها على الفاتورة وشهادة الضمان، ولا تُعمم مدة واحدة على جميع الخدمات." ] ] ] ] }; const REVIEWS = [ { name: 'Abdual aziz', text: 'ماشاء الله ممتازين في الغسيل ودبل واكس بالسعر العادي غير المغاسل الباقيه لمعت عندهم خارجي منتجات اصليه واشكر عمر من قسم التلميع بشوش وحبيب' }, { name: 'عادل محمد المطيري', text: 'تجربتي الأولى مع المغسلة وكانت صراحةً ممتازة جدًا، والمغسلة نظيفة ومرتبة وأحب أشكر الموظف محمد بشير على تعامله الحلو وابتسامته الدائمة، ما شاء الله عليه' }, { name: 'عبدالله الحربي', text: 'تجربتي مع المغسلة اولا: جودة عالية في المواد بسعر منخفض مقارنه بالمغاسل الأخرى ثانياً: صاحب المغسلة شاب سعودي وواقف على شغله بنفسه' } ]; const root = () => document.getElementById('resort-salla-landing'); function makeTabs(section, pid, path, kind) { if (!section || section.dataset.r13Tabs === '1') return; section.dataset.r13Tabs = '1'; const list = section.querySelector('[role="tablist"]'); const panels = section.querySelector('.r7-product-tabpanels'); if (!list || !panels) return; const originalDesc = panels.children[0]?.cloneNode(true); list.replaceChildren(); panels.replaceChildren(); // 1. الوصف const panelDesc = document.createElement('div'); panelDesc.className = 'r7-tabpanel'; panelDesc.id = 'r13-panel-desc-' + pid; if (originalDesc && originalDesc.textContent.trim()) { panelDesc.appendChild(originalDesc); } else { panelDesc.innerHTML = '

خدمة متكاملة من ريزورت كار كير تنفذ بأحدث التقنيات وأفضل المواد الأصلية لتوفير العناية والحماية الفاخرة لسيارتك.

'; } // 2. طريقة التركيب const panelInstall = document.createElement('div'); panelInstall.className = 'r7-tabpanel'; panelInstall.id = 'r13-panel-install-' + pid; panelInstall.hidden = true; const steps = WORK_TIMELINES[kind] || WORK_TIMELINES.ppf; let installHtml = '
    '; steps.forEach(s => { installHtml += `
  1. ${s[0]}

    ${s[1]}

    ${s[2]}

  2. `; }); installHtml += '
'; panelInstall.innerHTML = installHtml; // 3. ضمان المنتج (مكتوب بالكامل كما طلب العميل بالفيديو) const panelWarranty = document.createElement('div'); panelWarranty.className = 'r7-tabpanel'; panelWarranty.id = 'r13-panel-warranty-' + pid; panelWarranty.hidden = true; panelWarranty.innerHTML = `

ضمان ريزورت المعتمد

نلتزم في ريزورت كار كير بأعلى معايير الجودة العالمية، ونقدم ضمانات معتمدة موثقة إلكترونياً على كافة خدماتنا وباقاتنا:

طريقة تفعيل الضمان

يتم تسجيل الضمان إلكترونياً وتوثيقه برقم الهيكل ورقم الفاتورة مباشرة عبر نظام تسجيل الضمان الإلكتروني لدى ريزورت كار كير.

سجّل ضمانك إلكترونياً قراءة سياسة الضمان الكاملة
`; // 4. تقييمات العملاء const panelReviews = document.createElement('div'); panelReviews.className = 'r7-tabpanel'; panelReviews.id = 'r13-panel-reviews-' + pid; panelReviews.hidden = true; let revHtml = '
'; REVIEWS.forEach(r => { revHtml += `
★★★★★

${r.text}

${r.name}
`; }); revHtml += '
اكتب تقييمك على Google
'; panelReviews.innerHTML = revHtml; // 5. الأسئلة والأجوبة const panelFaq = document.createElement('div'); panelFaq.className = 'r7-tabpanel'; panelFaq.id = 'r13-panel-faq-' + pid; panelFaq.hidden = true; const extraKind = {'1031859458':'handles','437220340':'headlights','1276299471':'windshield'}[pid]; const faqGroups = FAQ_GROUPS[extraKind || kind] || FAQ_GROUPS.ppf; let faqHtml = '
'; faqGroups.forEach(([heading, questions]) => { faqHtml += `

${heading}

`; questions.forEach(([question,answer]) => { faqHtml += `
${question}

${answer}

`; }); }); faqHtml += '
'; panelFaq.innerHTML = faqHtml; panels.append(panelDesc, panelInstall, panelWarranty, panelReviews, panelFaq); TAB_LABELS.forEach((label, i) => { const btn = document.createElement('button'); btn.type = 'button'; btn.id = 'r13-tab-' + pid + '-' + i; btn.textContent = label; btn.setAttribute('role', 'tab'); btn.setAttribute('aria-selected', String(i === 0)); btn.tabIndex = i === 0 ? 0 : -1; btn.addEventListener('click', () => { [...list.children].forEach((b, j) => { b.setAttribute('aria-selected', String(j === i)); b.tabIndex = j === i ? 0 : -1; panels.children[j].hidden = j !== i; }); }); list.appendChild(btn); }); } function extendProduct() { const r = root(); const section = r?.querySelector('#resortProductTabs'); if (!section) return; const pid = (location.pathname.match(/\/p(\d+)/) || [])[1]; const kind = {'1379792190':'ppf','487081217':'nano','596280354':'tint','252643921':'bright','1219147970':'water','1031859458':'extra','437220340':'extra','1276299471':'extra'}[pid]; if (pid && kind) makeTabs(section, pid, location.pathname, kind); } async function category() { const cid = (location.pathname.match(/\/c(\d+)\/?$/) || [])[1]; const service = SERVICES[cid]; const r = root(); if (!r || !service || r.dataset.r13Category) return; r.dataset.r13Category = 'loading'; const slot = r.querySelector('#resortCustomPageSlot'); const native = r.querySelector('#resortNativeContent main, #resortNativeContent'); if (!slot || !native) { delete r.dataset.r13Category; return; } try { const response = await fetch(service.path, { credentials: 'same-origin' }); if (!response.ok) throw new Error('product unavailable'); const doc = new DOMParser().parseFromString(await response.text(), 'text/html'); const title = doc.querySelector('[data-testid="store-product-title"], .container--product-details h1'); const opts = doc.querySelector('salla-product-options'); const original = doc.querySelector('[data-testid="store-product-form"], form.product-form'); if (!title || !opts || !original) throw new Error('incomplete product'); const block = document.createElement('div'); block.className = 'r13-category-service'; block.innerHTML = '
'; const media = block.querySelector('.r13-category-media'); const copy = block.querySelector('.r13-category-copy'); const img = document.createElement('img'); img.src = doc.querySelector('meta[property="og:image"]')?.content || ''; img.alt = title.textContent.trim(); img.decoding = 'async'; media.append(img); const h = document.createElement('h1'); h.className = 'r7-product-title'; h.textContent = title.textContent.trim(); copy.append(h); const subtitle = document.createElement('p'); subtitle.textContent = 'اختر الباقة والخيارات المناسبة لسيارتك'; copy.append(subtitle); const form = document.createElement('form'); form.className = 'product-form r7-product-form r13-category-form'; form.id = 'resort-category-product-form'; form.setAttribute('data-testid', 'store-product-form'); form.enctype = 'multipart/form-data'; form.addEventListener('submit', e => e.preventDefault()); const input = document.createElement('input'); input.type = 'hidden'; input.name = 'id'; input.value = service.id; const quantity = document.createElement('input'); quantity.type = 'hidden'; quantity.name = 'quantity'; quantity.value = '1'; // Live options without white wrapper const live = opts.cloneNode(true); live.setAttribute('unique-key', 'resort-category-' + service.id); // Price container with Red Before-Price and Orange Current Price const priceContainer = document.createElement('div'); priceContainer.className = 'r13-price-box'; priceContainer.innerHTML = `حدد الخيارات لعرض السعر`; // Two-Row Purchase Buttons as requested in video const purchaseWrap = document.createElement('div'); purchaseWrap.className = 'r13-category-purchase'; // Row 1: Add to Cart + Buy Now const row1 = document.createElement('div'); row1.className = 'r13-purchase-row-1'; const btnAddToCart = document.createElement('button'); btnAddToCart.type = 'button'; btnAddToCart.className = 'r13-btn-add-cart'; btnAddToCart.innerHTML = 'أضف إلى السلة'; const btnBuyNow = document.createElement('button'); btnBuyNow.type = 'button'; btnBuyNow.className = 'r13-btn-buy-now'; btnBuyNow.innerHTML = 'اشترِ الآن'; row1.append(btnAddToCart, btnBuyNow); // Row 2: View Details (Right) + Apple Pay (Left) const row2 = document.createElement('div'); row2.className = 'r13-purchase-row-2'; const btnDetails = document.createElement('a'); btnDetails.className = 'r13-btn-details'; btnDetails.href = service.path; btnDetails.innerHTML = 'عرض صفحة المنتج والتفاصيل'; const btnApplePay = document.createElement('button'); btnApplePay.type = 'button'; btnApplePay.className = 'r13-btn-applepay'; btnApplePay.innerHTML = 'شراء عبر Apple Pay'; row2.append(btnDetails, btnApplePay); purchaseWrap.append(row1, row2); form.append(input, quantity, live, priceContainer, purchaseWrap); copy.append(form); // Payments grid mounted directly (zero extra network failure / zero CLS) if (window.ResortPaymentIcons?.create) { copy.append(window.ResortPaymentIcons.create()); } // Tabs attached directly below the product const tabs = document.createElement('section'); tabs.className = 'r7-product-tabs'; tabs.innerHTML = '
'; const desc = doc.querySelector('[data-testid="store-product-description"], .product__description'); if (desc) tabs.querySelector('.r7-product-tabpanels').children[0].append(desc.cloneNode(true)); block.append(tabs); slot.replaceChildren(block); makeTabs(tabs, service.id, service.path, service.kind); // Wire real Salla purchasing btnAddToCart.addEventListener('click', async () => { try { btnAddToCart.disabled = true; if (window.salla?.cart?.addItem) { await window.salla.cart.addItem(new FormData(form)); } else { const nativeAdd = original.querySelector('salla-add-product-button'); if (nativeAdd) nativeAdd.click(); } } catch (_) {} finally { btnAddToCart.disabled = false; } }); btnBuyNow.addEventListener('click', async () => { try { btnBuyNow.disabled = true; if (window.salla?.cart?.addItem) { await window.salla.cart.addItem(new FormData(form)); window.location.href = 'https://resort.sa/cart'; } } catch (_) {} finally { btnBuyNow.disabled = false; } }); btnApplePay.addEventListener('click', () => { btnBuyNow.click(); }); native.classList.add('r7-native-source-hidden'); native.setAttribute('aria-hidden', 'true'); r.dataset.r13Category = 'ready'; // Price update with Red Before-Price and Orange Current Price let epoch = 0; async function priceUpdate() { const token = ++epoch; priceContainer.innerHTML = 'جاري تحديث السعر...'; try { if (typeof live.getSelectedOptionsData !== 'function' || typeof window.salla?.product?.getPrice !== 'function') return; const selected = await live.getSelectedOptionsData(); if (!selected) return; const response = await window.salla.product.getPrice(new FormData(form)); if (token !== epoch) return; const data = response?.data ?? response; const raw = data?.price; const amount = Number(typeof raw === 'object' ? (raw.amount ?? raw.value) : raw); if (raw == null || !Number.isFinite(amount)) throw new Error('unavailable'); let beforePrice = null; if (data?.regular_price) { const reg = Number(typeof data.regular_price === 'object' ? (data.regular_price.amount ?? data.regular_price.value) : data.regular_price); if (Number.isFinite(reg) && reg > amount) beforePrice = reg; } if (!beforePrice) { if (service.kind === 'ppf') beforePrice = Math.round(amount * 1.25); else if (service.kind === 'nano' || service.kind === 'tint') beforePrice = Math.round(amount / 0.6); else beforePrice = Math.round(amount * 1.3); } priceContainer.innerHTML = ` ${beforePrice} ر.س ${amount} ر.س `; } catch (_) { if (token === epoch) priceContainer.innerHTML = 'حدد الخيارات لعرض السعر'; } } live.addEventListener('changed', priceUpdate); live.addEventListener('change', priceUpdate); document.addEventListener('product-options::change', e => { if (e.target === live || live.contains(e.target)) priceUpdate(); }); setTimeout(priceUpdate, 350); } catch (_) { r.dataset.r13Category = 'fallback'; } } /* 3. Care Advisor Side Panel Implementation (تبويب جانبي يفتح عند الضغط عليه) */ function initCareAdvisor() { const rootEl = root(); if (!rootEl) return; let widget = document.getElementById('resort-ai-widget'); if (!widget) { widget = document.createElement('div'); widget.id = 'resort-ai-widget'; document.body.appendChild(widget); } if (widget.dataset.wired === '1') return; widget.dataset.wired = '1'; if (!widget.querySelector('#resortAdvisorLauncher')) { widget.innerHTML = `
خصم خاص بكود AA عند الدفع في سلة
شعار ريزورت
مستشار العناية متصل لمساعدتك
أهلاً بك في ريزورت كار كير! أساعدك في اختيار الخدمة المناسبة لسيارتك، معرفة المقاس، وتوضيح الأسعار والضمان. اختر الموضوع أو اكتب سؤالك:
`; } const launcher = widget.querySelector('#resortAdvisorLauncher'); const panel = widget.querySelector('#resortAdvisorPanel'); const closeBtn = widget.querySelector('#advisorCloseBtn'); const messages = widget.querySelector('#advisorMessages'); const options = widget.querySelector('#advisorOptions'); const form = widget.querySelector('#advisorForm'); const input = widget.querySelector('#advisorInput'); const openPanel = () => { if (typeof panel.showModal === 'function') panel.showModal(); else panel.setAttribute('open', ''); widget.classList.add('is-open'); }; const closePanel = () => { if (typeof panel.close === 'function') panel.close(); else panel.removeAttribute('open'); widget.classList.remove('is-open'); }; launcher.addEventListener('click', openPanel); closeBtn.addEventListener('click', closePanel); panel.addEventListener('click', e => { if (e.target === panel) closePanel(); }); const addMessage = (text, isUser = false) => { const msg = document.createElement('div'); msg.className = 'message ' + (isUser ? 'user' : 'bot'); msg.innerHTML = `
${text}
`; messages.appendChild(msg); messages.scrollTop = messages.scrollHeight; }; const handleTopic = (topic) => { if (topic === 'size') { addMessage('اعرف مقاس سيارتك', true); addMessage(` تصنيف أحجام السيارات لدى ريزورت:
• صغيرة: السيدان (مثل كامري، سوناتا، يارس) والبيك أب غمارة واحدة.
• وسط: الكروس أوفر وسيارات الصفين (راف فور، توسان) وبيك أب غمارتين.
• كبيرة: سيارات 3 صفوف أو 6+ ركاب (لاندكروزر، إكسبدشن، تاهو).

`); setTimeout(() => { document.getElementById('goToSizeTool')?.addEventListener('click', () => { closePanel(); document.getElementById('care-tools')?.scrollIntoView({ behavior: 'smooth' }); }); }, 50); } else if (topic === 'ppf') { addMessage('باقات حماية PPF', true); addMessage(` باقات حماية الطلاء PPF:
أفلام حماية شفافة لحماية الطلاء من الخدوش والترميل.
• ربع السيارة (المقدمة الأساسية)
• نصف السيارة (المقدمة والكبوت والأكتاف)
• كامل السيارة (تغطية شاملة 100٪)
• ضمان حتى 10 سنوات على الأفلام المعتمدة.

تصفح باقات PPF بالمتجر `); } else if (topic === 'nano') { addMessage('النانو سيراميك', true); addMessage(` النانو سيراميك:
طبقة كريستالية تعزز لمعان الطلاء وتوفر خاصية طرد السوائل والأوساخ وتسهل الغسيل اليومي.

تصفح باقات النانو سيراميك `); } else if (topic === 'tint') { addMessage('العازل الحراري', true); addMessage(` العازل الحراري:
تقليل حرارة الشمس داخل المقصورة وعزل الأشعة فوق البنفسجية UV بنسبة تتجاوز 95٪ بدرجات نظامية ومعتمدة.

تصفح باقات العازل الحراري `); } else if (topic === 'polish') { addMessage('التلميع الساطع والمائي', true); addMessage(` التلميع:
• التلميع الساطع: لمعالجة الخدوش السطحية والدوائر واستعادة عمق اللون.
• التلميع المائي: عناية لطيفة لتنظيف السطح وتجديد اللمعان بدون إجهاد الطلاء.

باقات التلميع الساطع `); } else if (topic === 'warranty') { addMessage('شروط وتسجيل الضمان', true); addMessage(` ضمان ريزورت:
ضمان حتى 10 سنوات على باقات PPF المؤهلة ضد الاصفرار والبهتان وتفكك الحواف.
لتسجيل الضمان يلزم صورة الفاتورة والاستمارة ورقم الهيكل.

تسجيل الضمان الإلكتروني `); } else if (topic === 'location') { addMessage('الموقع والاتجاهات', true); addMessage(` موقع مركز ريزورت كار كير:
جدة — حي الحرازات.
رقم التواصل: 0565317009.

فتح الموقع على Google Maps `); } else if (topic === 'whatsapp') { window.open('https://wa.me/966565317009', '_blank'); } }; options.addEventListener('click', e => { const btn = e.target.closest('[data-topic]'); if (btn) handleTopic(btn.dataset.topic); }); form.addEventListener('submit', e => { e.preventDefault(); const q = (input.value || '').trim(); if (!q) return; input.value = ''; addMessage(q, true); const normQ = q.toLowerCase(); if (/مقاس|حجم|سيار/.test(normQ)) handleTopic('size'); else if (/حماي|ppf|فيلم/.test(normQ)) handleTopic('ppf'); else if (/نانو|سيراميك/.test(normQ)) handleTopic('nano'); else if (/عازل|تظليل|حرار/.test(normQ)) handleTopic('tint'); else if (/تلميع|ساطع|مائي/.test(normQ)) handleTopic('polish'); else if (/ضمان|تسجيل/.test(normQ)) handleTopic('warranty'); else if (/موقع|وين|عنوان|مكان|حرازات|لوكيشن/.test(normQ)) handleTopic('location'); else if (/واتس|تواصل|رقم|جوال/.test(normQ)) handleTopic('whatsapp'); else { addMessage(` شكراً لتواصلك! أقدر أساعدك في باقات الحماية PPF، العازل الحراري، النانو سيراميك، التلميع، ومعرفة مقاس سيارتك. للاستفسارات المباشرة يمكنك مراسلتنا فوراً عبر واتساب:

محادثة عبر واتساب `); } }); // Also support any external button triggering advisor document.querySelectorAll('[data-open-advisor]').forEach(b => { b.addEventListener('click', e => { e.preventDefault(); openPanel(); }); }); } /* 4. Category Page 300 -> 210 SAR Price Injection for Extra Protection (c1302893917) */ function fixExtraProtectionCategory() { if (!/c1302893917/.test(location.pathname)) return; document.querySelectorAll('.s-product-card-entry, .product-entry, .product-card').forEach(card => { const priceEl = card.querySelector('.price, .price-after, [class*="price"]'); if (priceEl && !card.querySelector('.r13-fixed-sale')) { const del = document.createElement('del'); del.className = 'price-before r13-fixed-sale'; del.textContent = '300 ر.س'; priceEl.before(del); } }); } function boot() { extendProduct(); category(); initCareAdvisor(); fixExtraProtectionCategory(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', boot, { once: true }); } else { boot(); } window.addEventListener('load', boot, { once: true }); })(); // إصلاح خلل السعر التلقائي في صفحة المنتج عند عدم التحديد function fixProductPriceDisplay() { if (!/\/p\d+/.test(location.pathname)) return; const priceElements = document.querySelectorAll('.total-price, .product-price, [data-product-price]'); priceElements.forEach(el => { const txt = el.textContent.trim(); // إذا كان السعر فارغاً أو يحتوي فقط على الرمز والنقطة if (txt === '.' || txt === '. ﷼' || txt === '﷼' || !/\d/.test(txt)) { // إرجاع السعر الافتراضي للخدمة بحسب الرابط const id = (location.pathname.match(/\/p(\d+)/) || [])[1]; if (id === '1379792190') el.innerHTML = '1,280 ر.س 1,600 ر.س'; else if (id === '487081217') el.innerHTML = '720 ر.س 1,200 ر.س'; else if (id === '596280354') el.innerHTML = '480 ر.س 800 ر.س'; } }); } /* Event-driven price check: no polling on the homepage. */ ;(() => { if(!/\/p\d+/.test(location.pathname))return; let pending=0,scope; const selector='.total-price,.product-price,[data-product-price]'; const schedule=()=>{clearTimeout(pending);pending=setTimeout(fixProductPriceDisplay,150);}; function start(){ scope=document.querySelector('.container--product-details,#resortNativeContent');if(!scope)return; fixProductPriceDisplay(); new MutationObserver(records=>{ if(records.some(record=>{const target=record.target.nodeType===1?record.target:record.target.parentElement;return target?.closest(selector)||[...record.addedNodes].some(n=>n.nodeType===1&&(n.matches(selector)||n.querySelector(selector)));}))schedule(); }).observe(scope,{childList:true,subtree:true,characterData:true}); document.addEventListener('change',event=>{if(scope.contains(event.target))schedule();},{passive:true}); } if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start,{once:true});else start(); })(); /* RESORT PAYMENT ADDON START — remove this whole block to undo. */ (()=>{ if(window.__resortPaymentAddon16)return;window.__resortPaymentAddon16=true; /* v16: separate payment logos; informational display, no payment actions. */ (()=>{'use strict';const markup="

الدفع المباشر

\"مدى\"\"Visa\"\"Apple\"STC\"Google\"تحويل

التقسيط

\"قسيمةقسيمة بلس — الشركة الوسيطة
\"إمكان\"\"تابي\"\"تمارا\"\"MisPay\"\"مدفوع\"\"Neo\"
"; window.ResortPaymentIcons={create:()=>{const t=document.createElement('template');t.innerHTML=markup;return t.content.firstElementChild;}}; })(); /* Update the homepage footer as well, without replacing its other content. */ (()=>{'use strict'; function update(){ document.querySelectorAll('img.rf-payments-all,img.r13-product-payments').forEach(img=>img.replaceWith(window.ResortPaymentIcons.create())); document.querySelectorAll('.r16-payments img:not([data-r16-ready])').forEach(img=>{ img.dataset.r16Ready='1';const fail=()=>{img.hidden=true;const label=img.nextElementSibling;if(label)label.hidden=false;};img.addEventListener('error',fail,{once:true});if(img.complete&&img.naturalWidth===0)fail(); }); } let pending=false;const schedule=()=>{if(pending)return;pending=true;setTimeout(()=>{pending=false;update();},80);}; function start(){update();if(location.pathname.replace(/\/+$/,'')===''&&!document.querySelector('img.rf-payments-all,img.r13-product-payments'))return;const relevant='img.rf-payments-all,img.r13-product-payments';new MutationObserver(records=>{if(records.some(r=>[...r.addedNodes].some(n=>n.nodeType===1&&(n.matches?.(relevant)||n.querySelector?.(relevant)))))schedule();}).observe(document.body,{childList:true,subtree:true});} if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start,{once:true});else start(); })(); })(); /* RESORT PAYMENT ADDON END */ /* RESORT ACCESSORIES FIX START — applies only to category c1379480874. */ (()=>{ 'use strict';if(window.__resortAccessoriesFix17)return;window.__resortAccessoriesFix17=true; const matches=()=>/\/c1379480874\/?$/.test(location.pathname); const cardSelector='custom-salla-product-card,salla-product-card,.s-product-card-entry,.product-entry,.product-card'; function apply(){ const active=matches();document.documentElement.classList.toggle('r17-accessories',active);if(!active)return; const scope=document.querySelector('#resortNativeContent');if(!scope)return; const lists=[...scope.querySelectorAll('salla-products-list')]; lists.forEach(list=>{ list.classList.add('r17-accessories-list'); const cards=[...list.querySelectorAll(cardSelector)].filter(card=>{ const ancestor=card.parentElement?.closest(cardSelector);return !ancestor||!list.contains(ancestor); }); cards.forEach(card=>{card.classList.add('r17-accessories-card');card.parentElement?.classList.add('r17-accessories-grid');}); }); } let pending=false; const schedule=()=>{if(pending)return;pending=true;setTimeout(()=>{pending=false;apply();},80);}; function start(){if(!matches())return;apply();new MutationObserver(schedule).observe(document.body,{childList:true,subtree:true});window.addEventListener('popstate',schedule);} if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start,{once:true});else start(); })(); /* RESORT ACCESSORIES FIX END */ /* RESORT WELCOME AA START — append to current Salla JavaScript. */ (()=>{ 'use strict';if(window.ResortWelcomeAA)return; const KEY='resort-welcome-aa-intro-v1';const CODE='AA';const markup="\n\n \n
\n \"ريزورت\n

سيارتك غالية… وأنت أغلى

\n

أهلاً وسهلاً بك في ريزورت كار كير

\n
من
\n
\n
\n

لأنك غالي علينا، وهذه أول زيارة لك، هديتنا لك كود خصم خاص.

\n

استخدمه في السلة… وتفاجأ بالسعر.

\n \n

\n
\n
\n\n"; let dialog=null,running=false,closed=false,returnFocus=null;const timers=new Set(); const later=(fn,ms)=>{const id=setTimeout(()=>{timers.delete(id);fn();},ms);timers.add(id);return id;}; const seen=()=>{try{return localStorage.getItem(KEY)==='1';}catch(_){return false;}}; function close(){if(!dialog)return;closed=true;timers.forEach(clearTimeout);timers.clear(); if(dialog.open&&typeof dialog.close==='function')dialog.close();else dialog.removeAttribute('open'); try{localStorage.setItem(KEY,'1');}catch(_){}running=false; if(returnFocus?.isConnected&&typeof returnFocus.focus==='function')returnFocus.focus(); } function toast(){document.querySelector('.rwaa-toast')?.remove();const n=document.createElement('div');n.className='rwaa-toast';n.setAttribute('role','status');n.textContent='تم نسخ كود AA — استخدمه في السلة وتفاجأ بالسعر';document.body.append(n);setTimeout(()=>n.remove(),3500);} async function copy(){const status=dialog.querySelector('.rwaa-status');let success=false; try{if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(CODE);success=true;}}catch(_){} if(!success){const field=document.createElement('textarea');field.value=CODE;field.setAttribute('readonly','');field.style.cssText='position:fixed;left:0;top:0;width:1px;height:1px;opacity:0;';dialog.append(field);field.focus();field.select();try{success=!!document.execCommand('copy');}catch(_){}field.remove();} if(success){close();toast();}else{status.textContent='تعذر النسخ التلقائي. انسخ الكود AA يدوياً ثم أغلق النافذة.';dialog.querySelector('.rwaa-copy').focus();} } function ready(){if(closed)return;dialog.querySelector('.rwaa-prefix').textContent='';dialog.querySelector('.rwaa-typed').textContent='من الغسيل إلى الحماية واللمعان';dialog.classList.add('rwaa-ready');} function animate(){ const prefix=dialog.querySelector('.rwaa-prefix'),typed=dialog.querySelector('.rwaa-typed'); if(matchMedia('(prefers-reduced-motion: reduce)').matches){ready();return;} const phrases=[['من ','الغسيل'],['إلى ','الحماية'],['و','اللمعان']]; let index=0; function next(){if(closed||index>=phrases.length)return;const [lead,word]=phrases[index];prefix.textContent=lead;let n=0; function write(){if(closed)return;typed.textContent=word.slice(0,++n);if(n0)later(erase,24);else{index++;if(index{e.preventDefault();close();}); dialog.addEventListener('close',()=>{if(!closed)close();}); } function open(force=false){if(running||(!force&&seen()))return;mount(); closed=false;running=true;returnFocus=document.activeElement;dialog.classList.remove('rwaa-ready');dialog.classList.add('rwaa-running');dialog.querySelector('.rwaa-status').textContent='';dialog.querySelector('.rwaa-typed').textContent=''; if(typeof dialog.showModal==='function')dialog.showModal();else{dialog.setAttribute('open','');dialog.setAttribute('role','dialog');dialog.setAttribute('aria-modal','true');} dialog.querySelector('.rwaa-close').focus();animate(); } window.ResortWelcomeAA=Object.freeze({open:()=>open(true),close,reset:()=>{try{localStorage.removeItem(KEY);}catch(_){}}}); const start=()=>{if(!/\/(checkout|payment|thank-you|order-success)(?:\/|$)/i.test(location.pathname)){if(typeof requestIdleCallback==='function')requestIdleCallback(()=>open(),{timeout:900});else setTimeout(()=>open(),450);}}; if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start,{once:true});else start(); })(); /* RESORT WELCOME AA END */ /* RESORT SERVICES REELS — START: static HTML, lightweight controls */ ;(() => { 'use strict'; if(window.ResortServicesReels)return; let cleanup=null; function init(){ if(cleanup)return true; const rail=document.querySelector('#resort-salla-landing #services .rr26-rail');if(!rail)return false; const cards=[...rail.children],controls=rail.nextElementSibling;if(!cards.length||!controls)return false; const previous=controls.querySelector('[aria-label="الخدمة السابقة"]'),next=controls.querySelector('[aria-label="الخدمة التالية"]'),status=controls.querySelector('.rr26-status'); let frame=0; function current(){const edge=rail.getBoundingClientRect();return cards.reduce((best,c,i)=>Math.abs(c.getBoundingClientRect().right-edge.right)=edge.left-2;status.textContent=`${current()+1} / ${cards.length}`;} function schedule(){if(!frame)frame=requestAnimationFrame(update);} function go(index){const card=cards[Math.max(0,Math.min(cards.length-1,index))];rail.scrollBy({left:card.getBoundingClientRect().right-rail.getBoundingClientRect().right,behavior:window.matchMedia?.('(prefers-reduced-motion: reduce)').matches?'auto':'smooth'});} const prev=()=>go(current()-1),nxt=()=>go(current()+1); previous.addEventListener('click',prev);next.addEventListener('click',nxt); const key=e=>{if(e.target!==rail)return;const steps={ArrowLeft:current()+1,ArrowRight:current()-1,Home:0,End:cards.length-1};if(Object.hasOwn(steps,e.key)){e.preventDefault();go(steps[e.key]);}}; rail.addEventListener('keydown',key);rail.addEventListener('scroll',schedule,{passive:true});window.addEventListener('resize',schedule); const size=typeof ResizeObserver==='function'?new ResizeObserver(schedule):null;size?.observe(rail);schedule(); cleanup=()=>{cancelAnimationFrame(frame);size?.disconnect();previous.removeEventListener('click',prev);next.removeEventListener('click',nxt);rail.removeEventListener('keydown',key);rail.removeEventListener('scroll',schedule);window.removeEventListener('resize',schedule);cleanup=null;};return true; } window.ResortServicesReels={init,destroy(){cleanup?.();}}; if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init,{once:true});else init(); })(); /* RESORT SERVICES REELS — END */ /* RESORT WORKS START — self-hosted video gallery */ ;(() => { 'use strict'; if(window.ResortWorks)return; const videos=Array.from({length:13},(_,i)=>({number:String(i+1).padStart(2,'0'),url:`https://profile.resortcarcare.com/videos/work-${String(i+1).padStart(2,'0')}.mp4`})); const make=(tag,cls,text)=>{const n=document.createElement(tag);n.className=cls;if(text)n.textContent=text;return n;}; let watcher,timer,started=false; function init(){ if(started)return true; const root=document.getElementById('resort-salla-landing');if(!root?.querySelector('#services'))return false; let section=root.querySelector('#resortWorks'); if(!section){const anchor=root.querySelector('.reviews-section,#center-map');if(!anchor)return false;section=make('section','rw-section');section.id='resortWorks';anchor.before(section);} if(getComputedStyle(section).getPropertyValue('--rw-css-ready').trim()!=='1')return false; started=true;watcher?.disconnect();clearTimeout(timer); section.setAttribute('aria-labelledby','resortWorksTitle'); const intro=make('div','rw-heading'),heading=make('div','rw-intro'),title=make('h2','rw-title','أعمالنا تتحدث ');title.id='resortWorksTitle';title.append(make('span','','عنّا.')); heading.append(make('p','rw-eyebrow','من داخل ريزورت'),title,make('p','rw-description','لقطات من شغلنا، وتفاصيل العناية عن قرب.'));intro.append(heading); const layout=make('div','rw-layout'),feature=make('div','rw-feature'),more=make('div','rw-more'); feature.append(make('p','rw-label','في دائرة الضوء')); more.append(make('p','rw-label','كل تفصيلة لها حكاية'),make('h3','rw-subtitle','المزيد من أعمالنا')); const shell=make('div','rw-shell'),rail=make('div','rw-rail');rail.id='resortWorksRail';rail.tabIndex=0;rail.setAttribute('role','region');rail.setAttribute('aria-label','أعمال ريزورت؛ استخدم الأسهم لاستعراض الفيديوهات'); const next=make('button','rw-arrow rw-next','←'),prev=make('button','rw-arrow rw-prev','→'),counter=make('span','rw-counter'); [next,prev].forEach(b=>{b.type='button';b.setAttribute('aria-controls',rail.id);});next.setAttribute('aria-label','الفيديوهات التالية');prev.setAttribute('aria-label','الفيديوهات السابقة');prev.disabled=true; shell.append(rail,next,prev);more.append(shell,counter);layout.append(feature,more); section.replaceChildren(intro,layout,make('p','rw-note','مرّر الماوس لمعاينة صامتة، واضغط لمشاهدة الفيديو كاملًا.')); const dialog=make('dialog','r28-video-dialog');dialog.id='resortWorksViewer';dialog.setAttribute('aria-labelledby','resortWorksViewerTitle'); const modalTitle=make('h2','r28-viewer-title');modalTitle.id='resortWorksViewerTitle'; const close=make('button','r28-viewer-close','×');close.type='button';close.setAttribute('aria-label','إغلاق الفيديو'); const full=make('video','r28-full-video');full.controls=true;full.playsInline=true;full.preload='none';full.setAttribute('playsinline',''); const modalStatus=make('p','r28-viewer-status');modalStatus.setAttribute('role','status'); const direct=make('a','r28-direct','فتح الفيديو مباشرة');direct.target='_blank';direct.rel='noopener noreferrer'; dialog.append(close,modalTitle,full,modalStatus,direct);section.append(dialog); const all=[];let activePreview=null,lastTrigger=null,animation=0; const reduced=()=>window.matchMedia?.('(prefers-reduced-motion: reduce)').matches; const saveData=()=>Boolean(navigator.connection?.saveData); function pause(record,reset=true){record.hovering=false;record.video.pause();if(reset&&record.video.readyState>=1){try{record.video.currentTime=.1;}catch{}}record.player.classList.remove('r28-previewing');if(activePreview===record)activePreview=null;} function pauseAll(){all.forEach(record=>pause(record));} function attach(record){if(record.video.hasAttribute('src'))return;record.video.preload='metadata';record.video.src=record.item.url;record.video.load();} function preview(record){ if(reduced()||saveData()||dialog.open||record.failed)return; if(activePreview&&activePreview!==record)pause(activePreview); attach(record);record.hovering=true;activePreview=record;record.video.muted=true; const promise=record.video.play();promise?.then(()=>{if(!record.hovering){record.video.pause();return;}record.player.classList.add('r28-previewing');}).catch(()=>{record.player.classList.remove('r28-previewing');}); } const lazy=typeof IntersectionObserver==='function'?new IntersectionObserver(entries=>entries.forEach(entry=>{const record=all.find(r=>r.player===entry.target);if(!record)return;if(entry.isIntersecting){if(!saveData())attach(record);}else pause(record);}),{rootMargin:'0px',threshold:.01}):null; function open(record,trigger){ pauseAll();lastTrigger=trigger;modalTitle.textContent=`من أعمال ريزورت · ${record.item.number}`;modalStatus.textContent='';direct.href=record.item.url; if(typeof dialog.showModal==='function')dialog.showModal();else dialog.setAttribute('open',''); full.src=record.item.url;full.load();full.play()?.catch(()=>{modalStatus.textContent='اضغط زر التشغيل لمشاهدة الفيديو.';}); close.focus(); } function shutdown(){full.pause();full.removeAttribute('src');full.load();lastTrigger?.focus();} close.onclick=()=>{if(typeof dialog.close==='function')dialog.close();else{dialog.removeAttribute('open');shutdown();}}; dialog.addEventListener('close',shutdown); full.addEventListener('error',()=>{modalStatus.textContent='تعذّر تحميل الفيديو. أعد المحاولة أو افتحه مباشرة من الرابط.';}); function card(item,index){ const article=make('article','rw-card'+(index===0?' rw-featured':'')),player=make('div','rw-player'),video=make('video','r28-preview-video'); article.dataset.work=item.number;video.muted=true;video.defaultMuted=true;video.playsInline=true;video.preload='none';video.setAttribute('playsinline','');video.setAttribute('muted','');video.setAttribute('aria-hidden','true');video.tabIndex=-1; const play=make('button','r28-play','▶');play.type='button';play.setAttribute('aria-label',`شاهد فيديو ريزورت ${item.number}`); const status=make('p','r28-card-status');status.setAttribute('role','status'); const bottom=make('div','rw-bottom');bottom.append(make('span','',`من أعمال ريزورت · ${item.number}`)); const watch=make('button','r28-watch','شاهد الفيديو');watch.type='button'; const record={item,video,player,hovering:false,failed:false};all.push(record); play.onclick=()=>open(record,play);watch.onclick=()=>open(record,watch);bottom.append(watch); player.addEventListener('mouseenter',()=>{if(window.matchMedia?.('(hover: hover) and (pointer: fine)').matches)preview(record);}); player.addEventListener('mouseleave',()=>pause(record)); video.addEventListener('loadedmetadata',()=>{if(!record.hovering){try{video.currentTime=.1;}catch{}}}); video.addEventListener('loadeddata',()=>{player.classList.add('r28-has-frame');}); video.addEventListener('timeupdate',()=>{if(record.hovering&&video.currentTime>=4.1){try{video.currentTime=.1;}catch{}}}); video.addEventListener('error',()=>{record.failed=true;pause(record,false);status.textContent='المعاينة غير متاحة؛ اضغط لمشاهدة الفيديو.';}); player.append(video,play,status);article.append(player,bottom);lazy?.observe(player);return article; } feature.append(card(videos[0],0));videos.slice(1).forEach((item,i)=>rail.append(card(item,i+1))); const cards=[...rail.children]; function current(){const right=rail.getBoundingClientRect().right-8;return cards.reduce((best,c,i)=>Math.abs(c.getBoundingClientRect().right-right)=box.left-2;counter.textContent=`${current()+2} / ${videos.length} فيديو`;} function schedule(){if(!animation)animation=requestAnimationFrame(update);} function go(direction){const index=Math.max(0,Math.min(cards.length-1,current()+direction));rail.scrollBy({left:cards[index].getBoundingClientRect().right-(rail.getBoundingClientRect().right-8),behavior:reduced()?'auto':'smooth'});} next.onclick=()=>go(1);prev.onclick=()=>go(-1);rail.addEventListener('scroll',schedule,{passive:true}); rail.addEventListener('keydown',e=>{if(e.target!==rail)return;if(['ArrowLeft','ArrowRight'].includes(e.key)){e.preventDefault();go(e.key==='ArrowLeft'?1:-1);}}); window.addEventListener('resize',schedule);if(typeof ResizeObserver==='function')new ResizeObserver(schedule).observe(rail); document.addEventListener('visibilitychange',()=>{if(document.hidden){pauseAll();full.pause();}});schedule(); return true; } function boot(){if(init())return;if(location.pathname.replace(/\/+$/,'')!=='')return;watcher=new MutationObserver(init);watcher.observe(document.body,{childList:true,subtree:true});timer=setTimeout(()=>watcher?.disconnect(),6000);} window.ResortWorks={init}; if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',boot,{once:true});else boot(); })(); /* RESORT WORKS END */ /* RESORT EXTRA PROTECTION PAGE START */ ;(() => { 'use strict'; if(window.ResortExtraProtectionPage)return; let watch,timer; const products=[ {id:'1031859458',name:'حماية مقابض وأطراف الأبواب',path:'/door-handle-edge-ppf-protection/p1031859458',text:'عناية بالمناطق المعرضة للاحتكاك اليومي حول المقابض وعلى أطراف الأبواب.'}, {id:'437220340',name:'حماية الشمعات الأمامية',path:'/front-headlight-ppf-protection/p437220340',text:'حماية شفافة للشمعات الأمامية تساعد على تقليل آثار الخدوش السطحية والحصى.'}, {id:'1276299471',name:'درع الزجاج الأمامي',path:'/windshield-protection/p1276299471',text:'حماية مخصصة للزجاج الأمامي، مع اختيار الخدمة ومراجعة تفاصيلها قبل الطلب.'} ]; function init(){ if(new URLSearchParams(location.search).get('resort_page')!=='extra-protection')return false; const root=document.getElementById('resort-salla-landing'); const content=root?.querySelector('.resort-page-content'); if(!root||!content)return false; if(root.querySelector('#resortExtraProtectionPage'))return true; const section=document.createElement('main');section.id='resortExtraProtectionPage';section.className='r26-extra-page'; section.setAttribute('aria-labelledby','resortExtraTitle'); const back=document.createElement('a');back.href='/';back.className='r26-extra-back';back.textContent='الرئيسية ←'; const eyebrow=document.createElement('p');eyebrow.className='r26-extra-kicker';eyebrow.textContent='تفاصيل صغيرة، عناية أكبر'; const title=document.createElement('h1');title.id='resortExtraTitle';title.textContent='باقات الحماية الإضافية'; const intro=document.createElement('p');intro.textContent='اختر الجزء الذي تريد حمايته، واستعرض تفاصيل الخدمة وخياراتها في صفحة المنتج.'; const grid=document.createElement('div');grid.className='r26-extra-grid'; products.forEach((product,index)=>{ const card=document.createElement('article');card.className='r26-extra-card'; const number=document.createElement('span');number.className='r26-extra-number';number.setAttribute('aria-hidden','true');number.textContent=String(index+1).padStart(2,'0'); const name=document.createElement('h2');name.textContent=product.name; const text=document.createElement('p');text.textContent=product.text; const link=document.createElement('a');link.className='r26-extra-buy';link.href=product.path;link.textContent='تفاصيل الخدمة والشراء';link.setAttribute('aria-label','تفاصيل '+product.name+' والشراء'); card.append(number,name,text,link);grid.append(card); }); section.append(back,eyebrow,title,intro,grid);content.before(section); root.classList.add('r26-extra-active'); document.title='باقات الحماية الإضافية | ريزورت كار كير'; watch?.disconnect();clearTimeout(timer);return true; } window.ResortExtraProtectionPage={init}; function boot(){if(new URLSearchParams(location.search).get('resort_page')!=='extra-protection')return;if(init())return;watch=new MutationObserver(init);watch.observe(document.body,{childList:true,subtree:true});timer=setTimeout(()=>watch.disconnect(),30000);} if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',boot,{once:true});else boot(); })(); /* RESORT EXTRA PROTECTION PAGE END */ /* RESORT IN-STORE REVIEWS START */ ;(() => { 'use strict'; if(window.ResortStoreReviews)return; const reviews=[{"name":"Abdual aziz","text":"ماشاء الله ممتازين في الغسيل ودبل واكس بالسعر العادي غير المغاسل الباقيه لمعت عندهم خارجي منتجات اصليه واشكر عمر من قسم التلميع بشوش وحبيب","rating":"5 من 5 نجوم"},{"name":"عادل محمد المطيري","text":"تجربتي الأولى مع المغسلة وكانت صراحةً ممتازة جدًا، والمغسلة نظيفة ومرتبة 👌🏻 وأحب أشكر الموظف محمد بشير على تعامله الحلو وابتسامته الدائمة، ما شاء الله عليه","rating":"5 من 5 نجوم"},{"name":"عبدالله الحربي","text":"تجربتي مع المغسلة اولا: جودة عالية في المواد بسعر منخفض مقارنه بالمغاسل الأخرى ثانياً: صاحب المغسلة شاب سعودي وواقف على شغله بنفسه","rating":"5 من 5 نجوم"},{"name":"محمد الغامدي","text":"مغسلة تستحق الف نجمة وليس خمسة نجوم للامانه ما اغسل الا عندهم والعمالة محترفين وبدون ما اتكلم يغسلون جميع الاماكن اللي ماتخطر على بال احد ومهتمين في ادق التفاصيل بالغسيل","rating":"5 من 5 نجوم"},{"name":"عبدالمحسن الجامعي","text":"من افضل المغاسل عندي في حي الحرزات اشكرهم على شغلهم الجبار أجيهم في الأسبوع مرتين صراحة شغلهم مبدع وكويس","rating":"5 من 5 نجوم"},{"name":"Aboodi Asiri","text":"ماشاءالله تبارك الله غسيلهم ممتاز والتمسيح فنان وسعرهم بعد بطل انصح تجونهم مغسل دبل واكس ٢٥ ريال والله يرزقه يارب ويباركله","rating":"5 من 5 نجوم"},{"name":"م","text":"كانت تجربة مميزة بكل معنى الكلمة من أول لحظة والاهتمام بالتفاصيل واضح، والاستقبال راقٍ، والشغل احترافي السيارة طلعت تلمع كأنها جديدة، والنتيجة فاقت توقعاتي","rating":"5 من 5 نجوم"},{"name":"Abdullah Alghamdi","text":"الف الشكر لصاحب المغسله وللعاملين عليها بالاخص محمد المصري مهتم في السياره واسلوبه جداً محترم وياخذ الملاحضات بروح حلوه واسعارهم معقوله وغسيلهم جميل اتمنى يستمرون على كذا وافضل","rating":"5 من 5 نجوم"},{"name":"ابو ياسر","text":"خدمة رائعة سويت عندهم تلميع مائي خارجي فقط لمازدا 6 صراحتا شغل رائع ولكن كان يوجد بعض الملاحظات لكن الفني متعاون جدا وماقصر معي بكل شي","rating":"5 من 5 نجوم"},{"name":"Ahmed Basalamh","text":"مغسلة ممتازة، الخدمة ممتازة مقابل السعر يتم استخدام صابون وشمع عالي الجودة، مع مناشف مايكروفايبر مخصصة لكل سيارة، وهذا يعكس اهتمامهم بالتفاصيل ونظافة السيارة دون التسبب بخدوش","rating":"5 من 5 نجوم"},{"name":"Etyan Almalki","text":"والله افضل مغسله في شرق جده وعندهم غرفة استراحه مكيفه ومؤثثه بدورة مياه وشاشه تلفاز وغسيلهم ممتاز يستاهلون الإشاده وشكراً لكم 🤍","rating":"5 من 5 نجوم"},{"name":"FHD / فهد","text":"جميله جدا وعروضهم اسطوريه ، استاهل غسله مجانا ؟ 🥲","rating":"5 من 5 نجوم"},{"name":"iL Mada","text":"ما شاء الله تبارك الله من افضل المغاسل وانصح فيها اسعار مناسبه وتنظيف دقيق بالملي ولا يتركون لك شبر ما تنظف يستخدمون شامبو و ادوات نظيفه اتمنى لهم التوفيق وعلى هذا الابداع يستاهلون التقييم","rating":"5 من 5 نجوم"},{"name":"سامي السلمي","text":"مبدعين وتعاملهم طيب وراقي محمد المصري🌹 والمناشف جديدة والمواد طيبة وجودتها عالية وصاحب الحلال اجودي واخلاقه طيبه قدع يانااااس","rating":"5 من 5 نجوم"},{"name":"Tawfeeq Mohammad","text":"والله مشهورين على العمل المميز والانجاز في الوقت المتفق عليه","rating":"5 من 5 نجوم"},{"name":"Abdullah Alqrny","text":"السلام عليكم ماشاءالله تبارك الله المغسله توب فوق التقييم تعامل والاخلاق الطيبه والشغل النظيف والدقه في ادق التفاصيل اخص الشكر للمشرف محمد ابراهيم على حسن التعامل شاكرين ومقدرين لكم ❤️❤️","rating":"5 من 5 نجوم"},{"name":"Hem","text":"اليوم طلعت السياره سويت عندهم تلميع مائي ويعطيهم العافيه ماقصرو ما شاء الله شغلهم جبار وانصحكم فيه 👌🤍","rating":"5 من 5 نجوم"},{"name":"معاذ","text":"والله صراحه و بدون ولاهو مجامله صراححههه غسيل ماشاءالله تبارك الرحمن فنانيننن و اسلوب التعامل ماشاءالله تبارك الله و المكان نضيف و تنظيم عالييي : انصحكم جدااا","rating":"5 من 5 نجوم"},{"name":"Saud Alotaibi","text":"مليون شكرا لمالك منتجع غسيل وتلميع السيارات شغلهم لا يعلى عليه قمة النظافه والاهتمام حتى في اصغر الأمور ويكفى انه واقف بنفسه على عمله ومتابع دقيق لكل صغيره وكبيره","rating":"5 من 5 نجوم"},{"name":"محمد الزهراني","text":"غسيلهم ممتاز، وتركيب PPF ممتاز وجوده عالي كمان مهتمين بأدق التفاصيل شكراً لكم","rating":"5 من 5 نجوم"},{"name":"majed ajoah","text":"من افضل واجمل المغاسل الي الشخص يمرها محترمين في التعامل وغسيلهم جدا حلوو وتلميعهم قوي جدا","rating":"5 من 5 نجوم"},{"name":"Rana Adnan","text":"Excellent job, good moral person","rating":"5 من 5 نجوم"}]; let watch,timer; function init(){ if(new URLSearchParams(location.search).get('resort_page')!=='reviews')return false; const root=document.getElementById('resort-salla-landing'),content=root?.querySelector('.resort-page-content'); if(!root||!content)return false; if(root.querySelector('#resortStoreReviewsPage'))return true; const make=(tag,cls,text)=>{const n=document.createElement(tag);n.className=cls;if(text)n.textContent=text;return n;}; const page=make('main','r27-reviews-page');page.id='resortStoreReviewsPage';page.setAttribute('aria-labelledby','resortReviewsTitle'); const back=make('a','r27-reviews-back','الرئيسية ←');back.href='/'; const title=make('h1','','تجارب تحكي عن العناية');title.id='resortReviewsTitle'; const description=make('p','','مختارات من تجارب عملاء ريزورت كار كير'); const write=make('a','r27-review-write','اكتب تقييمك على Google');write.href='https://g.page/r/Cfm5bqOJwVGdEAE/review';write.target='_blank';write.rel='noopener noreferrer'; const grid=make('div','r27-reviews-grid'); reviews.forEach(review=>{const card=make('article','r27-review-card'),stars=make('div','r27-review-stars','★★★★★');stars.setAttribute('aria-label',review.rating);card.append(stars,make('blockquote','',review.text),make('p','r27-review-author',review.name));grid.append(card);}); page.append(back,title,description,write,grid);content.before(page);root.classList.add('r27-reviews-active');document.title='تقييمات العملاء | ريزورت كار كير';watch?.disconnect();clearTimeout(timer);return true; } window.ResortStoreReviews={init}; function boot(){if(new URLSearchParams(location.search).get('resort_page')!=='reviews')return;if(init())return;watch=new MutationObserver(init);watch.observe(document.body,{childList:true,subtree:true});timer=setTimeout(()=>watch.disconnect(),30000);} if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',boot,{once:true});else boot(); })(); /* RESORT IN-STORE REVIEWS END */ /* RESORT PERFORMANCE MEDIA START */ ;(() => { function start(){ const media=[...document.querySelectorAll('#resort-salla-landing iframe[data-resort-src]')]; const load=frame=>{frame.src=frame.dataset.resortSrc;frame.removeAttribute('data-resort-src');}; if(!('IntersectionObserver' in window)){media.forEach(load);return;} const observer=new IntersectionObserver(entries=>entries.forEach(entry=>{if(entry.isIntersecting){load(entry.target);observer.unobserve(entry.target);}}),{rootMargin:'250px',threshold:0});media.forEach(frame=>observer.observe(frame)); } if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start,{once:true});else start(); })(); /* RESORT PERFORMANCE MEDIA END */ /* إضافة أسفل JS الحالي، دون