خدمات رقمية مستقلة
لنبنِ معاً حضوراً رقمياً واضحاً يناسب فكرتك
تطوير واجهات أمامية، وتصميم صفحات هبوط، وخدمات رقمية عملية بوضوح واهتمام بالتفاصيل.
تصميم متجاوب
محتوى واضح ومنظم
موقع شبه كامل بسعر مناسب
تنظيم عملي للفكرة
اهتمام بالتفاصيل
سهولة الاستخدام
تصميم متجاوب
عن نوردا
أعمل بشكل رقمي مستقل وأتعلم عبر مشاريع عملية في التصميم والتقنية، وأشارك هنا الخدمات والأفكار التي يمكنني المساعدة فيها.
المزيد عني
خدماتي المميزة
خدمات رقمية يمكننا مناقشة نطاقها قبل البدء
تصميم صفحات الهبوط تنظيم المحتوى وتخطيط واجهة صفحة هبوط وفق الهدف والجمهور والمواد المتاحة.
تطوير الواجهات الأمامية تنفيذ واجهات ويب متجاوبة ضمن نطاق ومتطلبات نتفق عليها مسبقاً.
تصاميم Canva للتواصل الاجتماعي إعداد تصاميم بصرية بسيطة لمنشورات التواصل وفق المحتوى والمقاسات المطلوبة.
آخر الأعمال
ثلاثة تصورات تجريبية من معرض الأعمال
متاجر إلكترونية
Mochi Moonlet | متجر هدايا كاواي مواقع شخصية
لينا مارسو | مصوّرة بالأبيض والأسود صفحات هبوط
NEURA.EDGE | أداة ذكاء اصطناعي
هل نبدأ مشروعك؟
بخطوات قصيرة يمكنك وصف الفكرة والخدمات المطلوبة.
لنبدأ الآن
من أنا؟
عمل رقمي مستقل يهتم بالواجهات الأمامية والتصميم والمهام الرقمية العملية.
عمل رقمي مستقل، أتعلم وأبني بخطوات عملية
أهتم بتطوير الواجهات الأمامية وتصميم صفحات الهبوط، إلى جانب تصاميم Canva وإدخال البيانات وجمعها والتفريغ الصوتي. أشارك هنا مجالات عملي وطريقة تعاوني بوضوح.
لنناقش فكرتك
أعمل بشكل رقمي مستقل، وأستكشف كيف يمكن للتصميم والتقنية أن يجعلا الأفكار اليومية أسهل في الفهم والاستخدام. يعرّف هذا الموقع بالمجالات التي أتعلمها ويمكنني تقديم المساعدة فيها: تطوير الواجهات الأمامية، تصميم صفحات الهبوط، إعداد تصاميم التواصل الاجتماعي باستخدام Canva، إدخال البيانات، جمع المعلومات، والتفريغ الصوتي.
في تطوير الواجهات، يهمني أن تكون الصفحة مفهومة على الهاتف والحاسوب، وأن يجد الزائر المعلومة الأساسية دون بحث طويل. أتعامل مع ترتيب المحتوى، ووضوح الأزرار، وسهولة التنقل، واتساق الألوان بوصفها أجزاء من التجربة نفسها.
أهتم أيضاً بتصميم منشورات ومواد بسيطة لوسائل التواصل الاجتماعي عبر Canva. يمكنني تحويل فكرة أو نص موجود إلى تخطيط بصري منظم، مع مراعاة الألوان والمقاسات والمنصة التي ستُنشر عليها المادة.
أواصل التعلم من خلال التجربة والممارسة ومراجعة ما أنجزه. أريد أن يكون التعاون مباشراً ومريحاً: تصلني الفكرة أو الملفات ذات الصلة، أراجع المطلوب، ثم أوضح ما يمكن تنفيذه والخطوة التالية.
خدماتي المميزة
خدمات رقمية يمكننا مناقشة نطاقها قبل البدء
تصميم صفحات الهبوط تنظيم المحتوى وتخطيط واجهة صفحة هبوط وفق الهدف والجمهور والمواد المتاحة.
تطوير الواجهات الأمامية تنفيذ واجهات ويب متجاوبة ضمن نطاق ومتطلبات نتفق عليها مسبقاً.
تصاميم Canva للتواصل الاجتماعي إعداد تصاميم بصرية بسيطة لمنشورات التواصل وفق المحتوى والمقاسات المطلوبة.
كيف نسير في العمل؟
خطوات مرنة نتفق عليها بحسب نطاق المشروع
الخطوة 1نحدد المطلوب نراجع الهدف والجمهور والمواد المتاحة للمشروع.
الخطوة 2نرتب الواجهة نحدد بنية المحتوى والعناصر البصرية المناسبة.
الخطوة 3تنفيذ النطاق المتفق عليه أعمل على المخرجات التي حددناها قبل البدء.
الخطوة 4نراجع التسليم نتأكد من الملفات والمتطلبات التي اتفقنا عليها.
معرض أعمالي
15 تصوراً تجريبياً توضح أنواعاً مختلفة من الصفحات؛ الصور والروابط أمثلة مؤقتة وليست أعمالاً منشورة.
كل الأعمال كل التصورات في مكان واحد
10 تصورات
صفحات هبوط أفكار تجريبية لصفحات هبوط متنوعة
3 تصورات
متاجر إلكترونية تصورات لمتاجر بأفكار وواجهات مختلفة
3 تصورات
مواقع شخصية تصورات لمواقع تعريفية ومعارض أعمال
4 تصورات
متاجر إلكترونية Mochi Moonlet | متجر هدايا كاواي
مواقع شخصية لينا مارسو | مصوّرة بالأبيض والأسود
صفحات هبوط NEURA.EDGE | أداة ذكاء اصطناعي
متاجر إلكترونية Natura Essence | عناية طبيعية
مواقع شخصية Ananya | معرض مطوّرة ومصمّمة
صفحات هبوط Brutal Barber | صالون حلاقة
متاجر إلكترونية GOLDENHUE | مجوهرات فاخرة
مواقع شخصية
صفحات هبوط
مواقع شخصية Atelier Marchal | نجارة فنية
الباقات والأسعار
لكل مشروع باقة تناسبه، ويمكننا دائماً مناقشة التفاصيل قبل البدء.
العملة :
USD $
الأساسية مثالية للبداية السريعة بصفحة واحدة بسيطة.
$5 / المشروع
صفحة هبوط (حتى 4 أقسام) تصميم متجاوب موقع متعدد الصفحات (3 صفحات) زر دردشة (Chat Widget) نموذج تواصل دومين مجاني (سنة) ربط دومين مخصص شهادة SSL إيميل احترافي تحليلات (Analytics) نسخ احتياطي تحسين السرعة تعديل واحد تسليم خلال 3 أيام دعم فني بعد التسليم كتابة المحتوى اختيار هذه الباقة الأكثر طلباً
القياسية توازن مثالي بين السعر والمخرجات لمشروع احترافي.
$10 / المشروع
صفحة هبوط (حتى 4 أقسام) تصميم متجاوب موقع متعدد الصفحات (3 صفحات) زر دردشة (Chat Widget) نموذج تواصل دومين مجاني (سنة) ربط دومين مخصص شهادة SSL إيميل احترافي تحليلات (Analytics) نسخ احتياطي تحسين السرعة 3 تعديلات تسليم خلال 5 أيام دعم فني 15 يوم كتابة المحتوى اختيار هذه الباقة
البريميوم حل متكامل لمشروع أكبر مع محتوى وتصاميم إضافية.
$15 / المشروع
صفحة هبوط (حتى 4 أقسام) تصميم متجاوب موقع متعدد الصفحات (3 صفحات) زر دردشة (Chat Widget) نموذج تواصل دومين مجاني (سنة) ربط دومين مخصص شهادة SSL إيميل احترافي تحليلات (Analytics) نسخ احتياطي تحسين السرعة تعديلات غير محدودة تسليم خلال 7 أيام دعم فني 30 يوم كتابة المحتوى اختيار هذه الباقة
المخصصة عندما يحتاج المشروع إلى نطاق وميزات خاصة.
حسب الطلب
نطاق مخصص بالكامل ميزات إضافية حسب الحاجة جدول تسليم مرن تسعير حسب المتطلبات استشارة مجانية قبل البدء لنناقش مشروعك
الأسعار تقديرية وقابلة للتعديل حسب نطاق المشروع. يتم تأكيد التفاصيل النهائية قبل بدء العمل.
طرق الدفع
خيارات الدفع المتاحة التي يمكن تأكيد تفاصيلها قبل بدء العمل.
بريدي موب يتم تأكيد التفاصيل قبل بدء العمل.
محفظة إلكترونية تُحدد المحفظة المناسبة بالاتفاق المسبق.
Binance يتم تنسيق طريقة التحويل قبل بدء العمل.
Grey يتم تأكيد التوفر والتفاصيل قبل بدء العمل.
الأسئلة الشائعة
كل ما يلزم معرفته قبل البدء
ما المدة اللازمة لتنفيذ المشروع؟ تتحدد المدة بعد مراجعة نطاق العمل والمواد المتاحة، ثم نتفق عليها قبل البدء.
هل يمكن طلب تعديلات؟ نعم، نتفق على نطاق التعديلات وطريقة تسليمها قبل بدء العمل.
ما طرق الدفع المتاحة؟ تتوفر بريدي موب ومحفظة إلكترونية وBinance وGrey، وتُؤكد التفاصيل قبل بدء العمل.
هل يمكن تنفيذ موقع كامل؟ يمكن مناقشة صفحات الهبوط ومشاريع الواجهات الأمامية بحسب نطاق المشروع.
ما المعلومات اللازمة لبدء الطلب؟ يكفي إرسال وصف الفكرة والجمهور والمخرجات المطلوبة وأي موعد مهم، ثم نحدد نطاق العمل قبل البدء.
هل المشاريع المعروضة أعمال منشورة؟ لا، العناصر الحالية تصورات تجريبية ولا تمثل أعمال عملاء أو مواقع منشورة.
(function(){
'use strict';
var d=document,R=d.documentElement;
function $(s,c){return Array.prototype.slice.call((c||d).querySelectorAll(s))}
function $1(s){return d.querySelector(s)}
function sget(k){try{return localStorage.getItem(k)}catch(e){return null}}
function sset(k,v){try{localStorage.setItem(k,v);return true}catch(e){return false}}
function sdel(k){try{localStorage.removeItem(k)}catch(e){}}
function mq(q){return !!(window.matchMedia&&window.matchMedia(q).matches)}
var reduce=mq('(prefers-reduced-motion: reduce)');
var fine=mq('(hover: hover) and (pointer: fine)');
R.classList.add('js');
var I18N={
"ar":{
"skip_nav":"الانتقال للقائمة","skip_main":"الانتقال Ù„Ù„Ù…ØØªÙˆÙ‰","skip_foot":"الانتقال للتذييل",
"nav_label":"القائمة الرئيسية","n_home":"الرئيسية","n_about":"من أنا","n_services":"خدماتي","n_portfolio":"أعمالي","n_packages":"الباقات","n_payment":"Ø§Ù„Ø¯ÙØ¹","n_faq":"الأسئلة","n_contact":"تواصل",
"th_label":"الثيم","lang_label":"تغيير اللغة","menu_open":"ÙØªØ القائمة","menu_close":"إغلاق القائمة","th_light":"ÙØ§ØªØ","th_dark":"داكن",
"top":"للأعلى","close":"إغلاق","prev":"السابق","next":"التالي",
"h_badge":"خدمات رقمية مستقلة","h_title":"لنبن٠معاً ØØ¶ÙˆØ±Ø§Ù‹ رقمياً ÙˆØ§Ø¶ØØ§Ù‹ يناسب Ùكرتك","h_lead":"تطوير واجهات أمامية، وتصميم ØµÙØØ§Øª هبوط، وخدمات رقمية عملية Ø¨ÙˆØ¶ÙˆØ ÙˆØ§Ù‡ØªÙ…Ø§Ù… Ø¨Ø§Ù„ØªÙØ§ØµÙŠÙ„.","h_cta1":"بدء المشروع","h_cta2":"معرض الأعمال","h_c1":"تصميم متجاوب","h_c2":"Ù…ØØªÙˆÙ‰ ÙˆØ§Ø¶Ø ÙˆÙ…Ù†Ø¸Ù…","h_c3":"موقع شبه كامل بسعر مناسب",
"f1":"تنظيم عملي للÙكرة","f2":"اهتمام Ø¨Ø§Ù„ØªÙØ§ØµÙŠÙ„","av1":"سهولة الاستخدام","av2":"تصميم متجاوب",
"abs_t":"عن نوردا ","abs_p":"أعمل بشكل رقمي مستقل وأتعلم عبر مشاريع عملية ÙÙŠ التصميم والتقنية، وأشارك هنا الخدمات والأÙكار التي يمكنني المساعدة Ùيها.","abs_b":"المزيد عني",
"s_title":"خدماتي المميزة ","s_title_full":"خدماتي المميزة ","s_sub":"خدمات رقمية يمكننا مناقشة نطاقها قبل البدء","s_sub_full":"خدمات رقمية يمكننا مناقشة نطاقها قبل البدء",
"s1_t":"تصميم ØµÙØØ§Øª الهبوط","s1_p":"تنظيم Ø§Ù„Ù…ØØªÙˆÙ‰ وتخطيط واجهة ØµÙØØ© هبوط ÙˆÙÙ‚ الهد٠والجمهور والمواد Ø§Ù„Ù…ØªØ§ØØ©.",
"s2_t":"تطوير الواجهات الأمامية","s2_p":"تنÙيذ واجهات ويب متجاوبة ضمن نطاق ومتطلبات نتÙÙ‚ عليها مسبقاً.",
"s3_t":"تصاميم Canva للتواصل الاجتماعي","s3_p":"إعداد تصاميم بصرية بسيطة لمنشورات التواصل ÙˆÙÙ‚ Ø§Ù„Ù…ØØªÙˆÙ‰ والمقاسات المطلوبة.",
"s_all":"كل الخدمات",
"lw_t":"آخر الأعمال ","lw_sub":"ثلاثة تصورات تجريبية من معرض الأعمال","lw_all":"كل الأعمال",
"cta_t":"هل نبدأ مشروعك؟","cta_p":"بخطوات قصيرة يمكنك وص٠الÙكرة والخدمات المطلوبة.","cta_b":"لنبدأ الآن",
"a_title":"من أنا؟ ","a_sub":"عمل رقمي مستقل يهتم بالواجهات الأمامية والتصميم والمهام الرقمية العملية.",
"about_intro_title":"عمل رقمي مستقل، أتعلم وأبني بخطوات عملية","about_intro":"أهتم بتطوير الواجهات الأمامية وتصميم ØµÙØØ§Øª الهبوط، إلى جانب تصاميم Canva وإدخال البيانات وجمعها ÙˆØ§Ù„ØªÙØ±ÙŠØº الصوتي. أشارك هنا مجالات عملي وطريقة تعاوني بوضوØ.","about_contact":"لنناقش Ùكرتك","about_article_aria":"مقال تعريÙÙŠ عن نوردا",
"p_title":"كي٠نسير ÙÙŠ العمل؟ ","p_sub":"خطوات مرنة نتÙÙ‚ عليها Ø¨ØØ³Ø¨ نطاق المشروع","step":"الخطوة",
"p1_t":"Ù†ØØ¯Ø¯ المطلوب","p1_p":"نراجع الهد٠والجمهور والمواد Ø§Ù„Ù…ØªØ§ØØ© للمشروع.","p2_t":"نرتب الواجهة","p2_p":"Ù†ØØ¯Ø¯ بنية Ø§Ù„Ù…ØØªÙˆÙ‰ والعناصر البصرية المناسبة.","p3_t":"تنÙيذ النطاق المتÙÙ‚ عليه","p3_p":"أعمل على المخرجات التي ØØ¯Ø¯Ù†Ø§Ù‡Ø§ قبل البدء.","p4_t":"نراجع التسليم","p4_p":"نتأكد من Ø§Ù„Ù…Ù„ÙØ§Øª والمتطلبات التي اتÙقنا عليها.",
"pf_title":"معرض أعمالي ","pf_sub":"10 أعمال متنوعة بين ØµÙØØ§Øª الهبوط والمتاجر الإلكترونية والمواقع الشخصية.",
"tg_land":"ØµÙØØ§Øª هبوط","tg_shop":"متاجر إلكترونية","tg_pers":"مواقع شخصية","review":"استعراض","proj":"تصورات",
"cat_label":"ÙØ¦Ø§Øª الأعمال","cat_all":"كل الأعمال","cat_all_d":"كل الأعمال ÙÙŠ مكان ÙˆØ§ØØ¯","cat_land_d":"ØµÙØØ§Øª هبوط متنوعة","cat_shop_d":"متاجر بأÙكار وواجهات Ù…Ø®ØªÙ„ÙØ©","cat_pers_d":"مواقع شخصية ومعارض أعمال",
"pf1_t":"Mochi Moonlet | متجر هدايا كاواي","pf1_p":"متجر هدايا كاواي بألوان الوردي واللاÙندر: منتجات مميزة، ÙØ¦Ø§ØªØŒ عروض، تقييمات وتبديل لغة EN/FR.",
"pf2_t":"لينا مارسو | مصوّرة بالأبيض والأسود","pf2_p":"موقع مصوّرة بالأبيض والأسود: معرض بÙلاتر وعرض مكبّر، جلسات، باقات أسعار ونموذج ØØ¬Ø².",
"pf3_t":"NEURA.EDGE | أداة ذكاء اصطناعي","pf3_p":"ØµÙØØ© هبوط لأداة ذكاء اصطناعي بتصميم سايبربنك وتجربة ØªÙØ§Ø¹Ù„ية تكتب الرد ØØ±Ùاً ØØ±Ùاً.",
"pf4_t":"Natura Essence | عناية طبيعية","pf4_p":"متجر عناية طبيعي ونباتي: Ùلترة المنتجات، عرض سريع، سلة وقصة العلامة.",
"pf5_t":"Ananya | معرض مطوّرة ومصمّمة","pf5_p":"معرض أعمال وردي لمطوّرة ومصمّمة: مشاريع بÙلاتر، باقات، آراء عملاء ÙˆÙ†Ø§ÙØ°Ø© طلب مشروع.",
"pf6_t":"Brutal Barber | صالون ØÙ„اقة","pf6_p":"ØµÙØØ© هبوط لصالون ØÙ„اقة بأسلوب النيو-بروتاليزم: خدمات وأسعار، معرض وخطوات ÙˆØØ¬Ø².",
"pf7_t":"GOLDENHUE | مجوهرات ÙØ§Ø®Ø±Ø©","pf7_p":"متجر مجوهرات ÙØ§Ø®Ø± بالأسود والذهبي: منتجات مميزة، قصة العلامة، آراء وشارات ثقة.",
"pf8_t":"Marginalia | مدونة أدبية","pf8_p":"مدونة أدبية بأسلوب مكتب القراءة: مراجعات، اقتباسات، مقالات ووضع ليلي بمصباØ.",
"pf9_t":"TaskFlow | إدارة المهام","pf9_p":"ØµÙØØ© هبوط لتطبيق إدارة مهام بتصميم ØªØØ±ÙŠØ±ÙŠ Ø¨Ø³ÙŠØ·: ميزات، معاينة Ù„ÙˆØØ©ØŒ أسعار وتسجيل.",
"pf10_t":"Atelier Marchal | نجارة Ùنية","pf10_p":"موقع ورشة نجارة Ùنية: أنواع الأخشاب، خدمات، ألبومات مشاريع بعارض صور وخريطة.",
"pkg_title":"الباقات والأسعار ","pkg_sub":"لكل مشروع باقة تناسبه، ويمكننا دائماً مناقشة Ø§Ù„ØªÙØ§ØµÙŠÙ„ قبل البدء.",
"cur_label":"العملة","cur_toggle_label":"تبديل العملة","pkg_period":"/ المشروع","pkg_badge":"الأكثر طلباً","pkg_choose":"اختيار هذه الباقة","pkg_discuss":"لنناقش مشروعك",
"pkg_note":"الأسعار تقديرية وقابلة للتعديل ØØ³Ø¨ نطاق المشروع. يتم تأكيد Ø§Ù„ØªÙØ§ØµÙŠÙ„ النهائية قبل بدء العمل.",
"pkg1_t":"الأساسية","pkg1_d":"مثالية للبداية السريعة Ø¨ØµÙØØ© ÙˆØ§ØØ¯Ø© بسيطة.","pkg2_t":"القياسية","pkg2_d":"توازن مثالي بين السعر والمخرجات لمشروع Ø§ØØªØ±Ø§ÙÙŠ.","pkg3_t":"البريميوم","pkg3_d":"ØÙ„ متكامل لمشروع أكبر مع Ù…ØØªÙˆÙ‰ وتصاميم إضاÙية.","pkg4_t":"المخصصة","pkg4_d":"عندما ÙŠØØªØ§Ø¬ المشروع إلى نطاق وميزات خاصة.","pkg4_price":"ØØ³Ø¨ الطلب",
"pf_page":"ØµÙØØ© هبوط (ØØªÙ‰ 4 أقسام)","pf_responsive":"تصميم متجاوب","pf_multipage":"موقع متعدد Ø§Ù„ØµÙØØ§Øª (3 ØµÙØØ§Øª)","pf_chat":"زر دردشة (Chat Widget)","pf_contact":"نموذج تواصل","pf_domain_free":"دومين مجاني (سنة)","pf_domain_custom":"ربط دومين مخصص","pf_ssl":"شهادة SSL","pf_email":"إيميل Ø§ØØªØ±Ø§ÙÙŠ","pf_analytics":"تØÙ„يلات (Analytics)","pf_backup":"نسخ Ø§ØØªÙŠØ§Ø·ÙŠ","pf_speed":"ØªØØ³ÙŠÙ† السرعة","pf_rev1":"تعديل ÙˆØ§ØØ¯","pf_rev3":"3 تعديلات","pf_rev_unlimited":"تعديلات غير Ù…ØØ¯ÙˆØ¯Ø©","pf_deliv3":"تسليم خلال 3 أيام","pf_deliv5":"تسليم خلال 5 أيام","pf_deliv7":"تسليم خلال 7 أيام","pf_support":"دعم Ùني بعد التسليم","pf_support15":"دعم Ùني 15 يوم","pf_support30":"دعم Ùني 30 يوم","pf_content":"كتابة Ø§Ù„Ù…ØØªÙˆÙ‰",
"pkg4_f1":"نطاق مخصص بالكامل","pkg4_f2":"ميزات إضاÙية ØØ³Ø¨ Ø§Ù„ØØ§Ø¬Ø©","pkg4_f3":"جدول تسليم مرن","pkg4_f4":"تسعير ØØ³Ø¨ المتطلبات","pkg4_f5":"استشارة مجانية قبل البدء",
"pay_title":"طرق Ø§Ù„Ø¯ÙØ¹ ","pay_sub":"خيارات Ø§Ù„Ø¯ÙØ¹ Ø§Ù„Ù…ØªØ§ØØ© التي يمكن تأكيد ØªÙØ§ØµÙŠÙ„ها قبل بدء العمل.",
"pay1_t":"بريدي موب","pay1_d":"يتم تأكيد Ø§Ù„ØªÙØ§ØµÙŠÙ„ قبل بدء العمل.","pay2_t":"Ù…ØÙظة إلكترونية","pay2_d":"ØªÙØØ¯Ø¯ المØÙظة المناسبة Ø¨Ø§Ù„Ø§ØªÙØ§Ù‚ المسبق.","pay3_t":"Binance","pay3_d":"يتم تنسيق طريقة التØÙˆÙŠÙ„ قبل بدء العمل.","pay4_t":"Grey","pay4_d":"يتم تأكيد Ø§Ù„ØªÙˆÙØ± ÙˆØ§Ù„ØªÙØ§ØµÙŠÙ„ قبل بدء العمل.",
"q_title":"الأسئلة الشائعة ","q_sub":"كل ما يلزم Ù…Ø¹Ø±ÙØªÙ‡ قبل البدء",
"q1":"ما المدة اللازمة لتنÙيذ المشروع؟","a1":"ØªØªØØ¯Ø¯ المدة بعد مراجعة نطاق العمل والمواد Ø§Ù„Ù…ØªØ§ØØ©ØŒ ثم نتÙÙ‚ عليها قبل البدء.",
"q2":"هل يمكن طلب تعديلات؟","a2":"نعم، نتÙÙ‚ على نطاق التعديلات وطريقة تسليمها قبل بدء العمل.",
"q3":"ما طرق Ø§Ù„Ø¯ÙØ¹ Ø§Ù„Ù…ØªØ§ØØ©ØŸ","a3":"ØªØªÙˆÙØ± بريدي موب ومØÙظة إلكترونية ÙˆBinance ÙˆGreyØŒ ÙˆØªÙØ¤ÙƒØ¯ Ø§Ù„ØªÙØ§ØµÙŠÙ„ قبل بدء العمل.",
"q4":"هل يمكن تنÙيذ موقع كامل؟","a4":"يمكن مناقشة ØµÙØØ§Øª الهبوط ومشاريع الواجهات الأمامية Ø¨ØØ³Ø¨ نطاق المشروع.",
"q5":"ما المعلومات اللازمة لبدء الطلب؟","a5":"يكÙÙŠ إرسال وص٠الÙكرة والجمهور والمخرجات المطلوبة وأي موعد مهم، ثم Ù†ØØ¯Ø¯ نطاق العمل قبل البدء.",
"q6":"هل يمكن رؤية مشروع ØÙŠÙ‘ØŸ","a6":"للاطلاع على مشروع ØÙŠÙ‘ تواصل معي مباشرة وسأرسل لك Ø§Ù„ØªÙØ§ØµÙŠÙ„.",
"faq_form_title":"لديك سؤال؟","faq_question":"السؤال",
"c_title":"لنتواصل ","c_sub":"يكÙÙŠ إرسال ØªÙØ§ØµÙŠÙ„ الÙكرة، وسأراجع نطاقها وطريقة التواصل المناسبة.","c_form_t":"إرسال رسالة",
"f_name":"الاسم","f_email":"البريد الإلكتروني","f_subject":"الموضوع","f_msg":"الرسالة","f_send":"إرسال",
"ph_subject":"موضوع الرسالة","ph_message":"ØªÙØ§ØµÙŠÙ„ رسالتك هنا","ph_question":"سؤالك هنا",
"ft_about":"عمل رقمي مستقل يهتم بتطوير الواجهات الأمامية والتصميم والمهام الرقمية العملية.","ft_links":"روابط سريعة","ft_info":"معلومات","ft_contact":"تواصل","ft_made":"صÙنع بكل",
"logo_alt":"شعار NorDa","profile_alt":"صورة تعريÙية مؤقتة","splash_tagline":"ØØ¶ÙˆØ± رقمي واضØ",
"chat_aria":"دردشة","chat_title":"دردشة مباشرة","online":"عادة ما يتم الرد Ùورا",
"tab_new":"جديدة","tab_chat":"دردشة","tab_closed":"المغلقة","status_open":"Ù…ÙØªÙˆØØ©","status_closed":"مغلقة",
"no_ticket_title":"لا توجد تذكرة Ù…ÙØªÙˆØØ©","no_ticket_desc":"لنبدأ Ù…ØØ§Ø¯Ø«Ø© جديدة وسنرد ÙÙŠ أقرب وقت","new_ticket":"Ù…ØØ§Ø¯Ø«Ø© جديدة","close_ticket":"إغلاق التذكرة","back":"رجوع",
"no_closed":"لا توجد تذاكر مغلقة بعد","view_ticket":"عرض","chat_hello":"Ù…Ø±ØØ¨Ø§Ù‹! كي٠يمكنني المساعدة؟","chat_ph":"رسالتك…","attach":"Ø¥Ø±ÙØ§Ù‚ ملÙ","guest":"زائر",
"msg_ok":"تم الإرسال بنجاØ","msg_err":"تعذّر الإرسال، يرجى Ø§Ù„Ù…ØØ§ÙˆÙ„Ø© مرة أخرى","msg_req":"يرجى تعبئة الØÙ‚ول المطلوبة","msg_email":"يرجى إدخال بريد إلكتروني صØÙŠØ","msg_wait":"جار٠الإرسال…",
"file_too_big":"المل٠كبير جداً (Ø§Ù„ØØ¯ 2 ميغا)","ticket_closed_msg":"هذه التذكرة مغلقة","ticket_new_msg":"بدأت تذكرة جديدة، رسالتك الأولى بانتظارك","ticket_close_confirm":"إغلاق هذه التذكرة؟","ticket_closed_ok":"تم إغلاق التذكرة بنجاØ",
"builder_title":"NorDa — تصور مشروعك","builder_intro":"بخطوات قصيرة يمكنك إرسال وص٠Ùكرتك عبر الدردشة.","builder_step_label":"الخطوة","builder_prev":"السابق","builder_next":"التالي","builder_send":"إرسال التصور","builder_sent":"تم إرسال وص٠الÙكرة عبر Ø§Ù„Ù…ØØ§Ø¯Ø«Ø©.","builder_send_error":"تعذر الإرسال. يرجى التØÙ‚Ù‚ من الاتصال ÙˆØ§Ù„Ù…ØØ§ÙˆÙ„Ø© مرة أخرى.",
"builder_s1":"ما الغرض من الموقع؟","builder_s1_help":"باختصار، ما الذي ÙŠÙÙØªØ±Ø¶ أن ÙŠØÙ‚قه الموقع؟","builder_purpose_ph":"مثال: التعري٠بخدمة أو عرض منتجات",
"builder_s2":"ما الأسلوب البصري Ø§Ù„Ù…ÙØ¶Ù„ØŸ","build_style_soft":"ناعم وأنيق","build_style_bold":"جريء ÙˆØØ¯ÙŠØ«","build_style_minimal":"بسيط وهادئ","build_style_playful":"Ù…Ø±Ø ÙˆØÙŠÙˆÙŠ",
"builder_s3":"ما اللون الأساسي؟","builder_color_label":"لون تقريبي",
"builder_s4":"ما تخطيط Ø§Ù„ØµÙØØ© الأنسب؟","build_layout_long":"ØµÙØØ© ÙˆØ§ØØ¯Ø© طويلة","build_layout_sections":"أقسام ÙˆØ§Ø¶ØØ© وبطاقات","build_layout_gallery":"معرض مرئي واسع",
"builder_s5":"ما مستوى Ø§Ù„ØØ±ÙƒØ© المناسب؟","build_motion_subtle":"ØØ±ÙƒØ© Ø®ÙÙŠÙØ©","build_motion_none":"بدون ØØ±ÙƒØ© تقريباً","build_motion_lively":"ØØ±ÙƒØ© ملØÙˆØ¸Ø©",
"builder_s6":"هل هناك مصدر إلهام؟","builder_s6_help":"يمكن وص٠موقع أو Ø¥ØØ³Ø§Ø³ أو مثال قريب مما تريده.","builder_inspiration_ph":"ألوان، رابط مرجعي، أو وص٠قصير",
"builder_s7":"ما أسلوب الخطوط Ø§Ù„Ù…ÙØ¶Ù„ØŸ","build_type_modern":"ØØ¯ÙŠØ« وواضØ","build_type_editorial":"ØªØØ±ÙŠØ±ÙŠ ÙˆØ£Ù†ÙŠÙ‚","build_type_friendly":"ودود وبسيط",
"builder_s8":"ما الميزات أو الأقسام المهمة؟","builder_s8_help":"كل ما يخطر ببالك؛ القائمة ليست نهائية.","builder_features_ph":"نموذج تواصل، معرض، أسئلة شائعة...",
"builder_s9":"كي٠نتواصل معك؟",
"sound_label":"الصوت","sound_on":"كتم صوت تنبيه الدردشة","sound_off":"تشغيل صوت تنبيه الدردشة","lb_close":"إغلاق المعرض",
"about_article":"أعمل بشكل رقمي مستقل، وأستكش٠كي٠يمكن للتصميم والتقنية أن يجعلا الأÙكار اليومية أسهل ÙÙŠ الÙهم والاستخدام. يعرّ٠هذا الموقع بالمجالات التي أتعلمها ويمكنني تقديم المساعدة Ùيها: تطوير الواجهات الأمامية، تصميم ØµÙØØ§Øª الهبوط، إعداد تصاميم التواصل الاجتماعي باستخدام CanvaØŒ إدخال البيانات، جمع المعلومات، ÙˆØ§Ù„ØªÙØ±ÙŠØº الصوتي.
ÙÙŠ تطوير الواجهات، يهمني أن تكون Ø§Ù„ØµÙØØ© Ù…Ùهومة على Ø§Ù„Ù‡Ø§ØªÙ ÙˆØ§Ù„ØØ§Ø³ÙˆØ¨ØŒ وأن يجد الزائر المعلومة الأساسية دون Ø¨ØØ« طويل. أتعامل مع ترتيب Ø§Ù„Ù…ØØªÙˆÙ‰ØŒ ÙˆÙˆØ¶ÙˆØ Ø§Ù„Ø£Ø²Ø±Ø§Ø±ØŒ وسهولة التنقل، واتساق الألوان بوصÙها أجزاء من التجربة Ù†ÙØ³Ù‡Ø§.
أهتم أيضاً بتصميم منشورات ومواد بسيطة لوسائل التواصل الاجتماعي عبر Canva. يمكنني تØÙˆÙŠÙ„ Ùكرة أو نص موجود إلى تخطيط بصري منظم، مع مراعاة الألوان والمقاسات والمنصة التي ستÙنشر عليها المادة.
أواصل التعلم من خلال التجربة والممارسة ومراجعة ما أنجزه. أريد أن يكون التعاون مباشراً ÙˆÙ…Ø±ÙŠØØ§Ù‹: تصلني الÙكرة أو Ø§Ù„Ù…Ù„ÙØ§Øª ذات الصلة، أراجع المطلوب، ثم Ø£ÙˆØ¶Ø Ù…Ø§ يمكن تنÙيذه والخطوة التالية.
"
},
"en":{
"skip_nav":"Skip to menu","skip_main":"Skip to content","skip_foot":"Skip to footer",
"nav_label":"Main menu","n_home":"Home","n_about":"About","n_services":"Services","n_portfolio":"Portfolio","n_packages":"Packages","n_payment":"Payment","n_faq":"FAQ","n_contact":"Contact",
"th_label":"Theme","lang_label":"Change language","menu_open":"Open menu","menu_close":"Close menu","th_light":"Light","th_dark":"Dark",
"top":"Back to top","close":"Close","prev":"Previous","next":"Next",
"h_badge":"Independent digital services","h_title":"Let's build a clear digital presence around your idea","h_lead":"Front-end development, landing page design, and practical digital services with clear scope and attention to detail.","h_cta1":"Start your project","h_cta2":"View portfolio","h_c1":"Responsive layout","h_c2":"Clear content structure","h_c3":"Near-complete site at a fair price",
"f1":"Practical project planning","f2":"Attention to detail","av1":"Usability in mind","av2":"Responsive design",
"abs_t":"About NorDa ","abs_p":"I work as an independent digital freelancer, learning through practical projects in design and technology. This site shares the areas where I can help.","abs_b":"Get to know me",
"s_title":"My Services ","s_title_full":"My Services ","s_sub":"Digital services whose scope we can discuss before work begins","s_sub_full":"Digital services whose scope we can discuss before work begins",
"s1_t":"Landing page design","s1_p":"Organizing content and planning a landing page interface around its purpose, audience, and available materials.",
"s2_t":"Front-end development","s2_p":"Building responsive web interfaces within a scope and requirements agreed in advance.",
"s3_t":"Canva social media design","s3_p":"Creating simple visual designs for social posts using the agreed content and dimensions.",
"s_all":"All services",
"lw_t":"Latest Work ","lw_sub":"Three of my projects","lw_all":"All work",
"cta_t":"Ready to start a project?","cta_p":"In a few short steps, describe your idea and what you need.","cta_b":"Start now",
"a_title":"About me ","a_sub":"An independent digital freelancer interested in front-end interfaces, design, and practical digital tasks.",
"about_intro_title":"Independent digital work, learning through practice","about_intro":"My interests include front-end development and landing page design, along with Canva graphics, data entry, data collection, and transcription. I share my work areas and process clearly.","about_contact":"Let's discuss your idea","about_article_aria":"About NorDa",
"p_title":"How the work proceeds ","p_sub":"Flexible steps agreed around the project scope","step":"Step",
"p1_t":"Define the request","p1_p":"Review the goal, audience, and materials available.","p2_t":"Plan the interface","p2_p":"Agree on the content structure and useful visual elements.","p3_t":"Work to the agreed scope","p3_p":"I work on the deliverables identified before starting.","p4_t":"Review the handoff","p4_p":"Check the files and requirements agreed for delivery.",
"pf_title":"My Portfolio ","pf_sub":"10 projects across landing pages, online stores and personal websites.",
"tg_land":"Landing pages","tg_shop":"Online stores","tg_pers":"Personal websites","review":"Preview","proj":"concepts",
"cat_label":"Work categories","cat_all":"All work","cat_all_d":"Browse all work in one place","cat_land_d":"Landing pages of different types","cat_shop_d":"Storefronts with varied layouts","cat_pers_d":"Personal sites and portfolios",
"pf1_t":"Mochi Moonlet Kawaii Store","pf1_p":"A pink and lavender kawaii gift store with featured products, categories, promo banner, reviews and EN/FR switch.",
"pf2_t":"Lina Marceau Photography","pf2_p":"A black-and-white photographer site with a filterable lightbox gallery, sessions, pricing and a booking form.",
"pf3_t":"NEURA.EDGE AI Tool","pf3_p":"A cyberpunk landing page for an AI tool with an interactive demo that types its reply live.",
"pf4_t":"Natura Essence Skincare","pf4_p":"A natural vegan skincare store with product filters, quick view, cart and brand story.",
"pf5_t":"Ananya Portfolio","pf5_p":"A soft-pink portfolio for a developer and designer with a project carousel, pricing, testimonials and a request modal.",
"pf6_t":"Brutal Barber","pf6_p":"A neo-brutalist landing page for a barbershop with services, prices, gallery, steps and booking.",
"pf7_t":"GOLDENHUE Jewelry","pf7_p":"A luxury black-and-gold jewelry store with featured pieces, brand story, testimonials and trust badges.",
"pf8_t":"Marginalia Literary Journal","pf8_p":"A literary journal styled as a reading desk with reviews, quotes, essays and a reading-lamp night mode.",
"pf9_t":"TaskFlow Task Manager","pf9_p":"A minimalist editorial landing page for a task app with features, dashboard preview, pricing and signup.",
"pf10_t":"Atelier Marchal Woodworking","pf10_p":"A fine woodworking workshop site with wood species, services, project albums with a slider and a map.",
"pkg_title":"Packages & Pricing ","pkg_sub":"Every project has a package that fits. We can always discuss the details before starting.",
"cur_label":"Currency","cur_toggle_label":"Toggle currency","pkg_period":"/ project","pkg_badge":"Most popular","pkg_choose":"Choose this package","pkg_discuss":"Discuss your project",
"pkg_note":"Prices are estimates and can be adjusted based on project scope. Final details are confirmed before work begins.",
"pkg1_t":"Basic","pkg1_d":"Perfect for a quick start with a simple single page.","pkg2_t":"Standard","pkg2_d":"The ideal balance between price and output for a professional project.","pkg3_t":"Premium","pkg3_d":"A complete solution for a larger project with extra content and designs.","pkg4_t":"Custom","pkg4_d":"When a project needs a special scope and features.","pkg4_price":"On request",
"pf_page":"Landing page (up to 4 sections)","pf_responsive":"Responsive design","pf_multipage":"Multi-page website (3 pages)","pf_chat":"Chat widget","pf_contact":"Contact form","pf_domain_free":"Free domain (1 year)","pf_domain_custom":"Custom domain connection","pf_ssl":"SSL certificate","pf_email":"Professional email","pf_analytics":"Analytics","pf_backup":"Backup","pf_speed":"Speed optimization","pf_rev1":"One revision","pf_rev3":"3 revisions","pf_rev_unlimited":"Unlimited revisions","pf_deliv3":"Delivery within 3 days","pf_deliv5":"Delivery within 5 days","pf_deliv7":"Delivery within 7 days","pf_support":"Post-delivery support","pf_support15":"15-day support","pf_support30":"30-day support","pf_content":"Content writing",
"pkg4_f1":"Fully custom scope","pkg4_f2":"Extra features as needed","pkg4_f3":"Flexible delivery schedule","pkg4_f4":"Pricing based on requirements","pkg4_f5":"Free consultation before starting",
"pay_title":"Payment Methods ","pay_sub":"Payment options whose details can be confirmed before work begins.",
"pay1_t":"BaridiMob","pay1_d":"Details are confirmed before work begins.","pay2_t":"Digital wallet","pay2_d":"The suitable wallet is agreed in advance.","pay3_t":"Binance","pay3_d":"Transfer details are agreed before work begins.","pay4_t":"Grey","pay4_d":"Availability and details are confirmed before work begins.",
"q_title":"Frequently asked questions ","q_sub":"Everything worth knowing before starting",
"q1":"How long will the project take?","a1":"Timing depends on the scope and available materials; we agree on it before starting.",
"q2":"Can revisions be requested?","a2":"Yes. We agree on the revision scope and handoff process before work begins.",
"q3":"Which payment methods are available?","a3":"BaridiMob, a digital wallet, Binance, and Grey may be available; details are confirmed before work begins.",
"q4":"Can you build a complete website?","a4":"Landing pages and front-end projects can be discussed based on the project scope.",
"q5":"What information is needed to start a request?","a5":"Just send the idea, audience, requested deliverables, and any important timing, and we will define the scope before starting.",
"q6":"Can I see a live project?","a6":"To see a live project, contact me directly and I will share the details.",
"faq_form_title":"Have a question?","faq_question":"Question",
"c_title":"Let's talk ","c_sub":"Share the project details and I will review the scope and a suitable way to communicate.","c_form_t":"Send a message",
"f_name":"Name","f_email":"Email","f_subject":"Subject","f_msg":"Message","f_send":"Send",
"ph_subject":"Enter a subject","ph_message":"Write the details of your message","ph_question":"Write your question",
"ft_about":"Independent digital freelancer interested in front-end development, design, and practical digital tasks.","ft_links":"Quick links","ft_info":"Info","ft_contact":"Contact","ft_made":"Made with",
"logo_alt":"NorDa logo","profile_alt":"Temporary profile image","splash_tagline":"A clear digital presence",
"chat_aria":"Chat","chat_title":"Live chat","online":"You can message us",
"tab_new":"New","tab_chat":"Chat","tab_closed":"Closed","status_open":"Open","status_closed":"Closed",
"no_ticket_title":"No open ticket","no_ticket_desc":"Let's start a new conversation; we will reply as soon as possible","new_ticket":"New conversation","close_ticket":"Close ticket","back":"Back",
"no_closed":"No closed tickets yet","view_ticket":"View","chat_hello":"Hi! How can I help?","chat_ph":"Write your message…","attach":"Attach file","guest":"Guest",
"msg_ok":"Sent successfully","msg_err":"Could not send, please try again","msg_req":"Please fill in the required fields","msg_email":"Enter a valid email","msg_wait":"Sending…",
"file_too_big":"File too large (max 2MB)","ticket_closed_msg":"This ticket is closed","ticket_new_msg":"New ticket started! Your first message is welcome","ticket_close_confirm":"Close this ticket?","ticket_closed_ok":"Ticket closed successfully",
"builder_title":"NorDa — Shape your idea","builder_intro":"Answer a few short questions to send your project outline through the chat.","builder_step_label":"Step","builder_prev":"Previous","builder_next":"Next","builder_send":"Send concept","builder_sent":"Your project outline was sent through the chat.","builder_send_error":"Could not send. Check your connection and try again.",
"builder_s1":"What is the website for?","builder_s1_help":"Briefly describe what the site should do.","builder_purpose_ph":"For example: introduce a service or present products",
"builder_s2":"Which visual style do you prefer?","build_style_soft":"Soft and elegant","build_style_bold":"Bold and modern","build_style_minimal":"Simple and calm","build_style_playful":"Playful and lively",
"builder_s3":"What should the main color be?","builder_color_label":"Choose an approximate color",
"builder_s4":"Which page layout fits best?","build_layout_long":"One long page","build_layout_sections":"Clear sections and cards","build_layout_gallery":"A visual, gallery-led layout",
"builder_s5":"How much motion would you like?","build_motion_subtle":"Subtle motion","build_motion_none":"Very little motion","build_motion_lively":"Noticeable motion",
"builder_s6":"Any inspiration?","builder_s6_help":"Describe a website, feeling, or example to reference.","builder_inspiration_ph":"Colors, a reference link, or a short description",
"builder_s7":"Which typography style do you prefer?","build_type_modern":"Modern and clear","build_type_editorial":"Editorial and elegant","build_type_friendly":"Friendly and simple",
"builder_s8":"Which features or sections matter?","builder_s8_help":"List anything that comes to mind; the list does not need to be final.","builder_features_ph":"Contact form, gallery, FAQ...",
"builder_s9":"How can we contact you?",
"sound_label":"Sound","sound_on":"Mute chat notification sound","sound_off":"Enable chat notification sound","lb_close":"Close gallery",
"about_article":"I work as an independent digital freelancer, exploring how design and technology can make everyday ideas easier to understand and use. This site introduces the areas I am learning and can help with: front-end development, landing page design, Canva social media graphics, data entry, information gathering, and transcription.
In front-end development, I care about making a page understandable on both phones and computers, and helping visitors find the main information without a long search. Content order, button clarity, easy navigation, and consistent colors are all parts of the same experience.
I am also interested in creating simple social media posts and materials with Canva. I can turn an existing idea or text into an organized visual layout, while considering its colors, dimensions, and intended platform.
I continue learning through practice, experimentation, and reviewing my work. I want collaboration to be direct and comfortable: the idea or related files reach me, I review the request, then explain what can be done and the next step.
"
},
"fr":{
"skip_nav":"Aller au menu","skip_main":"Aller au contenu","skip_foot":"Aller au pied de page",
"nav_label":"Menu principal","n_home":"Accueil","n_about":"À propos","n_services":"Services","n_portfolio":"Portfolio","n_packages":"Formules","n_payment":"Paiement","n_faq":"FAQ","n_contact":"Contact",
"th_label":"Thème","lang_label":"Changer de langue","menu_open":"Ouvrir le menu","menu_close":"Fermer le menu","th_light":"Clair","th_dark":"Sombre",
"top":"Haut de page","close":"Fermer","prev":"Précédent","next":"Suivant",
"h_badge":"Services numériques indépendants","h_title":"Construisons une présence numérique claire autour de votre idée","h_lead":"Développement front-end, design de pages d'atterrissage et services numériques pratiques, avec un périmètre clair et le souci du détail.","h_cta1":"Démarrer le projet","h_cta2":"Voir le portfolio","h_c1":"Mise en page responsive","h_c2":"Structure de contenu claire","h_c3":"Site quasi complet à prix juste",
"f1":"Planification pratique du projet","f2":"Souci du détail","av1":"Convivialité avant tout","av2":"Design responsive",
"abs_t":"À propos de NorDa ","abs_p":"Je travaille en freelance dans le numérique et j'apprends par des projets pratiques en design et technologie. Ce site présente les domaines où je peux aider.","abs_b":"En savoir plus",
"s_title":"Mes Services ","s_title_full":"Mes Services ","s_sub":"Services numériques dont nous pouvons discuter le périmètre avant de commencer","s_sub_full":"Services numériques dont nous pouvons discuter le périmètre avant de commencer",
"s1_t":"Design de pages d'atterrissage","s1_p":"Organiser le contenu et planifier une page d'atterrissage selon son objectif, son public et les ressources disponibles.",
"s2_t":"Développement front-end","s2_p":"Créer des interfaces web responsives dans un périmètre défini à l'avance.",
"s3_t":"Design Canva pour réseaux sociaux","s3_p":"Créer des visuels simples pour les réseaux sociaux selon le contenu et les dimensions convenus.",
"s_all":"Tous les services",
"lw_t":"Derniers travaux ","lw_sub":"Trois de mes projets","lw_all":"Tous les travaux",
"cta_t":"Prêt à démarrer un projet ?","cta_p":"En quelques étapes courtes, décrivez votre idée et vos besoins.","cta_b":"Commencer",
"a_title":"À propos de moi ","a_sub":"Freelance numérique indépendant, intéressé par le front-end, le design et les tâches numériques pratiques.",
"about_intro_title":"Travail numérique indépendant, apprentissage par la pratique","about_intro":"Mes intérêts incluent le développement front-end et le design de pages d'atterrissage, ainsi que les visuels Canva, la saisie et la collecte de données, et la transcription. Je présente clairement mes domaines et ma façon de collaborer.","about_contact":"Parlons de votre idée","about_article_aria":"À propos de NorDa",
"p_title":"Comment se déroule le travail ","p_sub":"Étapes flexibles convenues selon le périmètre du projet","step":"Étape",
"p1_t":"Définir la demande","p1_p":"Examiner l'objectif, le public et les ressources disponibles.","p2_t":"Planifier l'interface","p2_p":"Convenir de la structure du contenu et des éléments visuels utiles.","p3_t":"Travailler selon le périmètre convenu","p3_p":"Je travaille sur les livrables identifiés avant de commencer.","p4_t":"Vérifier la livraison","p4_p":"Vérifier les fichiers et exigences convenus pour la livraison.",
"pf_title":"Mon Portfolio ","pf_sub":"10 projets : pages d'atterrissage, boutiques en ligne et sites personnels.",
"tg_land":"Pages d'atterrissage","tg_shop":"Boutiques en ligne","tg_pers":"Sites personnels","review":"Aperçu","proj":"concepts",
"cat_label":"Catégories","cat_all":"Tous les travaux","cat_all_d":"Tous les projets au même endroit","cat_land_d":"Pages d'atterrissage variées","cat_shop_d":"Boutiques aux mises en page variées","cat_pers_d":"Sites personnels et portfolios",
"pf1_t":"Boutique Kawaii Mochi Moonlet","pf1_p":"Boutique kawaii rose et lavande : produits vedettes, catégories, promo, avis et bascule EN/FR.",
"pf2_t":"Lina Marceau Photographie","pf2_p":"Site de photographe en noir et blanc : galerie filtrable avec lightbox, séances, forfaits et réservation.",
"pf3_t":"NEURA.EDGE, outil IA","pf3_p":"Page d'atterrissage cyberpunk pour un outil IA avec démo interactive qui écrit sa réponse en direct.",
"pf4_t":"Natura Essence, soins naturels","pf4_p":"Boutique de soins naturels et vegan : filtres, aperçu rapide, panier et histoire de la marque.",
"pf5_t":"Portfolio Ananya","pf5_p":"Portfolio rose pastel pour développeuse et designeuse : carrousel de projets, formules, témoignages et demande de projet.",
"pf6_t":"Brutal Barber, salon de coiffure","pf6_p":"Page néo-brutaliste pour un salon de coiffure : services, tarifs, galerie, étapes et réservation.",
"pf7_t":"GOLDENHUE, joaillerie","pf7_p":"Boutique de joaillerie noir et or : pièces vedettes, histoire de la marque, avis et badges de confiance.",
"pf8_t":"Marginalia, journal littéraire","pf8_p":"Journal littéraire façon bureau de lecture : critiques, citations, essais et mode nuit à la lampe.",
"pf9_t":"TaskFlow, gestion de tâches","pf9_p":"Page minimaliste éditoriale pour une app de tâches : fonctions, aperçu du tableau de bord, tarifs et inscription.",
"pf10_t":"Atelier Marchal, ébénisterie d'art","pf10_p":"Site d'atelier d'ébénisterie d'art : essences, savoir-faire, albums avec slider et carte.",
"pkg_title":"Formules & Tarifs ","pkg_sub":"Chaque projet a sa formule. Nous pouvons toujours en discuter avant de commencer.",
"cur_label":"Devise","cur_toggle_label":"Changer la devise","pkg_period":"/ projet","pkg_badge":"Le plus populaire","pkg_choose":"Choisir cette formule","pkg_discuss":"Discuter de votre projet",
"pkg_note":"Les prix sont estimatifs et ajustables selon le périmètre du projet. Les détails finaux sont confirmés avant de commencer.",
"pkg1_t":"Basique","pkg1_d":"Parfait pour démarrer rapidement avec une page simple.","pkg2_t":"Standard","pkg2_d":"L'équilibre idéal entre prix et résultat pour un projet professionnel.","pkg3_t":"Premium","pkg3_d":"Une solution complète pour un projet plus grand avec contenu et designs supplémentaires.","pkg4_t":"Sur mesure","pkg4_d":"Quand un projet nécessite un périmètre et des fonctionnalités spécifiques.","pkg4_price":"Sur devis",
"pf_page":"Page d'atterrissage (jusqu'à 4 sections)","pf_responsive":"Design responsive","pf_multipage":"Site multi-pages (3 pages)","pf_chat":"Widget de chat","pf_contact":"Formulaire de contact","pf_domain_free":"Domaine gratuit (1 an)","pf_domain_custom":"Connexion de domaine personnalisé","pf_ssl":"Certificat SSL","pf_email":"Email professionnel","pf_analytics":"Analytics","pf_backup":"Sauvegarde","pf_speed":"Optimisation de la vitesse","pf_rev1":"Une révision","pf_rev3":"3 révisions","pf_rev_unlimited":"Révisions illimitées","pf_deliv3":"Livraison en 3 jours","pf_deliv5":"Livraison en 5 jours","pf_deliv7":"Livraison en 7 jours","pf_support":"Support après livraison","pf_support15":"Support 15 jours","pf_support30":"Support 30 jours","pf_content":"Rédaction de contenu",
"pkg4_f1":"Périmètre entièrement personnalisé","pkg4_f2":"Fonctionnalités supplémentaires selon les besoins","pkg4_f3":"Calendrier de livraison flexible","pkg4_f4":"Tarification selon les besoins","pkg4_f5":"Consultation gratuite avant de commencer",
"pay_title":"Moyens de paiement ","pay_sub":"Options de paiement dont les détails peuvent être confirmés avant de commencer.",
"pay1_t":"BaridiMob","pay1_d":"Les détails sont confirmés avant de commencer.","pay2_t":"Portefeuille numérique","pay2_d":"Le portefeuille adapté est convenu à l'avance.","pay3_t":"Binance","pay3_d":"Les détails du transfert sont convenus avant de commencer.","pay4_t":"Grey","pay4_d":"Disponibilité et détails confirmés avant de commencer.",
"q_title":"Questions fréquentes ","q_sub":"Tout ce qu'il faut savoir avant de commencer",
"q1":"Combien de temps prend un projet ?","a1":"La durée dépend du périmètre et des ressources ; nous en convenons avant de commencer.",
"q2":"Peut-on demander des révisions ?","a2":"Oui. Nous convenons du périmètre des révisions et du processus de livraison avant de commencer.",
"q3":"Quels moyens de paiement sont disponibles ?","a3":"BaridiMob, portefeuille numérique, Binance et Grey peuvent être disponibles ; les détails sont confirmés avant de commencer.",
"q4":"Pouvez-vous créer un site complet ?","a4":"Les pages d'atterrissage et projets front-end peuvent être discutés selon le périmètre.",
"q5":"Quelles informations pour démarrer une demande ?","a5":"Il suffit d'envoyer l'idée, le public, les livrables souhaités et toute échéance importante ; nous définirons le périmètre avant de commencer.",
"q6":"Puis-je voir un projet en ligne ?","a6":"Pour voir un projet en ligne, contactez-moi directement et je vous envoie les détails.",
"faq_form_title":"Une question ?","faq_question":"Question",
"c_title":"Parlons-en ","c_sub":"Partagez les détails du projet et j'examinerai le périmètre et un moyen de communication adapté.","c_form_t":"Envoyer un message",
"f_name":"Nom","f_email":"Email","f_subject":"Sujet","f_msg":"Message","f_send":"Envoyer",
"ph_subject":"Entrez un sujet","ph_message":"Écrivez les détails de votre message","ph_question":"Écrivez votre question",
"ft_about":"Freelance numérique indépendant, intéressé par le développement front-end, le design et les tâches numériques pratiques.","ft_links":"Liens rapides","ft_info":"Infos","ft_contact":"Contact","ft_made":"Fait avec",
"logo_alt":"Logo NorDa","profile_alt":"Image de profil temporaire","splash_tagline":"Une présence numérique claire",
"chat_aria":"Chat","chat_title":"Chat en direct","online":"Écrivez-nous",
"tab_new":"Nouveau","tab_chat":"Chat","tab_closed":"Fermés","status_open":"Ouvert","status_closed":"Fermé",
"no_ticket_title":"Aucun ticket ouvert","no_ticket_desc":"Démarrons une nouvelle conversation ; nous répondrons dès que possible","new_ticket":"Nouvelle conversation","close_ticket":"Fermer le ticket","back":"Retour",
"no_closed":"Aucun ticket fermé pour le moment","view_ticket":"Voir","chat_hello":"Bonjour ! Comment puis-je aider ?","chat_ph":"Écrivez votre message…","attach":"Joindre un fichier","guest":"Invité",
"msg_ok":"Envoyé avec succès","msg_err":"Échec de l'envoi, veuillez réessayer","msg_req":"Veuillez remplir les champs requis","msg_email":"Entrez un email valide","msg_wait":"Envoi…",
"file_too_big":"Fichier trop volumineux (max 2 Mo)","ticket_closed_msg":"Ce ticket est fermé","ticket_new_msg":"Nouveau ticket créé ! Votre premier message est attendu","ticket_close_confirm":"Fermer ce ticket ?","ticket_closed_ok":"Ticket fermé avec succès",
"builder_title":"NorDa — Façonnez votre idée","builder_intro":"Répondez à quelques questions pour envoyer votre projet via le chat.","builder_step_label":"Étape","builder_prev":"Précédent","builder_next":"Suivant","builder_send":"Envoyer le concept","builder_sent":"Votre projet a été envoyé via le chat.","builder_send_error":"Échec de l'envoi. Vérifiez votre connexion et réessayez.",
"builder_s1":"À quoi sert le site ?","builder_s1_help":"Décrivez brièvement ce que le site doit accomplir.","builder_purpose_ph":"Exemple : présenter un service ou des produits",
"builder_s2":"Quel style visuel préférez-vous ?","build_style_soft":"Doux et élégant","build_style_bold":"Audacieux et moderne","build_style_minimal":"Simple et calme","build_style_playful":"Ludique et vivant",
"builder_s3":"Quelle doit être la couleur principale ?","builder_color_label":"Choisissez une couleur approximative",
"builder_s4":"Quelle mise en page convient le mieux ?","build_layout_long":"Une longue page","build_layout_sections":"Sections claires et cartes","build_layout_gallery":"Mise en page galerie visuelle",
"builder_s5":"Quel niveau de mouvement souhaitez-vous ?","build_motion_subtle":"Mouvement subtil","build_motion_none":"Très peu de mouvement","build_motion_lively":"Mouvement notable",
"builder_s6":"Une source d'inspiration ?","builder_s6_help":"Décrivez un site, une ambiance ou un exemple de référence.","builder_inspiration_ph":"Couleurs, lien de référence ou courte description",
"builder_s7":"Quel style typographique préférez-vous ?","build_type_modern":"Moderne et clair","build_type_editorial":"Éditorial et élégant","build_type_friendly":"Amical et simple",
"builder_s8":"Quelles fonctionnalités ou sections comptent ?","builder_s8_help":"Listez ce qui vous vient à l'esprit ; la liste n'a pas besoin d'être finale.","builder_features_ph":"Formulaire de contact, galerie, FAQ...",
"builder_s9":"Comment pouvons-nous vous contacter ?",
"sound_label":"Son","sound_on":"Couper le son des notifications","sound_off":"Activer le son des notifications","lb_close":"Fermer la galerie",
"about_article":"Je travaille en freelance dans le numérique et j'explore comment le design et la technologie peuvent rendre les idées du quotidien plus faciles à comprendre et à utiliser. Ce site présente les domaines que j'apprends et où je peux aider : développement front-end, pages d'atterrissage, visuels Canva pour les réseaux sociaux, saisie de données, recherche d'informations et transcription.
En développement front-end, je tiens à ce qu'une page soit compréhensible sur téléphone comme sur ordinateur, et que le visiteur trouve l'information principale sans longue recherche. L'ordre du contenu, la clarté des boutons, la navigation et la cohérence des couleurs font partie d'une même expérience.
Je m'intéresse aussi à la création de visuels simples pour les réseaux sociaux avec Canva. Je peux transformer une idée ou un texte existant en mise en page visuelle organisée, en tenant compte des couleurs, des dimensions et de la plateforme visée.
Je continue d'apprendre par la pratique, l'expérimentation et la révision de mon travail. Je souhaite une collaboration directe et agréable : l'idée ou les fichiers me parviennent, j'examine la demande, puis j'explique ce qui est faisable et la suite.
"
}
};
/* ============ اللغة ============ */
var LANGS=['ar','en','fr'];
function detectLang(){
var urlLang=new URLSearchParams(location.search).get('lang');
if(urlLang&&I18N[urlLang])return urlLang;
var saved=sget('rose_lang');
if(saved&&I18N[saved])return saved;
var nav=String((navigator.languages&&navigator.languages[0])||navigator.language||'').toLowerCase();
if(nav.indexOf('ar')===0)return 'ar';
if(nav.indexOf('fr')===0)return 'fr';
if(nav.indexOf('en')===0)return 'en';
return 'ar';
}
var lang=detectLang();
function t(k){return (I18N[lang]&&I18N[lang][k])||k}
function loc(){return lang==='ar'?'ar-EG':lang==='fr'?'fr-FR':'en-US'}
/* ============ SPA ============ */
var currentView='home';
function showView(name,skipHash){
if(!name)name='home';
var view=$1('#view-'+name);
if(!view){name='home';view=$1('#view-home')}
$('.view').forEach(function(v){v.classList.remove('active')});
view.classList.add('active');
$('[data-nav]').forEach(function(a){
a.classList.toggle('active',a.getAttribute('data-nav')===name);
a.removeAttribute('aria-current');
if(a.getAttribute('data-nav')===name)a.setAttribute('aria-current','page');
});
var menu=$1('#nav');if(menu)menu.classList.remove('open');
var mb=$1('#menuBtn');if(mb)mb.setAttribute('aria-expanded','false');
currentView=name;
if(!skipHash){try{history.replaceState(null,'','#'+name)}catch(e){location.hash=name}}
window.scrollTo({top:0,behavior:reduce?'auto':'smooth'});
if(name==='faq')reinitFaq();
if(name==='portfolio')reinitPortfolio();
if(name==='packages')initCurrencyToggle();
reinitReveal();reinitSpotlight();reinitSectionColor();
updateTitle(name);
}
var TITLES={
ar:{home:'NorDa | مستقل رقمي وتصميم مواقع',about:'من أنا | NorDa',services:'خدماتي | NorDa',portfolio:'أعمالي | NorDa',packages:'الباقات | NorDa',payment:'Ø§Ù„Ø¯ÙØ¹ | NorDa',faq:'الأسئلة | NorDa',contact:'تواصل | NorDa'},
en:{home:'NorDa | Digital Freelancer',about:'About | NorDa',services:'Services | NorDa',portfolio:'Portfolio | NorDa',packages:'Packages | NorDa',payment:'Payment | NorDa',faq:'FAQ | NorDa',contact:'Contact | NorDa'},
fr:{home:'NorDa | Freelance Numérique',about:'À propos | NorDa',services:'Services | NorDa',portfolio:'Portfolio | NorDa',packages:'Formules | NorDa',payment:'Paiement | NorDa',faq:'FAQ | NorDa',contact:'Contact | NorDa'}
};
function updateTitle(name){d.title=(TITLES[lang]||TITLES.ar)[name]||'NorDa'}
function readHash(){var h=(location.hash||'').replace('#','').trim();return h&&$1('#view-'+h)?h:'home'}
window.addEventListener('hashchange',function(){showView(readHash(),true)});
/* ============ الثيم ============ */
var pref=sget('rose_theme')||'light';if(['light','dark'].indexOf(pref)<0)pref='light';
var THEME_ICON={light:'fa-sun',dark:'fa-moon'};
function paintThemeBtn(){
var b=$1('#themeBtn');if(!b)return;
b.firstChild.className='fa-solid '+THEME_ICON[pref];
b.setAttribute('aria-label',t('th_label')+': '+t('th_'+pref));
}
function applyTheme(p,anim){
pref=p;
if(anim&&!reduce){R.classList.add('theme-anim');setTimeout(function(){R.classList.remove('theme-anim')},500)}
R.setAttribute('data-theme',p);R.setAttribute('data-pref',p);
var m=$1('#themeColor');if(m)m.setAttribute('content',p==='dark'?'#1a1118':'#b8326f');
paintThemeBtn();
}
var themeBtnEl=$1('#themeBtn');
if(themeBtnEl)themeBtnEl.addEventListener('click',function(){
var n=pref==='light'?'dark':'light';
sset('rose_theme',n);applyTheme(n,true);
});
/* ============ تطبيق اللغة ============ */
function applyLang(l){
lang=l;
R.lang=l;R.dir=l==='ar'?'rtl':'ltr';
$('[data-i18n]').forEach(function(el){var v=I18N[l][el.getAttribute('data-i18n')];if(v!==undefined)el.innerHTML=v});
$('[data-i18n-ph]').forEach(function(el){var v=I18N[l][el.getAttribute('data-i18n-ph')];if(v!==undefined)el.setAttribute('placeholder',v)});
$('[data-i18n-aria]').forEach(function(el){var v=I18N[l][el.getAttribute('data-i18n-aria')];if(v!==undefined)el.setAttribute('aria-label',v)});
$('[data-i18n-alt]').forEach(function(el){var v=I18N[l][el.getAttribute('data-i18n-alt')];if(v!==undefined)el.setAttribute('alt',v)});
var og=d.querySelector('meta[property="og:locale"]');if(og)og.setAttribute('content',l==='ar'?'ar_DZ':l==='fr'?'fr_FR':'en_US');
paintSoundButton();
var lt=$1('#langTxt');if(lt)lt.textContent=l==='ar'?'EN':l==='en'?'FR':'عربي';
paintThemeBtn();
var mb=$1('#menuBtn'),nv=$1('#nav');
if(mb&&nv)mb.setAttribute('aria-label',nv.classList.contains('open')?t('menu_close'):t('menu_open'));
updateTitle(currentView);
if(typeof lbRefresh==='function')lbRefresh();
if(typeof refreshChatLang==='function')refreshChatLang();
}
var langBtnEl=$1('#langBtn');
if(langBtnEl)langBtnEl.addEventListener('click',function(){
var n=LANGS[(LANGS.indexOf(lang)+1)%LANGS.length];
sset('rose_lang',n);applyLang(n);
});
/* ============ أدوات ============ */
function setBusy(btn,on){
if(!btn)return;
btn.disabled=on;
var i=btn.querySelector('i');
if(i){if(on){i.setAttribute('data-old',i.className);i.className='fa-solid fa-spinner fa-spin'}else if(i.getAttribute('data-old'))i.className=i.getAttribute('data-old')}
}
function fmtSize(b){return b<1024?b+' B':b<1048576?(b/1024).toFixed(1)+' KB':(b/1048576).toFixed(2)+' MB'}
function fmtTime(ts){return new Date(ts).toLocaleTimeString(loc(),{hour:'2-digit',minute:'2-digit'})}
function fmtDate(ts){return new Date(ts).toLocaleDateString(loc(),{year:'numeric',month:'short',day:'numeric'})}
function escapeHtml(s){var x=d.createElement('div');x.textContent=String(s==null?'':s);return x.innerHTML}
function fileIcon(f){
var ty=f.type||'',n=(f.name||'').toLowerCase();
if(ty.indexOf('image/')===0)return 'fa-image';
if(ty==='application/pdf'||/\.pdf$/.test(n))return 'fa-file-pdf';
if(/zip|rar|7z|tar/.test(ty+n))return 'fa-file-zipper';
if(ty.indexOf('video/')===0)return 'fa-file-video';
if(ty.indexOf('audio/')===0)return 'fa-file-audio';
if(ty.indexOf('text/')===0||/\.(docx?|txt)$/.test(n))return 'fa-file-lines';
return 'fa-file';
}
function validEmail(v){return /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(v)}
/* ============ العملة ============ */
function initCurrencyToggle(){
var btn=$1('#currencyToggle'),active=$1('#curActive');
if(!btn)return;
var RATE=240;
var cur=sget('rose_currency')||'usd';
function paint(){
active.textContent=cur==='usd'?'USD $':'DZD دج';
$('#pricingGrid .price-value').forEach(function(el){
var usd=el.getAttribute('data-usd');
if(!usd)return;
el.textContent=cur==='usd'?'$'+usd:(usd*RATE).toLocaleString('en-US')+' دج';
});
}
if(!btn.dataset.bound){
btn.dataset.bound='1';
btn.addEventListener('click',function(){cur=cur==='usd'?'dzd':'usd';sset('rose_currency',cur);paint()});
}
paint();
}
/* ============ نظام التذاكر ============ */
var userId=sget('rose_uid');
if(!userId){userId='u_'+Date.now().toString(36)+Math.random().toString(36).slice(2,7);sset('rose_uid',userId)}
var API=window.TELEGRAM_API||'';
var currentTicket=null,pendingFile=null,lastCount=0,shown=0,typing=false,typingTimer=null,sending=false;
var closedCache=[],detailTicket=null,unread=0,view='new',remoteHistoryReady=false;
var cp=$1('#chatPanel'),fab=$1('#chatFab'),clog=$1('#chatLog'),cf=$1('#chatForm'),badge=$1('#fabBadge');
var tabs={'new':$1('#tabNew'),'chat':$1('#tabChat'),'closed':$1('#tabClosed')};
var ta=$1('#ch-msg'),fileInput=$1('#fileInput');
var soundToggle=$1('#soundToggle'),soundEnabled=sget('rose_chat_sound')!=='off',audioContext=null;
function paintSoundButton(){
if(!soundToggle)return;
soundToggle.setAttribute('aria-pressed',soundEnabled?'true':'false');
soundToggle.setAttribute('aria-label',t(soundEnabled?'sound_on':'sound_off'));
var si=soundToggle.querySelector('i');if(si)si.className='fa-solid '+(soundEnabled?'fa-volume-high':'fa-volume-xmark');
}
function unlockSound(){
if(!soundEnabled)return;
var AC=window.AudioContext||window.webkitAudioContext;
if(!AC)return;
try{if(!audioContext)audioContext=new AC();if(audioContext.state==='suspended')audioContext.resume()}catch(e){}
}
function playTone(freq,delay){
if(!soundEnabled||!audioContext||audioContext.state!=='running')return;
try{
var now=audioContext.currentTime+delay,osc=audioContext.createOscillator(),gain=audioContext.createGain();
osc.type='sine';osc.frequency.setValueAtTime(freq,now);
gain.gain.setValueAtTime(.0001,now);gain.gain.exponentialRampToValueAtTime(.12,now+.025);gain.gain.exponentialRampToValueAtTime(.0001,now+.2);
osc.connect(gain);gain.connect(audioContext.destination);osc.start(now);osc.stop(now+.21);
}catch(e){}
}
function playIncomingSound(){playTone(880,0);playTone(1174,.1)}
if(soundToggle)soundToggle.addEventListener('click',function(){
soundEnabled=!soundEnabled;sset('rose_chat_sound',soundEnabled?'on':'off');paintSoundButton();if(soundEnabled)unlockSound();
});
d.addEventListener('pointerdown',unlockSound,{capture:true,once:true});
d.addEventListener('keydown',unlockSound,{capture:true,once:true});
function hasOpen(){return !!(currentTicket&¤tTicket.status!=='closed')}
function toast(k){var el=$1('#chatToast');if(!el)return;el.textContent=t(k);el.classList.add('show');clearTimeout(toast.h);toast.h=setTimeout(function(){el.classList.remove('show')},2800)}
function setBadge(){if(!badge)return;badge.textContent=unread>9?'9+':unread;badge.classList.toggle('show',unread>0)}
function persist(){
if(!currentTicket)return;
var c=JSON.parse(JSON.stringify(currentTicket));
(c.messages||[]).forEach(function(m){if(m.file)m.file={name:m.file.name,type:m.file.type}});
sset('rose_last_ticket',JSON.stringify(c));
}
function updateTabs(){if(tabs.chat)tabs.chat.setAttribute('aria-disabled',hasOpen()?'false':'true')}
function setChatView(v){
if(v==='chat'&&!hasOpen())v='new';
view=v;
$('.chat-view').forEach(function(el){el.classList.toggle('active',el.getAttribute('data-view')===v)});
var tk=v==='detail'?'closed':v;
Object.keys(tabs).forEach(function(k){tabs[k].classList.toggle('active',k===tk)});
if(v==='chat'){unread=0;setBadge();scrollLog()}
}
function scrollLog(){if(clog)setTimeout(function(){clog.scrollTop=clog.scrollHeight},40)}
function buildBub(m){
var b=d.createElement('div');
b.className='bub '+(m.from==='user'?'me':'bot');
if(m.text){var p=d.createElement('div');p.innerHTML=escapeHtml(m.text).replace(/\n/g,' ');b.appendChild(p)}
var f=m.file;
if(f&&(f.name||f.data)){
var safe=f.data&&/^(data:|https?:)/i.test(f.data);
if(safe&&f.type&&f.type.indexOf('image/')===0){
var img=d.createElement('img');img.className='bub-img';img.src=f.data;img.alt=f.name||'';img.loading='lazy';b.appendChild(img);
}
var a=d.createElement(safe?'a':'div');a.className='bub-file';
if(safe){a.href=f.data;a.download=f.name||'file'}
a.innerHTML=''+escapeHtml(f.name||'file')+' ';
b.appendChild(a);
}
var tm=d.createElement('span');tm.className='bub-time';tm.textContent=fmtTime(m.time||Date.now());b.appendChild(tm);
return b;
}
function typingEl(){var e=d.createElement('div');e.className='typing';e.setAttribute('aria-hidden','true');e.innerHTML=' ';return e}
function renderMessages(msgs,force){
if(!clog)return;
msgs=msgs||[];
var tp=clog.querySelector('.typing');if(tp)tp.remove();
if(force||!shown||msgs.length0){
if(!cp.classList.contains('open')||view!=='chat'){unread+=Math.max(added,1);setBadge()}
if(historyWasReady)playIncomingSound();
}
}
remoteHistoryReady=true;
}catch(e){}
}
function onClosedRemote(){
currentTicket=null;sdel('rose_last_ticket');setTyping(false);shown=0;updateTabs();
setChatView('closed');loadClosed();toast('ticket_closed_msg');
}
function poll(){
if(!d.hidden&&hasOpen()&&!sending)loadMessages();
setTimeout(poll,cp&&cp.classList.contains('open')?1500:8000);
}
if(cf)cf.addEventListener('submit',async function(e){
e.preventDefault();
if(!hasOpen()){toast('ticket_closed_msg');setChatView('new');return}
var btn=$1('#chBtn'),msg=ta.value.trim(),file=pendingFile;
if(!msg&&!file)return;
var payload={text:msg,file:file?file.data:null,fileName:file?file.name:null,fileType:file?file.type:null};
ta.value='';grow();pendingFile=null;clearFilePreview();
currentTicket.messages=currentTicket.messages||[];
currentTicket.messages.push({from:'user',text:msg,time:Date.now(),file:file?{name:file.name,type:file.type,data:file.data}:null});
typing=false;
renderMessages(currentTicket.messages);
sending=true;setBusy(btn,true);
try{
var j=await apiSend(payload);
if(j&&j.ok){
currentTicket.messages=j.messages||currentTicket.messages;
lastCount=currentTicket.messages.length;
renderMessages(currentTicket.messages);
setTyping(true);renderMessages(currentTicket.messages);persist();
}else toast('msg_err');
}catch(err){toast('msg_err')}
sending=false;setBusy(btn,false);ta.focus();
});
function grow(){if(!ta)return;ta.style.height='auto';ta.style.height=Math.min(ta.scrollHeight,110)+'px'}
if(ta){ta.addEventListener('input',grow);ta.addEventListener('keydown',function(e){
if(e.key==='Enter'&&!e.shiftKey&&!e.isComposing){e.preventDefault();if(cf.requestSubmit)cf.requestSubmit();else cf.dispatchEvent(new Event('submit',{cancelable:true}))}
})}
var btnClose=$1('#btnCloseTicket');
if(btnClose)btnClose.addEventListener('click',async function(){
if(!hasOpen())return;
if(!confirm(t('ticket_close_confirm')))return;
try{
var r=await fetch(API+'/ticket/'+currentTicket.ticketId+'/close?userId='+encodeURIComponent(userId),{method:'POST'});
var j=await r.json();
if(j.ok){
currentTicket=null;sdel('rose_last_ticket');setTyping(false);shown=0;updateTabs();
setChatView('closed');loadClosed();toast('ticket_closed_ok');
}else toast('msg_err');
}catch(e){toast('msg_err')}
});
var btnAtt=$1('#btnAttach');
if(btnAtt)btnAtt.addEventListener('click',function(){fileInput.click()});
if(fileInput)fileInput.addEventListener('change',function(){
var f=fileInput.files[0];if(!f)return;
if(f.size>2*1024*1024){toast('file_too_big');fileInput.value='';return}
var rd=new FileReader();
rd.onload=function(){pendingFile={name:f.name,type:f.type,size:f.size,data:rd.result};
$1('#filePreview').style.display='flex';$1('#fileNamePreview').textContent=f.name;$1('#fileSizePreview').textContent=fmtSize(f.size)};
rd.readAsDataURL(f);
});
function clearFilePreview(){var p=$1('#filePreview');if(p){p.style.display='none';$1('#fileNamePreview').textContent='';$1('#fileSizePreview').textContent='';if(fileInput)fileInput.value=''}}
var fr=$1('#fileRemove');if(fr)fr.addEventListener('click',function(){pendingFile=null;clearFilePreview()});
async function loadClosed(){
try{
var r=await fetch(API+'/ticket/closed/closed?userId='+encodeURIComponent(userId));
var j=await r.json();
if(j.ok&&j.tickets)closedCache=j.tickets;
}catch(e){}
renderClosed();
}
function renderClosed(){
var list=$1('#closedList'),cnt=$1('#closedCount');if(!list)return;
list.innerHTML='';
if(!closedCache.length){
list.innerHTML='
'+escapeHtml(t('no_closed'))+'
';
if(cnt)cnt.classList.remove('show');return;
}
if(cnt){cnt.textContent=closedCache.length;cnt.classList.add('show')}
closedCache.forEach(function(tk){
var ms=tk.messages||[],prev='';
for(var i=ms.length-1;i>=0;i--){if(ms[i].text){prev=ms[i].text;break}if(ms[i].file){prev=ms[i].file.name||'';break}}
var el=d.createElement('div');el.className='closed-item';
el.innerHTML='#'+escapeHtml(tk.ticketId)+'
'+escapeHtml(fmtDate(tk.closedAt||tk.updatedAt||Date.now()))+'
'+ms.length+' '+(prev?''+escapeHtml(prev.slice(0,70))+'
':'')+''+escapeHtml(t('view_ticket'))+' ';
el.querySelector('.ci-view').addEventListener('click',function(){openClosed(tk)});
list.appendChild(el);
});
}
function renderDetail(){
if(!detailTicket)return;
$1('#detailTicketId').textContent='#'+detailTicket.ticketId;
var log=$1('#detailLog');log.innerHTML='';
(detailTicket.messages||[]).forEach(function(m){log.appendChild(buildBub(m))});
setTimeout(function(){log.scrollTop=log.scrollHeight},40);
}
function openClosed(tk){detailTicket=tk;renderDetail();setChatView('detail')}
var btnBack=$1('#btnBack');if(btnBack)btnBack.addEventListener('click',function(){setChatView('closed')});
function refreshChatLang(){
if(!clog)return;
if(hasOpen())renderMessages(currentTicket.messages||[],true);
renderClosed();
if(detailTicket&&view==='detail')renderDetail();
}
if(tabs['new'])tabs['new'].addEventListener('click',function(){
if(hasOpen())setChatView('chat');
else if(sget('rose_name'))startNew();
else{setChatView('new');$1('#ch-name').focus()}
});
if(tabs.chat)tabs.chat.addEventListener('click',function(){if(hasOpen())setChatView('chat')});
if(tabs.closed)tabs.closed.addEventListener('click',function(){setChatView('closed');loadClosed()});
var btnNew=$1('#btnNewTicket');if(btnNew)btnNew.addEventListener('click',startNew);
var chname=$1('#ch-name');if(chname)chname.addEventListener('keydown',function(e){if(e.key==='Enter'){e.preventDefault();startNew()}});
function chatOpen(o){
if(!cp||!fab)return;
cp.classList.toggle('open',o);
fab.setAttribute('aria-expanded',o?'true':'false');
fab.classList.toggle('hidden',o);
if(o){
unread=0;setBadge();
var nm=$1('#ch-name');if(nm&&!nm.value)nm.value=sget('rose_name')||'';
if(hasOpen()){loadMessages();if(view==='new')setChatView('chat')}
setTimeout(function(){if(view==='chat'&&ta)ta.focus();else if(view==='new'&&nm)nm.focus()},150);
}
}
if(fab)fab.addEventListener('click',function(){chatOpen(!cp.classList.contains('open'))});
var chatX=$1('#chatX');if(chatX)chatX.addEventListener('click',function(){chatOpen(false);fab.focus()});
async function sendTicketRequest(name,email,text){
sset('rose_name',name);
sending=true;
try{
if(!hasOpen()&&!(await createTicket(name)))throw new Error('ticket');
var j=await apiSend({text:text+'\n\n'+t('f_name')+': '+name+'\n'+t('f_email')+': '+email,file:null,fileName:null,fileType:null});
if(!j||!j.ok)throw new Error('send');
currentTicket.messages=j.messages||currentTicket.messages||[];
lastCount=currentTicket.messages.length;persist();renderMessages(currentTicket.messages,true);
return true;
}finally{sending=false}
}
var cform=$1('#contactForm');
if(cform)cform.addEventListener('submit',async function(e){
e.preventDefault();
var nm=$1('#cf-name').value.trim(),em=$1('#cf-email').value.trim(),subject=$1('#cf-subject').value.trim(),ms=$1('#cf-msg').value.trim(),out=$1('#cfMsg'),btn=$1('#cfBtn');
out.className='form-msg';
if($1('#cf-site').value)return;
if(!nm||!em||!subject||!ms){out.textContent=t('msg_req');out.classList.add('err');return}
if(!validEmail(em)){out.textContent=t('msg_email');out.classList.add('err');return}
out.textContent=t('msg_wait');setBusy(btn,true);
try{
await sendTicketRequest(nm,em,t('f_subject')+': '+subject+'\n'+t('f_msg')+': '+ms);
out.textContent=t('msg_ok');out.classList.add('ok');cform.reset();
setChatView('chat');chatOpen(true);
}catch(err){out.textContent=t('msg_err');out.classList.add('err')}
setBusy(btn,false);
});
var fqform=$1('#faqQuestionForm');
if(fqform)fqform.addEventListener('submit',async function(e){
e.preventDefault();
var nm=$1('#fq-name').value.trim(),em=$1('#fq-email').value.trim(),question=$1('#fq-question').value.trim(),out=$1('#fqMsg'),btn=fqform.querySelector('button[type=submit]');
out.className='form-msg';
if(!nm||!em||!question){out.textContent=t('msg_req');out.classList.add('err');return}
if(!validEmail(em)){out.textContent=t('msg_email');out.classList.add('err');return}
out.textContent=t('msg_wait');setBusy(btn,true);
try{await sendTicketRequest(nm,em,t('faq_question')+': '+question);out.textContent=t('msg_ok');out.classList.add('ok');fqform.reset()}
catch(err){out.textContent=t('msg_err');out.classList.add('err')}
setBusy(btn,false);
});
/* ============ Builder ============ */
var builder=$1('#builderOverlay'),builderStep=1,builderOpenBtn=$1('#builderOpen'),builderPrev=$1('#builderPrev'),builderNext=$1('#builderNext'),builderSubmit=$1('#builderSubmit'),builderMsg=$1('#builderMessage');
function paintBuilder(){
if(!builder)return;
$('.builder-step',builder).forEach(function(el){el.hidden=+el.getAttribute('data-builder-step')!==builderStep});
$1('#builderStepNumber').textContent=builderStep;
$1('#builderProgress').style.width=(builderStep/9*100)+'%';
builderPrev.hidden=builderStep===1;builderNext.hidden=builderStep===9;builderSubmit.hidden=builderStep!==9;
}
function closeBuilder(){
if(!builder)return;
builder.classList.remove('open');builder.setAttribute('aria-hidden','true');builder.setAttribute('hidden','hidden');
if(builderOpenBtn)builderOpenBtn.focus();
}
if(builderOpenBtn&&builder){
builderOpenBtn.addEventListener('click',function(e){e.preventDefault();builderStep=1;paintBuilder();builder.removeAttribute('hidden');builder.setAttribute('aria-hidden','false');builder.classList.add('open');builderMsg.textContent='';setTimeout(function(){$1('.builder-dialog').focus()},40)});
$('[data-builder-close]',builder).forEach(function(el){el.addEventListener('click',closeBuilder)});
builderPrev.addEventListener('click',function(){if(builderStep>1){builderStep--;paintBuilder()}});
builderNext.addEventListener('click',function(){if(builderStep<9){builderStep++;paintBuilder()}});
builderSubmit.addEventListener('click',async function(){
var name=$1('#buildName').value.trim(),email=$1('#buildEmail').value.trim();
builderMsg.textContent='';
if(!name||!email){builderMsg.textContent=t('msg_req');return}
if(!validEmail(email)){builderMsg.textContent=t('msg_email');return}
var val=function(id){var el=$1(id);if(!el)return '';if(el.tagName==='SELECT'){var op=el.options[el.selectedIndex],key=op&&op.getAttribute('data-i18n');return key?t(key):el.value}return el.value.trim()};
var rows=[
[t('builder_s1'),val('#buildPurpose')],[t('builder_s2'),val('#buildStyle')],[t('builder_s3'),val('#buildColor')],
[t('builder_s4'),val('#buildLayout')],[t('builder_s5'),val('#buildMotion')],[t('builder_s6'),val('#buildInspiration')],
[t('builder_s7'),val('#buildType')],[t('builder_s8'),val('#buildFeatures')]
];
var summary=t('builder_title')+'\n'+rows.map(function(r){return r[0]+': '+(r[1]||'—')}).join('\n');
builderMsg.textContent=t('msg_wait');setBusy(builderSubmit,true);
try{
await sendTicketRequest(name,email,summary);
builderMsg.textContent=t('builder_sent');setTimeout(function(){closeBuilder();setChatView('chat');chatOpen(true)},900);
}catch(err){builderMsg.textContent=t('builder_send_error')}
setBusy(builderSubmit,false);
});
paintBuilder();
}
/* ============ FAQ / Portfolio filter ============ */
function reinitFaq(){
var items=$('.faq-item');
items.forEach(function(item){
if(item.dataset.bound)return;
item.dataset.bound='1';
var q=item.querySelector('.faq-q');
if(!q)return;
q.addEventListener('click',function(){
var willOpen=!item.classList.contains('open');
items.forEach(function(i){i.classList.remove('open');var qq=i.querySelector('.faq-q');if(qq)qq.setAttribute('aria-expanded','false')});
if(willOpen){item.classList.add('open');q.setAttribute('aria-expanded','true')}
});
});
}
function reinitPortfolio(){
$('.cat').forEach(function(b){
if(b.dataset.bound)return;
b.dataset.bound='1';
b.addEventListener('click',function(){
var c=b.getAttribute('data-cat');
$('.cat').forEach(function(x){x.setAttribute('aria-pressed',x===b?'true':'false')});
$('#pfGrid .pf').forEach(function(p){
if(c==='all'||p.getAttribute('data-cat')===c){p.removeAttribute('hidden');p.classList.add('in')}else p.setAttribute('hidden','');
});
});
});
}
/* ============ Lightbox ============ */
var PROJECT_IMAGES=[
["https://i.ibb.co/G4HBGGgp/mochi-moonlet-cover-v2.png","https://i.ibb.co/3ygqZCj8/image.png","https://i.ibb.co/W47sfd4Q/image.png","https://i.ibb.co/WvjS08PZ/image.png"],
["https://i.ibb.co/7x7vFFk5/lina-marceau-cover.png","https://i.ibb.co/bRKRzjvL/image.png","https://i.ibb.co/BbBKw8N/image.png","https://i.ibb.co/p6m5Q5mw/image.png"],
["https://i.ibb.co/r2FZ5VF7/neura-edge-cover.png","https://i.ibb.co/6c4NkgLB/image.png","https://i.ibb.co/7dzWtZ62/image.png","https://i.ibb.co/fGMJZYQF/image.png"],
["https://i.ibb.co/hxn3LLNT/natura-essence-cover.png","https://i.ibb.co/kVzGbDFp/image.png","https://i.ibb.co/Hff5MKzx/image.png","https://i.ibb.co/GQKpJXVB/image.png"],
["https://i.ibb.co/QFBcs8Dg/ananya-portfolio-cover-1280x769.png","https://i.ibb.co/Z6hkcr1F/image.png","https://i.ibb.co/TBb7fd7n/image.png","https://i.ibb.co/s9hGbVvK/image.png"],
["https://i.ibb.co/j9jKMmYX/promo-cover-v2.png","https://i.ibb.co/NdM8HwMM/image.png","https://i.ibb.co/fV4nq8Kg/image.png","https://i.ibb.co/kVS8xpTk/image.png"],
["https://i.ibb.co/xt3KrZq9/goldenhue-cover-v2.png","https://i.ibb.co/F42nWyCZ/image.png","https://i.ibb.co/Gvzk0nkh/image.png","https://i.ibb.co/DPGZjM75/image.png"],
["https://i.ibb.co/czf61kc/marginalia-portfolio-cover.png","https://i.ibb.co/9mNcht0w/image.png","https://i.ibb.co/V0bJ6QZT/image.png","https://i.ibb.co/LhHhpTc1/image.png"],
["https://i.ibb.co/Fb9m1hcj/promo-cover-taskflow-2x.png","https://i.ibb.co/vvZPmqt4/image.png","https://i.ibb.co/vxFyRsJy/image.png","https://i.ibb.co/nqDyGhKS/image.png"],
["https://i.ibb.co/NdT3YyYk/atelier-marchal-cover-en.png","https://i.ibb.co/wrj76F0X/image.png","https://i.ibb.co/WvSs6kvZ/image.png","https://i.ibb.co/qLRt3zrC/image.png"]
];
var LB={el:null,img:null,title:null,counter:null,thumbs:null,idx:0,proj:-1,images:[]};
function lbTitle(){
var cards=$('#pfGrid .pf'),c=cards[LB.proj],h=c&&c.querySelector('.pf-info h3');
return h?h.textContent.trim():'';
}
function lbRefresh(){if(LB.el&&LB.el.classList.contains('open'))lbSet(LB.idx)}
function lbInit(){
LB.el=$1('#lightbox');
if(!LB.el)return;
LB.img=$1('#lbImg');LB.title=$1('#lbTitle');LB.counter=$1('#lbCounter');LB.thumbs=$1('#lbThumbs');
d.addEventListener('click',function(e){
var trigger=e.target.closest('[data-project-idx]');
if(trigger){e.preventDefault();e.stopPropagation();lbOpen(parseInt(trigger.getAttribute('data-project-idx'),10));return}
if(!LB.el.classList.contains('open'))return;
if(e.target.closest('[data-lb-close]')){lbClose();return}
if(e.target.closest('[data-lb-prev]')){lbGo(-1);return}
if(e.target.closest('[data-lb-next]')){lbGo(1);return}
var th=e.target.closest('#lbThumbs img');
if(th){var i=parseInt(th.getAttribute('data-i'),10);if(!isNaN(i))lbSet(i)}
});
d.addEventListener('keydown',function(e){
if(!LB.el.classList.contains('open'))return;
var s=R.dir==='rtl'?-1:1;
if(e.key==='Escape')lbClose();
else if(e.key==='ArrowRight')lbGo(s);
else if(e.key==='ArrowLeft')lbGo(-s);
});
var x0=0;
LB.el.addEventListener('touchstart',function(e){x0=e.touches[0].clientX},{passive:true});
LB.el.addEventListener('touchend',function(e){var dx=e.changedTouches[0].clientX-x0;if(Math.abs(dx)>50)lbGo(dx<0?1:-1)},{passive:true});
}
function lbOpen(p){
if(isNaN(p)||p<0||p>=PROJECT_IMAGES.length)return;
LB.proj=p;LB.images=PROJECT_IMAGES[p];LB.thumbs.innerHTML='';
LB.images.forEach(function(src,i){
var im=d.createElement('img');im.src=src;im.alt='';im.setAttribute('data-i',i);im.loading='lazy';LB.thumbs.appendChild(im);
});
lbSet(0);LB.el.classList.add('open');LB.el.setAttribute('aria-hidden','false');d.body.style.overflow='hidden';
}
function lbClose(){LB.el.classList.remove('open');LB.el.setAttribute('aria-hidden','true');d.body.style.overflow=''}
function lbGo(dir){lbSet((LB.idx+dir+LB.images.length)%LB.images.length)}
function lbSet(i){
LB.idx=i;var title=lbTitle();
LB.img.src=LB.images[i];LB.img.alt=title+' '+(i+1);LB.title.textContent=title;
LB.counter.textContent=(i+1)+' / '+LB.images.length;
$('#lbThumbs img').forEach(function(im,k){im.classList.toggle('on',k===i)});
}
var revealIo=null;
function reinitReveal(){
var els=$('.reveal');
if(!('IntersectionObserver' in window)||reduce){els.forEach(function(e){e.classList.add('in')});return}
if(revealIo)revealIo.disconnect();
revealIo=new IntersectionObserver(function(en){en.forEach(function(x){if(x.isIntersecting){x.target.classList.add('in');revealIo.unobserve(x.target)}})},{threshold:.12,rootMargin:'0px 0px -6% 0px'});
els.forEach(function(e){if(!e.classList.contains('in'))revealIo.observe(e)});
$('[data-stagger]').forEach(function(g){Array.prototype.forEach.call(g.children,function(c,i){c.style.setProperty('--d',(i*90)+'ms')})});
}
function reinitSpotlight(){
if(!fine||reduce)return;
$('[data-spot]').forEach(function(c){
if(c.dataset.spotBound)return;
c.dataset.spotBound='1';
var isCard=c.classList.contains('card');
if(isCard)c.classList.add('tilt');
c.addEventListener('pointermove',function(e){
var r=c.getBoundingClientRect(),x=e.clientX-r.left,y=e.clientY-r.top;
c.style.setProperty('--mx',x+'px');c.style.setProperty('--my',y+'px');
if(isCard){c.style.setProperty('--ry',((x/r.width-.5)*7)+'deg');c.style.setProperty('--rx',((.5-y/r.height)*7)+'deg')}
});
c.addEventListener('pointerleave',function(){c.style.setProperty('--rx','0deg');c.style.setProperty('--ry','0deg')});
});
}
function reinitSectionColor(){
var ss=$('[data-section]');
if(!ss.length||!('IntersectionObserver' in window))return;
var so=new IntersectionObserver(function(en){en.forEach(function(x){if(x.isIntersecting){var v=getComputedStyle(x.target).getPropertyValue('--acc');if(v)R.style.setProperty('--acc',v.trim())}})},{threshold:.35});
ss.forEach(function(s){so.observe(s)});
}
/* ============ سكرول + Ripple ============ */
var hd=$1('#site-header'),tp=$1('#top-btn'),tick=false;
function onScroll(){
var y=window.pageYOffset||0;
if(hd)hd.classList.toggle('scrolled',y>8);
if(tp)tp.classList.toggle('show',y>500);
tick=false;
}
window.addEventListener('scroll',function(){if(!tick){tick=true;requestAnimationFrame(onScroll)}},{passive:true});
if(!reduce)d.addEventListener('pointerdown',function(e){
var el=e.target.closest&&e.target.closest('.btn,.card[data-spot]');
if(!el)return;
var r=el.getBoundingClientRect(),s=Math.max(r.width,r.height),sp=d.createElement('span');
sp.className='rip';sp.style.cssText='width:'+s+'px;height:'+s+'px;left:'+(e.clientX-r.left-s/2)+'px;top:'+(e.clientY-r.top-s/2)+'px';
el.appendChild(sp);setTimeout(function(){if(sp.parentNode)sp.parentNode.removeChild(sp)},700);
});
/* ===== Splash ===== */
function hideSplash(){
var sp=$1('#splashScreen');
if(!sp)return;
var seen=false;
try{seen=sessionStorage.getItem('norda_splash_seen')==='1'}catch(e){}
if(seen){sp.remove();return}
try{sessionStorage.setItem('norda_splash_seen','1')}catch(e){}
var minShow=reduce?800:2000,start=Date.now();
function done(){
setTimeout(function(){
sp.classList.add('hide');
setTimeout(function(){if(sp&&sp.parentNode)sp.parentNode.removeChild(sp)},700);
},Math.max(0,minShow-(Date.now()-start)));
}
var finished=false;
function finish(){
if(finished)return;
finished=true;
done();
}
if(d.readyState==='complete'||d.readyState==='interactive')finish();
else d.addEventListener('DOMContentLoaded',finish,{once:true});
window.addEventListener('load',finish,{once:true});
setTimeout(finish,2500);
}
/* ===== Progress ===== */
function initReadProgress(){
var bar=$1('#readProgress');if(!bar)return;
var fill=bar.querySelector('span');if(!fill)return;
var raf=false;
function update(){
var doc=d.documentElement,st=window.pageYOffset||doc.scrollTop||0,h=(doc.scrollHeight||0)-(doc.clientHeight||0);
fill.style.width=Math.max(0,Math.min(100,h>0?st/h*100:0))+'%';raf=false;
}
function on(){if(!raf){raf=true;requestAnimationFrame(update)}}
window.addEventListener('scroll',on,{passive:true});
window.addEventListener('resize',on,{passive:true});
update();
}
/* ============ init ============ */
function init(){
hideSplash();
applyLang(lang);applyTheme(pref,false);
initReadProgress();
d.addEventListener('click',function(e){
var trigger=e.target.closest('[data-nav]');
if(!trigger)return;
e.preventDefault();
showView(trigger.getAttribute('data-nav'));
});
var mb=$1('#menuBtn'),nv=$1('#nav');
function setMenu(open,back){
if(!mb||!nv)return;
nv.classList.toggle('open',open);
mb.setAttribute('aria-expanded',open?'true':'false');
mb.setAttribute('aria-label',open?t('menu_close'):t('menu_open'));
mb.firstChild.className=open?'fa-solid fa-xmark':'fa-solid fa-bars';
if(open){var f=nv.querySelector('a');if(f)f.focus()}else if(back)mb.focus();
}
if(mb&&nv){
mb.addEventListener('click',function(){setMenu(!nv.classList.contains('open'),true)});
$('a',nv).forEach(function(a){a.addEventListener('click',function(){setMenu(false,false)})});
}
d.addEventListener('keydown',function(e){
if(e.key==='Escape'){
if(LB.el&&LB.el.classList.contains('open'))return;
if(builder&&builder.classList.contains('open')){closeBuilder();return}
if(cp&&cp.classList.contains('open')){chatOpen(false);if(fab)fab.focus();return}
if(nv&&nv.classList.contains('open'))setMenu(false,true);
}
if(e.key==='Tab'&&builder&&builder.classList.contains('open')){
var focusable=$('.builder-dialog button:not([hidden]),.builder-dialog input:not([hidden]),.builder-dialog select:not([hidden]),.builder-dialog textarea:not([hidden])').filter(function(el){return !el.disabled&&el.offsetParent!==null});
if(focusable.length){var first=focusable[0],last=focusable[focusable.length-1];if(e.shiftKey&&d.activeElement===first){e.preventDefault();last.focus()}else if(!e.shiftKey&&d.activeElement===last){e.preventDefault();first.focus()}}
}
});
$('.js-top').forEach(function(b){b.addEventListener('click',function(){window.scrollTo({top:0,behavior:reduce?'auto':'smooth'})})});
var y=$1('#year');if(y)y.textContent=new Date().getFullYear();
showView(readHash(),true);
reinitFaq();reinitPortfolio();initCurrencyToggle();
reinitReveal();reinitSpotlight();reinitSectionColor();
onScroll();
lbInit();
bootChat();
}
function bootChat(){
var last=sget('rose_last_ticket');
if(last){try{
var tk=JSON.parse(last);
if(tk&&tk.status==='open'&&tk.ticketId){currentTicket=tk;lastCount=(tk.messages||[]).length;remoteHistoryReady=lastCount>0;updateTabs();renderChat();setChatView('chat');loadMessages()}
}catch(e){}}
loadClosed();
poll();
}
if(d.readyState==='loading')d.addEventListener('DOMContentLoaded',init);else init();
})();