جاري التحميل...
4000000.00 Egyptian Pound 🇪🇬

فيلا للبيع بقرية المهندسين الجامعيين الساحل الشمالى

فيلا للبيع بقريه المهندسين الجامعين الكيلو 70 مكونه من دورين أرضي وأول ورووف (4 غرفه 2 حمام) الا...

12000000.00 Egyptian Pound 🇪🇬

فيلا للبيع بالتقسيط بقرية كازبينكا الساحل الشمالي

فيلا للبيع بقريه كازابيانكا ك 70 القرية كاملة المرافق والخدمات العامه والترفيهية وشاطئ رملى فيلا ...

3500000.00 US Dollar 💵🇺🇸

فيلا فاخرة بحبيل أبيض

فيلا فاخرة في حبيل أبيض، تعز: جنة الرفاهية والراحة

موقع متميز وهدوء لا يُضاهى

...

850000.00 US Dollar 💵🇺🇸

فيلا فخمة ببيت بوس

فيلا أحلامك في شارع الخمسين، بيت بوس

استمتع برفاهية لا مثيل لها في فيلا الأحلام هذه في بيت...

None US Dollar 💵🇺🇸

شقق سكنية راقية حي الثورة الحديدة

```html شقق فاخرة للبيع في...</p> <div class="property-actions"> <a href="/en/kup/property_detailpuplic/754/" class="btn btn-info"> عرض التفاصيل </a> </div> </div> </div> <div class="property-card" style="animation-delay: 0.5s"> <div id="propertyCarousel714" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-indicators"> </div> <div class="carousel-inner"> <div class="carousel-item active"> <div class="w-100 h-100 bg-gradient-to-r from-gray-200 to-gray-300 d-flex align-items-center justify-content-center"> <span class="text-gray-400">لا توجد صورة</span> </div> </div> </div> <button class="carousel-control-prev" type="button" data-bs-target="#propertyCarousel714" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> </button> <button class="carousel-control-next" type="button" data-bs-target="#propertyCarousel714" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> </button> </div> <div class="property-details"> <div class="price-tag"> 17.00 US Dollar 💵🇺🇸 </div> <h3 class="property-title">مبنى سكني في الجربوب</h3> <p class="property-info"><h2>عش في قلب خط عدن الجربوب المرموق</h2> <h3>مبنى سكني استثنائي في موقع استراتيجي</h3> <p>استثمر ...</p> <div class="property-actions"> <a href="/en/kup/property_detailpuplic/714/" class="btn btn-info"> عرض التفاصيل </a> </div> </div> </div> <div class="property-card" style="animation-delay: 0.6000000000000001s"> <div id="propertyCarousel756" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-indicators"> <button type="button" data-bs-target="#propertyCarousel756" data-bs-slide-to="1"></button> <button type="button" data-bs-target="#propertyCarousel756" data-bs-slide-to="2"></button> <button type="button" data-bs-target="#propertyCarousel756" data-bs-slide-to="3"></button> <button type="button" data-bs-target="#propertyCarousel756" data-bs-slide-to="4"></button> <button type="button" data-bs-target="#propertyCarousel756" data-bs-slide-to="5"></button> <button type="button" data-bs-target="#propertyCarousel756" data-bs-slide-to="6"></button> </div> <div class="carousel-inner"> <div class="carousel-item active"> <img src="/media/photos/419A6857-AB1A-4789-B142-2A4739161B06.jpeg" class="property-image" alt="فرصة عقارية مميزة في قرية مارينا صن شاين الساحل الشمالي"> </div> <div class="carousel-item "> <img src="/media/photos/23D9B26A-B16B-4307-A09F-B9F6E64EE224.jpeg" class="property-image" alt="فرصة عقارية مميزة في قرية مارينا صن شاين الساحل الشمالي"> </div> <div class="carousel-item "> <img src="/media/photos/AA5BDF03-B230-4207-88A5-30442153310F.jpeg" class="property-image" alt="فرصة عقارية مميزة في قرية مارينا صن شاين الساحل الشمالي"> </div> <div class="carousel-item "> <img src="/media/photos/E6BCA65A-5A47-4DFE-B0CF-EF5FC45F7C96.jpeg" class="property-image" alt="فرصة عقارية مميزة في قرية مارينا صن شاين الساحل الشمالي"> </div> <div class="carousel-item "> <img src="/media/photos/FAA84D31-944E-4C07-83A8-D66C802F6707.jpeg" class="property-image" alt="فرصة عقارية مميزة في قرية مارينا صن شاين الساحل الشمالي"> </div> <div class="carousel-item "> <img src="/media/photos/75908DB9-0EDA-4C76-BA36-293BB2B95A68.jpeg" class="property-image" alt="فرصة عقارية مميزة في قرية مارينا صن شاين الساحل الشمالي"> </div> </div> <button class="carousel-control-prev" type="button" data-bs-target="#propertyCarousel756" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> </button> <button class="carousel-control-next" type="button" data-bs-target="#propertyCarousel756" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> </button> </div> <div class="property-details"> <div class="price-tag"> 4500000.00 Egyptian Pound 🇪🇬 </div> <h3 class="property-title">فرصة عقارية مميزة في قرية مارينا صن شاين الساحل الشمالي</h3> <p class="property-info">لم يتم العثور على وصف لهذا العقار. يرجى الاتصال بنا لمزيد من المعلومات....</p> <div class="property-actions"> <a href="/en/kup/property_detailpuplic/756/" class="btn btn-info"> عرض التفاصيل </a> </div> </div> </div> <div class="property-card" style="animation-delay: 0.7000000000000001s"> <div id="propertyCarousel755" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-indicators"> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="1"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="2"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="3"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="4"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="5"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="6"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="7"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="8"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="9"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="10"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="11"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="12"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="13"></button> <button type="button" data-bs-target="#propertyCarousel755" data-bs-slide-to="14"></button> </div> <div class="carousel-inner"> <div class="carousel-item active"> <img src="/media/photos/7c45f3a3-e359-434c-858a-257447f2eba0.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/7e1b4e25-5c9b-40fd-ba03-53057ee94071.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/8cad5142-e0a4-4af2-b7dc-2c0ab893bc9e.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/9afde5cd-0f63-4f2e-be95-c7b6dc6eb8dd.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/9b3931b6-6342-4289-87bf-f972d8fa9359.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/55a924fa-b875-422d-b602-9035b785e6c8.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/78ddc476-1a19-4273-8815-c3dfb5cef160.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/91018a59-0436-406f-aa78-186a63290764.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/acb51001-0f8d-4d4c-9a6d-fced608ea2f7.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/b829b920-f810-4345-afe4-b4046fe39172.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/b9624b17-dfda-4169-8eb2-9099e85815a2.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/c6d307e0-9053-4c75-bbb3-6f00c5d6afe8.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/c116a2da-7c1d-4f17-8a0f-63fd99c5a5b9.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> <div class="carousel-item "> <img src="/media/photos/dfb251b6-a86c-494c-8a2f-7f31609709f0.jpeg" class="property-image" alt="شقق سكنية راقية شارع الحمدي الحديدة"> </div> </div> <button class="carousel-control-prev" type="button" data-bs-target="#propertyCarousel755" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> </button> <button class="carousel-control-next" type="button" data-bs-target="#propertyCarousel755" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> </button> </div> <div class="property-details"> <div class="price-tag"> None US Dollar 💵🇺🇸 </div> <h3 class="property-title">شقق سكنية راقية شارع الحمدي الحديدة</h3> <p class="property-info">```html <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <meta name="viewport" con...</p> <div class="property-actions"> <a href="/en/kup/property_detailpuplic/755/" class="btn btn-info"> عرض التفاصيل </a> </div> </div> </div> <div class="property-card" style="animation-delay: 0.8s"> <div id="propertyCarousel729" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-indicators"> </div> <div class="carousel-inner"> <div class="carousel-item active"> <div class="w-100 h-100 bg-gradient-to-r from-gray-200 to-gray-300 d-flex align-items-center justify-content-center"> <span class="text-gray-400">لا توجد صورة</span> </div> </div> </div> <button class="carousel-control-prev" type="button" data-bs-target="#propertyCarousel729" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> </button> <button class="carousel-control-next" type="button" data-bs-target="#propertyCarousel729" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> </button> </div> <div class="property-details"> <div class="price-tag"> 2000000.00 Yemeni Rial 🇾🇪 </div> <h3 class="property-title">فرصة عقارية مميزة في عمد, مديرية سنحان وبني بهلول, محافظة صنعاء, اليمن</h3> <p class="property-info"><h2>استثمر في جوهرة صنعاء: أرض أحلامك في حي عمد</h2> <h3>استحوذ على قطعة استثنائية في قلب العاصمة</...</p> <div class="property-actions"> <a href="/en/kup/property_detailpuplic/729/" class="btn btn-info"> عرض التفاصيل </a> </div> </div> </div> <div class="property-card" style="animation-delay: 0.9s"> <div id="propertyCarousel770" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-indicators"> <button type="button" data-bs-target="#propertyCarousel770" data-bs-slide-to="1"></button> <button type="button" data-bs-target="#propertyCarousel770" data-bs-slide-to="2"></button> <button type="button" data-bs-target="#propertyCarousel770" data-bs-slide-to="3"></button> <button type="button" data-bs-target="#propertyCarousel770" data-bs-slide-to="4"></button> <button type="button" data-bs-target="#propertyCarousel770" data-bs-slide-to="5"></button> <button type="button" data-bs-target="#propertyCarousel770" data-bs-slide-to="6"></button> </div> <div class="carousel-inner"> <div class="carousel-item active"> <img src="/media/photos/C6D735E8-1F72-457E-AA54-D1DBEFD2AF63.jpeg" class="property-image" alt="شقة للبيع بقرية اللوتس الساحل الشمالى"> </div> <div class="carousel-item "> <img src="/media/photos/8644EADB-C51E-42EC-BEC6-12602B493331.jpeg" class="property-image" alt="شقة للبيع بقرية اللوتس الساحل الشمالى"> </div> <div class="carousel-item "> <img src="/media/photos/3E0FAB7C-6034-4A8C-8EC0-6898E389DEA5.jpeg" class="property-image" alt="شقة للبيع بقرية اللوتس الساحل الشمالى"> </div> <div class="carousel-item "> <img src="/media/photos/DF1CD818-B77A-450E-B811-4B448097DC88.jpeg" class="property-image" alt="شقة للبيع بقرية اللوتس الساحل الشمالى"> </div> <div class="carousel-item "> <img src="/media/photos/E7F4C7B3-0BA4-4832-AEE3-72527ABC21AA.jpeg" class="property-image" alt="شقة للبيع بقرية اللوتس الساحل الشمالى"> </div> <div class="carousel-item "> <img src="/media/photos/ADFB9081-BCC7-4905-A105-8C5A437052BA.jpeg" class="property-image" alt="شقة للبيع بقرية اللوتس الساحل الشمالى"> </div> </div> <button class="carousel-control-prev" type="button" data-bs-target="#propertyCarousel770" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> </button> <button class="carousel-control-next" type="button" data-bs-target="#propertyCarousel770" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> </button> </div> <div class="property-details"> <div class="price-tag"> 2200000.00 Egyptian Pound 🇪🇬 </div> <h3 class="property-title">شقة للبيع بقرية اللوتس الساحل الشمالى</h3> <p class="property-info">شقة للبيع دور ثانى علوى بقرية اللوتس الساحل الشمالي ك91 على البحر كاملة المرافق والخدمات العامه والت...</p> <div class="property-actions"> <a href="/en/kup/property_detailpuplic/770/" class="btn btn-info"> عرض التفاصيل </a> </div> </div> </div> <div class="property-card" style="animation-delay: 1.0s"> <div id="propertyCarousel694" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-indicators"> </div> <div class="carousel-inner"> <div class="carousel-item active"> <div class="w-100 h-100 bg-gradient-to-r from-gray-200 to-gray-300 d-flex align-items-center justify-content-center"> <span class="text-gray-400">لا توجد صورة</span> </div> </div> </div> <button class="carousel-control-prev" type="button" data-bs-target="#propertyCarousel694" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> </button> <button class="carousel-control-next" type="button" data-bs-target="#propertyCarousel694" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> </button> </div> <div class="property-details"> <div class="price-tag"> 1600000.00 US Dollar 💵🇺🇸 </div> <h3 class="property-title">مبنى سكني في الكزمه</h3> <p class="property-info"><h2>موقع استثماري استثنائي في قلب صنعاء النابض</h2> <h3>فرصة ذهبية في شارع اتحاد جامعة العلوم والتك...</p> <div class="property-actions"> <a href="/en/kup/property_detailpuplic/694/" class="btn btn-info"> عرض التفاصيل </a> </div> </div> </div> <div class="property-card" style="animation-delay: 1.1s"> <div id="propertyCarousel722" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-indicators"> <button type="button" data-bs-target="#propertyCarousel722" data-bs-slide-to="1"></button> <button type="button" data-bs-target="#propertyCarousel722" data-bs-slide-to="2"></button> <button type="button" data-bs-target="#propertyCarousel722" data-bs-slide-to="3"></button> <button type="button" data-bs-target="#propertyCarousel722" data-bs-slide-to="4"></button> </div> <div class="carousel-inner"> <div class="carousel-item active"> <img src="/media/photos/Screenshot_%D9%A2%D9%A0%D9%A2%D9%A4%D9%A0%D9%A8%D9%A1%D9%A7-%D9%A0%D9%A3%D9%A2%D9%A2%D9%A1%D9%A6.png" class="property-image" alt="فرصة عقارية مميزة في الشرقية, الطائف, محافظة الطائف, منطقة مكة المكرمة, 26511, السعودية"> </div> <div class="carousel-item "> <img src="/media/photos/Screenshot_%D9%A2%D9%A0%D9%A2%D9%A4%D9%A0%D9%A8%D9%A1%D9%A7-%D9%A0%D9%A3%D9%A2%D9%A3%D9%A5%D9%A0_1.png" class="property-image" alt="فرصة عقارية مميزة في الشرقية, الطائف, محافظة الطائف, منطقة مكة المكرمة, 26511, السعودية"> </div> <div class="carousel-item "> <img src="/media/photos/Screenshot_%D9%A2%D9%A0%D9%A2%D9%A4%D9%A0%D9%A8%D9%A1%D9%A7-%D9%A0%D9%A3%D9%A2%D9%A3%D9%A3%D9%A8_1.png" class="property-image" alt="فرصة عقارية مميزة في الشرقية, الطائف, محافظة الطائف, منطقة مكة المكرمة, 26511, السعودية"> </div> <div class="carousel-item "> <img src="/media/photos/Title1728586473285_jbKdjjC.jpg" class="property-image" alt="فرصة عقارية مميزة في الشرقية, الطائف, محافظة الطائف, منطقة مكة المكرمة, 26511, السعودية"> </div> </div> <button class="carousel-control-prev" type="button" data-bs-target="#propertyCarousel722" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> </button> <button class="carousel-control-next" type="button" data-bs-target="#propertyCarousel722" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> </button> </div> <div class="property-details"> <div class="price-tag"> 350000.00 Saudi Riyal 🇸🇦 </div> <h3 class="property-title">فرصة عقارية مميزة في الشرقية, الطائف, محافظة الطائف, منطقة مكة المكرمة, 26511, السعودية</h3> <p class="property-info"><h2>أرض استثمارية نادرة في الطائف بموقع استراتيجي</h2> <h3>اكتشف واحة الأحلام في قلب الطائف!</h3> ...</p> <div class="property-actions"> <a href="/en/kup/property_detailpuplic/722/" class="btn btn-info"> عرض التفاصيل </a> </div> </div> </div> </div> <!-- Enhanced Pagination --> <div class="pagination"> <div class="flex space-x-2"> <span class="pagination current">1</span> <a href="?page=2" class="pagination-link">2</a> <a href="?page=3" class="pagination-link">3</a> <a href="?page=4" class="pagination-link">4</a> <a href="?page=5" class="pagination-link">5</a> <a href="?page=2" class="pagination-link">التالي</a> </div> </div> <style> /* Search Container Styles */ .search-container { background: linear-gradient(135deg, #7C181A, #AF1E23, #EDAB6A); max-width: 1200px; margin: 2rem auto; transition: all 0.3s ease; position: relative; } /* Toggle Button */ .search-toggle { position: absolute; right: 1rem; top: 1rem; background: rgba(255, 255, 255, 0.2); border: none; color: white; padding: 0.5rem; border-radius: 50%; cursor: pointer; transition: transform 0.3s ease; z-index: 10; } .search-toggle:hover { transform: rotate(180deg); background: rgba(255, 255, 255, 0.3); } /* Search Form Inputs */ .custom-input { background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); color: white; transition: all 0.3s ease; } .custom-input:focus { background: rgba(255, 255, 255, 0.15); border-color: rgba(255, 255, 255, 0.4); box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.1); } .custom-input::placeholder { color: rgba(255, 255, 255, 0.6); } .custom-select { background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); color: white; cursor: pointer; transition: all 0.3s ease; } .custom-select:hover { background: rgba(255, 255, 255, 0.15); } .custom-select option { background: #2d3748; color: white; } /* Collapsed State */ .search-container.collapsed { max-height: 60px; overflow: hidden; } .search-container.collapsed form { opacity: 0; transform: translateY(-20px); } /* Expanded State */ .search-container form { opacity: 1; transform: translateY(0); transition: all 0.3s ease; } /* Responsive Design */ @media (max-width: 768px) { .search-container { margin: 1rem; padding: 1rem; } .grid-cols-1 md\:grid-cols-3 { grid-template-columns: 1fr; } .custom-input, .custom-select { margin-bottom: 1rem; } } /* Animation for expand/collapse */ @keyframes expandSearch { from { max-height: 60px; } to { max-height: 500px; } } @keyframes collapseSearch { from { max-height: 500px; } to { max-height: 60px; } } .search-container.expanding { animation: expandSearch 0.3s ease forwards; } .search-container.collapsing { animation: collapseSearch 0.3s ease forwards; } .dir-rtl { direction: rtl; } /* Featured Properties Carousel */ .featured-carousel { height: 70vh; position: relative; overflow: hidden; margin-bottom: 4rem; } .featured-slide { height: 100%; background-size: cover; background-position: center; position: relative; } .featured-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.7)); display: flex; align-items: flex-end; padding: 2rem; color: white; } /* Property Grid */ .property-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 2rem; padding: 2rem; } .property-card { background: white; border-radius: 1rem; overflow: hidden; transition: transform 0.3s ease, box-shadow 0.3s ease; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .property-card:hover { transform: translateY(-10px); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); } .property-image { height: 200px; width: 100%; object-fit: cover; } .property-info { padding: 1.5rem; } .price-tag { background: linear-gradient(135deg, #4a90e2, #357abd); color: white; padding: 0.5rem 1rem; border-radius: 0.5rem; display: inline-block; margin-bottom: 1rem; } .property-stats { display: flex; justify-content: space-between; padding: 1rem; background: #f8f9fa; border-radius: 0.5rem; margin-top: 1rem; } /* Animation */ @keyframes fadeUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .animate-fade-up { animation: fadeUp 0.5s ease-out forwards; } /* Previous CSS styles remain the same until property-card */ .property-card { background: white; border-radius: 1rem; overflow: hidden; transition: transform 0.3s ease, box-shadow 0.3s ease; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .property-carousel { position: relative; height: 200px; } .property-carousel .carousel-inner { height: 100%; } .property-carousel .carousel-item { height: 100%; } .property-carousel img { height: 100%; width: 100%; object-fit: cover; } .property-carousel .carousel-control-prev, .property-carousel .carousel-control-next { width: 10%; background: rgba(0, 0, 0, 0.3); border: none; opacity: 0; transition: opacity 0.3s ease; } .property-carousel:hover .carousel-control-prev, .property-carousel:hover .carousel-control-next { opacity: 1; } .carousel-indicators { margin-bottom: 0.5rem; } .carousel-indicators button { width: 8px; height: 8px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.7); } /* Rest of your existing styles remain the same */ </style> <script> document.addEventListener('DOMContentLoaded', function() { const searchContainer = document.querySelector('.search-container'); const searchToggle = document.createElement('button'); searchToggle.className = 'search-toggle'; searchToggle.innerHTML = '🔍'; searchContainer.appendChild(searchToggle); searchToggle.addEventListener('click', function() { if (searchContainer.classList.contains('collapsed')) { searchContainer.classList.remove('collapsed'); searchContainer.classList.add('expanding'); } else { searchContainer.classList.add('collapsed'); searchContainer.classList.add('collapsing'); } }); searchContainer.addEventListener('animationend', function() { searchContainer.classList.remove('expanding', 'collapsing'); }); }); </script> </main> <div class="footer-spacing"></div> <!-- Footer Section --> <div class="footer-spacing"></div> <footer> <style> /* Brand Color Palette: Snowy White (85%), Deep Blue (10%), Bright Red (5%) */ :root { --brand-white: #F2F2F2; /* Snowy White (85%) - Light Gray */ --brand-deep-blue: #1A237E; /* Deep Blue (10%) */ --brand-bright-red: #E53935; /* Bright Red (5%) - Adjusted for better contrast */ --kup-primary: var(--brand-bright-red); /* Primary Color */ --kup-light: var(--brand-white); /* Light Background */ --kup-hover: #D32F2F; /* Slightly darker red for hover effects */ --kup-transition: 0.3s ease-in-out; --kup-border: rgba(229, 57, 53, 0.3); /* Red border with transparency */ --kup-background: var(--brand-white); /* Main Background */ --kup-text-primary: var(--brand-deep-blue); /* Deep Blue Text */ --kup-text-secondary: #757575; /* Medium Gray for less important text */ --kup-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08); --kup-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.12); } /* General Body Styles */ body { background-color: var(--kup-background); font-family: 'Tajawal', sans-serif; color: var(--kup-text-primary); /* direction: ltr; - Dynamically set direction in body */ margin: 0; /* Reset default margin */ padding: 0; /* Reset default padding */ line-height: 1.6; /* Improve readability */ } /* Helper class for dynamic text direction */ .kup-dynamic-dir { direction: auto; /* Allows browser to determine direction based on content */ unicode-bidi: isolate; /* Prevents directionality conflicts */ } /* Main Add Button Styles */ .kup-add-btn { position: fixed; bottom: 40px; left: 50%; transform: translateX(-50%); width: 60px; height: 60px; background: linear-gradient(135deg, var(--kup-primary), var(--kup-hover)); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; text-decoration: none; box-shadow: var(--kup-shadow-md); z-index: 1001; transition: all var(--kup-transition); border: 2px solid rgba(255, 255, 255, 0.3); cursor: pointer; } .kup-add-btn i { font-size: 24px; filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.2)); transition: all var(--kup-transition); } .kup-add-btn:after { position: absolute; bottom: -22px; font-size: 11px; white-space: nowrap; color: var(--kup-text-secondary); } .kup-add-btn:hover { background: linear-gradient(135deg, var(--kup-hover), #C62828); /* Darker Red gradient on hover */ transform: translateX(-50%) scale(1.05); box-shadow: 0 7px 22px rgba(229, 57, 53, 0.4); /* Adjusted shadow color */ } /* Floating Action Buttons Container */ .kup-float-btns { display: flex; flex-direction: column; gap: 12px; position: fixed; bottom: 110px; left: 50%; transform: translateX(-50%) scale(0.9); z-index: 1000; opacity: 0; visibility: hidden; transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(8px); padding: 15px; border-radius: 15px; border: 1px solid var(--kup-border); box-shadow: var(--kup-shadow-md); } .kup-float-btns.active { opacity: 1; visibility: visible; transform: translateX(-50%) scale(1); z-index: 1050; } /* Individual Floating Button */ .kup-float-btn { background: white; color: var(--kup-text-primary); padding: 12px 20px; border-radius: 8px; font-size: 14px; font-weight: 500; display: flex; align-items: center; justify-content: flex-end; gap: 8px; z-index: 1050; transition: all var(--kup-transition); min-width: 260px; text-align: right; border: 1px solid var(--kup-border); box-shadow: var(--kup-shadow-sm); cursor: pointer; } .kup-float-btn:hover { background: var(--kup-light); transform: translateX(-3px); border-color: var(--kup-primary); box-shadow: var(--kup-shadow-md); } .kup-float-btn i { font-size: 18px; color: var(--kup-primary); transition: all var(--kup-transition); } .kup-float-btn:hover i { transform: scale(1.1); color: var(--kup-hover); } /* Media Queries for Responsiveness */ @media (max-width: 768px) { .kup-float-btn { min-width: 220px; padding: 10px 16px; font-size: 13px; } .kup-add-btn { width: 50px; height: 50px; bottom: 25px; } .kup-float-btns { padding: 12px; gap: 8px; } } /* Color for specific elements */ .kup-gold { color: #FFC107; /* Consider replacing with a color from your palette if appropriate */ } /* Account Modal Styles */ .kup-account-modal .modal-dialog { border-radius: 12px; max-width: 450px; margin: 1.5rem auto; } .kup-account-modal .modal-content { overflow: hidden; border-radius: 12px; box-shadow: var(--kup-shadow-md); animation: modalIn 0.3s ease-out; } @keyframes modalIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } .kup-account-modal .modal-header { background-color: var(--kup-light); border-bottom: none; display: flex; align-items: center; justify-content: space-between; padding: 12px 18px; } .kup-account-modal .modal-title { font-size: 16px; font-weight: bold; color: var(--kup-primary); margin-bottom: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 40px); } .kup-account-modal .modal-close { color: var(--kup-primary); font-size: 24px; transition: transform 0.2s ease; opacity: 0.8; border: none; background: none; cursor: pointer; } .kup-account-modal .modal-close:hover { transform: scale(1.1); opacity: 1; } .kup-account-modal .modal-close:focus { outline: none; } .kup-account-modal .modal-body { padding: 16px; background-color: #fff; /* Use pure white for the body */ overflow-y: auto; } .kup-profile-info { text-align: center; } .kup-profile-pic { width: 50px; height: 50px; border-radius: 50%; box-shadow: var(--kup-shadow-sm); border: 2px solid var(--kup-primary); } .kup-default-icon { font-size: 50px; color: var(--kup-primary); } .kup-username { font-size: 15px; font-weight: bold; color: var(--kup-primary); margin-top: 8px; } .kup-account-btn { display: block; width: 100%; text-align: center; padding: 10px; margin-bottom: 10px; border-radius: 6px; font-size: 13px; font-weight: 500; text-decoration: none; transition: all var(--kup-transition); } .kup-account-btn i { margin-left: 6px; } .kup-settings-btn { background-color: var(--kup-light); color: var(--kup-primary); } .kup-settings-btn:hover { background-color: var(--kup-primary); color: #fff; /* White text on hover */ } .kup-logout-btn { background-color: var(--kup-primary); color: #fff; /* White text */ } .kup-logout-btn:hover { background-color: var(--kup-hover); transform: translateY(-1px); } .kup-login-btn, .kup-signup-btn, .kup-phone-btn { background-color: var(--kup-light); color: var(--kup-primary); } .kup-login-btn:hover, .kup-signup-btn:hover, .kup-phone-btn:hover { background-color: var(--kup-primary); color: #fff; /* White Text */ transform: translateY(-1px); } /* Bottom Navigation Styles */ .kup-bottom-nav { position: fixed; bottom: 0; left: 0; right: 0; background: white; /* Use pure white */ padding: 10px; box-shadow: var(--kup-shadow-sm); display: flex; justify-content: space-around; z-index: 1000; border-top: 1px solid #eee; } .kup-nav-item { color: var(--kup-text-secondary); text-decoration: none; text-align: center; transition: all var(--kup-transition); } .kup-nav-item.active { color: var(--kup-primary); } .kup-nav-item:hover { color: var(--kup-primary); transform: translateY(-2px); } /* Navigation Modal Styles */ .kup-nav-modal .modal-dialog { max-width: 450px; margin: 1.5rem auto; } .kup-nav-modal .modal-content { border-radius: 15px; border: none; box-shadow: var(--kup-shadow-md); animation: modalIn 0.3s ease-out; } .kup-nav-modal .modal-header { border-bottom: 1px solid var(--kup-light); padding: 15px; background-color: white; /* Use pure white */ display: flex; align-items: center; justify-content: space-between; } .kup-nav-modal .modal-header .modal-title { margin-bottom: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 40px); font-size: 1.1rem; font-weight: bold; } .kup-nav-modal .modal-header .btn-close { color: var(--kup-primary); font-size: 24px; transition: transform 0.2s ease; opacity: 0.8; border: none; background: none; cursor: pointer; } .kup-nav-modal .modal-header .btn-close:hover { transform: scale(1.1); opacity: 1; } .kup-nav-modal .modal-header .btn-close:focus { outline: none; } .kup-nav-button { width: 100%; padding: 15px; margin: 8px 0; border: none; border-radius: 10px; background-color: white; /* Use pure white */ transition: all var(--kup-transition); text-align: right; display: flex; align-items: center; text-decoration: none; color: var(--kup-text-primary); font-size: 14px; } .kup-nav-button:hover { background-color: var(--kup-light); transform: translateX(-3px); color: var(--kup-primary); } .kup-nav-button i { margin-left: 12px; font-size: 20px; color: var(--kup-primary); } /* Opportunities Modal Styles */ .kup-opportunities-modal .modal-dialog { max-width: 450px; margin: 1.5rem auto; } .kup-opportunities-modal .modal-content { border-radius: 12px; box-shadow: var(--kup-shadow-md); border: none; animation: modalIn 0.3s ease-out; } .kup-opportunities-modal .modal-header { background-color: var(--kup-light); border-bottom: none; padding: 15px; display: flex; align-items: center; justify-content: space-between; } .kup-opportunities-modal .modal-header .modal-title { margin-bottom: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 40px); color: var(--kup-primary); font-weight: bold; font-size: 16px; } .kup-opportunities-modal .modal-header .modal-close { color: var(--kup-primary); font-size: 24px; transition: transform 0.2s ease; opacity: 0.8; border: none; background: none; cursor: pointer; } .kup-opportunities-modal .modal-header .modal-close:hover { transform: scale(1.1); opacity: 1; } .kup-opportunities-modal .modal-header .modal-close:focus { outline: none; } .kup-opportunities-modal .modal-body { padding: 16px; display: flex; flex-direction: column; gap: 12px; overflow-y: auto; } .kup-opportunity-btn { display: flex; align-items: center; justify-content: flex-end; padding: 12px 18px; border-radius: 8px; text-decoration: none; transition: all var(--kup-transition); font-weight: 500; gap: 10px; cursor: pointer; font-size: 14px; } .kup-opportunity-btn i { font-size: 18px; } /* Using Brand Colors for Opportunity Buttons */ .kup-real-estate-btn { background-color: #FFCDD2; /* Light Red */ color: var(--kup-primary); } .kup-investment-btn { background-color: #BBDEFB; /* Light Blue */ color: var(--brand-deep-blue); } .kup-academic-btn { background-color: #F0F4C3; /* Light Yellowish */ color: #C0CA33; } .kup-real-estate-btn:hover, .kup-investment-btn:hover, .kup-academic-btn:hover { transform: translateY(-1px); color: #fff; /* White text on hover */ } .kup-real-estate-btn:hover { background-color: var(--kup-primary); } .kup-investment-btn:hover { background-color: var(--brand-deep-blue); } .kup-academic-btn:hover { background-color: #A2A71E; } /* Modal Animation */ .modal.fade .modal-dialog { transition: transform 0.3s ease-out; transform: translateY(-40px); } .modal.show .modal-dialog { transform: translateY(0); } /* Highlighted Word Styles */ .highlighted-word { font-weight: bold; color: var(--kup-primary); display: inline-block; position: relative; animation: pulse 1.5s infinite alternate, emoji-float 1.5s infinite alternate; transition: transform 0.2s ease-in-out; } .highlighted-word::before { content: '🎁'; position: absolute; top: -1em; right: 0; font-size: 0.8em; animation: emoji-float-before 1.5s infinite alternate; } .highlighted-word::after { content: '🎁'; position: absolute; top: -1em; left: 0; font-size: 0.8em; animation: emoji-float-after 1.5s infinite alternate; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1.05); } } @keyframes emoji-float { 0% { transform: translateY(0); } 100% { transform: translateY(-4px); } } @keyframes emoji-float-before { 0% { transform: translateY(0); } 100% { transform: translateY(-4px) translateX(-2px); } } @keyframes emoji-float-after { 0% { transform: translateY(0); } 100% { transform: translateY(-4px) translateX(2px); } } .color-realgold { color: #FFC107; } .bg-realdark { background-color: #343a40; color: #fff; /* Ensure text is readable on dark background */ } </style> <!-- Account Modal --> <div class="modal fade kup-account-modal" id="kupAccountModal" tabindex="-1" aria-labelledby="kupAccountModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title kup-dynamic-dir" id="kupAccountModalLabel">Account</h5> <button type="button" class="btn-close modal-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body text-center"> <a href="/en/accounts/myaccount_login/" class="kup-account-btn kup-login-btn mb-2 kup-dynamic-dir"> <i class="fas fa-sign-in-alt"></i> Login </a> <a href="/en/accounts/newsignup/" class="kup-account-btn kup-signup-btn mb-2 kup-dynamic-dir"> <i class="fas fa-user-plus"></i> Create Account </a> <a href="/en/accounts/phone-login/" class="kup-account-btn kup-phone-btn kup-dynamic-dir"> <i class="fas fa-mobile-alt"></i> Login with Phone Number </a> </div> </div> </div> </div> <!-- Main Add Button --> <a href="#" class="kup-add-btn" id="kupAddBtn"> <i class="fas fa-plus" style="color: white;"></i> </a> <!-- Floating Action Buttons --> <div class="kup-float-btns" id="kupFloatBtns" style="display: none;"> <a href="/en/kup/create/step1/" class="kup-float-btn kup-dynamic-dir"> <i class="fas fa-file-alt kup-gold"></i> Add Your Property Manually </a> <a href="/en/apkappraisaL/appraisal/step1/" class="kup-float-btn kup-dynamic-dir"> <i class="fas fa-balance-scale" style="color: #28a745;"></i> Get an Appraisal <span class="highlighted-word">Free</span> لعقارك </a> <a href="/kup/property/create/with-ai/" class="kup-float-btn kup-dynamic-dir"> <i class="fas fa-brain kup-gold"></i> Add with AI </a> <a href="/en/core/request/create/1/" class="kup-float-btn kup-dynamic-dir"> <i class="fas fa-file-alt kup-gold"></i> Submit Your Property Request </a> <a href="/en/investor/profiles/create/" class="kup-float-btn kup-dynamic-dir"> <h5 class="kup-dynamic-dir">Your Website for Free <span class="highlighted-word">Start now</span> ✨</h5> <i class="fas fa-rocket"></i> </a> </div> <!-- Bottom Navigation Bar --> <nav class="kup-bottom-nav"> <a href="#" class="kup-nav-item active kup-dynamic-dir" data-bs-toggle="modal" data-bs-target="#kupNavigationModal"> <i class="fas fa-home"></i> <div>Home</div> </a> <a href="#" class="kup-nav-item kup-dynamic-dir" data-bs-toggle="modal" data-bs-target="#propertiesActionsModal"> <i class="fas fa-building"></i> <div>Manage</div> </a> <a class="kup-nav-item"> <div></div> </a> <a href="#" class="kup-nav-item kup-dynamic-dir" data-bs-toggle="modal" data-bs-target="#kupOpportunitiesModal"> <i class="fas fa-chart-line"></i> <div>Opportunities</div> </a> <a href="#" class="kup-nav-item kup-dynamic-dir" data-bs-toggle="modal" data-bs-target="#kupAccountModal"> <i class="fas fa-user"></i> <div>Account</div> </a> </nav> <!-- Property Actions Modal --> <div class="modal fade kup-nav-modal" id="propertiesActionsModal" tabindex="-1" aria-labelledby="propertiesActionsModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content bg-realdark text-light"> <div class="modal-header"> <h5 class="modal-title kup-dynamic-dir" id="propertiesActionsModalLabel">Investor Actions</h5> <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <a href="/en/investor/comcreate/" class="kup-nav-button kup-dynamic-dir"> <i class="fas fa-plus-circle color-realgold"></i> <span class="kup-nav-button-text kup-dynamic-dir">إنشاء ملف تعريف مستثمر</span> </a> </div> </div> </div> </div> <!-- Navigation Modal --> <div class="modal fade kup-nav-modal" id="kupNavigationModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title kup-dynamic-dir">Main Menu</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body kup-dynamic-dir"> <a href="/afagschool/defaulthomepage/" class="kup-nav-button kup-dynamic-dir"> <i class="fas fa-graduation-cap"></i> <span class="kup-nav-button-text kup-dynamic-dir">Academy</span> </a> <a href="/en/kup/kupmobileproperty_list/" class="kup-nav-button kup-dynamic-dir"> <i class="fas fa-building"></i> <span class="kup-nav-button-text kup-dynamic-dir">Properties</span> </a> <a href="/en/kup/kupmap_view/" class="kup-nav-button kup-dynamic-dir"> <i class="fas fa-map-marker me-2 color-realgold"></i> <span class="kup-nav-button-text kup-dynamic-dir">Horizons Map</span> </a> <a href="/en/investor/profiles/" class="kup-nav-button kup-dynamic-dir"> <i class="fas fa-chart-line"></i> <span class="kup-nav-button-text kup-dynamic-dir">Investment</span> </a> <a href="/en/afagsocial/" class="kup-nav-button kup-dynamic-dir"> <i class="fas fa-trophy"></i> <span class="kup-nav-button-text kup-dynamic-dir">Competitions</span> </a> <a href="/en/communications/" class="kup-nav-button kup-dynamic-dir"> <i class="fas fa-star"></i> <span class="kup-nav-button-text kup-dynamic-dir">Elite</span> </a> </div> </div> </div> </div> <!-- Opportunities Modal --> <div class="modal fade kup-opportunities-modal" id="kupOpportunitiesModal" tabindex="-1" aria-labelledby="kupOpportunitiesModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title kup-dynamic-dir" id="kupOpportunitiesModalLabel">Available Opportunities</h5> <button type="button" class="btn-close modal-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body kup-dynamic-dir"> <a href="/en/kup/" class="kup-opportunity-btn kup-real-estate-btn kup-dynamic-dir"> <i class="fas fa-building"></i> <span>Real Estate Opportunities</span> </a> <a href="/en/investor/profiles/" class="kup-opportunity-btn kup-investment-btn kup-dynamic-dir"> <i class="fas fa-chart-line"></i> <span>Investment Opportunities</span> </a> <a href="/afagschool/home/courses/" class="kup-opportunity-btn kup-academic-btn kup-dynamic-dir"> <i class="fas fa-book-open"></i> <span>Academic Opportunities</span> </a> </div> </div> </div> </div> <!-- JavaScript to toggle floating buttons --> <script> document.getElementById('kupAddBtn').addEventListener('click', function (event) { event.preventDefault(); const floatingButtons = document.getElementById('kupFloatBtns'); if (floatingButtons.style.display === 'none' || floatingButtons.style.display === '') { floatingButtons.style.display = 'flex'; setTimeout(() => { floatingButtons.classList.add('active'); }, 10); } else { floatingButtons.classList.remove('active'); setTimeout(() => { floatingButtons.style.display = 'none'; }, 400); // Adjusted timeout to match transition duration } }); </script> </footer> </div> <!-- JavaScript --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.5.0/css/flag-icon.min.css"></script> <script> if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/static/sw.js') .then(() => console.log('Service Worker registered successfully!')) .catch((error) => console.error('Service Worker registration failed:', error)); } </script> <div data-template-log-id=""></div> <script> document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () { let startTime = new Date().getTime() / 1000; // start time in seconds let templateLogIdElement = document.body.querySelector('[data-template-log-id]'); // Changed here if (templateLogIdElement) { let templateLogId = templateLogIdElement.getAttribute('data-template-log-id'); window.addEventListener('beforeunload', function () { let endTime = new Date().getTime() / 1000; let csrfToken = 'Vgqvm3HtOPqxUaR5zs6ExhRL6NivCwhKOuVvllK4QZne6OWHB2lKmuECDliJPMhT'; // gets the csrf_token fetch("/atasky/template-log-update/", { // Changed URL here method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrfToken, // Needed for Django POST requests }, body: JSON.stringify({ template_log_id: templateLogId, end_timestamp: endTime, }), }).catch(error => console.error('Error:', error)); }); } }); function getPreferredLanguage() { if (navigator.languages && navigator.languages.length) { return navigator.languages[0]; } else { return navigator.userLanguage || navigator.language || navigator.browserLanguage || 'en'; } } function setInitialLanguage() { var preferredLanguage = getPreferredLanguage().substring(0, 2); // Get first two letters (e.g., 'en', 'ar') var languageForms = document.querySelectorAll('.dropdown-item'); // Get all dropdown options // Iterate through each option and check if there is a language match for (var i = 0; i < languageForms.length; i++) { // Get form for language and manually submit if there is a match var currentForm = languageForms[i].closest('form'); var currentLanguage = currentForm.querySelector('input[name="language"]').value; if (preferredLanguage === currentLanguage && "en" !== currentLanguage) { currentForm.submit(); // Submit if match is made break; } } } // Function to add the flag icons dynamically function addFlagIcons() { var dropdownItems = document.querySelectorAll('.dropdown-item'); dropdownItems.forEach(function (item) { var languageCode = item.querySelector('input[name="language"]').value.toLowerCase(); var flagSpan = document.createElement('span'); flagSpan.className = 'flag-icon flag-icon-' + languageCode; flagSpan.style.marginRight = '5px'; item.prepend(flagSpan); }); } addFlagIcons(); // Add the icons on DOM load setInitialLanguage(); // Attempt to set on DOM load }); </script> <script> document.addEventListener('DOMContentLoaded', function() { const downloadButton = document.getElementById('app-download-btn'); const installButtonContainer = document.getElementById('install-app-btn-container'); let deferredPrompt; // Function to check if the app is already installed function isAppInstalled() { return window.matchMedia('(display-mode: standalone)').matches; } // Function to update the UI based on the app installation status function updateInstallButtonVisibility() { if (isAppInstalled()) { installButtonContainer.style.display = 'none'; } else if (deferredPrompt) { // Check if deferredPrompt is available installButtonContainer.style.display = 'block'; } else { installButtonContainer.style.display = 'none'; // Or keep it hidden until the event } } // Listen for the beforeinstallprompt event window.addEventListener('beforeinstallprompt', (e) => { e.preventDefault(); deferredPrompt = e; console.log('beforeinstallprompt fired', deferredPrompt); updateInstallButtonVisibility(); // Update when the event fires }); // Set PWA install functionality downloadButton.addEventListener('click', async () => { if (deferredPrompt) { deferredPrompt.prompt(); const { outcome } = await deferredPrompt.userChoice; console.log(`User response to the install prompt: ${outcome}`); deferredPrompt = null; // Reset updateInstallButtonVisibility(); // Update after install attempt } }); // Run the updateInstallButtonVisibility function on page load and focus updateInstallButtonVisibility(); window.addEventListener('focus', updateInstallButtonVisibility); // Check on tab focus // Detect when the app is installed (standalone mode) window.addEventListener('appinstalled', (event) => { console.log('👍', 'appinstalled', event); updateInstallButtonVisibility(); }); }); </script> </body> </html>