PageSourceSearch

https://brandfull.com/ar-sa/About/termsandcondition

html brandfull.com collected 2026-09-26 17:13:11 UTC 202,699 bytes, 3,318 lines download raw bytes

1
2<!DOCTYPE html>
3<html lang=ar dir=rtl>
4<head>
5
6    <base href="https://brandfull.com" target="_top">
7    <link rel="dns-prefetch" href="https://brandfull.com" />
8        <link rel="preconnect" href="https://cdn.brandfull.com">
9        <link rel="preconnect" href="https://cdn.brandfull.com" crossorigin>
10        <link rel="dns-prefetch" href="https://cdn.brandfull.com">
11    <link rel="preconnect" href="https://brandfullsapi.azurewebsites.net" crossorigin>
12
13    
14
15
16    <title>قواعد الضريبة - براندفل</title>
17    <meta charset="utf-8">
18    <meta http-equiv="X-UA-Compatible" content="IE=edge">
19    <meta http-equiv="content-type" content="text/html; charset=utf-8">
20    <meta http-equiv="content-language" content="ar">
21    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=5, shrink-to-fit=no" />
22
23        <meta name="robots" content="index,follow">
24        <meta name="googlebot" content="index,follow">
25
26    <!-- Loading JS & CSS -->
27    
27<script>!function(){var o=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(e,t,n){"touchstart"!==e&&"touchmove"!==e&&"wheel"!==e||("object"!=typeof n&&(n={capture:!!n}),n.passive=!0),o.call(this,e,t,n)}}();</script>
27
28
29        <link rel="stylesheet" href="/site-Ar.min.css?v=639260136226636726">
30<link rel="preload" href="https://cdn.brandfull.com/Themes/Cartzilla/_Font/IBMPlexSansArabic-Light.woff2" as="font" fetchpriority="low"  crossorigin="anonymous">
31<link rel="preload" href="https://cdn.brandfull.com/Themes/Cartzilla/_Font/IBMPlexSansArabic-Regular.woff2" as="font"  crossorigin="anonymous">
32<link rel="preload" href="https://cdn.brandfull.com/Themes/Cartzilla/_Font/IBMPlexSansArabic-Bold.woff2" as="font"  crossorigin="anonymous">
33<link rel="preload" href="https://cdn.brandfull.com/Themes/Cartzilla/Assets/fonts/cartzilla-icons-sub.woff2?v=1" as="font" fetchpriority="low"  crossorigin="anonymous">
34<style>
35
36
37@font-face {
38    font-family: 'IBMPlexSansArabic';
39    font-style: normal;
40    font-weight: 300;
41    src: url(https://cdn.brandfull.com/Themes/Cartzilla/_Font/IBMPlexSansArabic-Light.woff2) format('woff2');
42    font-display: swap;
43}
44
45@font-face {
46    font-family: 'IBMPlexSansArabic';
47    font-style: normal;
48    font-weight: 400;
49    src: url(https://cdn.brandfull.com/Themes/Cartzilla/_Font/IBMPlexSansArabic-Regular.woff2) format('woff2');
50    font-display: swap;
51}
52
53@font-face {
54    font-family: 'IBMPlexSansArabic';
55    font-style: normal;
56    font-weight: 700;
57    src: url(https://cdn.brandfull.com/Themes/Cartzilla/_Font/IBMPlexSansArabic-Bold.woff2) format('woff2');
58    font-display: swap;
59}
60
61
62
63@font-face {
64    font-family: "cartzilla-icons";
65    src: url(https://cdn.brandfull.com/Themes/Cartzilla/Assets/fonts/cartzilla-icons.woff2?v=6) format("woff2");
66    font-weight: normal;
67    font-style: normal;
68    font-display: block;
69}
70
71@font-face {
72    font-family: "cartzilla-icons";
73    src: url(https://cdn.brandfull.com/Themes/Cartzilla/Assets/fonts/cartzilla-icons-sub.woff2?v=1) format("woff2");
74    font-weight: normal;
75    font-style: normal;
76    font-display: block;
77    unicode-range: U+E902,U+E903,U+E904,U+E906,U+E908,U+E90A,U+E90C,U+E90F,U+E910,U+E912,U+E914,U+E916,U+E918,U+E919,U+E91A,U+E91B,U+E91C,U+E91D,U+E91F,U+E920,U+E921,U+E922,U+E923,U+E926,U+E928,U+E929,U+E92C,U+E92D,U+E92F,U+E933,U+E937,U+E938,U+E939,U+E93B,U+E93F,U+E940,U+E944,U+E945,U+E946,U+E947,U+E948,U+E94A,U+E94C,U+E94D,U+E952,U+E953,U+E954,U+E956,U+E957,U+E959,U+E95A,U+E95D,U+E95E,U+E963,U+E964,U+E965,U+E969,U+E96A,U+E96B,U+E96E,U+E970,U+E972,U+E974,U+E97A,U+E97F,U+E980,U+E982,U+E983,U+E985,U+E986,U+E987,U+E98A,U+E98B,U+E98C,U+E98D,U+E98F,U+E991,U+E994,U+E99C,U+E99F,U+E9A6,U+E9AA,U+E9AB,U+E9AE,U+E9BE,U+E9BF,U+E9C1,U+E9C3,U+E9D5,U+E9DA,U+E9DB,U+E9DD,U+E9DF,U+E9E0,U+E9E1,U+E9E2,U+E9E4,U+E9E5,U+E9E6;
78}
79
80@font-face {
81    font-family: "cartzilla-icons";
82    src: url(data:font/woff2;base64,d09GMgABAAAAAA7YAAsAAAAAGQgAAA6KAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgSwRCAqrNKQCATYCJAMqCyoABCAFgRAHIBtpFFGUj1YN4OeB7ciNNa7Y8fpdT0YrmhkhyewP/DZ7RArzW19BPiIWKRysgsgd2Fg4XamThTfcias2cNHWospcpXKtXhXOla7VgRS7q740EAw4G0GKDdbZ/6T4SJ7ouzB4UtsP3qDJNbkOuvJgpbZrtQ0sksuddi/x4SkFJVSlAv9vLbW7QVL3ogAtCZeoxKGOsHHzJ7fvzb9N2oXQXBiP567MLqogbIWaKwEJ1TpUFbqKhDI1QtTWqM2CptBZ8p65IUZqZQyYtPES+69e0lsAAuEzbhOQAPA1+McAsFE/PtwzUOJo0GpDQFR5id6/CW2+toMEhuzOOA+dV1S8SsBgT8fp2UTYxfnAo18T3kv0Ur2IN9Ab5uV5VV6DN9vr9C7yrvJWe/d4u71/+3wUv3p13qy/MT2EfkL70T70Ofoveg+9jZ5H69BtaDW6GnWio1AZ4OACKMT5fLRjg1WBMjmJsruLpvl0uPXyRMABBUhAzqYBHgk3kg4SgQRWCB4YNowRGqzPLplE1DNRKo3DjCbSGFIOQqPR6f6I/6hYTigWEBoYTg7zHzYsSMi47iWax2TM/SLTb5gfh6OURccIdNJIZOPP/E1UxlaeQuM8D1FDyjIAYF0I+w+i2gBbbET9bMUoAb4nHnU+eYSIlga3Ged5CSd4s6lxscYYyZTu4RD5JfG5AWJizYBfoPVwYCzw6o7Mb/gZ0R0ieW3LVNoaw8W6oapkmwPkElIHJQAV+2u4swKUZKRr6bAd762SfrkX7LZH87Ihdq/3zZpXa1+8XgfW/+3sKBW+WoBFK1gKVf99tWJAmAObqF+IjDCyr5pZ0pvqm60lGYHMEuVf7uHlvpOuCzc0iObsZa2hH6ivnHomjdINwwq9O8uzHQruXVMnUXuxS9Zz6E+SjaF0f+ATHs6v7RjEuh/Jtf6VRLPidEu+mkH0Zq6YbgNVZ1oLtewLIoCloJwwTkHdaeRVjZ5UIcBDPOGZkAGqObOeDiOev+RfSIF3XRwZqzUUe0XDBYTR855arIkvSad7DcMSX6xyZVMzvFMJu0HQpo3ciyRJdHFGTcDaA7Ui1XqHP1xskGvJCKw7WCfTbS8j2co9CFflnpdRVL2vmiWar0WjmduD3FuzH74aSDGmsn1QXpRyvfwC1dC98mTLbfFoSeQ69d+Hz7ZJf91BxM61s8XC333XM/mOXoVp3kO5Ja0ytlkB+FlBXIsdpZWoPNtWrOeuUiro4YbFqL/ZPRkuh5sQIOxQECw/hRF2VfE0z6/4dZ/Gc4aU++JJKXpCMAATjMUujUie2Su9pNB9TQy9WGW0T3j6HbmSLaQq5/Pf21as9yF6OZNPVih2Na9UuuEnLPda865y01lxGqgFgZcGxshc7qHlvpv8vLUVlRFdPPtVb9tbhV2VZ4CR17ipsid/JxtJ4ItXHbUbRMQcDK6lw4jak+FS/QUCpMAT2eyNyb0WHDCVgO/X766+rnaJP3WnZddb5H7+KaeO8SoVQCIQxVL8uoZc6l9JlJ8IfqVoCdr25ocZq+nVXDFd1XdXe1oLtV4Ivpge
82kwA4FNS/6q90/bviOl+naXEtnhVsHjuwJyt5psaf5hkn+7GWGdb7wxe75HwexcQ1nmtnkxlI7s2JXCfAGD8SRvhXkSsFR2h/V4/QKdVbQxzTAxLBGMecRs3+cateHjFVUD0zetxKSxr+M8guUZt+I5pP4y1jJ+0GVarQYQC3yRyvYIQ4dsItM/TBH0CBj0Weqs88VlBg6xWxJ/rzQLggQFUy/sx4GsoyQEoPjz7XnvjciZS/88UFxgRDwhojjDLBaCo0nWF02xBM3cyhGZPpCsygs4ixQOlM2ApjviVy2e72hXPyZjoRe4jRb5AMBWy4aiiJw5yBZX2SEmK9mgMMwZEMUlL0Zk7mu07ehU5Ry97AtX6WaVec7+DVzHt63B91cnS4fCTi1UdPBGMu/l6sajweJhxPWr7CFD1h1r97XVVARbqhdgJJLnWHh8YgGhfTpd6/V5EsrQC672z1nKbF49JOQX5GjmCJr6sEv0jLZ1MtS1qmMm2lvR869bXEDB66kRWjKRiN07z74vPs7ADVqt2TZD7jO0BE7Yhq7Oh8IV3icg+vZo77p1u4s0L57yXxtSO0Y0mr2TArGJ6rBWN72DVuSIaDsmgrdZgQJvVyrhHClb29JF/NXG/oUXRh07RsL6uC4+j3CGAZD6lnRH1h8e/TVpttm0pzxJvhNWQuFrQijl3juiKB3R6L0nJZDHOJAwDlYQRereYb7YwFc0xmIl47RQUwZpYou0GsTbLrlSEOFdunSOo1YFUqsSSaJzpi3Bw5cTmCykqBazocIcuZmDN3cdh2hrqMfOCKPTHyNl0ucSfa7ZXEFN0ru82D8Q+Sj6RbA7HJCJ/v3xk6v2GyGOhQPOY/Nv4AcKv11qke/IcHvAMD2RE3U8fM4X4XhMA/GAEoYabhBF2MNMlYwFjN8N1d9niK8GmRIp35s7Ocs8tfVoG5LxxLN4C+XZxyI+wRETYbc3OysIJHgOTW0+jSpcsglse2seUFsHgRuvCMnyoLfNxZErssW5+Wrp33q/n41p935DpgTNIZvuf3CGtLe+4E1do9WQYfTIixGvlyo2ESEKF1tnCLaLkq92kL1/K7Ryc0ptssLA/ysf5p4iQrboqll6+HeqrEEzrHVmMqOvZd0Pd5N7sZzO6bxTcV00fTw82pqSnysQHz31rfruc8FocPUqV29oyG1SyWgb//5tYti51weIer4C4A+BbLN2/+lcWSy1ns37ZslmfUX1iEtvZiy35ZpTY3V3utjR0njI49z4NQ/u8bTQ5qCObCWFgh5vNSDGK1hE6eK16FXBdW9OlKwJPjRqe4PbDciQQvNtWiBoOlteFQq6DJJ2hXr/rDp48/3tuDtHH60D3bNHawXYwZpw/XxfwQOi0kf1A8+NYo8AhN5MuOqyzfOzspHbiiOLtZUd73/xZxln/3C+//KJn1eWiB0f/OpSwHW8NWE8z/lBTvDzp4QZj34H70Lht2+LIws7098Z9p05uSX7+W5bz/f+7hJQ00tmz6Dz/ENa3fPvPJz4LCK1dGN+D1G8NUtlk7tn++06D79rZoevdDrdq/ZJVtRvMpig5Z/nXvQPy0b7/T7ycZ21uyZ948D5JvlZ5Nm3oFYTICnsBuXuvT6LT6be6DBwEuHdrm1ug0+qHtzWx/Gu3XVVteEfGEsN/aT6zf6fvFWXeivT3ULJoxUjNuoGBkbFKlWaDZQ6rla167l1SsUY/TjJNGjY7CVOPU48vX1tf7R+hJO4vFmipzEgDE78an7MJppxMALM3NOQYtEUktu21mmdm1RNwfcxuLFOcllZPeisVvSeVJeWLknI0dSaM2SZzOu93d9q7u2xAxyelLakh6qjKnDvupQ+YpxqCllmyulZktMJHPvlw6SSlzXt4MY+yujUgZp+xmD1bIK8MWc5AHDwb6ZZ5qT667sanHg7kwAKjmqOf19DTpG12XXTqI79gf1BhkNOkdy+uS3utBwQTEgnFo4EifSFD0W8empIwt+S2daHBXhyADU7S5072eksl2p97fGuQUpnTQGetq1i+uriavJ2srMQsMN6ImOr35qXv8kWQG8d0XbB1AEjONkMhIhq5//3nBTRgOOBiR4Bh6auXyA5BA5stfajzxIG88g882HVfL3cIwBRoDer3eGl5NY+So8+GmMy25eZ8GTKZnn/ykljOQy8odeGYMDACgQ2QfY503z3pvKZNrNPJnUuVD8+o2Pooax58+nT9OAQBw5+e3bKwUq2YdxtA7j+8wFPVeAJDlKaPTwf1YAmV2EqdwS2NpLqD74B3y9toH4I8/cFqLEAU5T/JQrBA3zHJgHms6V1/smjbN9U7PLrJWW2167jsovzhcv84MHTUoeUfWchjJV3EN8hXt/UtGGviGJSN8t86tNHDzTWkjx0/IyJhgRYKZXETNZHMnaJSGycQ3o7ljHBIsKvkTuCF2OS0xeezb+32YTlQmEpr7UvGG7+k7ZY/SZZJT0q1pY8fJTSn5q1li3mPe+CkT/zCNo2K205iv6OLTxqS1W4osbT7XBD6t8srlSUkh6MSJKGli0uUrI0bkiO8iSXLIJLmCEePx1F87Gh9/7Gr9ccUgSVePJR+99pzpfX0zJLKRt4AIB1I1VWRUUiBCSVXa1EP9ZJlkxnn8tauzdGKNSFOCpCMXLZuv1yNWF+muXYMxQW1dErVa2oXYECUuz0c6eSYWKUB+bcZOQGh1St2okhUrUYmXO3NLXbt4NRVGdvmyMoQfyxQSDArmNbyKigcAlJbmvvz8gtJh5AWxtq7OHhNGU86yx2XHllfE5cTaHVreMoGJyjDlLOGqwGF/eEVFrHtPDmTPppiso0er/4exDu4gpUEkrPmqL2L+hEye5ebznRZcW6bItf5LblzsL79Md3K/LHOJcBmRFtjO+Q6ffM+4Lbqo6as68rNuxqRv2rqqXnbfkFlUFusmj4gVExThhhmrPBQyk0wJLa8BuVxmjQl897aqeNmbLPuF/E19in0FtgBizN3VsKXrOF+AGY7XGLgCgYF7rJZrEPBPUL/XBQy3UIo5ifwAYjg7nBjAT+QUU6fodN9TU3R+L/yMmZKykC5WKh1LpqfqdNu7WqiL40csUCqNEdwMpXJmBD/eLtmbH/i0sbE3kB3Y23ji18D8fdK7VCTUh4b6QhHWD5I46fcfNftlKHoRGkxqfQUAvrYok9BW4vtzrhBud8XgiH22EdbxpyQMbs5nL7rGaFJf0xhUt7pxAHfJfu4/zXn+499S/R7aJv+xkY264Rt83yra/+cHVMADjCJA3yKADuU9ZDdzaR4cERCHxWCcCVBk84cvGRKAALi/pXC1fjEehgF3Z4JtZ6IUkwAFiU4W+QyYBk5YAIugCObckEFpdLEZUAzzoARSIB8K4evCnZBO6Hz0Io/vnAdfQDzIgQAXAAA=) format("woff2");
83    font-weight: normal;
84    font-style: normal;
85    font-display: block;
86    unicode-range: U+E904,U+E908,U+E910,U+E912,U+E918,U+E920,U+E940,U+E944,U+E945,U+E946,U+E959,U+E95A,U+E972,U+E97A,U+E982,U+E98D,U+E99F,U+E9DB,U+E9E4;
87}
88
89
90
91@font-face {
92    font-family: "digital";
93    src: url(https://cdn.brandfull.com/Themes/Cartzilla/_Font/digital-7.woff2) format('woff2');
94    font-weight: normal;
95    font-style: normal;
96    font-display: swap;
97}</style>
98    <link rel="preload" href="https://cdn.brandfull.com/script.min.js?v=639260136226636726" as="script" fetchpriority="high">
99
100    <link rel="preload" href="https://cdn.brandfull.com/InitData.ar.js?v=639260136446764345" as="script">
101    <style>
102        .cart-drawer{position:fixed;top:0;right:0;width:380px;max-width:92vw;
102height:100vh;transform:translateX(var(--cart-hide-tx,100%));visibility:hidden}
103        [dir="rtl"] .cart-drawer{right:auto;left:0}
104        [dir="rtl"]{--cart-hide-tx:-100%}
105        .filter-drawer{position:fixed;top:0;left:0;width:340px;max-width:88vw;transform:translateX(var(--filter-hide-tx,-100%));visibility:hidden}
106        [dir="rtl"] .filter-drawer{left:auto;right:0}
107        [dir="rtl"]{--filter-hide-tx:100%}
108        .modal{display:none}
109        .seo-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
110    </style>
111    <!-- ios support -->
112    <meta name="mobile-web-app-capable" content="yes" />
113    <meta name="apple-mobile-web-app-capable" content="yes" />
114    <meta name="application-name" content="PWA Workshop" />
115    <meta name="apple-mobile-web-app-title" content="PWA Workshop" />
116    <meta name="msapplication-starturl" content="/" />
117    <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.brandfull.com/Media/BrandFull/apple-touch-icon.png?version=639260136446764345">
118    <meta name="apple-mobile-web-app-status-bar" content="#34200C" />
119    <meta name="msapplication-TileColor" content="#34200C" />
120    <meta name="theme-color" content="#34200C" />
121
122    <!-- Favicon Icon -->
123    <link rel="icon" type="image/x-icon" href="https://cdn.brandfull.com/Media/BrandFull/favicon.png?version=639260136446764345" />
124    <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.brandfull.com/Media/BrandFull/favicon-32x32.png?version=639260136446764345">
125    <link rel="mask-icon" href="https://cdn.brandfull.com/Media/BrandFull/safari-pinned-tab.svg?version=639260136446764345" color="#5bbad5">
126    <link rel="shortcut icon" href="https://cdn.brandfull.com/Media/BrandFull/safari-pinned-tab.svg?version=639260136446764345" color="#5bbad5">
127
128    <!--====== Required meta tags ======-->
129    
130    
131
132
133<meta name="title" content="السعودية | الموضة والرفاهية">
134<meta name="description">
135<meta name="keywords">
136
137<meta itemprop="name" content="السعودية | الموضة والرفاهية">
138<meta itemprop="description">
139<meta itemprop="image" content="https://cdn.brandfull.com/Media/BrandFull/social-logo.png?version=639260136446764345">
140
141<meta property="og:url" content="https://brandfull.com/ar-sa/About/termsandcondition">
142
143
144<meta property="og:title" content="السعودية | الموضة والرفاهية">
145<meta property="og:description">
146<meta property="og:type" content="website">
147<meta property="og:image" itemprop="image" content="https://cdn.brandfull.com/Media/BrandFull/social-logo.png?version=639260136446764345">
148
149<meta name="twitter:card" content="summary_large_image">
150<meta name="twitter:title" content="السعودية | الموضة والرفاهية">
151<meta name="twitter:description">
152<meta name="twitter:creator" content="Brandfull">
153<meta name="twitter:image" content="https://cdn.brandfull.com/Media/BrandFull/social-logo.png?version=639260136446764345">
154
155
156
157<link rel="canonical" href="https://brandfull.com/ar-sa/About/termsandcondition"/>
158
159
160    
161
162    
163
164<script type="application/javascript">
165    var m_loadIndex = 0;
166    var m_listScript = [];
167
168    // GTM's snippet used to create this at head-parse time; it is deferred now (see the
169    // <template id="UI_headScript"> injector at the bottom of this file), and
170    // Tools/Deferred/ThirdParty.js -- the only other place that declares the name -- is fetched
171    // on idle. Anything touching bare `dataLayer` before either arrives throws a ReferenceError,
172    // and a Portal-authored blob does exactly that from inside a doLoadScript callback, which
173    // fires long before both. Seed the array here: GTM's own `w[l] = w[l] || []` adopts THIS
174    // array, so events pushed before gtm.js loads are still replayed rather than lost.
175    // Safe against every later writer -- `var dataLayer;` in ThirdParty.js keeps the existing
176    // value (a var redeclaration of a live global does not reset it), and doSetThirdParty only
177    // assigns when its argument is non-null.
178    window.dataLayer = window.dataLayer || [];
179
180    // On the CDN with every other script the app loads -- scriptPage.min.js, scriptGallery.min.js,
181    // Handlers/Pages/*.js, Tools/Deferred/ThirdParty.js. /InitData.js is the single exception and
182    // has to stay: it is generated per language and company by our own HostController.
183    //
184    // It MUST stay in step with the <link rel=preload as=script> in both themes' _Layout:
185    // doGetVersionedUrl appends the same ?v= the preload carries, so the two URLs match byte for
186    // byte and the preloaded bytes are the ones that run. Point one at the CDN and the other at this
187    // origin and the bundle is simply downloaded twice. Neither carries crossorigin, so both are
188    // no-cors fetches and the preload is reused -- adding it to one alone would split them again.
189    //
190    // m_CDNUrl is empty on any build that serves its own assets, so this is "/script.min.js"
191    // unchanged in local dev, and doCheckOwnAsset answers true either way (leading '/', or the
192    // m_cdnBase prefix), which is what keeps the ?v= and the async-and-first placement.
193    var defaultScript = "https://cdn.brandfull.com/script.min.js";
194    var m_isEnumReady = false;
195
196    // The whole-site blobs -- the category tree, the company and country lists, the enum translation
197    // dictionary -- served as one cacheable file by HostController instead of being inlined into
198    // every HTML response (~280 KB of a 784 KB page, the category tree alone 270 KB of it).
199    //
200    // On the CDN like every other script, even though this one is an MVC route rather than a file --
201    // so is scriptPage.min.js, which has always been served from there. The response is a pure
202    // function of (lang, v): HostController composes it from statics keyed on nothing else, and the
203    // action drops the Set-Cookie headers the middleware seeds, which is what a CDN refuses to cache
204    // against.
205    //
206    // The language is in the URL because a script element sends no custom headers, so the `lang`
207    // header the rest of the app rides on is not available to it - and it is a PATH segment rather
208    // than ?lang= so that a CDN cannot cache one language and serve it to every visitor. See
209    // SettingManager.doGetInitDataPath, which the preload in _Layout builds from too.
210    //
211    // ?v= is written here rather than left to doGetVersionedUrl, and it is m_version -- the API's
212    // data version -- because this file IS API data: the category tree, the company and country
213    // lists, the enum translations. An /AutoRefresh that changes them without a redeploy has to
214    // change this url, and the build token would not move. doGetVersionedUrl sees the v= and adds
215    // nothing, so this stays byte-identical to the preload in _Layout, which spells it the same way.
216    var m_initDataUrl = "https://cdn.brandfull.com/InitData.ar.js?v=639260136446764345";
217
218    // Where the fold is, straight from the value doGenerateContentfull (called in _LayoutPreload)
219    // used to pick which div templates to inline and which image to preload. One number, one
220    // definition (SettingManager.m_foldHeight). The client no longer walks the fold to decide which
221    // sections reserve a height -- every un-hydrated section holds the same 320px floor -- but the
222    // value is still read by the div loader, so it stays emitted here.
223    var m_foldHeight = 700;
224
225    // event.persisted == restored from the back/forward cache: the whole page came back frozen from
226    // memory, so nothing re-ran and m_currentCart still holds whatever it held when the visitor left.
227    // This used to call document.location.reload(), which fixed the staleness by throwing away the
228    // free instant restore -- re-downloading script.min.js, re-binding every Knockout template and
229    // re-issuing the div-section calls, on every single back navigation.
230    // doInitDataPageCart() re-fetches just the cart (CartService.GetInitData) and repopulates
231    // m_currentCart, which is what the header badge, the drawer and the totals all read. Its default
232    // arguments (reloadPage = false, url = '') mean it never navigates or reloads.
233    window.addEventListener('pageshow', function(event) {
234        if (!event.persisted)
235            return;
236        // Guard: the handler is created in the doLoadScript callback below. A restore always implies a
237        // fully-initialised page, but a restore racing a failed script load would otherwise throw here.
238        if (typeof m_handlerSession == "object" && m_handlerSession != null)
239            m_handlerSession.doInitDataPageCart();
240    });
241
242    function doLoadReady(url) {
243        var item = m_listScript.find(item => item._url == url);
244        if (item._isLoaded == false)
245        {
246            item._isLoaded = true;
247            doRunOnReady(url, true);
248        }
249    }
250
251    var m_cdnBase = "https://cdn.brandfull.com";
252
253    // The BUILD's token (SettingManager.m_assetVersion), not the API's data version. It buys nothing
254    // here to spend a thought on which: the bundles this versions ship with the binary, and the one
255    // url that is API data -- /InitData.js -- carries its own ?v= already, which doGetVersionedUrl
256    // leaves alone. Read the comment on SettingManager.m_assetVersion for why the two were split:
257    // versioning script.min.js with a number the API owns meant a front-only deploy re-served the
258    // same immutable url, and visitors ran an old bundle behind new markup.
259    var m_assetVersion = "639260136226636726";
260
261    // Free-shipping teaser sentences, whole rather than assembled from labels. The teaser used to be
262    // built in the view out of "You already have" + a number + "off your shipping" + ..., and the
263    // translation service sees each fragment alone: "off your shipping" came back as the imperative
264    // "انزل من شحنك" ("get off your shipment"), and the Arabic sentence read as nonsense. One label per
265    // sentence gives the translator the whole clause and lets it place the number itself, which RTL
266    // needs. Substitution is doGetShipmentTeaserMessage in Handler_Session. Json.Serialize, not bare
267    // quotes: these strings are machine-translated and may legitimately contain a quote.
268    var m_textShipmentTeaserSaved = "\u0644\u0642\u062F \u0648\u0641\u0631\u062A {0} {1} \u0645\u0646 \u062A\u0643\u0644\u0641\u0629 \u0627\u0644\u0634\u062D\u0646";
269    var m_textShipmentTeaserDiscount = "\u0644\u062F\u064A\u0643 \u0628\u0627\u0644\u0641\u0639\u0644 \u062E\u0635\u0645 \u0634\u062D\u0646";
270    var m_textShipmentTeaserTopUp = "\u0623\u0636\u0641 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 {0} {1} \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0634\u062D\u0646 \u0645\u062C\u0627\u0646\u064A";
271
272    // Is this one of our own assets, as opposed to a third-party SDK?
273    //
274    // The old test was `url.indexOf('@SettingManager.m_CDNUrl') == -1`. m_CDNUrl is an empty
275    // string whenever the app serves its own assets (local dev, and any deployment without a
276    // separate CDN host) -- and "anything".indexOf("") is 0, never -1. Every URL therefore
277    // looked like ours, which mattered because the branches below both version the URL and
278    // choose defer-vs-async from this answer.
279    // A root-relative URL is same-origin by definition, and it is answered before the CDN test:
280    // /InitData.js is served by our own HostController, never by the CDN host, so with a CDN
281    // configured the old form called it third-party -- which skipped the ?v= cache-bust that is the
282    // only thing invalidating it across deploys.
283    function doCheckOwnAsset(url) {
284        if (url.charAt(0) === '/')
285            return true;
286        return m_cdnBase ? url.indexOf(m_cdnBase) === 0 : false;
287    }
288
289    // Cache-bust our own assets so a deploy is actually picked up, and never touch a
290    // third-party URL: several already carry a query string (Google Maps key/callback,
291    // MISPay authorize, Checkout.com), and a second "?" makes them malformed.
292    function doGetVersionedUrl(url) {
293        if (!doCheckOwnAsset(url))
294            return url;
295
296        // Already versioned by the server -- /InitData.js, which is API data and so carries
297        // m_version rather than the build token. Appending a second v= here would both make it a
298        // different url from the <link rel=preload> in _Layout (two downloads of the same file) and
299        // hand the server two values for one parameter.
300        if (url.indexOf('?v=') !== -1 || url.indexOf('&v=') !== -1)
301            return url;
302
303        return url + (url.indexOf('?') === -1 ? '?' : '&') + 'v=' + m_assetVersion;
304    }
305
306    function doLoadScript(callBack, url = defaultScript, isModule = false) {
307        var item = m_listScript.find(item => item._url == url);
308        if (!item) {
309            item = { _isReady: false, _url: url, _callBack: [callBack], _isLoaded: false };
310            m_listScript.push(item);
311            
312            var script = document.createElement("script");
313            if (typeof callBack == "function" && !isModule)
314                script.type = "application/javascript";
315            else {
316                script.type = "module";
317                script.innerText = (callBack + "").replace("URL", url);
318            }
319            script.src = doGetVersionedUrl(url);
320            
321            //script.defer = true;
322            script.charset = "utf-8"; 
323            script.addEventListener('load', function () {
324                doLoadReady(url);
325            });
326
327            script.onerror = function () {
328                item._isError = true;
329                console.log("Error loading " + url);
330                // Never leave the queue standing behind a script that is not coming. doRunOnReady
331                // steps over errored items when it picks the head, but nothing else would wake it,
332                // and for /InitData.js this is also what releases doSetEnumManager's fallback.
333                doRunOnReady(url, true);
334            };
335
336            try {
337                // Third-party SDKs are deferred and appended; ours are async and put first so
338                // they start downloading as early as possible.
339                if (!doCheckOwnAsset(url))
340                {
341                    script.defer = true;
342                    document.head.appendChild(script);
343                }
344                else{
345                    script.async = true;
346                    var head = document.getElementsByTagName("head")[0];
347                    head.insertBefore(script, head.firstChild);
348                }
349            } catch (error) {
350                //once load before
351                console.log(error);
352                setTimeout(doRunOnReady, 1000, url, true);
353                return false;
354            }
355        }
356        else if (item._isReady === true) {
357            // Synchronous, because the script this callback waited for has already loaded. That is
358            // exactly the state an ajax view swap runs in: doHtmlSetInner evaluates the swapped-in
359            // page's inline block, it calls doLoadScript for a bundle that is already _isReady, and
360            // the callback runs right here, inside that eval. doLoadViewAjax now compares
361            // X-Asset-Version against m_assetVersion and navigates instead of swapping, so a skew
362            // introduced by the RESPONSE no longer reaches this line -- see doRunCallBack below for
363            // what still does.
364            if (typeof callBack == "function")
365                doRunCallBack(callBack);
366        }
367        else {
368            item._callBack.push(callBack);
369        }
370    }
371
372    // Run one page callback, and treat a missing symbol as a bundle that cannot serve this markup.
373    //
374    // A ReferenceError out of a page's own callback -- "doFinishPaintEarly is not defined",
375    // "doSetHandlerPageScroller is not defined" -- is never a typo in the view: those calls sit INSIDE a
376    // doLoadScript callback, so the bundle demonstrably arrived. It means the bundle that arrived is
377    // an OLD build. A tab held open across a deploy keeps the script.min.js it loaded then, and an
378    // ajax swap pulls markup from the server as it is NOW; ?v= cannot repair that, because the swap
379    // never re-loads the bundle and the old one is already parsed. A stale or failed
380    // Handlers/Pages/*.js throws the identical error and is fixed by the identical answer.
381    //
382    // Second line of defence since doLoadViewAjax gained its X-Asset-Version check, which stops the
383    // skew before anything is swapped. What still lands here is what no response header can see: a
384    // stale or failed Handlers/Pages/*.js, a bundle the CDN served old under a current ?v=, and the
385    // one navigation per build doClaimBuildNavigation lets through so a mixed fleet cannot ping-pong.
386    //
387    // The answer is to stop and let the browser fetch the document properly: the new document carries
388    // a new m_assetVersion, and every ?v= in it then points at the matching build.
389    //
390    // Keyed on m_assetVersion so it cannot loop -- the flag records the build we already reloaded
391    // for, so a genuine bug in the current build reloads once and then stops. A storage failure
392    // (Safari private mode) means no flag can be kept, so it does not reload at all.
393    function doReloadOnceForBuild() {
394        try {
395            if (sessionStorage.getItem('bundleReload') == m_assetVersion)
396                return false;
397            sessionStorage.setItem('bundleReload', m_assetVersion);
398        }
399        catch (storageError) { return false; }
400        window.location.reload();
401        return true;
402    }
403
404    function doRunCallBack(callBack) {
405        try {
406            callBack();
407        }
408        catch (error) {
409            console.log(error);
410            if (!(error instanceof ReferenceError))
411                return;
412            doReloadOnceForBuild();
413        }
414    }
415
416    // /InitData.js carries the 111 enums, m_jsonTranslate and the three jsonList* blobs. It is
417    // fetched, not inlined, so it can fail -- and if it does, every one of those globals is missing
418    // and nothing on the page would ever run. Deliberately keyed on _isError and not on a timeout,
419    // so a slow file is waited for rather than given up on.
420    function doCheckInitDataFailed() {
421        var item = m_listScript.find(item => item._url == m_initDataUrl);
422        return item ? item._isError === true : false;
423    }
424
425    function doSetEnumManager(url) {
426        // TranslateEnum used to arrive with script.min.js and only m_jsonTranslate came from
427        // /InitData.js. The enums moved there too, so both tests now answer the same question --
428        // "has /InitData.js landed" -- and are asked together. Neither says anything about the
429        // bundle any more; that is what the doApplyTranslations test further down is for.
430        //
431        // Not here yet -> "not yet". Gone for good -> RELOAD, once per build, on the same
432        // sessionStorage guard doRunCallBack uses. Standing empty objects up is no longer a
433        // degraded-but-working page the way it was when the enums were in the bundle: every page on
434        // the site has a binding that reads one, so an empty stand-in trades one failed request for
435        // a page of failed bindings. A reload is the only thing that can actually fix it, and the
436        // guard is what stops it looping.
437        //
438        // If the reload has already been spent on this build (or sessionStorage is unavailable, as
439        // in Safari private mode), fall through to the old behaviour: empty lists, keys for labels,
440        // no category menu. Worse than it was, but still a page.
441        if (typeof TranslateEnum != "object" || typeof m_jsonTranslate != "object") {
442            if (!doCheckInitDataFailed())
443                return false;
444            if (doReloadOnceForBuild())
445                return false;
446
447            if (typeof TranslateEnum == "undefined") TranslateEnum = {};
448            if (typeof m_jsonTranslate != "object") m_jsonTranslate = {};
449            if (typeof jsonListCategory == "undefined") jsonListCategory = [];
450            if (typeof jsonListCompany == "undefined") jsonListCompany = [];
451            if (typeof jsonListCountry == "undefined") jsonListCountry = [];
452        }
453
454        // Comes from _LayoutScriptTail at the foot of the document. Same "not yet" answer as the
455        // tests above: doRunOnReady waits on DOMContentLoaded, which is the instant it comes into
456        // being.
457        //
458        // Never write a literal body tag in a comment inside an inline script. doLoadViewAjax
459        // pulls a full-page ajax response apart by searching the TEXT for one, so a mention in
460        // the head matches 20 KB before the real element and the rest of this script gets
461        // written into the page as visible text. That shipped. Ajax.ts no longer scans for it,
462        // but the phrasing here stays deliberate.
463        // doApplyTranslations comes from script.min.js (Tools/Enums.ts). Nothing above tests for the
464        // bundle any more: TranslateEnum moved to /InitData.js with the other 110 enums, so the
465        // TranslateEnum test now proves /InitData.js landed and says nothing about the bundle. Without
466        // this, /InitData.js winning the race against the bundle threw
467        // "doApplyTranslations is not defined" out of the try below on every such load.
468        if (typeof doApplyTranslations != "function" || typeof doApplySettingByCompany != "function")
469            return false;
470
471        try {
472            doApplyTranslations(m_jsonTranslate);
473            doApplySettingByCompany();
474        } catch (error) {console.log(error);  return false;}
475
476        m_isEnumReady = true;
477        return true;
478    }
479
480
481    // Nothing may run before the document has finished parsing, and the two things that gate a
482    // callback resolve on their own events: doApplySettingByCompany appears when the parser reaches
483    // _LayoutScriptTail, and TranslateEnum / m_jsonTranslate appear when script.min.js and
484    // /InitData.js load. So this is entirely event-driven -- there is no timer left in it.
485    //
486    // It used to be setTimeout(..., sleepTime) with sleepTime += 50 on every miss -- 50, 100, 150,
487    // 200 -- and the escalated value was then carried into the readyState test and into the
488    // queue-order test, where scriptPage.min.js polled behind script.min.js on its own growing timer.
489    // Dead latency sitting in front of doSetSetting, i.e. in front of the page's bind, and the page
490    // gate charges every millisecond of it to LCP.
491    //
492    // The `url` argument is now only a hint about WHY we were woken. What actually runs is decided by
493    // walking the queue from its head, which is what makes the ordering safe no matter which script
494    // wins the race: whoever arrives last finds everything before it already loaded and drains the
495    // lot. Draining only `url` would deadlock -- the head could be ready with nobody left to notice.
496    function doRunOnReady(url, byscript = false) {
497        if (document.readyState === "loading") {
498            document.addEventListener('DOMContentLoaded', function () { doRunOnReady(url, byscript); }, { once: true });
499            return ;
500        }
501
502        // Still missing a dependency. Do NOT schedule a retry: every one of them arrives on a load
503        // event that calls straight back in here.
504        if(m_isEnumReady == false && !doSetEnumManager(url))
505            return ;
506
507        try {
508            //console.log("ByScript " + byscript + ", " + url + "  "+document.readyState)
509            for (;;) {
510                // The head of the queue: the first script still owing its callbacks. One that failed
511                // to load is stepped over rather than left at the head -- it is never becoming ready,
512                // and leaving it there would wedge everything behind it.
513                var item = m_listScript.find(x => x._isReady == false && x._isError != true);
514
515                // Nothing waiting, or the head has not arrived yet -- and callbacks run in request
516                // order, so anything behind it waits for its load event.
517                if (!item || item._isLoaded != true)
518                    return ;
519
520                while (item._callBack.length != 0) {
521                    var callBack = item._callBack.shift();
522                    // Detached by setTimeout, so the try around this loop never sees what the
523                    // callback throws -- doRunCallBack is the only thing that can.
524                    if (typeof callBack == "function")
525                        setTimeout(doRunCallBack, 0, callBack);
526                }
527
528                item._isReady = true;
529                //console.log("ByScript " + item._url + "  is passed")
530            }
531        }catch (error) {
532            console.log(error);
533        }
534    }
535
536</script>
536
537
538    
538<script>
539        function doGetBrowserName() {
540            var nAgt = navigator.userAgent;
541            var browserName = navigator.appName;
542            var nameOffset, verOffset;
543
544            if ((verOffset = nAgt.indexOf("OPR/")) != -1)
545                browserName = "Opera";
546            else if ((verOffset = nAgt.indexOf("Opera")) != -1)
547                browserName = "Opera";
548            else if ((verOffset = nAgt.indexOf("MSIE")) != -1)
549                browserName = "Microsoft Internet Explorer";
550            else if ((verOffset = nAgt.indexOf("Chrome")) != -1)
551                browserName = "Chrome";
552            else if ((verOffset = nAgt.indexOf("Safari")) != -1)
553                browserName = "Safari";
554            else if ((verOffset = nAgt.indexOf("Firefox")) != -1)
555                browserName = "Firefox";
556            else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) <
557                (verOffset = nAgt.lastIndexOf('/'))) {
558                browserName = nAgt.substring(nameOffset, verOffset);
559                if (browserName.toLowerCase() == browserName.toUpperCase())
560                    browserName = navigator.appName;
561            }
562            return browserName;
563        }
564
565        function doGetSystemInfo() {
566            var browserName = doGetBrowserName();
567            var nav = navigator || {};
568            var scr = (typeof screen != "undefined") ? screen : {};
569            var data = decodeURI(window.location.href) + "#" + browserName + "#" + nav.platform + "#"
570                + "\nUA: " + nav.userAgent
571                + "\nViewport: " + window.innerWidth + "x" + window.innerHeight + " @" + (window.devicePixelRatio || 1) + "x"
572                + "\nScreen: " + (scr.width || "?") + "x" + (scr.height || "?")
573                + "\nLang: " + (nav.language || "?") + " | Online: " + nav.onLine + " | Mem: " + (nav.deviceMemory ? nav.deviceMemory + "GB" : "?")
574                + "\nReferrer: " + document.referrer;
575            return data;
576        }
577
578        // Client-side dedupe. The hash identifies the *fault*, not the visit: page URLs,
579        // line/col and cache-busting query strings are deliberately left out, so the same
580        // error raised on 500 product pages collapses to one hash and is posted once.
581        // Kept in localStorage so it also survives reloads and in-app-browser page hops --
582        // repeat visits from the same device stop re-posting a fault we already have.
583        var m_sentHash = {};                 // this page load; still works when storage is blocked
584        var m_hashKey = "errHash", m_hashMax = 100;
585
586        function doGetStackSignature(stack) {
587            var lines = ("" + stack).split("\n"), out = [], i, m;
588            for (i = 0; i < lines.length && out.length < 5; i++) {   // 5 frames: deep recursion collapses
589                m = lines[i].match(/^\s*at\s+([^\s(]+)/)             // Chrome/Edge: "    at doFoo (url:1:2)"
590                 || lines[i].match(/^\s*([^\s@]+)@/);              // Safari/Firefox: "doFoo@url:1:2"
591                if (m && m[1])
592                    out.push(m[1]);
593            }
594            return out.join(">");
595        }
596
597        function doGetHash(text) {
598            var h = 0x811c9dc5;              // FNV-1a, 32-bit
599            for (var i = 0; i < text.length; i++) {
600                h ^= text.charCodeAt(i);
601                h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0;
602            }
603            return h.toString(36);
604        }
605
606        // true = already reported, skip. Marks as seen on first call.
607        function doCheckSentBefore(hash) {
608            if (m_sentHash[hash] === true)
609                return true;
610            m_sentHash[hash] = true;
611            var list = [];
612            try { list = (localStorage.getItem(m_hashKey) || "").split(","); } catch (e) { }
613            if (list.indexOf(hash) != -1)
614                return true;
615            list.push(hash);
616            if (list.length > m_hashMax)     // bounded ring, oldest hashes fall off
617                list = list.slice(list.length - m_hashMax);
618            try { localStorage.setItem(m_hashKey, list.join(",")); } catch (e) { }
619            return false;
620        }
621
622        function doReportError(kind, message, source, lineno, colno, error) {
623            var msgStr = (message == null) ? "" : ("" + message);
624            if (msgStr == "Script error." || msgStr.indexOf("_AutofillCallbackHandler") != -1)
625                return;
626            // Third-party noise, not our code -> ignore. Six families:
627            //  1. In-app browsers (Meta/IG/FB/Snapchat) inject native bridges that throw in non-native webviews.
628            //  2. Android/iOS WebView bridge objects get torn down on navigation ("Java object is gone").
629            //  3. Injected analytics (GTM Custom HTML tags) throw from their own host, not ours.
630            //  4. Browser reader-mode shims (Brave/Firefox iOS inject window.__firefox__) throw before .reader exists.
631            //  5. MS Office/Outlook link-handler bridge rejects on a torn-down object id, on pages opened from email.
632            //  6. TikTok/Bytedance webview (musical_ly UA, FalconTag) injects its own script that handshakes
633            //     with a parent iframe bridge that doesn't exist in the ad-preview dialog.
634            var stackStr = (error && error.stack) ? ("" + error.stack) : "";
635            var noise = [
636                "window.webkit.messageHandlers", // iOS webkit bridge (Meta/IG/FB)
637                "WebJSBridge",                   // Snapchat bridge
638                "sendDataToNative",
639                "sendPageShowMessage",
640                "Java object is gone",           // Android WebView bridge torn down (IG keyboard/nav loggers)
641                "googletagmanager.com",          // GTM Custom HTML tags
642                "__firefox__",                   // Brave/Firefox iOS reader-mode injection
643                "Object Not Found Matching Id:", // MS Office/Outlook bridge, e.g. "...Id:6, MethodName:update, ParamCount:4"
644                "iframeBridge",                  // TikTok FalconTag handshake into a parent bridge that isn't there
645                "user-script:"                   // frames from webview-injected scripts (TikTok/Bytedance); ours are https:// URLs
646            ];
647            var haystack = msgStr + "\n" + stackStr + "\n" + (source == null ? "" : source);
648            for (var i = 0; i < noise.length; i++)
649                if (haystack.indexOf(noise[i]) != -1)
650                    return;
651            // In-app browsers run injected scripts under a private "<name>js://" URL scheme
652            // (iabjs:// = Instagram). Our own code only ever runs from http(s):// -> any *js:// frame is theirs.
653            if (/[a-z0-9_]+js:\/\//i.test(stackStr))
654                return;
655            // ServiceWorker registration failing to *fetch the script* (AbortError) = in-app browsers /
656            // blocked-storage contexts that can't install a SW. Benign, non-actionable. Deliberately narrow:
657            // real breakage (bad HTTP 404, SecurityError, parse error) has a different message and still logs.
658            if (msgStr.indexOf("Failed to register a ServiceWorker") != -1 && msgStr.indexOf("fetching the script") != -1)
659                return;
660            // Benign network/fetch-abort promise rejections (flaky mobile networks, in-app browsers,
661            // navigation aborting an in-flight request, blocked third-party trackers). No stack, not
662            // actionable. Scoped to promise rejections so real TypeErrors in our code still log.
663            if (kind == "promise" && (msgStr == "Load failed"
664                || msgStr.indexOf("Failed to fetch") != -1
665                || msgStr.indexOf("NetworkError") != -1
666                || msgStr.indexOf("network connection was lost") != -1
667                || msgStr.indexOf("cancelled") != -1
668                || msgStr.indexOf("appears to be offline") != -1))
669                return;
670            // Benign browser notice, not an exception: an observer callback resized things again, so the
671            // browser deferred the remaining notifications to the next frame. Comes from third-party
672            // swiper/animation code, has no stack, and nothing breaks. Both wordings ("loop limit exceeded"
673            // = Chrome, "loop completed with undelivered notifications" = Safari/Chrome) are the same event.
674            if (msgStr.indexOf("ResizeObserver loop") != -1)
675                return;
676            var parameters = {};
677            try {
678                var name = (error && error.name) ? error.name : "";
679                var realMsg = (error && error.message) ? error.message : msgStr;
680                var stack = (error && error.stack) ? error.stack : "(no stack available)";
681                parameters["_exceptionMessage"] = "[" + kind + "] " + (name ? name + ": " : "") + realMsg;
682                parameters["_methodName"] = source + "  --  Row N° " + lineno + " Col N° " + colno;
683                parameters["_exception"] = doGetSystemInfo() + "\n\n" + stack;
684
685
686                if (typeof doSendAjax == "function") {
687                    var hash = doGetHash(kind + "|" + name + "|" + realMsg + "|" + doGetStackSignature(stack));
688                    if (!doCheckSentBefore(hash))
689                        doSendAjax(RequestCode.SystemService.SaveExceptionJS, ko.toJSON(parameters), null, null);
690                }
691                            }
692            catch (e) { console.log(e); }
693        }
694
695        window.onerror = function doErrorHandler(message, source, lineno, colno, error) {
696            doReportError("onerror", message, source, lineno, colno, error);
697            return true;
698        };
699
700        window.addEventListener('unhandledrejection', function (e) {
701            var reason = e ? e.reason : null;
702            var msg = (reason && reason.message) ? reason.message : ("" + reason);
703            doReportError("promise", msg,
704                (reason && reason.fileName) || "",
705                (reason && reason.lineNumber) || 0,
706                (reason && reason.columnNumber) || 0,
707                reason);
708        });
709    </script>
vendor: 2 bytes, line 709
709
710<script type="application/javascript">
711    m_isCrawlByBot = 'True' == 'True';
712
713    window.addEventListener('resize', function()
714    {
715        if(typeof m_handlerLayout != "object" || m_handlerLayout == null)
716            return;
717
718        if(typeof m_handlerLayout.m_isViewMobile == "function")
719            m_handlerLayout.m_isViewMobile('False' == 'True' || window.innerWidth < 768);
720
721        if(typeof m_handlerLayout.m_isMenuMobile == "function")
722            m_handlerLayout.m_isMenuMobile(window.innerWidth < 992);
723    });
724
725
726    window.doOpenCropper = function (handler, folder, item) {}
727
728    // Requested FIRST, so it sits at the head of m_listScript and no page callback can run before its
729    // globals exist -- doSetEnumManager reads m_jsonTranslate, and the callback below reads all three
730    // jsonList* blobs. It carries no callback of its own; being in the queue is the whole point.
731    // It is a parallel fetch, not a serial one: it goes out alongside script.min.js, and the bundle is
732    // the bigger of the two.
733    doLoadScript(function () { }, m_initDataUrl);
734
735    doLoadScript(function () {
736        m_version = '639260136446764345';
737        doSetSetting('https://brandfullsapi.azurewebsites.net', 'ar', 'sa', 'https://cdn.brandfull.com', 'BrandFull', "", "{\u0022_bundleSelectPercentage\u0022:40,\u0022_addCartQuantityLimit\u0022:\u0022100\u0022,\u0022_showObjectHtml\u0022:true,\u0022_showObjectExtras\u0022:true,\u0022_showObjectIsReturnable\u0022:true,\u0022_showObjectCounter\u0022:true,\u0022_showObjectDeliveryTime\u0022:false,\u0022_returnPolicyDays\u0022:\u00227\u0022,\u0022_returnPolicyFees\u0022:0,\u0022_returnPolicyMethod\u0022:0,\u0022_returnPolicyRefundType\u0022:0,\u0022_returnPolicyCountry\u0022:\u0022SA\u0022,\u0022_isBarCodeOptional\u0022:true,\u0022_allowPriceSaleAbovePriceRegulare\u0022:true}");
738
739        
740        if (doGetParamFromURL('Cookies') == "delete")
741        {
742            doSetCookie('cart', null, 1);
743            doGetSessionID();
744
745            doRemoveURLParam("Cookies");
746        }
747
748        m_handlerSession = new Handler_Session();
749        m_handlerSession.doInitData(jsonListCompany, jsonListCountry);
750        doSetHandlerSession(m_handlerSession);
751        m_handlerLayout = new Handler_Layout();
752        m_handlerLayout.m_isViewMobile('False' == 'True' || window.innerWidth < 768);
753        m_handlerLayout.doInitData(jsonListCategory);
754        m_handlerLayout.m_currentCategoryShortName('');
755        m_handlerLayout.m_search("");
756        doSetHandlerLayout(m_handlerLayout);
757
758
759    });
760
761    // scriptPage.min.js -- bootstrap.bundle plus the Google-Maps position helper -- is NOT requested
762    // here any more. It was, on every page, with the empty callback this comment replaced: nothing
763    // waited on it, so 82 KB was parsed and compiled on the main thread ahead of the page's bind for
764    // no reader. Its entire consumer surface is interaction-driven: bootstrap.Modal (Tools/Html.ts),
765    // bootstrap.Collapse (Handler_PageCheckout), doGetCurrentPosition, and the data-api attributes in
766    // the markup -- dropdown, collapse, tab, dismiss. None of it runs at load.
767    //
768    // Defined here rather than in the bundle because callers reach it from inline script.
769    var m_pageScriptUrl = "https://cdn.brandfull.com/scriptPage.min.js";
770
771    function doLoadPageScript(callBack = function () { }) {
772        doLoadScript(callBack, m_pageScriptUrl);
773    }
774
775    // Google Maps, requested once per document rather than once per view.
776    //
777    // doLoadScript dedupes by exact url string, and five views asked for Maps with four different
778    // strings -- two callback names (doInitMap, doInitGoogleMap), and Page_CreateSupport on
779    // maps.google.com rather than maps.googleapis.com, without libraries=places. Ajax navigation
780    // never reloads the document, so visiting two of those pages in one session appended two script
781    // tags for the same library: "You have included the Google Maps JavaScript API multiple times",
782    // followed by the custom elements it registers being defined twice
783    // (Element with name "gmp-internal-dialog" already defined).
784    //
785    // So: one url, and one name for Google to call. Pages hand their own initializer to
786    // doLoadGoogleMaps instead of naming it in a query string. Note the initializer
786s are read at
787    // call time, which is what keeps Page_About and Page_CreateSupport from fighting over the
788    // window.doInitGoogleMap they both define -- each view's inline block re-runs on its own ajax
789    // swap, so the one queued is always the current page's.
790    var m_googleMapUrl = "https://maps.googleapis.com/maps/api/js?libraries=places&key=AIzaSyBELKgTURcJMCbnFgFY4aizo0dbwokRqU4&callback=doGoogleMapsReady&loading=async&language=ar";
791    var m_isGoogleMapsReady = false;
792    var m_listGoogleMapsReady = [];
793
794    // The single name in the url above. Global because Google resolves it off window.
795    function doGoogleMapsReady() {
796        m_isGoogleMapsReady = true;
797        while (m_listGoogleMapsReady.length > 0)
798            doRunCallBack(m_listGoogleMapsReady.shift());
799    }
800
801    function doLoadGoogleMaps(callBack = function () { }) {
802        // scriptPage.min.js first: every page initializer this fans out to reaches into
803        // _Js/GoogleMapGetCurrentLocation.js -- doInitMap is defined there outright, and
804        // Page_About / Page_CreateSupport push into the `markers` array it declares.
805        doLoadPageScript(function () {
806            if (m_isGoogleMapsReady) {
807                doRunCallBack(callBack);
808                return;
809            }
810
811            m_listGoogleMapsReady.push(callBack);
812            doLoadScript(function () { }, m_googleMapUrl);
813        });
814    }
815
816    // Bootstrap installs its data-api listeners on document when it evaluates, so a click that lands
817    // before the file does is a click that does nothing. Hence arming on the earliest signals a real
818    // visitor produces -- hover and scroll both precede the first tap far more often than not -- and
819    // not merely on the click itself. Capture phase so a stopPropagation somewhere cannot hide them.
820    //
821    // The load-event fallback is for the visitor who reads without touching anything. It is behind
822    // `load` on purpose: an idle callback armed any earlier competes with the page's own bind for the
823    // main thread, which is the cost this whole change exists to remove.
824    (function () {
825        var isArmed = false;
826
827        function doArmPageScript() {
828            if (isArmed)
829                return;
830            isArmed = true;
831            doLoadPageScript();
832        }
833
834        var listEvent = ['pointerover', 'pointerdown', 'touchstart', 'keydown', 'scroll'];
835        for (var i = 0; i < listEvent.length; i++)
836            window.addEventListener(listEvent[i], doArmPageScript, { capture: true, once: true, passive: true });
837
838        window.addEventListener('load', function () {
839            if (typeof window.requestIdleCallback == "function")
840                window.requestIdleCallback(doArmPageScript, { timeout: 3000 });
841            else
842                setTimeout(doArmPageScript, 1000);
843        });
844    })();
845
846    // The Portal's head hook -- GTM, and through GTM's Custom HTML tags the Facebook, Snapchat and
847    // TikTok pixels -- injected on the same signals as scriptPage.min.js instead of parsed inline.
848    //
849    // It used to sit below this script as raw markup, which meant every visitor parsed, compiled and
850    // EXECUTED a tag manager plus three pixels before the browser had seen a single byte of <body>.
851    // Measured on the Blends home page: TBT 1,700ms, FCP 3.3s, and three rounds of asset trimming
852    // ahead of this moved FCP by 0.1s because none of them touched the thing actually holding the
853    // main thread. The error-swallow list at the top of this file already names googletagmanager.com
854    // and the Snapchat WebJSBridge -- the cost was known, only its timing was not.
855    //
856    // A <template> because its content is INERT: the parser builds the nodes but runs no script and
857    // fetches no src, which is the whole point. innerHTML would have been inert too, but only by
858    // accident and only for scripts -- an <img> in the blob would still have been fetched.
859    (function () {
860        var isArmed = false;
861        var isInjected = false;
862
863        function doInjectHeadScript() {
864            if (isInjected)
865                return;
866            isInjected = true;
867
868            var holder = document.getElementById('UI_headScript');
869            if (!holder)
870                return;
871
872            var fragment = holder.content.cloneNode(true);
873            var listNode = Array.prototype.slice.call(fragment.childNodes);
874
875            for (var i = 0; i < listNode.length; i++) {
876                var node = listNode[i];
877
878                // A 
878<script> moved out of a template stays inert -- "already started" is not the
879                // flag, but a parser-inserted script that was never executed will not execute on
880                // insertion either. It has to be re-created as a fresh element.
881                if (node.nodeName == 'SCRIPT') {
882                    var script = document.createElement('script');
883                    for (var a = 0; a < node.attributes.length; a++)
884                        script.setAttribute(node.attributes[a].name, node.attributes[a].value);
885                    script.text = node.text;
886
887                    // async=false on a DYNAMICALLY created script means "in-order", not "blocking":
888                    // externals then execute in insertion order relative to each other. GTM's inline
889                    // snippet seeds window.dataLayer and must run before gtm.js reads it, and the
890                    // default async=true would have let that race.
891                    if (script.src)
892                        script.async = false;
893
894                    document.head.appendChild(script);
895                }
896                else
897                    document.head.appendChild(node);
898            }
899        }
900
901        function doArmHeadScript() {
902            if (isArmed)
903                return;
904            isArmed = true;
905
906            // The blob calls doSetThirdParty (see Tools/ThirdPartyDefer.ts, which stubs that name
907            // for exactly this reason). The stub ships in script.min.js, which is fetched async, so
908            // waiting on its ready callback is what guarantees the call lands somewhere. In the old
909            // inline arrangement it did not: the blob ran at parse time, well before the bundle.
910            if (typeof window.doSetThirdParty == "function") {
911                doInjectHeadScript();
912                return;
913            }
914
915            doLoadScript(doInjectHeadScript);
916
917            // Backstop, because a callback registered on script.min.js never fires if that bundle
918            // errors -- and "the bundle failed" must not also mean "no analytics for that visit".
919            // doInjectHeadScript is idempotent, so whichever path arrives first wins.
920            setTimeout(doInjectHeadScript, 4000);
921        }
922
923        var listHeadEvent = ['pointerover', 'pointerdown', 'touchstart', 'keydown', 'scroll'];
924        for (var h = 0; h < listHeadEvent.length; h++)
925            window.addEventListener(listHeadEvent[h], doArmHeadScript, { capture: true, once: true, passive: true });
926
927        // WHEN the blob runs, and the reason it is not simply "on load, then idle" any more.
928        //
929        // Measured on the Blends home page: the tag manager and the pixels it injects through its
930        // Custom HTML tags cost 2,217 ms of main-thread CPU -- more than every first-party script
931        // on the page put together (1,944 ms). Five Google containers alone are 1,204 ms of that,
932        // then Facebook 417, Clarity 252, TikTok 137, Pinterest 110, Snapchat 97.
933        //
934        // The old trigger was `load` plus requestIdleCallback(timeout 3000). Both fire while the
935        // page is still doing its own work: `load` only means subresources finished, not that the
936        // bind and the div hydration have, and a 3-second timeout fires whether or not an idle slot
937        // ever appeared. So 2.2 seconds of vendor script landed on a main thread that was still
938        // building the page.
939        //
940        // "Stable" is defined here as the browser itself defines it -- no long task for a
941        // continuous stretch -- rather than as a delay someone picked. Every long task pushes the
942        // decision back; when the page finally goes quiet for m_headQuietMs the blob goes in on the
943        // next idle slot. That is the same shape as TTI with a shorter quiet window, which is the
944        // point: analytics should start as soon as the page has actually settled, not at a fixed
945        // time that is too early on a slow device and too late on a fast one.
946        //
947        // Interaction still wins outright, above: a visitor who is already touching the page has a
948        // usable page by definition, and their session is the one most worth recording.
949        var m_headQuietMs = 2000;      // continuous no-long-task stretch that counts as settled
950        var m_headCapMs = 10000;       // hard backstop -- see below
951        var m_headQuietTimer = null;
952
953        function doDelayHeadScript() {
954            clearTimeout(m_headQuietTimer);
955            m_headQuietTimer = setTimeout(function () {
956                if (typeof window.requestIdleCallback == "function")
957                    window.requestIdleCallback(doArmHeadScript, { timeout: 2000 });
958                else
959                    doArmHeadScript();
960            }, m_headQuietMs);
961        }
962
963        window.addEventListener('load', function () {
964            // A main thread that never goes quiet -- a slow device, a runaway third-party, a tab
965            // that stays busy -- must not mean no analytics at all for that visit. This fires
966            // regardless; doArmHeadScript is idempotent, so whichever path gets there first wins.
967            setTimeout(doArmHeadScript, m_headCapMs);
968
969            // longtask is Chromium-only. Where it is missing (Safari, Firefox) there is nothing to
970            // observe, so the quiet timer simply runs once from load and behaves like the old
971            // fixed delay -- degraded to the previous behaviour, not to no behaviour.
972            try {
973                if (typeof PerformanceObserver == "function"
974                    && PerformanceObserver.supportedEntryTypes
975                    && PerformanceObserver.supportedEntryTypes.indexOf('longtask') != -1) {
976                    new PerformanceObserver(function () {
977                        if (!isArmed)
978                            doDelayHeadScript();     // still busy -- restart the quiet window
979                    }).observe({ type: 'longtask', buffered: false });
980                }
981            }
982            catch (error) { console.log(error); }
983
984            doDelayHeadScript();
985        });
986    })();
987
988</script>
vendor: 2 bytes, line 988
988
989<script>
990    (function () {
991        // The reference file is NOT a stylesheet -- it opens with an HTML comment header and
992        // wraps the payload in <style>, exactly as the Portal field must. So it cannot be a
993        // <link>: the header would be a parse error and the tags are not CSS. Fetch it and
994        // hand the browser the same string @Html.Raw would have emitted.
995        var url = 'https://brandfull.com/Themes/Cartzilla/_Css/BrandFull/StyleCss_Script.reference.css?version=639260136446764345';
996
997        fetch(url, { cache: 'no-store' })
998            .then(function (response) {
999                if (!response.ok)
1000                    throw new Error('StyleCss_Script.reference.css -> HTTP ' + response.status);
1001
1002                return response.text();
1003            })
1004            .then(function (text) {
1005                // Take what is BETWEEN the tags. Assigning the raw text to innerHTML would put a
1006                // literal <style> inside a <style>, which parses as nothing at all.
1007                var match = /<style[^>]*>([\s\S]*?)<\/style>/i.exec(text);
1008                if (!match) {
1009                    console.warn('[StyleCss_Script test] no <style> block in ' + url);
1010                    return;
1011                }
1012
1013                // Appended to <head> AFTER the site bundle link, so a :root here outranks the
1014                // same :root in StyleApp.css -- the same seam the Portal value occupies.
1015                var style = document.createElement('style');
1016                style.id = 'UI_styleCssScriptTest';
1017                style.textContent = match[1];
1018                document.head.appendChild(style);
1019            })
1020            .catch(function (error) { console.warn('[StyleCss_Script test] ' + error.message); });
1021    })();
1022</script>
1022
1023<template id="UI_headScript">
1024<!-- Google Tag Manager -->
1025<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s);j.async=true;j.src="https://shn.brandfull.com/cjbruxijtzaj.js?"+i;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','ezx8gtx3=AwVHMz4kVSU%2BKzA3PSU0UxxcSFpbTxwbVwMIFQQNHgAGDVQXBQQ%3D');</script>
1025
1026<!-- End Google Tag Manager -->
1027
1028</template>
1029
1030</head>
1031
1032<body id="UI_body" style="overflow-y: clip;" class="noPadding">
1033
1034    
1035
1036
1037
1038
1039        <h1 class="seo-hidden">قواعد الضريبة</h1>
1040    <h2 class="seo-hidden"></h2>
1041
1042    
1042<script type="application/ld&#x2B;json">
1043        {
1044            "@context": "https://schema.org",
1045            "@type": "OnlineStore",
1046            "name": "Brandfull",
1047            "alternateName": "Brandfull",
1048            "description": "At Brandfull we believe in second chances and the thrill of discovering hidden treasures. Our journey began with a simple idea: to bring new life into pre-loved items while offering our customers unique finds that resonate with their individuality.",
1049            "knowsLanguage": "AR,EN",
1050            "sameAs": [
1051                "https://www.facebook.com/brandfullCom/",
1052                "https://twitter.com/brandful_l",
1053                "https://www.instagram.com/brandfull_ksa/",
1054                "https://api.whatsapp.com/send?phone=966592905003",
1055                "https://www.snapchat.com/add/brandful_l"
1056            ],
1057            "url": "https://brandfull.com",
1058            "logo": "https://brandfull.com/_Image/favicon.png","hasMerchantReturnPolicy":{"@type":"MerchantReturnPolicy","applicableCountry":"SA","returnPolicyCategory":"https://schema.org/MerchantReturnFiniteReturnWindow","merchantReturnDays":7,"returnMethod":"https://schema.org/ReturnByMail","returnFees":"https://schema.org/FreeReturn","refundType":"https://schema.org/FullRefund"}
1059        }
1060    </script>
1060
1061
1062    
1062<script type="application/ld&#x2B;json">
1063        {
1064            "@context": "https://schema.org",
1065            "@type": "ContactPoint",
1066            "@contactType": "Customer Service",
1067            "availableLanguage": "AR,EN",
1068            "email": "[email protected]",
1069            "telephone": "966592905003"
1070        }
1071    </script>
1071
1072    
1072<script type="application/ld&#x2B;json">
1073        {
1074            "@context": "https://schema.org",
1075            "@type": "WebSite",
1076            "name": "WebSite Brandfull",
1077            "url": "https://brandfull.com",
1078            "potentialAction": [
1079              {
1080                "@type": "SearchAction",
1081                "target": "https:/brandfull.com/ar-sa//Shop/search?q={search_term_string}",
1082                "query-input": "required name=search_term_string"
1083              }
1084             ]
1085         }
1086    </script>
1086
1087    
1088    
1089    <!-- Home Popup Section -->
1090    <!-- End Screen Load Popup Section -->
1091    <!-- START HEADER -->
1092
1093
1094    
1095
1096<script type="application/javascript">
1097
1098    window.doClosePopUp = function () {
1099        document.querySelectorAll('.dropdown-menu.show').forEach(function (option) {
1100            option.classList.remove('show');
1101        });
1102        document.querySelectorAll('.dropdown-menu.hide').forEach(function (option) {
1103            option.classList.remove('hide');
1104        });
1105    }
1106
1107    window.doShowQuickPopup = function (id, isFocus) {
1108        if (isFocus == true)
1109            m_handlerLayout.doGetQuickFilter();
1110        else
1111            setTimeout(function () {
1112                m_handlerLayout.m_showQuickPopUp(false);
1113            }, 250)
1114    }
1115
1116    window.doJSClickSearch = function (){
1117        var searchSection = document.querySelector('#UI_searchSection');
1118        if(searchSection.classList.contains('show'))
1119            searchSection.classList.remove('show');
1120        else
1121            searchSection.classList.add('show');
1122
1123        var searchIcon = document.querySelector('#UI_searchIcon');
1124        if(searchIcon.classList.contains('ci-search')){
1125            searchIcon.classList.remove('ci-search');
1126            searchIcon.classList.add('ci-close');
1127        }
1128        else{
1129            searchIcon.classList.remove('ci-close');
1130            searchIcon.classList.add('ci-search');
1131        }
1132    }
1133    doLoadScript(function () {
1134        if (!ko.dataFor(document.getElementById('UI_headerSession'))) {
1135            ko.applyBindings(m_handlerSession, document.getElementById("UI_headerSession"));
1136        }
1137
1138        if (!ko.dataFor(document.getElementById('UI_LayoutHeader'))) {
1139            ko.applyBindings(m_handlerLayout, document.getElementById("UI_LayoutHeader"));
1140            ko.applyBindings(m_handlerLayout, document.getElementById("UI_preLoader"));
1141        }
1142
1143        var navBar = document.getElementById("UI_menuNavBar");
1144        if (navBar) navBar.style.visibility = "visible";
1145        var searchPopup = document.getElementById("UI_searchQuickPopup");
1146        if (searchPopup) searchPopup.style.visibility = "visible";
1147        var layoutHeader = document.getElementById("UI_LayoutHeader");
1148        if (layoutHeader) layoutHeader.style.visibility = "visible";
1149        // After applyBindings above, so every marked block already carries the inline display its
1150        // binding gave it and nothing flashes as the gate lifts.
1151        if (layoutHeader) layoutHeader.classList.remove("ko-pending");
1152
1153        doJsDropdownSelect();
1154
1155    });
1156
1157</script>
1157
1158
1159
1160<header id="UI_LayoutHeader" class="bg-light shadow-sm fixHeightHeader ko-pending">
1161
1162    <div id="UI_menuQuick" class="topbar topbar-dark bg-darker py-sm-1 py-md-0">
1163        <div class="container">
1164            <div class="topbar-text dropdown d-md-none">
1165                <a class="topbar-link dropdown-toggle" href="#" data-bs-toggle="dropdown">روابط مفيدة</a>
1166                <ul class="dropdown-menu">
1167                    <li>
1168                        <a class="dropdown-item textAlignAuto" enable-href="false" href="/Support"><i class="ci-support  text-muted  me-2-Auto"></i>اتصل بنا</a>
1169                    </li>
1170                    <li>
1171                        <a class="dropdown-item textAlignAuto" href="#" target="_blank" enable-href="true" data-bind="attr:{href:m_handlerSession.m_currentCompany._whatsappLink}" rel="noreferrer">
1172                            <i class="ci-whatsapp text-muted me-2-Auto"></i>واتس اب
1173                        </a>
1174                    </li>
1175                </ul>
1176            </div>
1177            <div class="topbar-text text-nowrap d-none d-md-inline-block">
1178                <a class="topbar-link" enable-href="false" href="/Support"><i class="ci-support  me-2-Auto"></i>اتصل بنا</a>
1179                <!-- ko if:  !doCheckEmptyData(m_handlerSession.m_currentCompany._whatsappLink()) -->
1180                <a class="btn-social bs-light bs-whatsapp me-1-Auto mb-1" href="#" enable-href="true" data-bind="attr:{href:m_handlerSession.m_currentCompany._whatsappLink}" target="_blank" rel="noreferrer" aria-label="Share WhatsApp">
1181                    <i class="ci-whatsapp font-size-14"></i>
1182                </a>
1183                <!-- /ko -->
1184            </div>
1185
1186            <slotHeader class="bf-announceSlot"></slotHeader>
1187
1188            <div class="text-nowrap">
1189                <div class="topbar-text dropdown disable-autohide">
1190                    <a class="topbar-link dropdown-toggle" href="#" data-bs-toggle="dropdown">
1191                        <span class="px-1" data-bind="text: doGetCulture()=='ar'? 'عربى':'English'"></span>
1192                        <span class="px-1">/</span><span class="px-1" data-bind="text: m_handlerSession.m_currentCurrency._code"></span>
1193                    </a>
1194
1195                    <ul class="dropdown-menu dropdown-menu-end">
1196                        <!-- ko if: m_handlerSession.m_currentCompany._currences().length > 1 -->
1197                        <li class="dropdown-item">
1198                            <select class="form-select form-select-sm" style=" padding: 5px;" data-bind="value: m_handlerSession.m_currentCurrency._code, options: m_handlerSession.m_currentCompany._currences, optionsText: '_code', optionsValue: '_code'">
1199                            </select>
1200                        </li>
1201                        <!-- /ko -->
1202                        <!-- ko if: m_handlerSession.m_listCompany().length > 1 -->
1203                        <li class="dropdown-item">
1204                            <div class="fs-sm fw-medium mb-1 w-100 textAlignAuto">بلد</div>
1205                            <select class="form-select" style=" padding: 5px;" data-bind="value: m_handlerSession.m_currentCompany._id, options: m_handlerSession.m_listCompany, optionsText: '_countryName', optionsValue: '_id'">
1206                            </select>
1207                        </li>
1208                        <!-- /ko -->
1209                        <li>
1210                            <button class="dropdown-item d-flex align-items-center font-size-10" onclick="m_handlerSession.doSetCulture('ar')">
1211                                <span class="langImage me-2-Auto" data-bind="style:{'background-position-x': doGetlangImage('ar')}" style="background-image: url(https://cdn.brandfull.com/Media/BrandFull/images.png?version=639260136446764345)"></span>
1212                                <span>عربى</span>
1213                            </button>
1214                        </li>
1215                        <li>
1216                            <button class="dropdown-item d-flex align-items-center font-size-10" onclick="m_handlerSession.doSetCulture('en')">
1217                                <span class="langImage me-2-Auto" data-bind="style:{'background-position-x': doGetlangImage('en')}" style="background-image: url(https://cdn.brandfull.com/Media/BrandFull/images.png?version=639260136446764345)"></span>
1218                                <span>English</span>
1219                            </button>
1220                        </li>
1221                    </ul>
1222                </div>
1223            </div>
1224        </div>
1225    </div>
1226    <div class="navbar-sticky bg-light pt-1">
1227        <div class="navbar navbar-expand-lg navbar-light py-0">
1228            <div class="container bf-headerRow">
1229                <div id="UI_searchSection" class="input-group widthSearch mt-sm-2 collapse">
1230                    <div class="input-group d-lg-flex m-0 ">
1231                        <input autocomplete="off" class="form-control focus-black m_search" type="text" data-bind="value: m_search" onfocusin="doShowQuickPopup('UI_searchQuickPopup', true)" onfocusout="doShowQuickPopup('UI_searchQuickPopup', false)" placeholder="البحث عن العلامة التجارية" />
1232                        <div class="m_searchIcons position-absolute top-50 translate-middle-y text-muted">
1233                                <i class="ci-camera pointer" data-bind="click: window.doOpenCropper.bind($root, $root, GlobalSettingTranslateEnum.PathObjectPicture, m_currentPicture)"></i>
1234                            <i class="ci-search pointer" data-bind="click: $root.doSearchByWord.bind($root)"></i>
1235                        </div>
1236                    </div>
1237
1238                    
1239
1240<div id="UI_searchQuickPopup" data-koPending class="quickPopUp border rounded-1 p-3 mt-md-n1 bg-white" data-bind="visible:m_showQuickPopUp()">
1241
1242    <!-- ko if: m_listQuickFilterCategory().length != 0 -->
1243    <b class="font-size-10 fw-bolder mt-2 mb-1 text-accent">فئات مفضلة لديكم</b>
1244    <div class="d-flex flex-wrap align-content-around" data-bind="foreach: m_listQuickFilterCategory">
1245        <a class=" border rounded me-1 mb-1" href="#" enable-href="false" data-bind="click: doLoadMenuLink.bind($root, doGetLinkQuickFilter($data._value())) , attr:{href: doGetLinkQuickFilter($data._value()) }">
1246            <div class="btn btn-sm p-1 font-size-10" data-bind=" text: $data._name()">
1247            </div>
1248        </a>
1249    </div>
1250    <!-- /ko -->
1251    <!-- ko if: m_listQuickFilterColor().length != 0 -->
1252    <b class="font-size-10 fw-bolder mt-3 mb-1 text-accent ">اللون ذات شعبيه</b>
1253    <div class="d-flex flex-wrap align-content-around" data-bind="foreach: m_listQuickFilterColor">
1254        <a class=" border rounded me-1 mb-1" href="#" enable-href="false" data-bind="click: m_handlerLayout.doSetSearch.bind($root, $data._name()),  attr:{href: doGetLinkQuickFilter($data._name()) }">
1255            <div class="btn btn-sm p-1 font-size-10" data-bind=" text: $data._name()">
1256            </div>
1257        </a>
1258    </div>
1259    <!-- /ko -->
1260    <!-- ko if: m_listQuickFilterTag().length != 0 -->
1261    <b class="font-size-10 fw-bolder mt-3 mb-1 text-accent">الماركات الأكثر شعبية</b>
1262    <div class="d-flex flex-wrap align-content-around" data-bind="foreach: m_listQuickFilterTag">
1263        <a class=" border rounded me-1 mb-1" href="#" enable-href="false" data-bind="click: m_handlerLayout.doSetSearch.bind($root, $data._name()), attr:{href: doGetLinkQuickFilter($data._name()) }">
1264            <div class="btn btn-sm p-1 font-size-10" data-bind=" text: $data._name()">
1265            </div>
1266        </a>
1267    </div>
1268    <!-- /ko -->
1269
1270</div>
1271
1272                </div>
1273                <div class="bf-headerRow-lead">
1274                    <a class="navbar-tool d-lg-none" href="/#UI_menuSection" aria-label="menu" name="menu" onclick="doClosePo
1274pUp()" data-bs-toggle="collapse" role="button" aria-expanded="false" aria-controls="UI_menuSection">
1275                        <span class="navbar-tool-icon-box"><i class="navbar-toggler-icon  mt-1"></i></span>
1276                    </a>
1277                </div>
1278                <div class="bf-headerRow-brand">
1279                    <a class="navbar-brand textAlignAuto" href="https://brandfull.com" enable-href="true">
1280                            <img class="headerBrandLogo" style="--logo-width: 125px; --logo-height: 41px;" fetchpriority="high" decoding="async" src="https://cdn.brandfull.com/Media/BrandFull/headerDesktopLogo_ar.png?format=webp&size=Thumb&version=639260136446764345" width="905" height="297" alt="AltLogo" title="العنوانالشعار" />
1281                    </a>
1282                </div>
1283                <!-- ko stopBinding: true -->
1284                <div id="UI_headerSession" class="navbar-toolbar d-flex flex-shrink-0 align-items-center bf-headerRow-trail">
1285                    
1286                    <!-- ko if: doCheckUUID(m_currentUser._id()) -->
1287                    <a name="Favorites" aria-label="Favorites" class="navbar-tool-icon-box dropdown-toggle flipAuto  d-lg-block d-md-none d-sm-none" enable-href="false" href="/Account/Favorites">
1288                        <i class="navbar-tool-icon ci-heart" style="width: 45px;"></i>
1289                    </a>
1290                    <div class="navbar-tool dropdown pointer  d-lg-flex d-md-none d-sm-none" data-bind="visible: doCheckUUID(m_currentUser._id())" onmouseenter="doPrepareAdvertisement()">
1291                        <span class="navbar-tool-icon-box dropdown-toggle flipAuto" onclick="doOpenAdvertisement()">
1292                            <span class="navbar-tool-label flipAuto" data-bind="text: m_countAdvertisement() > 99 ? '99+' : m_countAdvertisement()"></span>
1293                            <i class="navbar-tool-icon ci-bell" style="width: 45px;"></i>
1294                        </span>
1295                        <div id="UI_menuWebAdvertisement" class="dropdown-menu dropdown-menu-end textAlignAuto">
1296                            <div class="widget widget-cart px-3 pt-2 pb-0">
1297                                <div class="d-flex align-items-center justify-content-between">
1298                                    <!-- ko if: !m_handlerLayout.m_isViewMobile() -->
1299                                    <div class="col-md-10">
1300                                        <!-- ko if: m_enableNotifGrant() -->
1301                                        <button id="UI_notifGrant" class="btn d-flex align-content-between align-items-center font-size-10 p-1 " onclick="doGetPermissionNotification()">
1302                                            <i class="ci-settings me-2-Auto font-size-14 "></i>
1303                                            <span class="form-check-label elide text-black fw-bolder heartbeat" for="UI_agreeWebPush">
1304                                                ابقني على اطلاع
1305                                            </span>
1306                                        </button>
1307                                        <!-- /ko -->
1308                                        <!-- ko if: m_enableNotifDenied() -->
1309                                        <div id="UI_notifDenied" class="d-flex align-content-between align-items-center font-size-10 p-1 ">
1310                                            <i class="ci-announcement me-2-Auto font-size-14  fw-bolder"></i>
1311                                            <span class="form-check-label elide text-danger fw-bolder heartbeat">
1312                                                الإشعارات محجوبة. شغلها في إعدادات المتصفح لتحصل على تنبيهات.
1313                                            </span>
1314                                        </div>
1315                                        <!-- /ko -->
1316
1317                                    </div>
1318                                    <!-- /ko -->
1319                                </div>
1320
1321                                <div id="UI_notificationList" data-simplebar data-simplebar-auto-hide="false" style="overflow-x: hidden;max-height: 21rem;" data-bind="visible: m_listAdvertisement().length!=0, foreach: { data: m_showAdvertisement() ? m_listAdvertisement() : [] }">
1322    <div class="border-bottom py-1 me-3-Auto d-flex justify-content-between border-danger" style="    border-bottom-style: dotted !important;" data-bs-dismiss="">
1323        <label class="form-text elide w-75 pointer" data-bind="click: $root.doSetTaged.bind($root, $data, true), text:$data._subject()"></label>
1324        <b class="form-check-label textAlignReverse font-size-10 d-inline-block mb-n2 fw-light" data-bind="click: $root.doSetTaged.bind($root, $data, true), text: doCalcDateDifference(doCastFromUTC($data._dateCreate()))"></b>
1325    </div>
1326</div>
1327
1328                            </div>
1329                        </div>
1330                    </div>
1331                    
1332
1333                    <!-- /ko -->
1334                    <div id="UI_userSession" class="navbar-tool dropdown pointer  d-lg-flex d-md-none d-sm-none">
1335                        <span class="navbar-tool-icon-box " onclick="doOpenProfile()">
1336                            <i class="navbar-tool-icon ci-user "></i>
1337                        </span>
1338
1339                        <span class=" d-none d-lg-flex" style="padding-left:unset; max-width: 75px;" href="#">
1340                            <!-- ko if: doCheckUUID(m_currentUser._id()) -->
1341                            <small class="elide text-black" data-bind="text: m_currentUser._name()"></small>
1342                            <!-- /ko -->
1343                            <!-- ko if: !doCheckUUID(m_currentUser._id()) -->
1344                            <small class="elide text-black">حساب</small>
1345                            <!-- /ko -->
1346                        </span>
1347                        <!-- Session dropdown-->
1348                        <!-- ko if: doCheckUUID(m_currentUser._id()) -->
1349                        <div  class="dropdown-menu dropdown-menu-end">
1350                            <div class="widget widget-cart px-3 pt-2 pb-3 textAlignAuto">
1351                                <!-- ko if: doCheckUUID(m_currentUser._id()) -->
1352                                <div class="fs-sm fw-medium mb-1">حساب</div>
1353                                <a class="dropdown-item d-flex align-items-center py-1" enable-href="false" href="/Account/Profile">
1354                                    <i class="ci-user opacity-60 me-2-Auto"></i>الملف الشخصي
1355                                </a>
1356                                <a class="dropdown-item d-flex align-items-center py-1" enable-href="false" href="/Account/Invoices">
1357                                    <i class="ci-basket opacity-60 me-2-Auto"></i>الفواتير
1358                                </a>
1359                                <a class="dropdown-item d-flex align-items-center py-1" enable-href="false" href="/Account/Supports">
1360                                    <i class="ci-help opacity-60 me-2-Auto"></i>تذاكر
1361                                </a>
1362                                    <a class="dropdown-item d-flex align-items-center py-1" enable-href="false" href="/Account/Messages">
1363                                        <i class="ci-message opacity-60 me-2-Auto"></i>رسائل
1364                                    </a>
1365
1366                                <div class="dropdown-divider"></div>
1367                                <a class="dropdown-item d-flex align-items-center py-1" href="#" enable-href="false" data-bind="click: $root.doLogOut.bind($root, '/Account/LogOff?Value=https%3A%2F%2Fbrandfull.com%2Far-sa%2FAbout%2Ftermsandcondition')">
1368                                    <i class="ci-sign-out opacity-60 me-2-Auto"></i>تسجيل الخروج
1369                                </a>
1370                                <!-- /ko -->
1371                            </div>
1372                        </div>
1373                        <!-- /ko -->
1374                    </div>
1375
1376                    <a href="#" aria-label="بحث" name="Search" class="navbar-tool-icon-box dropdown-toggle flipAuto" enable-href="false" onclick="doJSClickSearch()">
1377                        <i id="UI_searchIcon" class="navbar-tool-icon ci-search animate-target" style="width: 45px;"></i>
1378                    </a>
1379                    <div id="UI_shopNav" class="navbar-tool pointer" onclick="m_handlerSession.doOpenCartDrawer();">
1380                        <span class="navbar-tool-icon-box flipAuto">
1381                            <span class="navbar-tool-label flipAuto" data-bind="text: doGetCartCount()"></span>
1382                            <i class="navbar-tool-icon bold ci-card-bag"></i>
1383                        </span>
1384                        <span class="d-flex flex-column d-none d-md-flex ps-2-Auto">
1385                            <small class="font-size-10 text-black">سلة التسوق</small>
1386                            <!-- ko if: m_currentCart._listCartDetailModel().length!=0 -->
1387                            <span class="text-accent fs-base font-size-12" data-bind="html: $root.doCalcPriceDynamic(m_currentCart._total(), true)"></span>
1388                            <!-- /ko -->
1389                        </span>
1390                    </div>
1391
1392                </div>
1393                <!-- /ko -->
1394            </div>
1395            <!-- Search-->
1396        </div>
1397
1398
1399        <div id="UI_menuNavBar" class="navbar navbar-expand-lg navbar-light navbar-stuck-menu mt-n2 pt-0 pb-2" style="visibility: hidden; margin-top: auto !important;">
1400            <div class="container ">
1401                <div id="UI_menuSection" class="navbar-collapse collapse" data-bind="class: m_listCategoryMenuDepartmentHeader().length ==0 ? 'justify-content-around':''">
1402                    
1403<style>
1404
1405    /* The sprite URL is per-request (CDN base + m_version), so it cannot live in the bundled
1406       CSS. It is emitted once here and read by .categoryMerge in StyleCartzilla-Menu.css.
1407       It used to be a full inline `background: url(...)` on EVERY category node -- in this file
1408       and, worse, inside Template_ItemDeskMenu / Template_ItemMobileMenu, which recurse, so the
1409       whole CDN path was re-emitted into the live DOM once per category at every depth. */
1410    :root {
1411        --category-sprite: url('https://cdn.brandfull.com/Content/category/Merge.png?v=639260136446764345');
1412    }
1413
1414    .quickPopUp {
1415        visibility: hidden;
1416        z-index: +100;
1417        position: absolute;
1418        top: 47px;
1419    }
1420
1421    [lang="ar"] .quickPopUp {
1422        right: 1px;
1423    }
1424
1425    [lang="en"] .quickPopUp {
1426        left: 1px;
1427    }
1428
1429
1430    @media screen and (max-width:767px) {
1431        .quickPopUp {
1432            z-index: +1;
1433            position: unset;
1434            top: 81px;
1435            width: 100%;
1436            border: hidden !important;
1437        }
1438    }
1439</style>
1440
1441<script id="Template_ItemDeskMenu" type="text/html">
1442
1443
1444    <ul class="dropdown-menu " data-bind="foreach: $data._list, css:{'d-block fixRtl': $data.mode=='block' }">
1445        <li class="" data-bind="class: $data._list() != 0 ? 'dropdown':''">
1446            <a class="dropdown-item d-flex" href="#" enable-href="false" data-bind="
1447               class: $data._list() != 0 ? 'dropdown-toggle':'',
1448               attr:{href: doGetLinkCategory($data) }">
1449                <!-- ko ifnot: doCheckEmptyData($data._pictureName()) -->
1450                <span class="categoryMerge" data-bind="style:{'background-position-x': $data._picturePosition()+'px', 'alt': $data._code()}">
1451                </span>
1452                <!-- /ko -->
1453                <span class="categoryColor menuSpan" data-bind="text: $data._name, attr:{'data-code': $data._code}, style:{'--data-categoryColor': $data._colorDesktopHex()}"></span>
1454            </a>
1455            <!--ko if :  $data._list() != 0 -->
1456            <!-- ko run: $data.mode='' --><!-- /ko -->
1457            <!-- ko template: { name: 'Template_ItemDeskMenu' , data:$data} --><!-- /ko -->
1458            <!-- /ko -->
1459        </li>
1460    </ul>
1461
1462</script>
vendor: 2 bytes, line 1462
1462
1463<script id="Template_ItemDeskMegaMenu" type="text/html">
1464
1465    <ul class="dropdown-menu " data-bind="foreach: $data._list">
1466        <li class="dropdown mega-dropdown">
1467            <a class="dropdown-item dropdown-toggle d-flex" href="#" enable-href="false" data-bind="class: $data._list() != 0 ? 'dropdown-toggle':'', attr:{href: !doCheckEmptyData($data._link())?  $data._link() : '/Shop'+'/'+$data._code() }" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="true">
1468                <!-- ko ifnot: doCheckEmptyData($data._pictureName()) -->
1469                <span class="categoryMerge" data-bind="style:{'background-position-x': $data._picturePosition()+'px', 'alt': $data._code()}">
1470                </span>
1471                <!-- /ko -->
1472                <span class="categoryColor menuSpan " data-bind="text: $data._name, attr:{'data-code': $data._code}, style:{'--data-categoryColor': $data._colorDesktopHex()}"></span>
1473            </a>
1474        </li>
1475    </ul>
1476
1477
1478</script>
vendor: 2 bytes, line 1478
1478
1479<script id="Template_ItemMobileMenu" type="text/html">
1480
1481    <ul class="widget-list mt-1" data-bind="attr:{'id': 'UI_'+$data._id()}, css:{'collapse collapseShow mx-3': $data.mode=='block'}, foreach: $data._list">
1482        <li class="widget-list-item">
1483            <a class="dropdown-item d-flex" href="#" enable-href="false" data-bind="attr:{'aria-controls': 'UI_'+$data._id(), 'data-bs-target':'#UI_'+$data._id(), href: doGetLinkCategory($data) }">
1484                <!-- ko ifnot: doCheckEmptyData($data._pictureName()) -->
1485                <span class="categoryMerge" data-bind="style:{'background-position-x': $data._picturePosition()+'px', 'alt': $data._code()}">
1486                </span>
1487                <!-- /ko -->
1488                <span class="categoryColor font-size-14" data-bind="class: ($data._list() != 0 && $parent.mode=='block') ? 'fw-medium':'fw-light', text: $data._name, attr:{'data-code': $data._code}, click: doLoadMenu.bind($root, $data, 'Shop'), style:{'--data-categoryColor': $data._colorMobileHex()}"></span>
1489            </a>
1490            <!--ko if :  $data._list() != 0 -->
1491            <!-- ko template: { name: 'Template_ItemMobileMenu' , data:$data} --><!-- /ko -->
1492            <!-- /ko -->
1493        </li>
1494    </ul>
1495
1496</script>
1496
1497
1498
1499
1500<!-- ko ifnot: m_isMenuMobile() -->
1501<!-- ko if: $root.m_listCategoryMenuDepartmentHeader().length!=0 -->
1502<ul class="navbar-nav d-none d-lg-flex navbar-mega-nav pe-lg-2-Auto me-lg-2-Auto" style="padding-right:unset !important">
1503    <li class="nav-item dropdown">
1504        <a class="nav-link dropdown-toggle ps-lg-0-Auto " href="#" data-bs-toggle="dropdown" data-bs-auto-close="outside">
1505            <i class="ci-menu align-middle mt-n1 me-2-Auto"></i>
1506            الادارات
1507        </a>
1508        <ul class="dropdown-menu " data-bind="foreach: $root.m_listCategoryMenuDepartmentHeader">
1509            <li class="dropdown mega-dropdown">
1510                <a class="dropdown-item dropdown-toggle d-flex" href="#" enable-href="false" data-bind="class: $data._list() != 0 ? 'dropdown-toggle':'', attr:{href: doGetLinkCategory($data) }" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="true">
1511                    <!-- ko ifnot: doCheckEmptyData($data._pictureName()) -->
1512                    <span class="categoryMerge" data-bind="style:{'background-position-x': $data._picturePosition()+'px', 'alt': $data._code()}">
1513                    </span>
1514                    <!-- /ko -->
1515                    <span class="categoryColor menuSpan" data-bind="text: $data._name, attr:{'data-code': $data._code}, click: doLoadMenu.bind($root, $data, 'Shop'), style:{'--data-categoryColor': $data._colorDesktopHex()}"></span>
1516                </a>
1517                <div class="dropdown-menu p-0 megaMenuRtl" data-bind="style: {'min-width': doCheckEmptyData($data._bannerName()) ? '0rem':'12rem'}">
1518                    <div class="d-flex flex-wrap flex-sm-nowrap p-2">
1519                        <div style="max-width: 12rem;" data-bind="class: doCheckEmptyData($data._bannerName()) ? '':'mega-dropdown-column'">
1520                            <!--ko if :  $data._list() != 0 -->
1521                            <!-- ko run: $data.mode='block' --><!-- /ko -->
1522                            <!-- ko template: { name: 'Template_ItemDeskMenu' , data:$data} --><!-- /ko -->
1523                            <!-- /ko -->
1524                        </div>
1525                        <!--ko if :  !doCheckEmptyData($data._bannerName()) -->
1526                        <div class="mega-dropdown-column d-none d-lg-block text-center">
1527                            <img width="100%" data-bind="attr:{ src: GlobalSettingTranslateEnum.PathCategoryPicture + $data._bannerName(), 'alt': $data._code()}" alt="Menu">
1528                        </div>
1529                        <!-- /ko -->
1530                    </div>
1531                </div>
1532            </li>
1533        </ul>
1534    </li>
1535</ul>
1536<!-- /ko -->
1537<!-- Primary menu-->
1538<ul class="navbar-nav d-none d-lg-flex" data-bind="css:{'hide': m_listCategoryMenuHeader().length==0}, foreach: m_listCategoryMenuHeader">
1539    <li class="nav-item dropdown">
1540        <a class="nav-link dropdown-toggle" enable-href="false" href="#" data-bs-auto-close="outside" data-bind="attr:{href: doGetLinkCategory($data)}">
1541            <span class="categoryColor bolder" data-bind="text: $data._name, attr:{'data-code': $data._code}, style:{'--data-categoryColor': $data._colorDesktopHex()}"></span>
1542        </a>
1543        <!-- ko if: $data._list().length!=0 -->
1544        <!-- ko run: $data.mode='' --><!-- /ko -->
1545        <!-- ko template: { name: 'Template_ItemDeskMenu' , data:$data} --><!-- /ko -->
1546        <!-- /ko -->
1547    </li>
1548</ul>
1549
1550<!-- Tag menu -->
1551<ul class="navbar-nav d-none d-lg-flex ms-auto align-items-center" data-bind="css:{'hide': m_listCategoryMenuTag().length==0}, foreach: m_listCategoryMenuTag">
1552    <li class="nav-item me-2-Auto">
1553        <a class="btn btn-sm rounded-pill border px-3 categoryColor" enable-href="false" href="#" data-bind="
1554                               attr:{href: doGetLinkCategory($data), 'data-code': $data._code},
1555                               text: $data._name,
1556                               style:{'--data-categoryColor': $data._colorDesktopHex()}"></a>
1557    </li>
1558</ul>
1559<!-- /ko -->
1560
1561<!-- ko if: m_isMenuMobile() -->
1562<aside class="w-100 zindex-lg-5 pt-lg-5 d-lg-none" aria-modal="true" role="dialog">
1563    <div class="pt-2 d-none d-lg-block"></div>
1564
1565    <!--ko if :  m_listCategoryMenuDepartmentHeader().length!=0-->
1566    <ul class="nav nav-tabs nav-justified mt-4 mt-lg-5 mb-0" role="tablist" style="min-height: 3rem;">
1567        <li class="nav-item" role="presentation">
1568            <a class="nav-link fw-medium" href="#UI_departments" data-bs-toggle="tab" role="tab" aria-selected="false" tabindex="-1">
1569                الادارات
1570            </a>
1571        </li>
1572        <li class="nav-item" role="presentation">
1573            <a class="nav-link fw-medium active" href="#UI_headers" data-bs-toggle="tab" role="tab" aria-selected="true">
1574                قائمة
1575            </a>
1576        </li>
1577    </ul>
1578    <!-- /ko -->
1579
1580    <div class="offcanvas-body px-0 pt-3" data-simplebar="init" data-simplebar-auto-hide="false" style="height: calc( 100% - 35px);">
1581        <div class="tab-content">
1582
1583            <!--ko if :  m_listCategoryMenuDepartmentHeader().length!=0-->
1584            <div class="sidebar-nav tab-pane fade" id="UI_departments" role="tabpanel">
1585                <div class="widget widget-categories accordion " id="shop-categories" data-bind="foreach: m_listCategoryMenuDepartmentHeader">
1586                    <div class="accordion-item border-bottom accordion-header pe-2-Auto">
1587                        <button class="accordion-button collapsed fw-bold d-flex align-items-center" type="button" data-bs-toggle="collapse" data-bind="attr:{'aria-controls': 'UI_'+$data._id(), 'data-bs-target':'#UI_'+$data._id()}" aria-expanded="false">
1588                            <!-- ko ifnot: doCheckEmptyData($data._pictureName()) -->
1589                            <span class="categoryMerge" data-bind="style:{'background-position-x': $data._picturePosition()+'px', 'alt': $data._code()}">
1590                            </span>
1591                            <!-- /ko -->
1592                            <span class="categoryColor menuSpan " data-bind="text: $data._name, attr:{'data-code': $data._code}, click: doLoadMenu.bind($root, $data, 'Shop'), style:{'--data-categoryColor': $data._colorMobileHex()}"></span>
1593
1594                        </button>
1595                        <!-- ko run: $data.mode='block' --><!-- /ko -->
1596                        <!-- ko template: { name: 'Template_ItemMobileMenu' , data:$data} --><!-- /ko -->
1597                    </div>
1598                </div>
1599            </div>
1600            <!-- /ko -->
1601
1602            <div class="sidebar-nav tab-pane  fade active show" id="UI_headers" role="tabpanel">
1603                <div class="widget widget-categories accordion" data-bind="css:{'hide': m_listCategoryMenuHeader().length==0}, foreach: m_listCategoryMenuHeader">
1604                    <div class="accordion-item accordion-header">
1605                        <button class="categoryBgColor accordion-button collapsed d-flex align-items-center px-1 py-3" style="padding-top: .75rem; padding-bottom: .75rem;" type="button" data-bs-toggle="collapse" data-bind="css:{'hideAfter': $data._list().length==0}, attr:{'aria-controls': 'UI_'+$data._id(), 'data-bs-target':'#UI_'+$data._id()}, style:{'--data-categoryBgColor': $data._colorBackgroundHex()}" aria-expanded="false">
1606                            <!-- ko ifnot: doCheckEmptyData($data._pictureName()) -->
1607                            <span class="categoryMerge" data-bind="style:{'background-position-x': $data._picturePosition()+'px', 'alt': $data._code()}">
1608                            </span>
1609                            <!-- /ko -->
1610                            <span onclick="" class="categoryColor font-size-18 menuSpan" data-bind="text: $data._name, attr:{'data-code': $data._code}, click: doLoadMenu.bind($root, $data, 'Shop'), style:{'--data-categoryColor': $data._colorMobileHex()}"></span>
1611                        </button>
1612
1613                        <!--ko if :  $data._list().length!=0 -->
1614                        <!-- ko run: $data.mode='block' --><!-- /ko -->
1615                        <!-- ko template: { name: 'Template_ItemMobileMenu' , data:$data} --><!-- /ko -->
1616                        <!-- /ko -->
1617
1618                    </div>
1619                </div>
1620            </div>
1621
1622        </div>
1623    </div>
1624</aside>
1625<!-- /ko -->
1626
1627
1628                </div>
1629            </div>
1630        </div>
1631
1632    </div>
1633</header>
1634
1635
1636    <!-- END HEADER -->
1637    <div style="min-height: 60vh;">
1638        <div id="UI_AjaxLoader" class="page-wrapper" style="display: none;">
1639            <div id="UI_LayoutBody" class="main_content">
1640                
1641
1642
1643
1644
1645<link rel="stylesheet" media="print" onload="this.media='all'" href="https://cdn.brandfull.com/cssPage.min.css?v=639260136226636726">
1646<script type="application/javascript">
1647    var map;
1648    window.doZoomLocation = function (data = "") {
1649        try {
1650            doShowModal('UI_GetMapLocation');
1651            var params = data.split(":");//_latitude, _longitude
1652            map.setCenter(new google.maps.LatLng(params[0], params[1]), 12)
1653        }
1654        catch (error) { }
1655    }
1656
1657    window.doInitGoogleMap = async function () {
1658
1659        try {
1660            const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
1661
1662            if (m_handlerLayout.m_currentPage._listDivModel().length == 0)
1663                return setTimeout(doInitGoogleMap, 1000);
1664
1665            var locations = [];
1666            var location = [];
1667            var isDefault = false;
1668            ko.utils.arrayForEach(m_handlerLayout.m_currentPage._listDivModel(), function (div) {
1669                ko.utils.arrayForEach(div._listSlideModel(), function (slide) {
1670                    try {
1671                        var params = slide._link().split(":");
1672                        var lat = params[0];
1673                        var long = params[1];
1674
1675                        if ((parseFloat(lat) + "") == lat && (parseFloat(long) + "") == long)
1676                            locations.push([lat, long, slide._title(), slide._description(), doGetFullPicturePathBySlide(slide), locations.length + 1]);
1677
1678                    }
1679                    catch (error) { }
1680                });
1681            });
1682
1683            if (locations.length == 0)
1684                return;
1685            else
1686                location = locations[0];
1687
1688            var mapId = doRandomString(10);
1689            map = new google.maps.Map(document.getElementById('UI_google-map'), {
1690                center: {
1691                    lat: parseFloat(location[0], 10),
1692                    lng: parseFloat(location[1], 10)
1693                },
1694                zoom: 12,
1695                mapId: mapId,
1696                mapTypeId: google.maps.MapTypeId.ROADMAP
1697            });
1698
1699            var infowindow = new google.maps.InfoWindow();
1700            var marker, i;
1701            for (i = 0; i < locations.length; i++) {
1702                marker = new google.maps.marker.AdvancedMarkerElement({
1703                    position: {
1704                        lat: parseFloat(locations[i][0], 10),
1705                        lng: parseFloat(locations[i][1], 10)
1706                    },
1707                    map: map,
1708                    draggable: true
1709                });
1710                markers.push(marker);
1711
1712                google.maps.event.addListener(marker, 'click', (function (marker, i) {
1713                    return function () {
1714                        var html = '<div class="textAlignAuto" style="width: 175px;">';
1715                        html += '<img alt="" loading="lazy" style="width:100%; height: 110px; object-fit: cover;" src="' + locations[i][4] + '"/>';
1716                        html += '<b style="text-decoration: underline;">' + locations[i][2] + "</b>";
1717                        html += "</div>";
1718                        infowindow.setContent(html);
1719                        infowindow.open(map, marker);
1720                    }
1721                })(marker, i));
1722            }
1723        }
1724        catch (error) {
1725            setTimeout(doInitGoogleMap, 1000);
1726        }
1727    }
1728</script>
1728
1729
1730<script type="application/javascript">
1731    var m_handlerPageAbout;
1732
1733    doLoadScript(function () {
1734        m_handlerPageAbout = new Handler_PageAbout();
1735        doSetHandlerPageScroller(m_handlerPageAbout);
1736        m_handlerPageAbout.doInitData("termsandcondition", {"requestCode":5001,"requestData":{"_page":{"_pageType":3,"_styleCss":"","_pageStatus":1,"_showMenu":false,"_listDivModel":[{"_loopCount":0,"_order":0,"_classCss":"","_divObjectFilterType":0,"_divSurveyFilterType":0,"_divFilterParameters":"","_listSlideModel":[{"_code":"vatcertificate","_title":"شهادة ضريبة القيمة المضافة","_description":"<p><object data=\"https://brandfull.com/Media/BrandFull/Mumtalakat VAT.pdf\" type=\"application/pdf\" width=\"100%\" height=\"500px\">\n        <p>Unable to display PDF file. <a href=\"https://brandfullsandbox.azurewebsites.net/Media/VAT_Certificate.PDF\">Download</a> instead.</p>\n\n    </object></p>","_button":"","_link":"20.58136735381002:47.63671875","_titleHex":"#FFFFFF","_descriptionHex":"#FFFFFF","_buttonHex":"#FFFFFF","_backGroundHex":"#FFFFFF","_titleVisibleMode":0,"_descriptionVisibleMode":0,"_buttonVisibleMode":0,"_backGroundVisibleMode":0,"_id":"f04b266f-0f88-4978-b297-8161d82cdf65","_order":0}],"_divTemplateModel":{"_code":"AboutDefault","_divTemplateItemType":0,"_itemCount":0,"_pictureModel":{"_name":"845b1ca0-f579-4ab1-805a-f17b7f1f5ad5.png","_pictureType":0,"_order":0,"_dimension":"1104x752","_id":"e49d4f5f-5fc1-4f8f-b8e6-b2c532844ab9","_dateCreate":"2023-02-23T15:04:02.0000000","_dateUpdate":"2024-11-18T10:14:43.2159033"},"_isDynamicCount":true,"_isAdvance":true,"_id":"f15d34f8-9d50-4002-b17a-9af04db2ce90","_dateCreate":"2023-02-23T15:04:02.0000000","_dateUpdate":"2026-01-09T09:48:50.4168666"},"_autoHideArea":false,"_enableTimer":false,"_id":"ab3915c7-9927-4ef5-989f-67f040b472b7","_hasLoadListObject":false}],"_id":"78877c67-1c65-485c-8e20-3b1ea780db63","_dateCreate":"2023-10-09T12:54:16.0000000","_dateUpdate":"2023-10-20T15:57:59.1789248","_link":""},"_category":{"_name":"قواعد الضريبة","_description":"","_label":"","_code":"vatrules","_parentCategoryModelID":"75c18274-0d87-4150-83de-dcc74e558a6c","_categoryType":5,"_labelType":0,"_order":"4","_visibleMode":0,"_featuredScore":0,"_menuType":"0","_objectCount":0,"_sortByShop":0,"_metaDescription":"","_metaKeyWord":"","_colorDesktopHex":"#FFFFFF","_colorMobileHex":"#FFFFFF","_colorLabelHex":"#FFFFFF","_colorBackgroundHex":"#FFFFFFFF","_listCompanyModelID":["b47e3cd0-71b6-4c5a-b8c5-bff244556d04"],"_link":"vatrules","_isBrandRequired":false,"_id":"f37d4832-ceac-47fd-b3f1-a1f5d2640f65","_dateCreate":"2023-10-12T15:25:10.0000000","_dateUpdate":"2026-04-16T18:40:25.7028211"}}});
1737
1738        if (!ko.dataFor(document.getElementById('UI_LayoutBody')))
1739            ko.applyBindings(m_handlerPageAbout, document.getElementById('UI_LayoutBody'));
1740
1741        doFinishPaintEarly();
1742
1743
1744            // Wrapped rather than passed by reference so the initializer is read when Maps is
1745            // actually ready -- Page_CreateSupport defines a window.doInitGoogleMap of its own, and
1746            // whichever view was swapped in last owns the name.
1747            doLoadGoogleMaps(function () { doInitGoogleMap(); });
1748            
1749
1750    }, "https://cdn.brandfull.com/Handlers/Pages/Handler_PageAbout.js");
1751
1752</script>
1752
1753
1754<!-- Page title + breadcrumb-->
1755<div class="bg-BreadCrumb pt-4  py-2">
1756    <div class="container breadcrumbContainer">
1757        <div class="breadcrumbLink mb-3 ">
1758            <nav aria-label="breadcrumb">
1759                <ol class="breadcrumb flex-lg-nowrap justify-content-start">
1760                    <li class="breadcrumb-item"><a class="text-nowrap" href="/" enable-href="false"><i class="ci-home"></i>الصفحة الرئيسية</a></li>
1761                    <li class="breadcrumb-item"><a class="text-nowrap" href="/Blog" enable-href="false"></i>المدونة</a></li>
1762                    <li class="breadcrumb-item text-nowrap active">
1763                        مقالة
1764                    </li>
1765                </ol>
1766            </nav>
1767        </div>
1768    </div>
1769</div>
1770<!-- Content-->
1771
1772
1773<div class="ko-pending">
1774    
1775<!-- ko if: doCheckUUID(m_handlerLayout.m_currentPage._id()) -->
1776<!-- ko run: doInjectStyleCss(m_handlerLayout.m_currentPage._styleCss()) --><!-- /ko -->
1777<!-- ko foreach: m_handlerLayout.m_currentPage._listDivModel(), childrenComplete: doApplyDivSlots -->
1778<div class="sectionShow" data-bind="class: $data._classCss(),
1779                attr:{'data-div': $data._id(), 'data-div-slot': doGetDivSlotName($data), 'data-div-epoch': m_divEpoch,
1780                      'data-div-wait': doCheckDivWaitsForData($data) ? '1' : null},
1781                style:{'display': doCheckDivPageAllowed($data) ? '' : 'none'}">
1782    <!-- ko if: doCheckDivRender($data) -->
1783    <!-- ko template: { name: doGetDivTemplateName($data), data: $data} --><!-- /ko -->
1784    <!-- /ko -->
1785</div>
1786<!-- /ko -->
1787<!-- /ko -->
1788
1789</div>
1790
1791<div class="modal" id="UI_GetMapLocation" tabindex="-1" role="dialog">
1792    <div class="modal-dialog" role="document">
1793        <div class="modal-content">
1794            <div class="modal-header">
1795                <h4 class="modal-title textAlignAuto" id="myModalLabel">موقعنا!</h4>
1796                <button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close"></button>
1797            </div>
1798            <div class="modal-body map">
1799                <div>
1800                    <div id="UI_google-map" class="col-12 mb-2 mt-2" style="height: 400px;">
1801                    </div>
1802                </div>
1803            </div>
1804        </div>
1805    </div>
1806</div>
1807
1808                
1809    <div id="UI_updateDataModalPopUp" class="modal fade" tabindex="-1">
1810        <div class="modal-dialog modal-dialog-centered" role="document">
1811            <div class="modal-content border-0 rounded-4 overflow-hidden shadow-lg">
1812                <div class="modal-header border-0 pb-0 px-4 pt-4">
1813                    <h5 class="modal-title fw-bold text-primary mb-0">مدهش!</h5>
1814                    <button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close"></button>
1815                </div>
1816                <div class="modal-body text-center px-4 pt-3 pb-4">
1817                    <div class="mx-auto mb-3 d-inline-flex align-items-center justify-content-center rounded-circle"
1818                         style="width:96px; height:96px; background: rgba(var(--cz-primary-rgb), .08);">
1819                        <div class="d-inline-flex align-items-center justify-content-center rounded-circle"
1820                             style="width:68px; height:68px; background: rgba(var(--cz-primary-rgb), .16);">
1821                            <i class="ci-check" style="font-size: 32px; color: rgba(var(--cz-primary-rgb));"></i>
1822                        </div>
1823                    </div>
1824                    <p class="fw-bold mb-0" style="font-size:1.05rem; color:#1f2937;">تم حفظ بياناتك.</p>
1825                </div>
1826            </div>
1827        </div>
1828    </div>
1829
1830            </div>
1831        </div>
1832    </div>
1833    <!-- START FOOTER -->
1834    
1835<style>
1836    .codeInput {
1837        width: 32px;
1838        height: 32px;
1839        text-align: center;
1840        border: none;
1841        border-bottom: 1.5px solid #d2d2d2;
1842        margin: 0 10px;
1843    }
1844
1845    .codeInput:focus {
1846        border-bottom: 1.5px solid deepskyblue;
1847        outline: none;
1848    }
1849
1850    /* Shared content modal (#UI_slideModal): the body is Portal-authored HTML, so give the tags an
1851       admin actually types a sane default rather than leaving them at browser sizes. */
1852    .slideModal-body {
1853        font-size: .9rem;
1854        line-height: 1.7;
1855        color: #374151;
1856    }
1857
1858        .slideModal-body ul,
1859        .slideModal-body ol {
1860            padding-inline-start: 18px;
1861            margin-bottom: 0;
1862        }
1863
1864        .slideModal-body p:last-child {
1865            margin-bottom: 0;
1866        }
1867</style>
1868
1869
1870
1871<!-- Sign in / sign up / forgot Password modal-->
1872<div id="UI_sessionModal" class="modal fade noPadding" tabindex="-1" role="dialog">
1873    <div class="modal-dialog modal-dialog-centered" role="document">
1874        <div class="modal-content">
1875            <div class="modal-header bg-secondary">
1876                <ul class="nav nav-tabs card-header-tabs" role="tablist">
1877                    <li class="nav-item"><a id="UI_signinTab" data-bind="click : doResetUserError" class="nav-link fw-medium active" href="#signin-tab" data-bs-toggle="tab" role="tab" aria-selected="true"><i class="ci-unlocked me-2-Auto mt-n1"></i>تسجيل الدخول</a></li>
1878                    <li class="nav-item"><a id="UI_signupTab" data-bind="click : doResetUserError" class="nav-link fw-medium" href="#signup-tab" data-bs-toggle="tab" role="tab" aria-selected="false"><i class="ci-user me-2-Auto mt-n1"></i>التسجيل</a></li>
1879                </ul>
1880                <button class="btn-close adjustBtnClose" style="" type="button" data-bs-dismiss="modal" aria-label="Close" onclick="doRedirection()"></button>
1881            </div>
1882            <div class="modal-body tab-content py-4">
1883                <div id="UI_socialAccount" class="py-2">
1884                    <h3 class="d-inline-block align-middle fs-base fw-medium mb-2">مع حساب اجتماعي</h3>
1885                    <div class="row">
1886                            <div id="UI_buttonGoogle" class="col-md-6 my-1" style="height: 40px;"></div>
1887                            <div id="appleid-signin" class="col-md-6 my-1" style="height: 40px;" data-color="black" data-border="true" data-type="sign in"></div>
1888                    </div>
1889                </div>
1890                <form class="needs-validation tab-pane fade show active" autocomplete="off" novalidate id="signin-tab">
1891                    <div class="mb-3">
1892                        <label class="form-label" for="UI_emailModal">البريد الإلكتروني والهاتف</label>
1893                        <input autocomplete="username" id="UI_emailModal" data-bind="value : m_currentStructUser._email, css:{'is-invalid': !doCheckEmptyData(m_errorStructUser._email()) || !doCheckEmptyData(m_errorStructUser._phone())}" class="form-control" type="email" placeholder="[email protected]" required>
1894                        <div data-bind="text: m_errorStructUser._email" class="invalid-feedback"></div>
1895                        <div data-bind="text: m_errorStructUser._phone" class="invalid-feedback"></div>
1896                    </div>
1897                    <div class="mb-3">
1898                        <label class="form-label" for="UI_passwordModal">كلمة المرور الخاصة بك</label>
1899                        <div class="password-toggle">
1900                            <input data-bind="value : m_currentStructUser._password, css:{'is-invalid':!doCheckEmptyData(m_errorStructUser._password())}" class="form-control" type="password" id="UI_passwordModal" required autocomplete="current-password">
1901                            <label class="password-toggle-btn" aria-label="Show/hide password">
1902                                <input class="password-toggle-check" type="checkbox"><span class="password-toggle-indicator"></span>
1903                            </label>
1904                        </div>
1905                        <div data-bind="style:{display:!doCheckEmptyData(m_errorStructUser._password())?'block':'none'} , text: m_errorStructUser._password" class="invalid-feedback"></div>
1906                    </div>
1907                    <div class="mb-3 d-flex flex-wrap justify-content-between">
1908                        <div class="mb-2" data-bind="class:'ar' == 'en'? 'form-check':'form-check-reverse'">
1909                        </div>
1910                        <a class="fs-sm" href="#" onclick="doShowModal('UI_forgotModal');" data-bs-dismiss="modal" aria-label="Close">هل نسيت كلمة المرور؟</a>
1911                    </div>
1912                    <button data-bind="click : doSignUser" class="btn btn-primary btn-shadow d-block w-100" type="button">تسجيل الدخول</button>
1913                </form>
1914                
1915                <form class="needs-validation tab-pane fade" autocomplete="off" novalidate id="signup-tab" novalidate>
1916                    <p class="list-unstyled fs-md">
1917                        أضف بريدك الإلكتروني أو هاتفك أدناه ، وسيتم إرسال رسالة للتحقق.
1918                    </p>
1919                    <div class="mt-4 bg-white">
1920                        <div class="mb-3">
1921                            <div class="d-flex justify-content-between">
1922                                <div class="col-8">
1923                                    <input autocomplete="tel" id="UI_quickPhoneInput" data-bind="value : m_currentStructUser._phone,valueUpdate: ['afterkeydown', 'input'], css:{'is-invalid': !doCheckEmptyData(m_errorStructUser._phone())}" class="form-control " type="tel" lang=ar dir=rtl placeholder="رقم الهاتف" required>
1924
1925                                    <!-- ko if:  !doCheckEmptyData(m_errorStructUser._phone()) -->
1926                                    <div data-bind="text: m_errorStructUser._phone" class="invalid-feedback"></div>
1927                                    <!-- /ko -->
1928                                </div>
1929                                <div class="col-3">
1930                                    <select class="form-select" id="UI_quickCountry" data-bind="css:{'is-invalid':!doCheckEmptyData(m_errorUser.m_errorCountryModel())}, options: m_listCountry, value: m_currentUser._countryModel._id,optionsText: '_code', optionsValue: '_id'">
1931                                    </select>
1932                                </div>
1933                            </div>
1934                            <div class="d-flex text-center my-4 align-items-center">
1935                                <hr class="w-25 mx-auto">
1936                                <span class="h6">أو</span>
1937                                <hr class="w-25 mx-auto">
1938                            </div>
1939                            <input autocomplete="email" data-bind="value : m_currentStructUser._email, css:{'is-invalid': !doCheckEmptyData(m_errorStructUser._email())}" class="form-control" type="email" placeholder="[email protected]" required>
1940                            <!-- ko if:  !doCheckEmptyData(m_errorStructUser._email()) -->
1941                            <div id="UI_errorEmailModal" data-bind="text: m_errorStructUser._email" class="invalid-feedback"></div>
1942                            <!-- /ko -->
1943                        </div>
1944                        <div class=" mb-3" data-bind="class:'ar' == 'en'? 'form-check':'form-check-reverse'">
1945                            <input class="form-check-input" type="checkbox" id="UI_agreePage" value="" data-bind="attr:{checked: m_isAgree()}, value: m_isAgree(),click: $root.doSetAgree.bind($root)">
1946                            <label class="form-check-label" for="UI_agreePage">
1947                                <span>أوافق على الشروط والسياسة</span>
1948                            </label>
1949
1950                            <a href="/About/TermsandCondition" target="_blank" enable-href="true" class="readMore">اقرأ</a>
1951                        </div>
1952                        <!-- ko if:  m_isAgree() -->
1953                        <button data-bind="click : $root.doForgetPassword.bind($root, true)" class="btn btn-primary w-100" type="button">ارسل الرمز</button>
1954                        <!-- /ko -->
1955
1956                    </div>
1957                </form>
1958
1959
1960                
1961            </div>
1962        </div>
1963    </div>
1964</div>
1965
1966
1967<div id="UI_forgotModal" class="modal fade" tabindex="-1" role="dialog">
1968    <div class="modal-dialog modal-dialog-centered" role="document">
1969        <div class="modal-content">
1970            <div class="modal-header bg-secondary">
1971                <ul class="nav nav-tabs card-header-tabs" role="tablist">
1972                    <li class="nav-item"><a id="UI_signinTab" data-bind="click : doResetUserError" class="nav-link fw-medium active" data-bs-toggle="tab" role="tab" aria-selected="true"><i class="ci-help me-2-Auto mt-n1"></i>نسيت كلمة المرور</a></li>
1973                </ul>
1974                <button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close" onclick="doRedirection()"></button>
1975            </div>
1976            <div class="modal-body tab-content py-4">
1977                <form class="needs-validation tab-pane fade show active" autocomplete="off" novalidate>
1978                    <p class="fs-md">قم بتغيير كلمة المرور الخاصة بك في ثلاث خطوات سهلة. يساعد هذا في الحفاظ على أمان كلمة المرور الجديدة.</p>
1979                    <ol class="list-unstyled fs-md">
1980                        <li><span class="text-primary me-2-Auto">1.</span>املأ عنوان بريدك الإلكتروني أدناه.</li>
1981                        <li><span class="text-primary me-2-Auto">2.</span>سنرسل إليك رمزا مؤقتا عبر البريد الإلكتروني.</li>
1982                        <li><span class="text-primary me-2-Auto">3.</span>استخدم الرمز لتغيير كلمة المرور الخاصة بك على موقعنا الآمن.</li>
1983                    </ol>
1984                    <div class="py-2 mt-4">
1985                        <div class="mb-3">
1986                            <input autocomplete="email" id="UI_popuEmailInput" data-bind="value : m_currentStructUser._email, css:{'is-invalid': !doCheckEmptyData(m_errorStructUser._email()) || !doCheckEmptyData(m_errorStructUser._phone())}" class="form-control" type="email" placeholder="[email protected]" required>
1987                            <!-- ko if:  !doCheckEmptyData(m_errorStructUser._email()) -->
1988                            <div data-bind="text: m_errorStructUser._email" class="invalid-feedback"></div>
1989                            <!-- /ko -->
1990                            <div class="d-flex text-center my-4 align-items-center">
1991                                <hr class="w-25 mx-auto">
1992                                <span class="h6">أو</span>
1993                                <hr class="w-25 mx-auto">
1994                            </div>
1995                            <div class="d-flex justify-content-between">
1996                                <div class="col-8">
1997                                    <input autocomplete="tel" id="UI_popuPhoneInput" data-bind="value : m_currentStructUser._phone, css:{'is-invalid': !doCheckEmptyData(m_errorStructUser._phone()) || !doCheckEmptyData(m_errorStructUser._phone())}" class="form-control " type="number" placeholder="رقم الهاتف" required>
1998
1999                                </div>
2000                                <div class="col-3">
2001                                    <select class="form-select" id="UI_popupCountry" data-bind="css:{'is-invalid':!doCheckEmptyData(m_errorUser.m_errorCountryModel())}, options: m_listCountry, value: m_currentUser._countryModel._id,optionsText: '_code', optionsValue: '_id'">
2002                                    </select>
2003                                </div>
2004                            </div>
2005                            <!-- ko if:  !doCheckEmptyData(m_errorStructUser._phone()) -->
2006                            <div data-bind="text: m_errorStructUser._phone" class="invalid-feedback"></div>
2007                            <!-- /ko -->
2008                        </div>
2009                        <button data-bind="click : $root.doForgetPassword.bind($root, false)" class="btn btn-primary w-100" type="button" data-bs-dismiss="modal" aria-label="Close">ارسل الرمز</button>
2010                    </div>
2011                </form>
2012            </div>
2013        </div>
2014    </div>
2015</div>
2016
2017
2018<div id="UI_validationModal" class="modal fade" tabindex="-1" role="dialog">
2019    <div class="modal-dialog modal-dialog-centered" role="document">
2020        <div class="modal-content">
2021            <div class="modal-header bg-secondary">
2022                <ul class="nav nav-tabs card-header-tabs" role="tablist">
2023                    <li class="nav-item"><a id="UI_validationTab" data-bind="click : doResetUserError" class="nav-link fw-medium active" data-bs-toggle="tab" role="tab" aria-selected="true"><i class="ci-key me-2-Auto mt-n1"></i>كلمة مرور التحقق من الصحة</a></li>
2024                </ul>
2025                <button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close" onclick="doRedirection()"></button>
2026            </div>
2027            <div class="modal-body tab-content py-4">
2028                <form class="needs-validation tab-pane fade show active" autocomplete="off" novalidate>
2029                    <!-- ko if:  !doCheckEmptyData(m_currentStructUser._email()) -->
2030                    <p class="fs-md" data-bind="text: 'يرجى التحقق من بريدك الإلكتروني' + ':  (' + m_currentStructUser._email() + ')' "></p>
2031                    <!-- /ko -->
2032                    <!-- ko if:  !doCheckEmptyData(m_currentStructUser._phone()) -->
2033                    <p class="fs-md" data-bind="text: 'يرجى التحقق من رقم هاتفك' + ':  (' + m_currentStructUser._phone() + ')' "></p>
2034                    <!-- /ko -->
2035                    <div class="mb-3">
2036                        <label class="form-label">أدخل الرمز الخاص بك</label>
2037                        <div class="form-control d-flex align-items-center  justify-content-center" dir="ltr" id='UI_sessionCodeInputs' data-bind=" css:{'is-invalid': !m_isVerifyed()}">
2038                            <input class="codeInput" id="UI_sessionCode1" type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code" />
2039                            <input class="codeInput" id="UI_sessionCode2" type="text" inputmode="numeric" maxlength="1" />
2040                            <input class="codeInput" id="UI_sessionCode3" type="text" inputmode="numeric" maxlength="1" />
2041                            <input class="codeInput" id="UI_sessionCode4" type="text" inputmode="numeric" maxlength="1" />
2042                        </div>
2043                        <!-- ko if:  !doCheckEmptyData(m_errorStructUser._code()) -->
2044                        <div id="UI_errorCodeModal" data-bind="text: m_errorStructUser._code" class="invalid-feedback"></div>
2045                        <!-- /ko -->
2046                        <!-- ko if:  !doCheckEmptyData(m_errorStructUser._phone) -->
2047                        <div id="UI_errorPhoneModal" data-bind="text: m_errorStructUser._phone" class="invalid-feedback"></div>
2048                        <!-- /ko -->
2049                    </div>
2050                    <div class="text-center py-2 px-3" style=" display: flow-root;">
2051                        <button class="btn btn-sm btn-primary col-md-6" data-bind="click : $root.doSendCode.bind($root)" type="button">إرسال</button>
2052                    </div>
2053                </form>
2054            </div>
2055        </div>
2056    </div>
2057</div>
2058
2059
2060<div id="UI_resetPasswordModal" class="modal fade" tabindex="-1" role="dialog">
2061    <div class="modal-dialog modal-dialog-centered" role="document">
2062        <div class="modal-content">
2063            <div class="modal-header bg-secondary">
2064                <ul class="nav nav-tabs card-header-tabs" role="tablist">
2065                    <li class="nav-item"><a id="UI_resetPasswordTab" data-bind="click : doResetUserError" class="nav-link fw-medium active" data-bs-toggle="tab" role="tab" aria-selected="true"><i class="ci-key me-2-Auto mt-n1"></i>إعادة تعيين كلمة المرور</a></li>
2066                </ul>
2067                <button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close" onclick="doRedirection()"></button>
2068            </div>
2069            <div class="modal-body tab-content py-4">
2070                <form class="needs-validation tab-pane fade show active" autocomplete="off" novalidate>
2071                    <p>يمكنك تغيير كلمة المرور الخاصة بك لأسباب أمنية أو إعادة تعيينها إذا نسيتها.</p>
2072                    <!-- ko if: !doCheckEmptyData(m_errorStructUser._token()) -->
2073                    <div id="UI_errorToken" data-bind="text: m_errorStructUser._token" class="invalid-feedback"></div>
2074                    <!-- /ko -->
2075                    <!-- ko if: m_isSuccess()-->
2076                    <p>تم تحديث كلمة المرور الخاصة بك</p>
2077                    <!-- /ko -->
2078                    <!-- ko if : !m_isSuccess() -->
2079                    <input class="d-none" type="text" autocomplete="username" tabindex="-1" aria-hidden="true" data-bind="value: m_currentStructUser._email">
2080                    <div class="mb-3">
2081                        <label class="form-label" for="UI_resetPasswordH
2081ashModal">كلمة المرور الخاصة بك</label>
2082                        <input class="form-control" type="password" data-bind="value : m_currentStructUser._password, css:{'is-invalid':!doCheckEmptyData(m_errorStructUser._password())}" id="UI_resetPasswordHashModal" required autocomplete="new-password">
2083                        <div id="UI_errorPasswordModal" data-bind="text: m_errorStructUser._password" class="invalid-feedback"></div>
2084                    </div>
2085                    <div class="mb-3">
2086                        <label class="form-label" for="UI_resetConfirmPasswordModal">تأكيد كلمة المرور</label>
2087                        <input data-bind="value : m_currentStructUser._confirmation,  css:{'is-invalid':!doCheckEmptyData(m_errorStructUser._confirmation())}" id="UI_resetConfirmPasswordModal" class="form-control" type="password" required autocomplete="new-password">
2088                        <div id="UI_errorConfirmPasswordModal" data-bind="text: m_errorStructUser._confirmation" class="invalid-feedback"></div>
2089                    </div>
2090                    <!-- /ko -->
2091                    <button data-bind="click: $root.doUpdatePassword.bind($root)" class="btn btn-primary btn-shadow d-block w-100" type="button">حفظ</button>
2092                </form>
2093            </div>
2094        </div>
2095    </div>
2096</div>
2097
2098
2099<div id="UI_successRegisterModalPopUp" class="modal fade" tabindex="-1">
2100    <div class="modal-dialog modal-dialog-centered" role="document">
2101        <div class="modal-content border-0 rounded-4 overflow-hidden shadow-lg">
2102            <div class="modal-header border-0 pb-0 px-4 pt-4">
2103                <h5 class="modal-title fw-bold text-primary mb-0">تسجيل!</h5>
2104                <button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close"></button>
2105            </div>
2106            <div class="modal-body text-center px-4 pt-3 pb-4">
2107                <div class="mx-auto mb-3 d-inline-flex align-items-center justify-content-center rounded-circle"
2108                     style="width:96px; height:96px; background: rgba(var(--cz-primary-rgb), .08);">
2109                    <div class="d-inline-flex align-items-center justify-content-center rounded-circle"
2110                         style="width:68px; height:68px; background: rgba(var(--cz-primary-rgb), .16);">
2111                        <i class="ci-check" style="font-size: 32px; color: rgba(var(--cz-primary-rgb));"></i>
2112                    </div>
2113                </div>
2114                <p class="fw-bold mb-0" style="font-size:1.05rem; color:#1f2937;">تم تأكيد بياناتك.</p>
2115            </div>
2116        </div>
2117    </div>
2118</div>
2119
2120<div id="UI_popUpNewsLetterSubmit" class="modal fade" tabindex="-1">
2121    <div class="modal-dialog modal-dialog-centered" role="document">
2122        <div class="modal-content border-0 rounded-4 overflow-hidden shadow-lg">
2123            <div class="modal-header border-0 pb-0 px-4 pt-4">
2124                <h5 class="modal-title fw-bold text-primary mb-0">الرساله الاخباريه!</h5>
2125                <button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close"></button>
2126            </div>
2127            <div class="modal-body text-center px-4 pt-3 pb-4">
2128                <div class="mx-auto mb-3 d-inline-flex align-items-center justify-content-center rounded-circle"
2129                     style="width:96px; height:96px; background: rgba(var(--cz-primary-rgb), .08);">
2130                    <div class="d-inline-flex align-items-center justify-content-center rounded-circle"
2131                         style="width:68px; height:68px; background: rgba(var(--cz-primary-rgb), .16);">
2132                        <i class="ci-check" style="font-size: 32px; color: rgba(var(--cz-primary-rgb));"></i>
2133                    </div>
2134                </div>
2135                <p class="fw-bold mb-0" style="font-size:1.05rem; color:#1f2937;">تم حفظ جهة الاتصال.</p>
2136            </div>
2137        </div>
2138    </div>
2139</div>
2140
2141
2142<div id="UI_slideModal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
2143    <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
2144        <div class="modal-content">
2145            <div class="modal-header bg-secondary">
2146                <ul class="nav nav-tabs card-header-tabs" role="tablist">
2147                    <li class="nav-item"><a class="nav-link fw-medium active" role="tab" aria-selected="true"><i class="ci-announcement me-2-Auto mt-n1"></i><span data-bind="text: m_currentSlideModal._title"></span></a></li>
2148                </ul>
2149                <button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close"></button>
2150            </div>
2151            <div class="modal-body py-4">
2152                <div class="slideModal-body textAlignAuto" data-bind="html: m_currentSlideModal._description"></div>
2153
2154                <!-- ko ifnot: doCheckEmptyData(m_currentSlideModal._link()) -->
2155                <a class="btn btn-primary d-block w-100 mt-3" href="#" enable-href="true" data-bind="attr:{href: m_currentSlideModal._link}">
2156                    <!-- ko if: doCheckEmptyData(m_currentSlideModal._button()) -->أكثر<!-- /ko -->
2157                    <!-- ko ifnot: doCheckEmptyData(m_currentSlideModal._button()) --><span data-bind="text: m_currentSlideModal._button"></span><!-- /ko -->
2158                </a>
2159                <!-- /ko -->
2160            </div>
2161        </div>
2162    </div>
2163</div>
2164
2165
2166<!-- Cart Drawer Backdrop -->
2167<div id="UI_cartDrawerBackdrop" class="cart-drawer-backdrop" style="display:none"
2168     data-bind="visible: m_currentPopUpMessage._isVisible(), click: doCloseCartDrawer"></div>
2169
2170<!-- Cart Drawer -->
2171<div id="UI_cartDrawer" class="cart-drawer"
2172     data-bind="css: { 'cart-drawer-open': m_currentPopUpMessage._isVisible(), 'cart-drawer-short': m_drawerShortMode(), 'cart-drawer-alert-only': m_drawerShortMode() && m_currentCart._listCartDetailModel().length == 0 }">
2173
2174    <!-- Drawer Header -->
2175    <!-- ko if: !(m_drawerShortMode() && m_currentCart._listCartDetailModel().length == 0) -->
2176    <div class="cart-drawer-header">
2177        <h5 class="mb-0 fw-bold">
2178            عربة التسوق
2179        </h5>
2180        <button class="btn-close" type="button" aria-label="Close" data-bind="click: doCloseCartDrawer"></button>
2181    </div>
2182    <!-- /ko -->
2183
2184    <!-- Added Item Notification -->
2185    <!-- ko if: m_currentPopUpMessage._popUpMessageType() >= 0 -->
2186    <div class="cart-drawer-alert" data-bind="css: doGetClassDrawerAlert()">
2187        <div class="d-flex align-items-center gap-2">
2188            <!-- ko if: m_currentPopUpMessage._pictureUrl() && !(m_drawerShortMode() && m_currentCart._listCartDetailModel().length > 0) -->
2189            <img alt="" loading="lazy" class="rounded flex-shrink-0" style="width:40px; height:40px; object-fit:cover;" data-bind="attr:{ src: m_currentPopUpMessage._pictureUrl() }">
2190            <!-- /ko -->
2191            <div class="flex-grow-1 font-size-12" data-bind="html: doGetDrawerAlertMessage()"></div>
2192            <!-- ko if: m_drawerShortMode() && m_currentCart._listCartDetailModel().length == 0 -->
2193            <button class="btn-close flex-shrink-0" type="button" style="font-size: 10px;" aria-label="Close" data-bind="click: doCloseCartDrawer"></button>
2194            <!-- /ko -->
2195        </div>
2196        <!-- ko if: m_currentPopUpMessage._hasCouponShipment() -->
2197        <div class="shipteaser shipteaser-sm mt-2" data-bind="css: { 'shipteaser-done': !m_currentPopUpMessage._hasPartialShipmentDiscount() && m_currentPopUpMessage._drawLine() == 100 }" >
2198            <span class="shipteaser-icon"><i class="ci-delivery flipAuto"></i></span>
2199            <div class="shipteaser-body">
2200                <!-- ko if: m_currentPopUpMessage._hasPartialShipmentDiscount() -->
2201                <p class="shipteaser-text" data-bind="html: doGetShipmentTeaserMessage()"></p>
2202                <!-- /ko -->
2203
2204                <!-- ko if: !m_currentPopUpMessage._hasPartialShipmentDiscount() && m_currentPopUpMessage._drawLine() != 100 -->
2205                <p class="shipteaser-text">شراء <span class="shipteaser-value" data-bind="text: m_currentPopUpMessage._couponAmount()"></span> <span class="shipteaser-value" data-bind="text: doGetCurrentCurrency()"></span> المزيد للحصول عليه <strong>شحن مجاني</strong></p>
2206                <!-- /ko -->
2207
2208                <!-- ko if: !m_currentPopUpMessage._hasPartialShipmentDiscount() && m_currentPopUpMessage._drawLine() == 100 -->
2209                <p class="shipteaser-text">خدمة الشحن المجاني</p>
2210                <!-- /ko -->
2211
2212                <!-- ko if: m_currentPopUpMessage._drawLine() != 100 -->
2213                <div class="shipteaser-track" role="progressbar" aria-label="Free shipping progress">
2214                    <div class="shipteaser-fill" data-bind="style:{'width': m_currentPopUpMessage._drawLine()+'%'}"></div>
2215                </div>
2216                <!-- /ko -->
2217            </div>
2218        </div>
2219        <!-- /ko -->
2220    </div>
2221    <!-- /ko -->
2222
2223    <!-- Drawer Body - Cart Items -->
2224    <div class="cart-drawer-body">
2225        <!-- ko if: m_currentCart._listCartDetailModel().length != 0 -->
2226        <div data-bind="foreach: { data: m_showCartDrawer() ? doGetFilterCart() : [] }">
2227            <div class="cart-drawer-item">
2228                <div class="d-flex gap-2 align-items-start">
2229                    <div class="flex-shrink-0 position-relative">
2230                        <a class="cart-drawer-item-img d-block" enable-href="false" data-bind="attr:{href: doGetLinkObject($data._objectModel)}">
2231                            <img loading="lazy" data-bind="attr:{ src: doGetDefaultPictureByObject($data._objectModel, true), alt: $data._objectModel._name }">
2232                        </a>
2233                        <button class="cart-drawer-item-remove"
2234                                data-bind="click: $root.doRemoveCartDetail.bind($root, $data)"
2235                                type="button" aria-label="Remove">
2236                            <i class="ci-trash"></i>
2237                        </button>
2238                    </div>
2239                    <div class="flex-grow-1" style="min-width:0;">
2240                        <a enable-href="true" class="cart-drawer-item-title" data-bind="text: $data._objectModel._name, attr:{href: doGetLinkObject($data._objectModel)}"></a>
2241                        <div class="d-flex justify-content-between align-items-center mt-1">
2242                            <div class="text-accent fw-bold" data-bind="html: $root.doGetHtmlCartDetailPrice($data, true, true)"></div>
2243                            <!-- ko if: $data._cartDetailType() != CartDetailTypeEnum.FromBundle -->
2244                            <!-- ko if: $data._objectModel._objectSection() != ObjectSectionEnum.GiftCard && $data._objectModel._objectSection() != ObjectSectionEnum.Service -->
2245                            <div class="count-input count-input-xs rounded-pill flex-shrink-0">
2246                                <button type="button" class="btn btn-icon" data-bind="click: $root.doSetQuantity.bind($root, $data, QuantityActionEnum.Remove)">
2247                                    <span class="fw-bold">−</span>
2248                                </button>
2249                                <input autocomplete="off" type="number" class="form-control text-center" readonly="true" data-bind="value: $data._quantity">
2250                                <button type="button" class="btn btn-icon" data-bind="click: $root.doSetQuantity.bind($root, $data, QuantityActionEnum.Add)">
2251                                    <span class="fw-bold">+</span>
2252                                </button>
2253                            </div>
2254                            <!-- /ko -->
2255                            <!-- /ko -->
2256                        </div>
2257                        <!-- ko if: $data._objectModel._objectStockModel._objectStockStatus() == ObjectStockStatusEnum.Preserved -->
2258                        <div class="cart-drawer-item-preorder d-flex align-items-center mt-1">
2259                            <i class="ci-truck flipAuto me-1-Auto" data-bind="css:{'icon-flip-horizontal': doGetCulture() =='en'}"></i>
2260                            <!-- ko if: doGetCountryShortNameByCurrentCompany() == 'sa' -->
2261                            <span data-bind="text: doFormatPreserved($data._objectModel._objectStockModel._datePreserved(), 15, doGetCulture())"></span>
2262                            <!-- /ko -->
2263                            <!-- ko if: doGetCountryShortNameByCurrentCompany() == 'ae' -->
2264                            <span data-bind="text: doFormatPreserved($data._objectModel._objectStockModel._datePreserved(), 7, doGetCulture())"></span>
2265                            <!-- /ko -->
2266                        </div>
2267                        <!-- /ko -->
2268                    </div>
2269                </div>
2270            </div>
2271        </div>
2272        <!-- ko if: m_drawerShortMode() && m_currentCart._listCartDetailModel().length > 1 -->
2273        <div class="text-center py-2 border-top">
2274            <button type="button" class="btn btn-link p-0 text-decoration-none fw-semibold font-size-12"
2275                    style="color: rgba(var(--cz-primary-rgb));"
2276                    data-bind="click: function(){ m_drawerShortMode(false); }, text: 'عرض الجميع ' + doGetCartCount() + ' المنتجات'">
2277            </button>
2278        </div>
2279        <!-- /ko -->
2280        <!-- ko if: m_drawerShortMode() && m_currentCart._listCartDetailModel().length > 0 -->
2281        <div class="px-3 pb-2">
2282            <a class="btn btn-sm d-block w-100 cart-drawer-checkout"
2283               href="/Checkout" enable-href="false"
2284               onclick="m_handlerSession.doCloseCartDrawer()"
2285               style="font-size: 12px; padding: 6px 12px;">
2286                <i class="ci-card me-2-Auto fs-sm align-middle flipAuto"></i>الدفع
2287            </a>
2288        </div>
2289        <!-- /ko -->
2290        <!-- /ko -->
2291
2292        <!-- ko if: m_currentCart._listCartDetailModel().length == 0 && !m_drawerShortMode() -->
2293        <div class="text-center py-5 px-3">
2294            <i class="ci-card-bag" style="font-size:48px; color:#ccc;"></i>
2295            <h6 class="mt-3 text-muted">لا توجد منتجات في سلة التسوق الخاصة بك.</h6>
2296        </div>
2297        <!-- /ko -->
2298    </div>
2299
2300    <!-- Drawer Footer -->
2301    <!-- ko if: m_currentCart._listCartDetailModel().length != 0 && !m_drawerShortMode() -->
2302    <div class="cart-drawer-footer pb-sm-5 pb-md-4">
2303        <div class="d-flex justify-content-between align-items-start mb-3">
2304            <div class="textAlignAuto">
2305                <span class="text-accent fw-semibold">مجموع</span>
2306                <span class="text-muted font-size-10">(تشمل ضريبة القيمة المضافة)</span>
2307                <div class="fs-lg fw-bold" style="color: var(--cz-heading-color, #222);" data-bind="html: $root.doCalcPriceDynamic(m_currentCart._total(), true)"></div>
2308            </div>
2309            <!-- ko if: doGetCartTotalSaved() > 0 -->
2310            <div class="font-size-11 text-success fw-semibold textAlignAuto" style="margin-top: 4px;">
2311                <i class="ci-star font-size-10"></i> لقد أنقذت
2312                <div class="fs-sm fw-bold" data-bind="html: $root.doCalcPriceDynamic(doGetCartTotalSaved(), true)"></div>
2313            </div>
2314            <!-- /ko -->
2315        </div>
2316        <a class="btn d-block w-100 cart-drawer-checkout mb-2" href="/Checkout" enable-href="false" onclick="m_handlerSession.doCloseCartDrawer()">
2317            <i class="ci-card me-2-Auto fs-base align-middle flipAuto"></i>الدفع
2318        </a>
2319    </div>
2320    <!-- /ko -->
2321</div>
2322
2323
2324
2325
2326
2327<script type="application/javascript">
2328    window.doRedirection = function () {
2329        if (window.location.pathname.indexOf("CreateSell") != -1)
2330            window.location = window.location.origin;
2331    }
2332
2333    // The notification dropdown renders a row per advertisement, and it is in the header of every
2334    // page — so the whole list was bound on every page load for a panel most visitors never open.
2335    // The markup only foreaches once this says so; the flag stays true afterwards, since a second
2336    // open should cost nothing.
2337    //
2338    // Filling it is deliberately separate from opening it. On desktop the panel is opened by CSS
2339    // alone (.dropdown:hover > .dropdown-menu in StyleCartzilla-Menu.css), which no click handler
2340    // ever sees — so hovering showed the panel with nothing in it. The wrapper calls this on
2341    // pointer enter, which is the earliest moment either path can start.
2342    window.doPrepareAdvertisement = function () {
2343        if (typeof m_handlerSession != "undefined")
2344            m_handlerSession.m_showAdvertisement(true);
2345    }
2346
2347    window.doOpenAdvertisement = function () {
2348        doPrepareAdvertisement();
2349        doJsShowMenu('UI_menuWebAdvertisement');
2350    }
2351
2352    // Mobile renders its own copy of the same list, inside a modal opened from the footer
2353    // toolbar. Same gate, same flag: the rows exist once either surface is asked for.
2354    window.doOpenAdvertisementModal = function () {
2355        doPrepareAdvertisement();
2356        doShowModal('UI_userModalAdvertisement');
2357    }
2358
2359    window.doOpenProfile = function () {
2360        if (doCheckUUID(m_handlerSession.m_currentUser._id())){
2361            if(window.innerWidth <= 992)
2362                doShowModal('UI_menuUserMobile');
2363            else {
2364                var el = document.querySelector('#UI_userSession .dropdown-menu');
2365                if (el) el.classList.toggle('show');
2366            }
2367        }
2368        else {
2369            doShowModal('UI_sessionModal');
2370        }
2371    }
2372
2373
2374    doLoadScript(function () {
2375        doJsPasswordVisibilityToggle();          // wire modal password eye toggles (login/register/reset)
2376        const sessionInputs = ["UI_sessionCode1", "UI_sessionCode2", "UI_sessionCode3", "UI_sessionCode4"];
2377        doInitCodeInput(sessionInputs, m_handlerSession.m_currentStructUser._code, m_handlerSession, m_handlerSession.doEventSendCode);
2378
2379        var googleClientID = '316328785783-gk72dnq33tchhr0kdrtidg7enq1arami.apps.googleusercontent.com';
2380        var googleBtn = document.getElementById("UI_buttonGoogle");
2381        if (googleClientID != "" && googleBtn) {
2382            if (window.Capacitor && window.Capacitor.Plugins && window.Capacitor.Plugins.NativeAuth)
2383            {
2384                googleBtn.innerHTML =
2385                    '<button class="btn btn-outline-dark w-100">Sign in with Google</button>';
2386                googleBtn.onclick = async function () {
2387                    try {
2388                        // Native plugin reads serverClientId from google-services.json /
2389                        // GoogleService-Info.plist; web doesn't need to pass it.
2390                        var res = await window.Capacitor.Plugins.NativeAuth.signInWithGoogle({});
2391                        m_handlerSession.doGoogleCredentialResponse({ credential: res.idToken });
2392                    } catch (error) {
2393                        console.log(error);
2394                    }
2395                };
2396            }
2397            // Web (browser) Google Sign-In client is heavy (~69 KiB). Don't load it at
2398            // page load — defer to the first time the session modal opens. See
2399            // window.doInitGoogleSignIn + the shown.bs.modal listener below.
2400        }
2401
2402        var m_gsiLoaded = false;
2403        window.doInitGoogleSignIn = function () {
2404            if (m_gsiLoaded)
2405                return;
2406
2407            var googleClientID = '316328785783-gk72dnq33tchhr0kdrtidg7enq1arami.apps.googleusercontent.com';
2408            var googleBtn = document.getElementById("UI_buttonGoogle");
2409            var isNative = window.Capacitor && window.Capacitor.Plugins && window.Capacitor.Plugins.NativeAuth;
2410
2411            // Native wires googleBtn.onclick at page load and loads no web script — skip here.
2412            if (googleClientID == "" || !googleBtn || isNative)
2413                return;
2414
2415            m_gsiLoaded = true;
2416            doLoadScript(function () {
2417                try{
2418                    google.accounts.id.initialize({
2419                        client_id: googleClientID,
2420                        callback: m_handlerSession.doGoogleCredentialResponse
2421                    });
2422                    google.accounts.id.renderButton(
2423                        googleBtn,
2424                        { theme: "outline", size: "large" }  // customization attributes
2425                    );
2426                }
2427                catch(error){
2428                    console.log(error);
2429                }
2430
2431            }, "https://accounts.google.com/gsi/client");
2432        };
2433
2434        // The Google and Apple origins used to be preconnected from the head of every page, where
2435        // they were two handshakes nobody spent on a visit that never opens this modal. Warm them
2436        // here instead, on `show` rather than `shown`: the two doInit* handlers below fetch the SDKs
2437        // on `shown`, so this puts the connection one modal fade (~150-300 ms) ahead of the request
2438        // instead of in the same tick, which is the whole point of a preconnect.
2439        var m_signInWarmed = false;
2440        function doWarmSignInOrigins() {
2441            if (m_signInWarmed)
2442                return;
2443            m_signInWarmed = true;
2444
2445            var origins = ["https://accounts.google.com", "https://appleid.cdn-apple.com"];
2446            for (var w = 0; w < origins.length; w++) {
2447                var hint = document.createElement("link");
2448                hint.rel = "preconnect";
2449                hint.href = origins[w];
2450                hint.crossOrigin = "anonymous";
2451                document.head.appendChild(hint);
2452            }
2453        }
2454
2455        var sessionModalEl = document.getElementById("UI_sessionModal");
2456        if (sessionModalEl)
2457            sessionModalEl.addEventListener("show.bs.modal", doWarmSignInOrigins);
2458        if (sessionModalEl)
2459            sessionModalEl.addEventListener("shown.bs.modal", window.doInitGoogleSignIn);
2460
2461        var appleClientID = 'com.root.login.brandfull';
2462        var appleBtn = document.getElementById("appleid-signin");
2463        if (appleClientID != "" && appleBtn) {
2464            var capPlatform = (window.Capacitor && window.Capacitor.getPlatform) ? window.Capacitor.getPlatform() : "";
2465            var isNative = (capPlatform === "ios" || capPlatform === "android")
2466                           && window.Capacitor.Plugins && window.Capacitor.Plugins.NativeAuth;
2467
2468            if (isNative) {
2469                // iOS: ASAuthorization (bundle ID is the audience — pass {}).
2470                // Android: Custom Tab to appleid.apple.com, deep-link back via the
2471                // intent-filter on blendshome.com/auth/android.
2472                appleBtn.innerHTML =
2473                    '<button class="btn btn-dark w-100">Sign in with Apple</button>';
2474                appleBtn.onclick = async function () {
2475                    try {
2476                        var args = (capPlatform === "android")
2477                            ? { clientId: appleClientID, redirectUri: 'https://brandfull.com/auth/android' }
2478                            : {};
2479                        var res = await window.Capacitor.Plugins.NativeAuth.signInWithApple(args);
2480                        m_handlerSession.doAppleCredentialResponse(res.idToken);
2481                    } catch (error) {
2482                        console.log(error);
2483                    }
2484                };
2485            }
2486            // Web Apple Sign-In JS deferred to first modal open — see window.doInitAppleSignIn.
2487        }
2488
2489        var m_appleLoaded = false;
2490        window.doInitAppleSignIn = function () {
2491            if (m_appleLoaded)
2492                return;
2493
2494            var appleClientID = 'com.root.login.brandfull';
2495            var appleBtn = document.getElementById("appleid-signin");
2496            var capPlatform = (window.Capacitor && window.Capacitor.getPlatform) ? window.Capacitor.getPlatform() : "";
2497            var isNative = (capPlatform === "ios" || capPlatform === "android")
2498                           && window.Capacitor.Plugins && window.Capacitor.Plugins.NativeAuth;
2499
2500            // Native wires appleBtn.onclick at page load and loads no web script — skip here.
2501            if (appleClientID == "" || !appleBtn || isNative)
2502                return;
2503
2504            m_appleLoaded = true;
2505            doLoadScript(function () {
2506
2507                AppleID.auth.init({
2508                    clientId: appleClientID,
2509                    redirectURI: 'https://brandfull.com',
2510                    scope: 'name email',
2511                    usePopup: true,
2512                    onSuccess: (response) => console.log('responseApple - response', response),
2513                    onError: (error) => console.log('responseApple - error', error),
2514                });
2515
2516                document.addEventListener('AppleIDSignInOnSuccess', (event) => {
2517                    // Handle successful response.
2518                    console.log('AppleIDSignInOnSuccess', event.detail.authorization.id_token);
2519                    m_handlerSession.doAppleCredentialResponse(event.detail.authorization.id_token)
2520                });
2521
2522
2523                // Listen for authorization failures.
2524                document.addEventListener('AppleIDSignInOnFailure', (event) => {
2525                    // Handle error.
2526                    console.log('AppleIDSignInOnFailure', event);
2527                });
2528            }, "https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js");
2529        };
2530
2531        if (sessionModalEl)
2532            sessionModalEl.addEventListener("shown.bs.modal", window.doInitAppleSign
2532In);
2533    })
2534</script>
2534
2535
2536    
2537
2538<input autocomplete="off" style="visibility: hidden;display: none;" type="file" id="UI_addPicture" multiple accept="image/x-png,image/jpeg" />
2539<div id="UI_uploadImageModal" class="modal" tabindex="-1" role="dialog" style="z-index: 100000;">
2540    <div class="modal-dialog" style=" width: auto;">
2541        <div class="modal-content">
2542            <div class="modal-header">
2543                <div class="modal-title h4">  تحميل الصورة </div>
2544                <button type="button" class="btn border-0 bg-transparent p-0" data-bs-dismiss="modal" aria-label="غلق" style="position: inherit; " data-bind="style:{'float': doGetCulture() == 'en'? 'right':'left'}">
2545                    <i class="ci-close"></i>
2546                </button>
2547            </div>
2548            <div class="modal-body pt-1 px-0 pb-0" id="UI_bodyImageModal">
2549                <div id="image_demo"></div>
2550            </div>
2551            <div class="modal-footer py-1">
2552                <div class="w-100" style="text-align: center;">
2553                    <button class="btn btn-primary crop_image py-1" id="crop_image">
2554                        <i class="ci-reduce"></i>
2555                        اضف صورة
2556                    </button>
2557                    <button class="btn btn-secondary RotateRight py-1">
2558                        <i class="ci-compare"></i>
2559                        دوران
2560                    </button>
2561                </div>
2562            </div>
2563        </div>
2564    </div>
2565</div>
2566
2567<style>
2568    /* Cropper look & feel — id-scoped so these win over micro-cropper.js's injected global rules */
2569    #UI_uploadImageModal .modal-dialog { max-width: 480px; }
2570    #UI_uploadImageModal .modal-content {
2571        border: 0;
2572        border-radius: 18px;
2573        overflow: hidden;
2574        box-shadow: 0 24px 60px -14px rgba(17, 20, 28, .38);
2575    }
2576    #UI_uploadImageModal .modal-body {
2577        background: linear-gradient(180deg, #f6f7f9 0%, #eef0f3 100%);
2578    }
2579    #UI_uploadImageModal .croppie-container { padding: 16px 0 6px; }
2580
2581    /* darkened surround + rounded stage */
2582    #UI_uploadImageModal .cr-boundary {
2583        border-radius: 14px;
2584        box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .06);
2585    }
2586    /* crop window: soft white frame + subtle ring, keep Croppie's giant darken shadow */
2587    #UI_uploadImageModal .cr-viewport {
2588        border: 3px solid #fff;
2589        border-radius: 16px;
2590        box-shadow: 0 0 0 1px rgba(0, 0, 0, .18), 0 0 2000px 2000px rgba(17, 20, 28, .55);
2591    }
2592
2593    /* zoom slider */
2594    #UI_uploadImageModal .cr-slider-wrap { width: 82%; margin: 8px auto 18px; }
2595    #UI_uploadImageModal .cr-slider { padding: 10px 0; }
2596    #UI_uploadImageModal .cr-slider::-webkit-slider-runnable-track {
2597        height: 6px; border-radius: 6px; background: rgba(17, 20, 28, .14);
2598    }
2599    #UI_uploadImageModal .cr-slider::-webkit-slider-thumb {
2600        height: 20px; width: 20px; margin-top: -7px; border-radius: 50%;
2601        background: var(--theme-color, #fd5631); border: 2px solid #fff;
2602        box-shadow: 0 2px 6px rgba(0, 0, 0, .3); transition: transform .15s ease;
2603    }
2604    #UI_uploadImageModal .cr-slider:active::-webkit-slider-thumb { transform: scale(1.15); }
2605    #UI_uploadImageModal .cr-slider::-moz-range-track {
2606        height: 6px; border-radius: 6px; background: rgba(17, 20, 28, .14);
2607    }
2608    #UI_uploadImageModal .cr-slider::-moz-range-thumb {
2609        height: 20px; width: 20px; border-radius: 50%;
2610        background: var(--theme-color, #fd5631); border: 2px solid #fff;
2611        box-shadow: 0 2px 6px rgba(0, 0, 0, .3);
2612    }
2613
2614    /* footer actions */
2615    #UI_uploadImageModal .modal-footer {
2616        background: #fff; border-top: 1px solid rgba(0, 0, 0, .06); padding: 14px;
2617    }
2618    #UI_uploadImageModal .modal-footer .w-100 {
2619        display: flex; justify-content: center; gap: 10px;
2620    }
2621    #UI_uploadImageModal .modal-footer .btn {
2622        border-radius: 12px; padding: .55rem 1.15rem; font-weight: 600;
2623        display: inline-flex; align-items: center; gap: .4rem;
2624    }
2625    #UI_uploadImageModal .modal-footer .btn i { font-size: 1.05rem; }
2626</style>
2627
2628
2629<script type="application/javascript">
2630
2631    var image_crop = null;
2632    var image_handler = null;
2633    var image_id = null;
2634    var image_name = null;
2635    var image_param = null;
2636    var image_input = null;
2637    var image_object = null;
2638    var image_folder = null;
2639    var image_index = 0;
2640    var _cropperLoaded = false;
2641
2642    // Lazy-load micro-cropper.js on first use
2643    function doLoadCropper() {
2644        return new Promise(function (resolve) {
2645            if (_cropperLoaded || typeof Croppie !== 'undefined') { _cropperLoaded = true; resolve(); return; }
2646            var s = document.createElement('script');
2647            // Versioned like every other asset. This one builds its own 
2647<script> instead of
2648            // going through doLoadScript, so it does not inherit the cache-busting there and
2649            // a deploy would keep serving the previously cached copy.
2650            s.src = 'https://cdn.brandfull.com/_Js/micro-cropper.js?v=639260136226636726';
2651            s.onload = function () { _cropperLoaded = true; resolve(); };
2652            document.head.appendChild(s);
2653        });
2654    }
2655
2656    document.getElementById("UI_addPicture").addEventListener('change', function () {
2657        doShowModal('UI_uploadImageModal');
2658
2659        image_input = document.getElementById("UI_addPicture");
2660        image_index = image_input.files.length - 1;
2661        doLoadCropper().then(function () {
2662            doInitImageTool(image_input, image_object._dimension(), null, image_object._order(), null);
2663        });
2664    });
2665
2666    document.getElementById("UI_uploadImageModal").addEventListener('hidden.bs.modal', function() {
2667        document.getElementById("UI_addPicture").value = '';
2668    });
2669
2670    var m_currentPicture = null;
2671    window.doOpenCropper = function (handler, folder, item) {
2672        image_handler = handler;
2673        image_folder = folder;
2674        image_object = item;
2675        doLoadCropper().then(function () {
2676            if (item._binary()) {
2677                doShowModal('UI_uploadImageModal');
2678                doInitImageTool(document.getElementById("UI_addPicture"), item._dimension(), item._binary(), item._order(), item._name());
2679            }
2680            else if (item._name()) {
2681                doShowModal('UI_uploadImageModal');
2682                doInitImageTool(document.getElementById("UI_addPicture"), item._dimension(), image_folder + '/' + item._name(), item._order(), item._name());
2683            }
2684            else
2685                document.getElementById("UI_addPicture").click();
2686        });
2687    }
2688
2689    function doInitImageTool(input, dimension, imagepath = null, entityId = null, entityName = null) {
2690        var image_demo = document.querySelector('#image_demo');
2691        image_id = entityId;
2692        image_name = entityName;
2693        image_input = input;
2694        image_param = doGetParamPicture(dimension);
2695        if (image_crop != null)
2696            image_crop.destroy();
2697
2698        var xW = image_param.size.width / Math.max(image_param.size.height, image_param.size.width);
2699        image_param.viewport.width = image_param.viewport.width * xW;
2700        var xH = image_param.size.height / Math.max(image_param.size.height, image_param.size.width);
2701        image_param.viewport.height = image_param.viewport.height * xH;
2702        image_crop = new Croppie(image_demo, {
2703            showZoomer: true,
2704            enableResize: false,
2705            enableOrientation: true,
2706            enforceBoundary: true,
2707            mouseWheelZoom: true,
2708            enableExif: true,
2709            viewport: image_param.viewport,
2710            boundary: image_param.boundary
2711        });
2712
2713        var reader = new FileReader();
2714        reader.onload = function (event) {
2715            image_crop.bind({
2716                url: event.target.result,
2717            }).then(function () {
2718                image_crop.setZoom(0);
2719            });
2720        };
2721
2722        if (imagepath != null) {
2723            var base64Rejex = /^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i;
2724            var isBase64Valid = base64Rejex.test(imagepath);
2725            if (isBase64Valid) {
2726                var url = "data:image/png;base64," + imagepath;
2727                var byteString = atob(url.split(',')[1]);
2728                var ab = new ArrayBuffer(byteString.length);
2729                var ia = new Uint8Array(ab);
2730                for (var i = 0; i < byteString.length; i++) {
2731                    ia[i] = byteString.charCodeAt(i);
2732                }
2733                var blob = new Blob([ab], { type: image_param.format ? 'image/' + image_param.format : 'image/jpeg' });
2734                reader.readAsDataURL(blob);
2735            } 
2736            else {
2737                var request = new XMLHttpRequest();
2738                request.open("POST", '/ConvertBinary?imageUrl=' + imagepath, true);
2739                request.onreadystatechange = function () {
2740                    if (request.readyState == 4)
2741                    {
2742                        if (request.status == 200) {
2743                            try {
2744                                response = JSON.parse(request.responseText);
2745                                var url = "data:image/png;base64," + response.imageData;
2746                                var byteString = atob(url.split(',')[1]);
2747                                var ab = new ArrayBuffer(byteString.length);
2748                                var ia = new Uint8Array(ab);
2749                                for (var i = 0; i < byteString.length; i++) {
2750                                    ia[i] = byteString.charCodeAt(i);
2751                                }
2752                                var blob = new Blob([ab], { type: image_param.format ? 'image/' + image_param.format : 'image/jpeg' });
2753                                reader.readAsDataURL(blob);
2754                            }
2755                            catch (error) { response = request.responseText; }
2756                        }
2757                    }
2758                };
2759                request.send();
2760            }
2761        }
2762        else if (input.files.length != 0) {
2763            reader.readAsDataURL(input.files[image_index]);
2764        }
2765    }
2766
2767    
2768    function doGetParamPicture(dimension) {
2769        var pSize = document.getElementById('UI_bodyImageModal').clientWidth;
2770
2771        var dimensions = dimension.split("x");
2772        if (dimensions.length != 2)
2773            dimensions = dimension.split("X");
2774        if (dimensions.length != 2)
2775            dimensions = dimension.split("*");
2776        return {
2777            size: { width: dimensions[0], height: dimensions[1] },
2778            viewport: { width: pSize * 0.75, height: pSize * 0.75, type: 'square' },
2779            boundary: { width: pSize - 30, height: pSize - 30 }
2780        };
2781    }
2782    function doClickCrop() {
2783        if (image_crop == null)
2784            return;
2785
2786        image_crop.result({
2787            type: 'canvas',
2788            size: image_param.size,
2789            format: image_param.format ? image_param.format : "jpeg",
2790            quality: image_param.quality ? image_param.quality.value : 0.5
2791        }).then(function (response) {
2792            var size = response.length / (1024 * 1024);
2793            if (response && size < 4) 
2794            {
2795                image_object = image_handler.doAddImage(image_input ? image_input.id : null, image_id, image_name, response.split(";base64,")[1], response.split(";base64,")[0].split("/")[1]);
2796                if (image_index != 0 && image_object != null && image_object != undefined) {
2797                    image_index = image_index - 1;
2798                    setTimeout(doInitImageTool.bind(null, image_input, image_object._dimension(), null, image_object._order(), null), 250);
2799                }
2800                else
2801                    doHideModal('UI_uploadImageModal');
2802            }
2803        });
2804    }
2805    function doClickRotateRight() {
2806        if (image_crop != null)
2807            image_crop.rotate(90);
2808    }
2809
2810    document.querySelector("#crop_image").removeEventListener('click', doClickCrop);
2811    document.querySelector('#crop_image').addEventListener('click', doClickCrop);
2812
2813    document.querySelector(".RotateRight").removeEventListener('click', doClickRotateRight);
2814    document.querySelector('.RotateRight').addEventListener('click', doClickRotateRight);
2815    
2816</script>
2816
2817
2818
2819
2820
2821    
2822
2823
2824
2825
2826<script type="application/javascript">
2827    // Body lives in Tools/Cartzilla/Footer.ts -- the three app footers each carried their own
2828    // near-identical copy of it.
2829    //
2830    // Must go through doLoadScript: Footer.ts is compiled into script.min.js, which is fetched
2831    // asynchronously, so doInitLayoutFooter does not exist yet when this inline script parses.
2832    // Calling it bare threw "doInitLayoutFooter is not defined" on every page. doLoadScript is
2833    // defined by _LayoutScript, which _Layout renders well before this partial, and it is
2834    // idempotent -- the bundle is requested once and later callbacks fire immediately.
2835    doLoadScript(function () { doInitLayoutFooter(); });
2836</script>
2836
2837
2838<!-- Footer-->
2839
2840
2841<footer id="UI_LayoutFooter" class="footer bg-secondary" style="visibility: hidden;">
2842
2843
2844
2845    <div id="UI_social" class="bf-surfaceBand px-lg-3">
2846        <div class="container d-flex flex-md-row flex-sm-column py-sm-3 py-md-2 py-lg-3">
2847            <div class="col-md-6 col-12 text-center mx-auto">
2848                <h3 class="pb-1 text-accent mb-2">انضم إلى نشرتنا الإخبارية الآن</h3>
2849                <p class="fs-sm d-sm-none text-white">تلقي آخر التحديثات حول العروض الترويجية لمنتجاتنا</p>
2850
2851            </div>
2852            <div class="d-flex flex-wrap align-items-center col-md-6 col-12">
2853                <div class="input-group flex-nowrap">
2854                    <i class="ci-mail position-absolute top-50 translate-middle-y text-muted fs-base ms-3-Auto  zindex-10"></i>
2855                    <input autocomplete="email" class="form-floating form-control rounded-start-Auto" type="email" data-bind="value : m_emailNewsletter" placeholder="البريد الإلكتروني">
2856                    <button class=" btn btn-primary" type="button" data-bind="click : doSaveNewsletter">
2857                        ارسل
2858                    </button>
2859                </div>
2860                <!-- ko if:  !doCheckEmptyData(m_errorNewsletter()) -->
2861                <small class="text-danger" data-bind="text: m_errorNewsletter"></small>
2862                <!-- /ko -->
2863                <div class="subscription-status"></div>
2864            </div>
2865        </div>
2866
2867    </div>
2868
2869    <div class="p-lg-3 p-md-2 mb-2">
2870        <div class="mx-auto px-1 row" style="max-width: 80rem;">
2871
2872            <div id="UI_companyContact" class="col-md-4 col-12 order-sm-first">
2873
2874                <div class="form-text text-black">
2875                    <div class="widget widget-light pb-2 mb-md-4">
2876                        <!-- ko if:  !doCheckEmptyData(m_currentCompany._whatsappLink()) -->
2877                        <a name="supportwhatsapp" class="btn-social bs-light bs-whatsapp me-1-Auto mb-1" href="#" aria-label="whatsapp" data-bind="attr:{href:m_currentCompany._whatsappLink}" target="_blank" enable-href="true" rel="noreferrer">
2878                            <i class="ci-whatsapp font-size-20"></i>
2879                        </a>
2880                        <!-- /ko -->
2881                        <!-- ko if:  !doCheckEmptyData(m_currentCompany._facebookLink()) -->
2882                        <a name="supportfacebook" class="btn-social bs-light bs-facebook me-1-Auto mb-1" href="#" aria-label="facebook" data-bind="attr:{href:m_currentCompany._facebookLink}" target="_blank" enable-href="true" rel="noreferrer">
2883                            <i class="ci-facebook font-size-20"></i>
2884                        </a>
2885                        <!-- /ko -->
2886                        <!-- ko if:  !doCheckEmptyData(m_currentCompany._twitterLink()) -->
2887                        <a name="supporttwitter" class="btn-social bs-light bs-twitter me-1-Auto mb-1" href="#" aria-label="twitter" data-bind="attr:{href:m_currentCompany._twitterLink}" target="_blank" enable-href="true" rel="noreferrer">
2888                            <i class="ci-twitter font-size-20"></i>
2889                        </a>
2890                        <!-- /ko -->
2891                        <!-- ko if:  !doCheckEmptyData(m_currentCompany._instagramLink()) -->
2892                        <a name="supportinstagram" class="btn-social bs-light bs-instagram me-1-Auto mb-1" href="#" aria-label="instagram" data-bind="attr:{href:m_currentCompany._instagramLink}" target="_blank" enable-href="true" rel="noreferrer">
2893                            <i class="ci-instagram font-size-20"></i>
2894                        </a>
2895                        <!-- /ko -->
2896                        <!-- ko if:  !doCheckEmptyData(m_currentCompany._snapchatLink()) -->
2897                        <a name="supportsnapchat" class="btn-social bs-light bs-facebook me-1-Auto mb-1" href="#" aria-label="snapchat" data-bind="attr:{href:m_currentCompany._snapchatLink}" target="_blank" enable-href="true" rel="noreferrer">
2898                            <i class="ci-snapchat font-size-20"></i>
2899                        </a>
2900                        <!-- /ko -->
2901                        <!-- ko if:  !doCheckEmptyData(m_currentCompany._tiktokLink()) -->
2902                        <a name="supporttiktok" class="btn-social bs-light bs-facebook me-1-Auto mb
2902-1" href="#" aria-label="tiktok" data-bind="attr:{href:m_currentCompany._tiktokLink}" target="_blank" enable-href="true" rel="noreferrer">
2903                            <i class="ci-tiktok font-size-20"></i>
2904                        </a>
2905                        <!-- /ko -->
2906                    </div>
2907                </div>
2908
2909
2910                <div class="d-grid col-12">
2911                    <div class="form-text  text-white me-2-Auto">
2912                        <i class="ci-location"></i>
2913                        <span data-bind="html: doGetAddress(m_currentCompany._addressModel, '</br>')">
2914                        </span>
2915                    </div>
2916                    <div class="d-flex flex-wrap text-white">
2917                        <div class="me-2-Auto widget-light">
2918                            <i class="ci-mail"></i>
2919                            <a href="#" class="widget-list-link d-inline " data-bind="attr:{href: 'mailto:'+ m_currentCompany._addressModel._email()}" target="_blank" enable-href="true" rel="noreferrer">
2920                                <b data-bind="text:m_currentCompany._addressModel._email"></b>
2921                            </a>
2922                        </div>
2923                        <div class="me-2-Auto widget-light widget-list-item">
2924                            <i class="ci-phone"></i>
2925                            <a href="#" class="widget-list-link d-inline" data-bind="attr:{href: 'tel:'+ m_currentCompany._addressModel._phone()}" target="_blank" enable-href="true" rel="noreferrer">
2926                                <b data-bind="text:m_currentCompany._addressModel._phone"></b>
2927                            </a>
2928                        </div>
2929                    </div>
2930
2931                </div>
2932
2933            </div>
2934
2935
2936            <div id="UI_companyInfo" class="col-md-4 col-12 px-md-0 mb-2 m-sm-3">
2937                <div class=" row mt-n1 form-text text-black mb-1">
2938                    <div class="col-3 ">
2939                        <a class="d-inline-block align-middle" href="#">
2940                            <!-- ko if:  !doCheckEmptyData(m_currentCompany._pictureModel._name()) -->
2941                            <img loading="lazy" width="72" height="40" class="d-block" data-bind="attr:{src: doGetWebpLink('https://cdn.brandfull.com/Content/company/'+ m_currentCompany._pictureModel._name()), title: m_currentCompany._name, alt: m_currentCompany._name}" alt="company">
2942                            <!-- /ko -->
2943                        </a>
2944                    </div>
2945                    <div class="col-9">
2946                        <div class="form-text text-accent">
2947                            <strong class="font-size-16" data-bind="text: m_currentCompany._name()"></strong>
2948                        </div>
2949                        <div class="form-text text-white pb-2 mt-3">
2950                            <span class="" data-bind="text: m_currentCompany._description()"></span>
2951
2952                            <div class="d-flex mt-sm-2" data-bind="foreach: { data: m_handlerLayout.m_listCategoryMenuDepartmentFooter, as: 'subCategory' }">
2953                                <a class="col-2" href="#" enable-href="false" data-bind="attr:{ href: doGetLinkLoadMenu (subCategory, 'About')}">
2954                                    <!-- ko if: !doCheckEmptyData(subCategory._pictureName()) -->
2955                                    <img loading="lazy" class="p-1" data-bind="attr:{src: doGetWebpLink('https://cdn.brandfull.com/Content/category/'+subCategory._pictureName()), title:subCategory._name, alt:subCategory._name}" width="100%" height="100%" alt="category" />
2956                                    <!-- /ko -->
2957                                </a>
2958                            </div>
2959                        </div>
2960                    </div>
2961
2962                </div>
2963            </div>
2964
2965            <div id="UI_companyLinks" class="col-md-4 col-12 mb-sm-5" style="display:flex; flex-wrap: wrap">
2966                <!-- ko foreach: m_listCategoryMenuFooter -->
2967                <div class=" col-12 active footer-links " data-bind=" class: $root.m_listCategoryMenuFooter().length == 2? 'col-sm-6' : 'col-sm-4'  ,attr:{'id': 'footing_'+ $index() }">
2968                    <div class="widget textAlignAuto">
2969                        <div class="widget widget-links widget-light mb-4">
2970                            <div class="h6 widget-title text-accent  pb-1" data-bind="text: $data._name()"></div>
2971                            <!-- ko if: $data._list().length!=0 -->
2972                            <ul class="widget-list" data-bind="foreach: { data: $data._list(), as: 'subCategory' }">
2973                                <li class="widget-list-item">
2974                                    <a class="widget-list-link" href="#" enable-href="false" data-bind="attr:{ href: doGetLinkLoadMenu (subCategory, 'About')}">
2975                                        <!-- ko if: !doCheckEmptyData(subCategory._pictureName()) -->
2976                                        <i><img alt="" loading="lazy" data-bind="attr:{src: doGetWebpLink('https://cdn.brandfull.com/Content/category/'+subCategory._pictureName()), title:subCategory._name}" width="18" height="18" /></i>
2977                                        <!-- /ko -->
2978                                        <span data-bind="text: subCategory._name"></span>
2979                                    </a>
2980                                </li>
2981                            </ul>
2982                            <!-- /ko -->
2983                        </div>
2984                    </div>
2985                </div>
2986                <!-- /ko -->
2987            </div>
2988
2989        </div>
2990    </div>
2991</footer>
2992
2993<!-- Back To Top Button-->
2994<a id="UI_topArraw" class="btn-scroll-top" onclick="doScrollToTop()">
2995    <span class="btn-scroll-top-tooltip text-muted fs-sm me-2">أعلى</span>
2996    <i class="btn-scroll-top-icon ci-arrow-up"></i>
2997</a>
2998
2999
3000<div id="UI_menuUserMobile" class="modal fade slide-up" tabindex="-1" role="dialog" aria-labelledby="UI_menuUserMobileLabel" aria-modal="true">
3001    <div class="modal-dialog" role="document">
3002        <div class="modal-content">
3003            <div class="modal-header border-bottom">
3004                <h5 class="modal-title fw-bold" id="UI_menuUserMobileLabel">قائمة الملف الشخصي</h5>
3005                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
3006            </div>
3007            <div class="modal-body p-4">
3008                <div class="widget widget-cart px-3 pt-2 pb-3 textAlignAuto">
3009                    <a class="dropdown-item d-flex align-items-center py-1" enable-href="false" href="/Account/Profile" data-bs-dismiss="modal" aria-label="Close">
3010                        <i class="ci-user opacity-60 me-2-Auto"></i>الملف الشخصي
3011                    </a>
3012                    <a class="dropdown-item d-flex align-items-center py-1" enable-href="false" href="/Account/Invoices" data-bs-dismiss="modal" aria-label="Close">
3013                        <i class="ci-basket opacity-60 me-2-Auto"></i>الفواتير
3014                    </a>
3015                    <a class="dropdown-item d-flex align-items-center py-1" enable-href="false" href="/Account/Supports" data-bs-dismiss="modal" aria-label="Close">
3016                        <i class="ci-help opacity-60 me-2-Auto"></i>تذاكر
3017                    </a>
3018                        <a class="dropdown-item d-flex align-items-center py-1" enable-href="false" href="/Account/Messages" data-bs-dismiss="modal" aria-label="Close">
3019                            <i class="ci-message opacity-60 me-2-Auto"></i>رسائل
3020                        </a>
3021
3022                    <div class="dropdown-divider"></div>
3023                    <a class="dropdown-item d-flex align-items-center py-1" href="#" enable-href="false" data-bind="click: $root.doLogOut.bind($root, '/Account/LogOff?Value=https%3A%2F%2Fbrandfull.com%2Far-sa%2FAbout%2Ftermsandcondition')" data-bs-dismiss="modal" aria-label="Close">
3024                        <i class="ci-sign-out opacity-60 me-2-Auto"></i>تسجيل الخروج
3025                    </a>
3026                </div>
3027            </div>
3028        </div>
3029    </div>
3030</div>
3031
3032
3033<div id="UI_userModalAdvertisement" class="modal fade slide-up" tabindex="-1" role="dialog" aria-labelledby="UI_userModalAdvertisementLabel" aria-modal="true">
3034    <div class="modal-dialog" role="document">
3035        <div class="modal-content overflow-hidden">
3036            <div class="modal-header border-bottom">
3037                <h5 class="modal-title fw-bold" id="UI_userModalAdvertisementLabel">إشعار</h5>
3038                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
3039            </div>
3040            <div class="modal-body">
3041                <div class="widget widget-cart pt-2 pb-0">
3042                    <div class="d-flex align-items-center justify-content-between">
3043                        <div class="col-md-10">
3044
3045                            <!-- ko if: m_handlerLayout.m_isViewMobile() -->
3046                            <!-- ko if: m_enableNotifGrant() -->
3047                            <button id="UI_notifGrant" class="btn d-flex align-content-between align-items-center font-size-10 p-1 " onclick="doGetPermissionNotification()">
3048                                <i class="ci-settings me-2-Auto font-size-14 "></i>
3049                                <span class="form-check-label elide text-black fw-bolder heartbeat" for="UI_agreeWebPush">
3050                                    ابقني على اطلاع
3051                                </span>
3052                            </button>
3053                            <!-- /ko -->
3054                            <!-- ko if: m_enableNotifDenied() -->
3055                            <div id="UI_notifDenied" class="d-flex align-content-between align-items-center font-size-10 p-1 ">
3056                                <i class="ci-announcement me-2-Auto font-size-14  fw-bolder"></i>
3057                                <span class="form-check-label elide text-danger fw-bolder heartbeat">
3058                                    الإشعارات محجوبة. شغلها في إعدادات المتصفح لتحصل على تنبيهات.
3059                                </span>
3060                            </div>
3061                            <!-- /ko -->
3062                            <!-- /ko -->
3063                        </div>
3064                    </div>
3065
3066                    <div id="UI_notificationList" data-simplebar data-simplebar-auto-hide="false" style="overflow-x: hidden;max-height: 21rem;" data-bind="visible: m_listAdvertisement().length!=0, foreach: { data: m_showAdvertisement() ? m_listAdvertisement() : [] }">
3067    <div class="border-bottom py-1 me-3-Auto d-flex justify-content-between border-danger" style="    border-bottom-style: dotted !important;" data-bs-dismiss="modal">
3068        <label class="form-text elide w-75 pointer" data-bind="click: $root.doSetTaged.bind($root, $data, true), text:$data._subject()"></label>
3069        <b class="form-check-label textAlignReverse font-size-10 d-inline-block mb-n2 fw-light" data-bind="click: $root.doSetTaged.bind($root, $data, true), text: doCalcDateDifference(doCastFromUTC($data._dateCreate()))"></b>
3070    </div>
3071</div>
3072
3073                </div>
3074
3075            </div>
3076        </div>
3077    </div>
3078</div>
3079<div id="UI_footerMenu" class="handheld-toolbar position-fixed show" style="height: 3.5rem;">
3080    <div class="d-table table-layout-fixed w-100 pt-1" style="height: 100%">
3081
3082        <a name="footer-home" class="d-table-cell handheld-toolbar-item" href="/" rel="nofollow" enable-href="false" aria-label="go to home">
3083            <span class="handheld-toolbar-icon"><i class="ci-home"></i></span>
3084        </a>
3085        <a name="footer-user" class="d-table-cell handheld-toolbar-item" aria-label="قائمة الملف الشخصي" href="javascript:void(0)" enable-href="false" rel="nofollow" listener="false" onclick="doOpenProfile()">
3086            <span class="handheld-toolbar-icon"><i class="ci-user"></i></span>
3087        </a>
3088
3089
3090        <!-- ko if: doCheckUUID(m_currentUser._id()) -->
3091        <a name="footer-favorites" class="d-table-cell handheld-toolbar-item" aria-label="المفضله" href="/Account/Favorites" rel="nofollow" enable-href="false">
3092            <span class="handheld-toolbar-icon"><i class="ci-heart"></i></span>
3093        </a>
3094
3095        <a name="footer-notes" class="d-table-cell handheld-toolbar-item" aria-label="إشعار" href="javascript:void(0)" rel="nofollow" enable-href="false" listener="false" onclick="doOpenAdvertisementModal()">
3096            <span class="handheld-toolbar-icon">
3097                <!-- ko if: m_countAdvertisement() != 0 -->
3098                <span class="bg-danger font-size-10 text-white counterAdv" data-bind="text: m_countAdvertisement() > 99 ? '99+' : m_countAdvertisement()"></span>
3099                <!-- /ko -->
3100                <i class="ci-bell"></i>
3101            </span>
3102        </a>
3103        <!-- /ko -->
3104
3105    </div>
3106</div>
3107
3108
3109
3110    <!-- END FOOTER -->
3111    <div id="UI_preLoader" class="nav-progress" role="progressbar" aria-live="polite"
3112         style="display: none;"
3113         data-bind="visible: m_handlerLayout.m_customLoader()">
3114        <span class="nav-progress-bar"></span>
3115        <span class="seo-hidden">تحميل</span>
3116    </div>
3117    <!-- Google Tag Manager -->
3118<script>
3119    //we need it for GTMManager
3120    doLoadScript(function() {
3121        doSetThirdParty(window.dataLayer);
3122    });
3123</script>
3123
3124<!-- End Google Tag Manager -->
3125<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 3125-3126
3125
3126<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3126GTM-PTJJCWLL
vendor: 83 bytes, line 3126
3126" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
3127<!-- End Google Tag Manager (noscript) -->
3128
3129
3130
3131<noscript>
3132    <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=602667531455664&ev=PageView&noscript=1" />
3133</noscript>
3134<!-- End Meta Pixel Code -->
3135    <svg  id="8dfd9ecb-4c59-4082-9d62-10717474add2.svg" style="display: none;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1124.14 1256.39">
3136  <path class="cls-1" d="M699.62,1113.02h0c-20.06,44.48-33.32,92.75-38.4,143.37l424.51-90.24c20.06-44.47,33.31-92.75,38.4-143.37l-424.51,90.24Z"></path>
3137  <path class="cls-1" d="M1085.73,895.8c20.06-44.47,33.32-92.75,38.4-143.37l-330.68,70.33v-135.2l292.27-62.11c20.06-44.47,33.32-92.75,38.4-143.37l-330.68,70.27V66.13c-50.67,28.45-95.67,66.32-132.25,110.99v403.35l-132.25,28.11V0c-50.67,28.44-95.67,66.32-132.25,110.99v525.69l-295.91,62.88c-20.06,44.47-33.33,92.75-38.42,143.37l334.33-71.05v170.26l-358.3,76.14c-20.06,44.47-33.32,92.75-38.4,143.37l375.04-79.7c30.53-6.35,56.77-24.4,73.83-49.24l68.78-101.97v-.02c7.14-10.55,11.3-23.27,11.3-36.97v-149.98l132.25-28.11v270.4l424.53-90.28Z"></path>
3138</svg>
3139
3140
3141    
3142<script type="application/javascript">
3143    // What is left here is what is genuinely PER-REQUEST. m_jsonTranslate, jsonListCategory,
3144    // jsonListCompany and jsonListCountry have all moved to /InitData.js (HostController), because
3145    // none of them varies by anything but language: inlining them meant re-sending ~280 KB, the
3146    // category tree alone 270 KB of a 784 KB document, on every navigation and cached by nothing.
3147    // _LayoutScript requests that file first, ahead of the bundle, and the ready queue will not run a
3148    // callback until it has landed.
3149    //
3150    // Property writes onto GlobalSettingTranslateEnum. This one stays: it is resolved from the
3151    // request's companyID header, so it is not the same answer for two visitors on one deployment.
3152    // The body has to stay unevaluated until doSetEnumManager calls it -- GlobalSettingTranslateEnum
3153    // comes from /InitData.js along with the other 110 enums, and does not exist at this point in
3154    // the parse. (It was a script.min.js symbol until the enums moved; same answer either way.)
3155    function doApplySettingByCompany() {
3156        GlobalSettingTranslateEnum.PathCategoryPicture = "https://cdn.brandfull.com/Content/category/";
3157GlobalSettingTranslateEnum.PathObjectTypePicture = "https://cdn.brandfull.com/Content/objecttype/";
3158GlobalSettingTranslateEnum.PathObjectPicture = "https://cdn.brandfull.com/Content/object/";
3159GlobalSettingTranslateEnum.PathPaymentMethodPicture = "https://cdn.brandfull.com/Content/paymentMethod/";
3160GlobalSettingTranslateEnum.PathTrackerPicture = "https://cdn.brandfull.com/Content/tracker/";
3161GlobalSettingTranslateEnum.PathShipmentMethodPicture = "https://cdn.brandfull.com/Content/shipmentMethod/";
3162GlobalSettingTranslateEnum.PathCountryPicture = "https://cdn.brandfull.com/Content/country/";
3163GlobalSettingTranslateEnum.BaseUrlAPI = "https://brandfullsapi.azurewebsites.net";
3164GlobalSettingTranslateEnum.BaseUrl = "https://brandfull.com";
3165GlobalSettingTranslateEnum.Take = "8";
3166GlobalSettingTranslateEnum.CdnUrl = "https://cdn.brandfull.com";
3167GlobalSettingTranslateEnum.RedirectUrlPaymentWeb = "https://brandfull.com/Invoice/Edit";
3168GlobalSettingTranslateEnum.PathCompanyPicture = "https://cdn.brandfull.com/Content/company/";
3169GlobalSettingTranslateEnum.TicketLifeTime = "";
3170GlobalSettingTranslateEnum.AppName = "Brandfull";
3171GlobalSettingTranslateEnum.PathSlidePicture = "https://cdn.brandfull.com/Content/slide/";
3172GlobalSettingTranslateEnum.TakeObjectShop = "20";
3173GlobalSettingTranslateEnum.PathReplayPicture = "https://cdn.brandfull.com/Content/replay/";
3174GlobalSettingTranslateEnum.MessageServiceStatus = "true";
3175GlobalSettingTranslateEnum.SmartPricingServiceStatus = "";
3176GlobalSettingTranslateEnum.PathChatPicture = "https://cdn.brandfull.com/Content/chat/";
3177GlobalSettingTranslateEnum.PathDetailPicture = "https://cdn.brandfull.com/Content/detail/";
3178GlobalSettingTranslateEnum.PathColorPicture = "https://cdn.brandfull.com/Content/color/";
3179GlobalSettingTranslateEnum.LimitAddCartQuantity = "";
3180GlobalSettingTranslateEnum.MaketPlaceServiceStatus = "true";
3181GlobalSettingTranslateEnum.PathDivPicture = "https://cdn.brandfull.com/Content/divTemplate/";
3182GlobalSettingTranslateEnum.PathProfilePicture = "https://cdn.brandfull.com/Content/profile/";
3183GlobalSettingTranslateEnum.PathMessagePicture = "https://cdn.brandfull.com/Content/message/";
3184GlobalSettingTranslateEnum.PathSurveyPicture = "https://cdn.brandfull.com/Content/survey/";
3185GlobalSettingTranslateEnum.PathInvoiceDetailStatusPicture = "https://cdn.brandfull.com/Content/invoiceDetailStatus/";
3186
3187    }
3188</script>
3188
3189
3190
3191
3192<script id="Template_Empty" type="text/html"></script>
3192
3193    
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206<script id="Template_ItemComponent_ObjectDefault" type="text/html"><div class="card product-card shadow-none" data-bind="class: $data.mode"><!--ko if :  $data._listCategoryTop().length != 0 --><div class="badge p-0 d-flex flex-column gap-1"><!-- ko foreach: $data._listCategoryTop --><a class="bg-danger rounded-2 px-1 font-size-10" href="#" enable-href="false" data-bind="
3207                            html: doGenerateLabel($data._label()),
3208                            style:{'background-color': doCheckIsLink($data._label())? 'transparent' : $data._colorBackgroundHex(), 'color': $data._colorLabelHex()},
3209                                        attr:{href: doGetLinkCategory($data), 'data-divID': $parent.divID }"></a><!-- /ko --></div><!-- /ko --><!--ko if : $data._deliveryType() == DeliveryTypeEnum.Wanted --><div class="position-sticky overflow-hidden " ><a class="card-img-top d-block h-100 overflow-hidden" href="javascript: void(0)"  aria-label="product" enable-href="false" data-bind="css:{'card-img-bottom': $data.mode != ''}"><img loading="lazy" class="rounded" style="max-height: 100%; height: 100%; object-fit: cover;" data-bind="attr:{ title: $data._name, src: doGetDefaultPictureByObject($data, $data.pictureSize), loading: $data.isAboveFold ? 'eager' : 'lazy', fetchpriority: $data.isLcp ? 'high' : null}" alt="Product"></a></div><div class="card-body p-0" data-bind="css:{'mb-4': ($data.mode =='OnePicture' && m_handlerLayout.m_isViewMobile() == true)}"><a class="elide mb-1" href="javascript: void(0)"  aria-label="stock" name="stock" enable-href="false" data-bind="text: $data._name"></a><p  data-bind="text: $data._description"></p><!--ko if :  $data._listCategoryBottom().length != 0 --><div class="d-flex flex-column"><!-- ko foreach: $data._listCategoryBottom --><a class="font-size-10 elide w-100" href="#"   aria-label="category" name="category" enable-href="false" data-bind="
3210                                html: doGenerateLabel($data._label()),
3211                                style:{'background-color': doCheckIsLink($data._label())? 'transparent' : $data._colorBackgroundHex(), 'color': $data._colorLabelHex()},
3212                                        attr:{href: doGetLinkCategory($data) , 'data-divID': $parent.divID}"></a><!-- /ko --></div><!-- /ko --></div><!-- /ko --><!--ko if : $data._deliveryType() != DeliveryTypeEnum.Wanted --><button class="btn-wishlist btn-sm " type="button" title="أنا أحب" data-bind="style: { color: $data._likeCount()!=0 ? 'red' : '' }, click: m_handlerLayout.doSaveLike.bind(m_handlerLayout, $data)"><i class="fs-6" data-bind="class: $data._hasLike() ? 'ci-heart-filled ':'ci-heart', css:{'hasLike':$data._hasLike()==true}, "></i></button><div class="position-sticky overflow-hidden" ><a class="card-img-top d-block h-100 overflow-hidden" href="#"  aria-label="product" enable-href="false" data-bind="css:{'card-img-bottom': $data.mode != ''}, attr:{href: doGetLinkObject($data), 'data-divID':$data.divID}"><img loading="lazy" class="h-100" data-bind="attr:{ title: $data._name, src: doGetDefaultPictureByObject($data, $data.pictureSize), loading: $data.isAboveFold ? 'eager' : 'lazy', fetchpriority: $data.isLcp ? 'high' : null}" alt="Product"></a><div class="d-flex w-100 mb-n3 zindex-10" style=" position: absolute; bottom: 42px;"><!--ko if : $data._objectStockModel._enableBidding() &&  $data._objectStockModel._enableTimerBidding() --><div class="countdown w-100 mb-0 rounded-bottom px-1 justify-content-start align-items-baseline" style="height:32px;" data-bind="attr:{id: doGetTimerID($data._objectStockModel, 'UI_timerBidding')}, childrenComplete : doJsCountDown(doGetTimerID($data._objectStockModel, 'UI_timerBidding'), true, $data._objectStockModel)"><div class="countdown-label w-100 text-light m-0 font-size-10" style="height:10px" ></div><div class="countdown-days w-25 countdown-value text-light bold m-0 font-size-16" ></div><div class="countdown-hours w-25 countdown-value text-light bold m-0 font-size-16"></div><div class="countdown-minutes w-25 countdown-value text-light bold m-0 font-size-16"></div><div class="countdown-seconds w-25 countdown-value text-light bold m-0 font-size-16"></div><div class="hide countdown-time w-100 countdown-value text-light m-0 font-size-16"></div></div><!-- /ko --></div><div class="fs-sm w-100 px-1 d-flex align-items-center justify-content-between" style="height: 26p
3212x"><div class="float-start mt-1" data-bind="foreach: $data._listColorSimiler"><a href="#"  aria-label="color" name="color" class="colorSimiler" enable-href="false" data-bind="title: doGetDefaultNameColor($data), attr:{href: doGetLinkObject($data), 'data-divID':$parent.divID, 'id':'UI_sc_' +$parent._code()+'_'+$data._code()}"><label class="form-option-label rounded-circle" data-bind="attr:{'for':'UI_sc_' +$parent._code()+'_'+$data._code()}"><span class="form-option-color rounded-circle" data-bind="title: $data._objectName(), style:{'background': '-webkit-linear-gradient(45deg, ' + $data._hexName() + ' 60%, ' + doGetDefaultHexColor($data) + ' 40%)'}"></span></label></a></div><!--ko if : doCheckUUID($data._sizeModel._id()) --><a href="#"  aria-label="size" name="size" class="float-end" enable-href="true" data-bind="text: $data._sizeModel._name(), attr:{href: doGetURL('Shop/search/') + $data._sizeModel._name(), 'data-divID':$data.divID}"></a><!-- /ko --></div></div><div class="card-body p-0" data-bind="css:{'mb-4': ($data.mode =='OnePicture' && m_handlerLayout.m_isViewMobile() == true)}"><div class="product-title fs-sm"><div class="brandRow"><!--ko with : doGetCategoryByType($data, CategoryTypeEnum.Brand) --><a class="brandRow-name fw-semibold text-decoration-none" href="#" aria-label="brand" name="brand" enable-href="false"
3213                       data-bind="text: $data._name, attr:{ href: doGetLinkCategory($data), 'data-divID': $parent.divID }"></a><!-- /ko --><!--ko if : $data._sellMode() != SellModeEnum.SellWithOtherOnly && $data._objectStockModel._priceSale() != 0 && $data._objectStockModel._objectStockStatus() != ObjectStockStatusEnum.OutStock && $data._objectStockModel._objectStockStatus() != ObjectStockStatusEnum.Solded --><a class="btn-cart-inline pointer" href="#" name="addcart" aria-label="buy" title="buy" data-bind="click: m_handlerSession.doAddCart.bind(m_handlerSession, $data, 1, null, null, $data.divID)"><i class="ci-card-bag flipAuto"></i></a><!-- /ko --></div><a class="elide mb-1" href="#" aria-label="product" name="product" enable-href="false" data-bind="attr:{href: doGetLinkObject($data), 'data-divID':$data.divID}"><h2 class="font-size-14" data-bind="text: $data._name"></h2></a><div class="d-flex justify-content-between text-accent rounded-1"  style="min-height: 2.5rem;"><!--ko if : $data._objectStockModel._priceSale() !=0 --><div class="text-accent sale w-100" style="display: flex;flex-wrap: wrap; align-items: baseline; column-gap: .4rem;" data-bind="html: m_handlerLayout.doHtmlPriceByCurrency($data, false, 0, true)"></div><!-- /ko --><!--ko if : $data._objectStockModel._objectStockStatus() == ObjectStockStatusEnum.Solded --><a href="#"   aria-label="Solded" name="Solded" class="btn btn-sm px-2 py-1  pointer bg-black text-white font-size-10" style="height: fit-content;"  title="Re-Buy" data-bind="attr:{href: doGetLinkObject($data), 'data-divID':$data.divID}">
3214                                مباع
3215                            </a><!-- /ko --><!--ko if : $data._objectStockModel._objectStockStatus() == ObjectStockStatusEnum.OutStock --><a href="#"   aria-label="OutStock" name="OutStock" class="btn btn-sm px-2 py-1  pointer bg-danger text-white font-size-10" style="height: fit-content;"  title="Re-Buy" data-bind="attr:{href: doGetLinkObject($data), 'data-divID':$data.divID}">
3216                                لا يوجد مخزون
3217                            </a><!-- /ko --></div></div><!--ko if :  $data._listCategoryBottom().length != 0 --><div class="d-flex flex-column"><!-- ko foreach: $data._listCategoryBottom --><a class="font-size-10 elide w-100" href="#"   aria-label="category" name="category" enable-href="false" data-bind="
3218                                html: doGenerateLabel($data._label()),
3219                                style:{'background-color': doCheckIsLink($data._label())? 'transparent' : $data._colorBackgroundHex(), 'color': $data._colorLabelHex()},
3220                                        attr:{href: doGetLinkCategory($data), 'data-divID':$parent.divID }"></a><!-- /ko --></div><!-- /ko --></div><!-- /ko --></div></script>
3220<script id="Template_ItemComponent_AdvanceAuto" type="text/html"><!--ko if : doGetSlideTitleVisible($data) || doGetSlideDescriptionVisible($data) || doGetSlideButtonVisible($data)--><div class="AdvanceAuto" data-bind="class: doGetSlideDescriptionVisible($data) ? '':'mb-3'"><div class="AdvanceAuto_lead"><div class="bf-sectionHead"><span class="h4" data-bind="visible: doGetSlideTitleVisible($data), text: $data._title"></span></div><p class="AdvanceAuto_note text-muted font-size-12" data-bind="visible: doGetSlideDescriptionVisible($data), html: $data._description, style:{color: $data._descriptionHex}"></p></div><!--ko if : doGetSlideButtonVisible($data)--><a class="bf-viewAll" href="#" aria-label="subdiv" name="subdiv" enable-href="true" data-bind="attr:{ href: doGetURL($data._link()), 'aria-label':$data._title}"><span data-bind="text: $data._button"></span><i data-bind="class: doGetCulture() =='en'? 'ci-arrow-right':'ci-arrow-left' "></i></a><!-- /ko --></div><!-- /ko --></script>
3220
3221<style>
3222        .product-card.shadow-none {
3223            box-shadow: unset !important;
3224            background-color: transparent;
3225        }
3226
3227        [lang="en"] .magicFlex a:last-of-type {
3228            margin-left: auto !important;
3229        }
3230
3231        [lang="ar"] .magicFlex a:last-of-type {
3232            margin-right: auto !important;
3233        }
3234
3235        .BigPicture , .BigPicture .position-sticky{
3236            height: 100%;
3237        }
3238
3239.brandRow {
3240            display: flex;
3241            align-items: center;
3242            gap: .35rem;
3243            margin-bottom: .25rem;
3244            min-height: 1.75rem;
3245        }
3246
3247            .brandRow-name {
3248                font-size: 11px;
3249                color: #444;
3250                letter-spacing: .3px;
3251                flex: 0 1 auto;
3252                min-width: 0;
3253                overflow: hidden;
3254                text-overflow: ellipsis;
3255                white-space: nowrap;
3256            }
3257
3258        @media screen and (max-width:992px) {
3259
3260            .BigPicture , .OnePicture{
3261                flex-direction: row !important;
3262                align-items: flex-end !important;
3263                padding-bottom: 0px !important;
3264            }
3265
3266            .BigPicture .position-sticky, .OnePicture .position-sticky {
3267                width: 45% !important;
3268                height: 100% !important;
3269                padding-right: 10px !important;
3270                padding-left: 10px !important;
3271            }
3272
3273            .BigPicture .position-sticky .bg-opacity-75, .OnePicture .position-sticky .bg-opacity-75 {
3274                width: calc(100% - 20px) !important;
3275            }
3276
3277           .BigPicture .card-body, .OnePicture .card-body {
3278                width: 50% !important;
3279            }
3280        }
3281</style>
3282<style>
3283        .AdvanceAuto {
3284            position: relative;
3285            margin-top: .5rem;
3286        }
3287
3288        .AdvanceAuto .AdvanceAuto_lead {
3289            width: 100%;
3290        }
3291
3292        .AdvanceAuto .AdvanceAuto_note {
3293            margin: -.75rem 0 0;
3294            text-align: center;
3295        }
3296
3297@media screen and (min-width: 768px) {
3298            .AdvanceAuto .bf-viewAll {
3299                position: absolute;
3300                top: 0;
3301                inset-inline-end: 0;
3302            }
3303        }
3304
3305        @media screen and (max-width: 767px) {
3306            .AdvanceAuto {
3307                display: flex;
3308                flex-direction: column;
3309                align-items: center;
3310            }
3311        }
3312</style>
3313
3314
3315
3316
3317</body>
3318</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.